Paso 4: Paso 4: código de Arduino
Voy a ir sección por sección discutiendo las características principales del código. Bibliotecas de terceros pueden ser importadas desde GitHub. Las bibliotecas LiquidCrystal y IRremote pueden encontrarse en GitHub. Tuve que crear la biblioteca desde cero para el Sensor de proximidad HCSR04 (ojalá lo encontrarás adjunta arriba). En estas bibliotecas, puede encontrar las variables necesarias para enviar un comando o llamar a una función. Cada biblioteca tiene un C++ (software para la codificación) y .h (archivos de encabezado de extensión). Si a crear sus propias bibliotecas, necesita crear ambos.
A continuación que pasemos a la inicialización de las variables. Tenemos varias clases de las bibliotecas de Servo, IRremote, LiquidCrystal y HCSR04 y las variables que se declaran. También he definido varios de los botones del control remoto que utiliza. La clase LiquidCrystal crea una instancia de un objeto de LCD llamado "lcd". La dirección de la LCD es 0x27 con 16 columnas y 2 filas. El Sensor de proximidad de HCSR04 tiene dos disparadores. El pin de "gatillo" es responsable de enviar un pulso. Este pulso rebota (ecos) o es disipado en el espacio. El pin de "Eco" recibe un valor flotante asignado al pin 8. Este disparador se lleva en el pulso de disparo y convierte el valor en centímetros (por mi propia biblioteca diseñada). Las distancias que recibe el sensor de proximidad se definen como valores de flotación. Podría se han definido como valores enteros pero quería que las mediciones sean exactas y esto significa que los valores que se leen valores decimales (un ejemplo sería cm 6,52).
Pasar a la configuración, se inicializó el i2C bus en la pantalla de LCD que estoy usando. I2C esencialmente reduce el número de pines que tengo que usar en mi Arduino. Inicialice la retroiluminación de la pantalla. Si desea ver los resultados en un monitor serial debe utilizar un comando de Serial.begin(baudrate) para establecer cuántos símbolos para leer. Esto inicia la comunicación entre el Arduino y el monitor serie. Limpiar la pantalla LCD en el caso hay símbolos erróneos o letras en la pantalla. I ajustar el cursor en el centro de la primera fila y el usuario para el módulo. Espera un segundo y la pantalla se borra otra vez. El receptor IR está listo para tomar en los valores de lo IR remoto. Del mismo modo, el motor servo se mueve a la posición 0.
Finalmente, nos movemos en el bucle principal. Distance1 se declara como el disparador que es enviado y recibido. Este valor se lee desde el sensor de proximidad para el Arduino en centímetros. last_distance hace como su nombre lo indica. Almacena la última distancia que se lee. Se proporcionarán más detalles en cuanto a la función de estos comandos después. El si (irrecv.decode (y resultados)) comando se utiliza para asignar la dirección de cada pulsación de botón. Cada botón tiene su propio flujo de bits asociado a ella. Porque este proyecto es abrir una cerradura con un valor especificado, este comando debe ser el primer lazo en el bucle principal. last_distance > distance1 compara los valores que se almacenaron. Si la distancia anterior fue mayor que la distancia actual y luego la pantalla se borra ya que no hay nadie en la puerta. Del mismo modo, si distance1 < = 7 (cm) entonces se solicitará al usuario que ingrese la contraseña. Un solo valor trabajo (9). Todos los demás valores (0-8) serán instruir al usuario a intentarlo de nuevo. Sin embargo, para el valor de = 9, la puerta se abre y saluda al usuario. También, hay un anidados para el lazo en este si declaración. El anidado para lazo permite el motor del retroceso en y simular el desbloqueo de la puerta. La distancia < = 7 está aquí para comprobar si el usuario está en la puerta o si él o ella ha ido dentro o a la izquierda. Si el usuario está en la puerta, la puerta permanecerá abierta. La puerta permanecerá abierta durante unos 4 segundos permitir al usuario a pasar por la puerta y luego se procederá a cerrar. Retardo de los 4 segundos, se desconecta el motor servo. Hago esto para evitar que el exceso de potencia siendo entregado al motor cuando no está en uso. Además, tengo serial.println() comandos para mostrar los resultados en el monitor serie.
Como brevemente discutido anteriormente, pulsando cualquier otro botón que no accione el motor tenía que asegurarse de que cualquier otro botón no hizo nada (valores de 0-8). La pantalla LCD indicará al usuario a intentarlo de nuevo. Si olvidó su contraseña, usted puede presionar el EQ botón y la pantalla LCD le pedirá que la tarifa del curso. Es un mensaje de "Aviso" diciendo "recordatorio: en una escala de 0-9, que impresionante es esta clase?" Después de esto, borra la pantalla y usted puede ahora poner en el valor correcto de 9.
Es muy importante el siguiente comando: irrecv.resume(); Si no lo pones aquí, el receptor ya no comprobará para otra entrada. Este comando impide que el bucle de fijación para arriba después de una iteración o botón de prensa.
Si la distancia es mayor de 7 cm pero menos de 10 cm, esto simboliza al usuario acercarse a la puerta o módulo. Otra vez será instruidos para ingresar la contraseña.
Cerrando el bucle, tengo un if final declaración. Si la última distancia es mayor que la distancia actual, significa que el usuario no está en ninguna parte ser encontrado. Además, lo tengo comprobación para asegurarse de que el usuario no es cualquier lugar para ser visto por incluyendo & & distance1 > 12 (cm). Esto significa que alguien estuvo allí y salió. Otra vez se borra la pantalla. Hay un anidados para el lazo que dice: bueno vi que la puerta se abrió, el bloqueo fue movido a la posición de desbloqueo y ahora se moverá hacia atrás a la posición de bloqueo. El servomotor está conectado y la pantalla LCD indica la persona bueno bye. El motor retrocede 35 grados a la posición de bloqueo. Después el motor servo con su tarea, otra vez se desconecta para evitar forzar el motor y reducir al mínimo la energía utilizada para alimentar el motor servo. Esto es el fin del bucle y funcionará continuamente.