Serrure à combinaison inhabituelle sur Arduino
Pour l'assembler, vous devez utiliser un appareil spécial d'impulsions rectangulaires, ainsi que plusieurs compteurs et un tas. Mais le dispositif fini aurait de grandes dimensions hors tout et il serait peu pratique à utiliser. En règle générale, de telles pensées hantent. La première étape dans la réalisation d'un rêve a été la création d'un programme pour Arduino. Il servira de serrure à combinaison. Pour l'ouvrir, vous devrez appuyer non pas sur une touche, mais sur plusieurs, et le faire simultanément. Le schéma fini ressemble à ceci:
La qualité d'image n'est pas la meilleure, mais la connexion se fait au sol, D3, D5, D7, D9 et D11.
Le code est présenté ci-dessous:
const int ina = 3;
const int inb = 5;
const int inc = 9;
const int ledPin = 13;
int i = 1000;
octet a = 0;
octet b = 0;
octet c = 0;
octet d = 0;
long temps non signé = 0; // n'oublie pas tout ce qui prend une valeur millis ()
long temp non signé = 0; // stocker en long non signé
octet keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // codes en fait
octet cléb [] = {1, 1, 1, 1, 0, 1, 0, 0};
octet cléc [] = {1, 0, 1, 0, 1, 1, 1, 0};
octet k = 0;
void setup () {
pinMode (ina, INPUT_PULLUP); // 3 entrées connectées aux boutons
pinMode (inb, INPUT_PULLUP);
pinMode (inc, INPUT_PULLUP);
pinMode (ledPin, OUTPUT); // LED intégrée sur la 13ème broche
pinMode (7, SORTIE);
pinMode (11, SORTIE);
digitalWrite (7, BAS); // remplace la terre
digitalWrite (11, LOW);
temps = millis (); // devait compter le temps
}
void blinktwice () {// LED à double clignotement
digitalWrite (ledPin, HIGH);
retard (100);
digitalWrite (ledPin, LOW);
retard (100);
digitalWrite (ledPin, HIGH);
retard (100);
digitalWrite (ledPin, LOW);
retard (200);
}
boucle vide () {
si (k == 0) {
blinktwice (); // invite pour le code
}
si (k == 8) {
digitalWrite (ledPin, HIGH);
retard (3000);
k est 0;
}
a = digitalRead (ina); // lire les niveaux de signal des boutons - pressé / non pressé
b = digitalRead (inb);
c = digitalRead (inc);
retard (100); // next if - protection contre les faux positifs, vous ne pouvez pas utiliser
if ((digitalRead (ina) == a) && (digitalRead (inb) == b) && (digitalRead (inc) == c)) {
if (a == keya [k]) {
if (b == keyb [k]) {
if (c == keyc [k]) {
k ++;
}
}
}
}
si (k == 1) {
si (d == 0) {
temps = millis ();
d ++;
}
}
temp = millis ();
temp = temp - temps;
si (temp> 10000) {
k est 0;
d est 0;
temps = millis ();
}
}
Pour éviter des questions inutiles sur le code, certains points doivent être clarifiés. La fonction de configuration est utilisée pour attribuer des ports. La fonction suivante est Input_Pullup, qui est nécessaire pour augmenter la tension des broches de 5 V. Cela se fait à l'aide d'une résistance. Pour cette raison, divers courts-circuits ne se produiront pas. Pour plus de commodité, il est recommandé d'utiliser la fonction blinktwice. En général, lors de la création de divers programmes, vous devez essayer d'autres fonctions.
Une fois les fonctions attribuées, le signal est lu à partir des ports. Si le bouton est enfoncé, il sera indiqué par le chiffre 1, sinon - 2. Ensuite, une analyse de toutes les valeurs. Par exemple, il y avait une telle combinaison que 0,1,1. Cela signifie que la première touche est enfoncée et que les deux autres ne le sont pas. Si toutes les valeurs sont vraies, la condition 8 est également vraie. Cela est démontré par une LED allumée sur le panneau avant. Ensuite, vous devez entrer un code spécifique qui servira à ouvrir la porte.
Les derniers éléments de code sont utilisés pour réinitialiser les valeurs du compteur. Une telle fonction est exécutée si plus de 10 secondes se sont écoulées depuis la dernière frappe.Sans ce code, vous pourriez passer par toutes les options possibles, bien qu'il y en ait beaucoup. Après avoir créé cet appareil, vous devez le tester.