Anuncio
Detecte movimiento, luego asuste a un intruso con un sonido de alarma agudo y luces intermitentes. ¿Suena divertido? Claro que lo hace. Ese es el objetivo del proyecto Arduino de hoy, adecuado para principiantes. Estaremos escribiendo completamente desde cero y probando a medida que avanzamos para que pueda tener una idea de cómo se hace todo en lugar de simplemente instalar algo que ya hice.
Descargo de responsabilidad: esto no va a proteger su casa. Eso podría sin embargo, dale una sorpresa desagradable a tu hermana cuando se cuela en tu habitación.
Necesitarás:
- Un arduino
- Sensor de "ping" ultrasónico, estoy usando HC-SR04 Un PIR sería mejor, pero esos son caros. Un sensor de ping se puede colocar subrepticiamente en una puerta y aún cumple el mismo trabajo básico, y solo cuesta $ 5
- Un zumbador piezoeléctrico
- Tira de luz LED, con el mismo cableado que usamos de vuelta en este proyecto Construya su propia iluminación ambiental dinámica para un centro multimediaSi ve muchas películas en su PC o centro multimedia, estoy seguro de que se ha enfrentado al dilema de la iluminación; ¿Apagas completamente todas las luces? ¿Los mantienes a todo volumen? O... Lee mas .
Cuando esté conectando este proyecto, no elimine todo cada vez, solo siga construyendo en el último bloque. Para cuando llegue a la sección "Codificación del sistema de alarma", debe tener todos los bits y piezas conectados, con un aspecto similar a este:
Luces parpadeantes
Usa el diagrama de cableado de este proyecto Construya su propia iluminación ambiental dinámica para un centro multimediaSi ve muchas películas en su PC o centro multimedia, estoy seguro de que se ha enfrentado al dilema de la iluminación; ¿Apagas completamente todas las luces? ¿Los mantienes a todo volumen? O... Lee mas para conectar su tira de LED; no cambie los pines, ya que necesitamos salida PWM. Utilizar este codigo para probar rápidamente su cableado. Si todo va bien, deberías tener esto:
Sensor de distancia
En el módulo SR04, encontrará 4 pines. VCC y GND ir a + 5V rail y tierra respectivamente; TRIGONOMETRÍA es el pin que se usa para enviar una señal de sonda, pon esto en el pin 6; ECO se usa para volver a leer la señal (y, por lo tanto, calcular la distancia); póngalo en 7.
Para simplificar las cosas, hay una biblioteca que podemos usar llamada NewPing. Descargue y coloque en su Arduino Biblioteca carpeta y reinicie el IDE antes de continuar. Prueba usando este codigo; abra el monitor en serie y asegúrese de que la velocidad esté establecida en 115200 baudios. Con un poco de suerte, deberías ver que te envían algunas mediciones de distancia a una velocidad bastante alta. Puede encontrar una varianza de 1 o 2 centímetros, pero está bien. Intente pasar la mano frente al sensor, moviéndolo hacia arriba y hacia abajo para observar las lecturas cambiantes.
El código debe ser bastante simple de entender. Hay algunas declaraciones de pines relevantes al inicio, incluida una distancia máxima; esto puede variar según el sensor exacto que tiene, pero siempre que pueda obtener lecturas de menos de 1 metro con precisión, debe ser multa.
En el bucle de esta aplicación de prueba, utilizamos el silbido() función para enviar un sonar ping, recuperando un valor en milisegundos de cuánto tiempo tardó en volver el valor. Para dar sentido a esto, utilizamos las bibliotecas NewPing construidas en constante de US_ROUNDTRIP_CM, que define cuántos microsegundos se necesitan para ir a un solo centímetro. También hay un retraso de 50 ms entre pings para evitar sobrecargar el sensor.
Alarma piezoeléctrica
El sensor de cristal piezoeléctrico es un timbre simple y económico, y podemos usar un pin PWM 3 para hacer diferentes tonos. Conecte un cable al pin 3, uno al riel de tierra; no importa cuál.
Utilizar este codigo Probar.
La única forma de matar la alarma bastante desagradable y ruidosa es tirar de los enchufes. El código es un poco complejo de explicar, pero implica el uso de ondas sinusoidales para generar un sonido distintivo. Ajusta los números para jugar con diferentes tonos.
Codificación del sistema de alarma
Ahora que tenemos todas las piezas de este rompecabezas, combinémoslas.
Siga adelante y haga un nuevo boceto, llamado Alarma. Comience combinando todas las variables y definiciones de pin que tenemos en los ejemplos de prueba hasta ahora.
#incluir // Seleccione qué pines compatibles con PWM se utilizarán. #define RED_PIN 10. #define GREEN_PIN 11. #define BLUE_PIN 9 #define TRIGGER_PIN 6 // Pin Arduino atado al pin disparador del sensor ultrasónico. #define ECHO_PIN 7 // Pin Arduino atado al pin de eco en el sensor ultrasónico. #define MAX_DISTANCE 100 // Distancia máxima a la que queremos hacer ping (en centímetros). #define ALARM 3 float sinVal; int toneVal;
Comience escribiendo un básico preparar() función: solo trataremos con las luces por ahora. Agregué un retraso de 5 segundos antes de que se inicie el bucle principal para darnos algo de tiempo si es necesario.
void setup () {// establece pinModes para RGB strip pinMode (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT); // restablecer luces analogWrite (RED_PIN, 0); analogWrite (BLUE_PIN, 0); analogWrite (RED_PIN, 0); retraso (5000); }
Usemos una función auxiliar que nos permita escribir rápidamente un único valor RGB a las luces.
// función auxiliar que nos permite enviar un color en un comando. color vacío (rojo de caracteres sin signo, verde de caracteres sin signo, azul de caracteres sin signo) // la función de generación de color. {analogWrite (RED_PIN, rojo); analogWrite (BLUE_PIN, azul); analogWrite (GREEN_PIN, verde); }
Finalmente, nuestro bucle por ahora consistirá en un simple destello de color entre rojo y amarillo (o, lo que sea que desee que sea su alarma, simplemente cambie los valores RGB).
bucle vacío () {color (255,0,0); // retraso rojo (100); color (255,255,0); // retraso amarillo (100); }
Sube y prueba eso para asegurarte de que estás en el camino correcto.
Ahora, integremos el sensor de distancia para activar esas luces solo cuando algo entra, por ejemplo, 50 cm (un poco menos que el ancho del marco de una puerta). Ya definimos los pines correctos e importamos la biblioteca, así que antes de su preparar() agregue la siguiente línea para crear una instancia:
Sonda NewPing (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Nueva configuración de pines y distancia máxima.
Debajo de eso, agregue una variable para almacenar el estado de la alarma que se activa o no, por defecto en falso, por supuesto.
booleano activado = falso;
Agregue una línea al preparar() función para que podamos monitorear la salida en serie y depurar.
Serial.begin (115200); // Abra el monitor en serie a 115200 baudios para ver los resultados del ping.
A continuación, cambiemos el nombre del bucle actual por alarma() - así se llamará si la alarma se ha activado.
alarma nula () {color (255,0,0); // retraso rojo (100); color (255,255,0); // retardo amarillo (100); }
Ahora crea un nuevo lazo() función, una en la que buscamos un nuevo ping, leemos los resultados y activamos la alarma si se detecta algo dentro del rango del medidor.
void loop () {if (activado == verdadero) {alarm (); } else {delay (50); // Espere 50 ms entre pings (aproximadamente 20 pings / seg). 29 ms debería ser el retraso más corto entre pings. unsigned int uS = sonar.ping (); // Enviar ping, obtener tiempo de ping en microsegundos (us). distancia int sin firmar = uS / US_ROUNDTRIP_CM; Serial.println (distancia); if (distancia <100) {activado = verdadero; } } }
Déjame explicarte el código brevemente:
- Comience verificando si la alarma se ha activado, y si es así, active la función de alarma (solo parpadea las luces en este momento).
- Si aún no se ha activado, obtenga la lectura actual del sensor.
- Si el sensor está leyendo <100 cm, algo ha acolchado el haz (obviamente, ajuste este valor si se dispara demasiado pronto para usted).
Pruébelo ahora, antes de agregar el molesto zumbador piezoeléctrico.
¿Trabajando? Excelente. Ahora agreguemos ese timbre nuevamente. Añadir pinMode al preparar() rutina.
pinMode (ALARMA, SALIDA);
Luego agregue el bucle zumbador piezoeléctrico a la función alarm ():
para (int x = 0; x <180; x ++) {// convierte grados a radianes y luego obtiene el valor sin sinVal = (sin (x * (3.1412 / 180))); // genera una frecuencia a partir del valor sin toneVal = 2000+ (int (sinVal * 1000)); tono (ALARMA, toneVal); }
Si intenta compilar en este punto, se encontrará con un error; lo he dejado deliberadamente para que pueda ver algunos problemas comunes. En este caso, tanto la biblioteca de tonos NewPing como la estándar usan las mismas interrupciones: básicamente son conflictivas y no hay mucho que puedas hacer para solucionarlo. Oh querido.
Sin embargo, no te preocupes. Es un problema común, y alguien ya tiene una solución: descargue y agregue esto NewTone a su carpeta de Bibliotecas Arduino. Ajuste el comienzo de su programa para incluir esto:
#incluir
Y ajusta la línea:
tono (ALARMA, toneVal);
a
NewTone (ALARMA, toneVal);
en lugar.
Eso es. Configure su alarma en la puerta de su habitación para el próximo ladrón desventurado.
O, un perro tonto, que parecía completamente imperturbable por la alarma.
¿Tienes problemas con el código? Aquí esta la aplicación completa. Si obtiene errores aleatorios, intente pegarlos a continuación y veré si puedo ayudarlo.
Credito de imagen: Alarma de incendios a través de Flickr
James tiene una licenciatura en Inteligencia Artificial y está certificado por CompTIA A + y Network +. Es el desarrollador principal de MakeUseOf, y pasa su tiempo libre jugando VR paintball y juegos de mesa. Ha estado construyendo computadoras desde que era un niño.