Come realizzare un semplice sistema di allarme Arduino
Rileva il movimento, poi spaventa l'inferno di un intruso con suoni di allarme e luci intermittenti. Sembra divertente? Certo che lo fa. Questo è l'obiettivo del progetto Arduino di oggi, adatto ai principianti. Scriverò completamente da zero e testeremo mentre andiamo avanti, quindi si spera che tu possa avere un'idea di come è stato tutto fatto piuttosto che semplicemente installare qualcosa che ho già realizzato.
Disclaimer: questo non proteggerà la tua casa. esso potrebbe Dare a tua sorella una brutta sorpresa quando si intrufola nella tua stanza.
Avrai bisogno:
- Un Arduino
- Ultrasonico “ping” sensore, sto usando HC-SR04 Un PIR sarebbe meglio, ma quelli sono costosi. Un sensore ping può essere posizionato di nascosto in una porta e serve ancora lo stesso lavoro di base, ed è solo $ 5
- Un cicalino piezo
- Striscia di luce a LED, con lo stesso cablaggio che abbiamo usato in questo progetto Costruisci la tua illuminazione d'ambiente dinamica per un centro multimediale Costruisci la tua illuminazione d'ambiente dinamica per un centro multimediale Se guardi un sacco di film sul tuo PC o media center, I ' sono sicuro che hai affrontato il dilemma dell'illuminazione; spegni completamente tutte le luci? Li tieni in piena esplosione? O ... Per saperne di più .
Mentre stai collegando questo progetto, non rimuovere ogni volta ogni cosa - continua semplicemente a costruire sull'ultimo blocco. Per il momento in cui arrivi “Codifica del sistema di allarme” sezione, dovresti avere tutti i bit e i pezzi cablati, guardando qualcosa del genere:
Luci lampeggianti
Usa lo schema elettrico di questo progetto Costruisci la tua illuminazione d'ambiente dinamica per un centro multimediale Costruisci la tua illuminazione d'ambiente dinamica per un centro multimediale Se guardi molti film sul tuo PC o sul tuo media center, sono sicuro che hai affrontato il problema dilemma dell'illuminazione; spegni completamente tutte le luci? Li tieni in piena esplosione? Oppure ... Leggi altro per collegare la tua striscia LED; non cambiare i pin, poiché abbiamo bisogno dell'uscita PWM. Utilizzare questo codice per testare rapidamente il cablaggio. Se tutto va bene, dovresti avere questo:
Sensore di distanza
Sul modulo SR04, troverai 4 pin. VCC e GND andare su + 5V rail e ground rispettivamente; TRIG è il pin usato per inviare un segnale sonar, mettilo sul pin 6; ECO è usato per leggere il segnale indietro (e quindi calcolare la distanza) - mettilo su 7.
Per rendere le cose incredibilmente semplici, c'è una libreria che possiamo usare chiamata NewPing. Scarica e inserisci nel tuo Arduino Biblioteca cartella e riavviare l'IDE prima di continuare. Test usando questo codice; aprire il monitor seriale e assicurarsi che la velocità sia impostata su 115200 baud. Con un po 'di fortuna, dovresti vedere alcune misurazioni della distanza che ti vengono inviate ad alta velocità. Potresti trovare una varianza di 1 o 2 centimetri, ma va bene. Prova a far scorrere la mano davanti al sensore, spostandolo su e giù per osservare le letture che cambiano.
Il codice dovrebbe essere abbastanza semplice da capire. Ci sono alcune dichiarazioni dei pin rilevanti all'inizio, compresa una distanza massima - questo può variare in base al sensore esatto che hai, ma finché sei in grado di ottenere letture di meno di 1 metro, dovresti stare bene.
Nel loop di questa app di test, usiamo il ping () funzione per inviare un ping di sonar, recuperando un valore in millisecondi di quanto tempo ci vuole per il valore da restituire. Per dare un senso a questo, usiamo le librerie NewPing costruite in costante di US_ROUNDTRIP_CM, che definisce il numero di microsecondi necessari per raggiungere un centimetro singolo. C'è anche un ritardo di 50 ms tra i ping per evitare di sovraccaricare il sensore.
Allarme piezoelettrico
Il sensore piezo-cristallo è un cicalino semplice ed economico, e possiamo usare un pin 3 PWM per creare toni diversi. Collegare un cavo al pin 3, uno al rail di messa a terra: non importa quale.
Utilizzare questo codice per testare.
L'unico modo per uccidere l'allarme piuttosto odioso e rumoroso è tirare le spine. Il codice è un po 'complesso da spiegare, ma implica l'uso di onde sinusoidali per generare un suono distintivo. Modificare i numeri per suonare con toni diversi.
Codifica del sistema di allarme
Ora che abbiamo tutti i pezzi di questo puzzle, combiniamoli insieme.
Vai avanti e crea un nuovo schizzo, chiamato Allarme. Inizia combinando tutte le variabili e le definizioni dei pin che abbiamo negli esempi di test fino ad ora.
#includere // Seleziona i pin compatibili con PWM da utilizzare. #define RED_PIN 10 #define GREEN_PIN 11 #define BLUE_PIN 9 #define TRIGGER_PIN 6 // pin Arduino legato al grilletto del sensore a ultrasuoni. #define ECHO_PIN 7 // Pin Arduino legato al pin dell'eco sul sensore a ultrasuoni. #define MAX_DISTANCE 100 // Distanza massima su cui vogliamo eseguire il ping (in centimetri). #define ALARM 3 float sinVal; int toneVal;
Inizia scrivendo una base impostare() funzione - per ora ci occuperemo solo delle luci. Ho aggiunto un ritardo di 5 secondi prima che il ciclo principale venga avviato per darci un po 'di tempo per togliersi di mezzo, se necessario.
void setup () // imposta pinModes per stripMode strip RGB (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT); // reset lights analogWrite (RED_PIN, 0); analogWrite (BLUE_PIN, 0); analogWrite (RED_PIN, 0); ritardo (5000);
Usiamo una funzione di supporto che ci consente di scrivere rapidamente un singolo valore RGB nelle luci.
// funzione helper che ci consente di inviare un colore in un comando void color (unsigned char red, unsigned char green, unsigned char blue) // la funzione di generazione del colore analogWrite (RED_PIN, red); analogWrite (BLUE_PIN, blu); analogWrite (GREEN_PIN, verde);
Infine, il nostro ciclo per ora consisterà in un semplice flash a colori tra il rosso e il giallo (o, qualunque cosa tu voglia che il tuo allarme sia - cambia semplicemente i valori RGB).
void loop () color (255,0,0); // ritardo rosso (100); colore (255,255,0); // yellow delay (100);
Carica e prova questo per assicurarti di essere sulla strada giusta.
Ora, integriamo il sensore di distanza per attivare quelle luci solo quando qualcosa rientra, ad esempio, a 50 cm (appena meno della larghezza di un telaio della porta). Abbiamo già definito i pin giusti e importato la libreria, quindi prima del tuo impostare() funzione aggiungi la seguente riga per istanziarla:
Sonar NewPing (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Impostazione NewPing di pin e distanza massima.
Al di sotto di questo, aggiungere una variabile per memorizzare lo stato dell'allarme che viene attivato o meno, in modo predefinito su falso, ovviamente.
booleano attivato = falso;
Aggiungi una linea al impostare() funzione in modo che possiamo monitorare l'output su seriale e debug.
Serial.begin (115200); // Apri il monitor seriale a 115200 baud per vedere i risultati del ping.
Quindi, rinominiamo il loop corrente in allarme() - questo è ciò che verrà chiamato se l'allarme è scattato.
allarme nullo () colore (255,0,0); // ritardo rosso (100); colore (255,255,0); // yelow delay (100);
Ora crea un nuovo ciclo continuo() funzione, una in cui recuperiamo un nuovo ping, leggiamo i risultati e attiviamo l'allarme se qualcosa viene rilevato nell'intervallo del misuratore.
void loop () if (triggered == true) alarm (); else delay (50); // Attende 50ms tra i ping (circa 20 ping al secondo). 29 ms dovrebbero essere il ritardo più breve tra i ping. unsigned int uS = sonar.ping (); // Invia ping, recupera il tempo di ping in microsecondi (uS). distanza unsigned int = uS / US_ROUNDTRIP_CM; Serial.println (distanza); if (distanza < 100) triggered = true;
Lascia che ti spieghi brevemente il codice:
- Inizia controllando per vedere se l'allarme è stato attivato, e in tal caso, spegni la funzione di allarme (solo lampeggiando le luci al momento).
- Se non è ancora attivato, ottenere la lettura corrente dal sensore.
- Se il sensore sta leggendo <100 cm, something has padded the beam (adjust this value if it's triggering too early for you, obviously).
Dagli una prova adesso, prima di aggiungere il fastidioso segnale acustico piezo.
Lavoro? Grande. Adesso aggiungiamo quel cicalino. Inserisci pinMode al impostare() routine.
pinMode (ALARM, OUTPUT);
Quindi aggiungi il loop del buzzer piezoelettrico alla funzione alarm ():
per (int x = 0; x<180; x++) // convert degrees to radians then obtain sin value sinVal = (sin(x*(3.1412/180))); // generate a frequency from the sin value toneVal = 2000+(int(sinVal*1000)); tone(ALARM, toneVal);
Se provi a compilare a questo punto, ti imbatterai in un errore: l'ho lasciato deliberatamente in modo da poter vedere alcuni problemi comuni. In questo caso, sia la libreria NewPing che quella standard usano gli stessi interrupt: sono sostanzialmente in conflitto e non c'è molto che puoi fare per risolverlo. Oh caro.
Nessuna preoccupazione però. È un problema comune e qualcuno ha già una soluzione: scarica e aggiungi questo NewTone alla tua cartella Librerie Arduino. Regola l'inizio del tuo programma per includere questo:
#includere
E regola la linea:
tono (ALARM, toneVal);
a
NewTone (ALARM, toneVal);
anziché.
Questo è tutto. Imposta la sveglia sulla porta della tua camera da letto per il prossimo sfortunato aspirante ladro.
Oppure, un cane drogato, che sembrava completamente impassibile dall'allarme.
Hai problemi con il codice? Ecco l'app completa. Se ricevi errori casuali, prova a incollarli di seguito e vedrò se posso aiutarti.
Credito immagine: allarme antincendio via Flickr
Scopri di più su: Arduino.