Arduino kombinasjonslås - skjema

click fraud protection

Arduino er det beste systemet for å kopiere maskinvare. De fleste ideer hadde ikke vært mulig uten henne. Det har lenge vært en slik tanke: å lage en spesiell kombinasjonslås på arduinoen. For å åpne den må du holde nede en bestemt tast. I dette tilfellet skal ikke låsen åpne, selv om du kjenner ønsket knapp. For å åpne den er det nødvendig å opprettholde visse intervaller ved hjelp av muskelminne. En slik kriminell kan ikke gjøre. Men alt dette er bare teori.

For å samle det, må du bruke en spesiell enhet for rektangulære pulser, samt flere tellere og en haug. Men den ferdige enheten ville ha store dimensjoner og ville være upraktisk å bruke. Som regel gir ikke slike tanker hvile. Det første trinnet i å gjøre denne drømmen til virkelighet var å lage et program for Arduino. Det er hun som skal fungere som kombinasjonslås. For å åpne den, må du ikke trykke én tast, men flere, og gjøre det samtidig. Den ferdige kretsen ser slik ut:

Bildekvaliteten er ikke den beste, men tilkoblinger gjøres til jord, D3, D5, D7, D9 og D11.

Koden vises nedenfor:

const int ina = 3; const int inb = 5; const int inc = 9; const int ledPin = 13; int i = 1000; byte a = 0; byte b = 0; byte c = 0; byte d = 0; usignert lang tid = 0; // ikke glem alt som millis () tar på usignert lang temp = 0; // lagre i usignert lang byte keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // koder riktig byte keyb [] = {1, 1, 1, 1, 0, 1, 0, 0}; byte keyc [] = {1, 0, 1, 0, 1, 1, 1, 0}; byte k = 0; void oppsett () {pinMode (ina, INPUT_PULLUP); // 3 innganger koblet til knappene pinMode (inb, INPUT_PULLUP); pinMode (inkl. INPUT_PULLUP); pinMode (ledPin, OUTPUT); // innebygd LED på pin 13 pinMode (7, OUTPUT); pinMode (11, OUTPUT); digitalWrite (7, LAV); // erstatte bakken digitalWrite (11, LAV); tid = millis (); // nødvendig for å telle tiden} void blinktwice () {// dobbel blinking av LED digitalWrite (ledPin, HIGH); forsinkelse (100); digitalWrite (ledPin, LOW); forsinkelse (100); digitalWrite (ledPin, HIGH); forsinkelse (100); digitalWrite (ledPin, LOW); forsinkelse (200); } void loop () {if (k == 0) {blinktwice (); // spør om å angi kode} if (k == 8) {digitalWrite (ledPin, HIGH); forsinkelse (3000); k = 0; } a = digitalRead (ina); // signalnivåer leses fra knapper - trykket / ikke trykket b = digitalRead (inb); c = digitalRead (inkl); forsinkelse (100); // neste if - beskyttelse mot falske positiver, du trenger ikke bruke if ((digitalRead (ina) == a) && (digitalRead (inb) == b) && (digitalRead (inc) == c)) {if (a == keya [k]) {if (b == keyb [k]) {if (c = = keyc [k]) {k ++; }}}} if (k == 1) {if (d == 0) {tid = millis (); d ++; }} temp = millis (); temp = temp - tid; hvis (temp> 10000) {k = 0; d = 0; tid = millis (); } } 


For ikke å reise unødvendige spørsmål om koden, bør noen punkter avklares. Oppsettfunksjonen brukes til å tildele porter. Den neste funksjonen er Input_Pullup, som er nødvendig for å øke pinnespenningen med 5 V. Dette gjøres ved hjelp av en motstand. På grunn av dette vil det ikke oppstå ulike kortslutninger. For mer bekvemmelighet anbefales det å bruke blinktwice-funksjonen. Generelt, når du lager forskjellige programmer, må du prøve andre funksjoner.

Etter tildeling av funksjonene leses signalet fra portene. Hvis knappen trykkes, vil den bli indikert med tallet 1, og hvis ikke - 2. Videre analyseres alle verdier. For eksempel dukket det opp en kombinasjon som 0,1,1. Dette betyr at den første tasten trykkes og de to andre ikke. Hvis alle verdier er sanne, er betingelse 8 også sann. Dette er bevist av den opplyste LED-en på frontpanelet. Deretter må du skrive inn en bestemt kode som vil tjene til å åpne døren.

De siste elementene i koden brukes til å tilbakestille tellerverdiene. Denne funksjonen utføres hvis det har gått mer enn 10 sekunder siden siste tastetrykk. Uten denne koden var det mulig å telle opp alle mulige alternativer, selv om det er ganske mange av dem. Etter å ha opprettet denne enheten, må du teste den. Ennå Arduino-prosjekter.

Som(0)jeg liker ikke(0)

instagram viewer