Neobvyklý kombinační zámek na Arduino
Chcete-li jej sestavit, musíte použít speciální zařízení obdélníkových pulzů, stejně jako několik čítačů a hromadu. Hotové zařízení by však mělo velké celkové rozměry a použití by bylo nevhodné. Tyto myšlenky zpravidla pronásledují. Prvním krokem při realizaci snu bylo vytvoření programu pro Arduino. Bude sloužit jako kombinovaný zámek. Chcete-li jej otevřít, budete muset stisknout ne jednu klávesu, ale několik, a to současně. Dokončené schéma vypadá takto:
Kvalita obrazu není nejlepší, ale připojení je provedeno na zemi, D3, D5, D7, D9 a D11.
Kód je uveden níže:
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;
nepodepsaný dlouhý čas = 0; // nezapomeňte na vše, co bere hodnotu milis ()
nepodepsaná dlouhá teplota = 0; // uložte dlouho bez znaménka
byte keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // kódy
byte keyb [] = {1, 1, 1, 1, 0, 1, 0, 0};
byte keyc [] = {1, 0, 1, 0, 1, 1, 1, 0};
byte k = 0;
neplatné nastavení () {
pinMode (ina, INPUT_PULLUP); // 3 vstupy připojené k tlačítkům
pinMode (inb, INPUT_PULLUP);
pinMode (inc, INPUT_PULLUP);
pinMode (ledPin, OUTPUT); // vestavěná LED na 13. kolíku
pinMode (7, VÝSTUP);
pinMode (11, VÝSTUP);
digitalWrite (7, LOW); // vyměňte zemi
digitalWrite (11, LOW);
time = millis (); // potřeba počítat čas
}
void blinktwice () {// dvakrát blikající LED
digitalWrite (ledPin, HIGH);
zpoždění (100);
digitalWrite (ledPin, LOW);
zpoždění (100);
digitalWrite (ledPin, HIGH);
zpoždění (100);
digitalWrite (ledPin, LOW);
zpoždění (200);
}
void loop () {
if (k == 0) {
blinktwice (); // výzva k zadání kódu
}
if (k == 8) {
digitalWrite (ledPin, HIGH);
zpoždění (3000);
k je 0;
}
a = digitalRead (ina); // čtení úrovně signálu z tlačítek - stisknuto / nestisknuto
b = digitalRead (inb);
c = digitalRead (inc);
zpoždění (100); // next if - ochranu proti falešným pozitivům, které nemůžete použít
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) {
time = millis ();
d ++;
}
}
temp = millis ();
temp = temp - čas;
if (temp> 10 000) {
k je 0;
d je 0;
time = millis ();
}
}
Abychom se vyhnuli zbytečným otázkám ohledně kódu, je třeba některé body vyjasnit. Funkce nastavení se používá k přiřazení portů. Další funkcí je Input_Pullup, což je nutné ke zvýšení napětí pinů o 5 V. To se provádí pomocí rezistoru. Z tohoto důvodu nedojde k různým zkratům. Pro větší pohodlí doporučujeme používat funkci blinktwice. Obecně platí, že při vytváření různých programů musíte vyzkoušet jiné funkce.
Po přiřazení funkcí je signál načten z portů. Pokud je tlačítko stisknuto, bude označeno číslem 1, a pokud ne - 2. Dále, analýza všech hodnot. Například byla taková kombinace jako 0,1,1. To znamená, že je stisknuto první tlačítko a zbývající dvě nejsou. Pokud jsou všechny hodnoty pravdivé, pak platí i podmínka 8. O tom svědčí rozsvícená LED na předním panelu. Dále musíte zadat konkrétní kód, který bude sloužit k otevření dveří.
Poslední prvky kódu se používají k resetování hodnot čítače. Tato funkce se provádí, pokud od posledního stisknutí tlačítka uplynulo více než 10 sekund.Bez tohoto kódu byste mohli projít všemi možnými možnostmi, i když jich je spousta. Po vytvoření tohoto zařízení jej musíte vyzkoušet.