Cerradura de combinación inusual en Arduino
Para ensamblarlo, debe usar un dispositivo especial de pulsos rectangulares, así como varios contadores y un montón. Pero el dispositivo terminado tendría grandes dimensiones generales y sería incómodo de usar. Como regla, tales pensamientos persiguen. El primer paso en la realización de un sueño fue la creación de un programa para Arduino. Servirá como cerradura de combinación. Para abrirlo, deberá presionar no una tecla, sino varias, y hacerlo simultáneamente. El esquema final se ve así:
La calidad de imagen no es la mejor, pero la conexión se realiza en el suelo, D3, D5, D7, D9 y D11.
El código se presenta a continuación:
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;
tiempo largo sin signo = 0; // no olvides todo lo que toma un valor millis ()
temperatura larga sin signo = 0; // almacenar en tiempo sin firmar
byte keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // códigos en realidad
byte keyb [] = {1, 1, 1, 1, 0, 1, 0, 0};
byte keyc [] = {1, 0, 1, 0, 1, 1, 1, 0};
byte k = 0;
configuración nula () {
pinMode (ina, INPUT_PULLUP); // 3 entradas conectadas a botones
pinMode (inb, INPUT_PULLUP);
pinMode (inc, INPUT_PULLUP);
pinMode (ledPin, OUTPUT); // LED incorporado en el 13er pin
pinMode (7, SALIDA);
pinMode (11, SALIDA);
digitalWrite (7, BAJO); // reemplaza la tierra
digitalWrite (11, BAJO);
tiempo = millis (); // necesario para contar el tiempo
}
vacío blinktwice () {// LED de doble parpadeo
digitalWrite (ledPin, HIGH);
retraso (100);
digitalWrite (ledPin, LOW);
retraso (100);
digitalWrite (ledPin, HIGH);
retraso (100);
digitalWrite (ledPin, LOW);
retraso (200);
}
bucle vacío () {
si (k == 0) {
blinktwice (); // solicitud de código
}
si (k == 8) {
digitalWrite (ledPin, HIGH);
retraso (3000);
k es 0;
}
a = digitalRead (ina); // lee los niveles de señal de los botones - presionado / no presionado
b = digitalRead (inb);
c = digitalRead (inc);
retraso (100); // siguiente if - protección contra falsos positivos, no puedes usar
if ((digitalRead (ina) == a) && (digitalRead (inb) == b) && (digitalRead (inc) == c)) {
if (a == keya [k]) {
if (b == teclab [k]) {
if (c == keyc [k]) {
k ++;
}
}
}
}
si (k == 1) {
si (d == 0) {
tiempo = millis ();
d ++;
}
}
temp = millis ();
temp = temp - tiempo;
if (temp> 10000) {
k es 0;
d es 0;
tiempo = millis ();
}
}
Para evitar preguntas innecesarias sobre el código, se deben aclarar algunos puntos. La función de configuración se utiliza para asignar puertos. La siguiente función es Input_Pullup, que es necesaria para aumentar el voltaje del pin en 5 V. Esto se hace usando una resistencia. Debido a esto, no ocurrirán varios cortocircuitos. Por conveniencia, recomendamos usar la función blinktwice. En general, al crear varios programas, debe probar otras funciones.
Después de asignar las funciones, la señal se lee desde los puertos. Si se presiona el botón, se indicará con el número 1 y, si no, con 2. A continuación, se analizarán todos los valores. Por ejemplo, había una combinación como 0,1,1. Esto significa que la primera tecla está presionada y las otras dos no. Si todos los valores son verdaderos, entonces la condición 8 también es verdadera. Esto se evidencia por un LED encendido en el panel frontal. Luego, debe ingresar un código específico que sirva para abrir la puerta.
Los últimos elementos del código se utilizan para restablecer los valores del contador. Dicha función se realiza si han pasado más de 10 segundos desde la última pulsación de tecla.Sin este código, podría pasar por todas las opciones posibles, aunque hay muchas. Después de crear este dispositivo, debe probarlo.