Annuncio pubblicitario

Rileva i movimenti, quindi spaventa il diavolo da un intruso con un suono di allarme acuto e luci lampeggianti. Ti sembra divertente? Certo che lo fa. Questo è l'obiettivo del progetto Arduino di oggi, adatto ai principianti. Scriveremo completamente da zero e testeremo mentre procediamo in modo da poter avere qualche idea di come è stato fatto invece di installare semplicemente qualcosa che ho già fatto.

Disclaimer: questo non proteggerà realmente la tua casa. esso potrebbe infastidisci tua sorella quando si intrufola nella tua stanza.

Avrai bisogno:

  • Un Arduino
  • Sensore a "ping" ad ultrasuoni, sto usando HC-SR04 Un PIR sarebbe meglio, ma quelli sono costosi. Un sensore ping può essere posizionato di nascosto in una porta e continua a svolgere lo stesso lavoro di base, ed è solo $ 5
  • Un cicalino piezoelettrico
  • Striscia LED, con lo stesso cablaggio che abbiamo usato di nuovo in questo progetto Crea la tua illuminazione ambientale dinamica per un Media CenterSe guardi molti film sul tuo PC o media center, sono sicuro che hai affrontato il dilemma dell'illuminazione; spegni completamente tutte le luci? Li tieni al massimo? O...
    instagram viewer
    Leggi di più
    .

Durante il cablaggio di questo progetto, non rimuovere tutto ogni volta, continua a costruire sull'ultimo blocco. Quando arrivi alla sezione "Coding The Alarm System", dovresti avere tutti i pezzi collegati, assomigliando a questo:

apprettata cablaggio

Luci lampeggianti

Utilizzare lo schema elettrico da questo progetto Crea la tua illuminazione ambientale dinamica per un Media CenterSe guardi molti film sul tuo PC o media center, sono sicuro che hai affrontato il dilemma dell'illuminazione; spegni completamente tutte le luci? Li tieni al massimo? O... Leggi di più per collegare la striscia LED; non cambiare i pin, poiché abbiamo bisogno dell'output PWM. Uso questo codice per testare rapidamente il cablaggio. Se tutto va bene, dovresti avere questo:

led-rgb-test

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 rileggere il segnale (e quindi calcolare la distanza) - mettilo su 7.

SR04

Per rendere le cose incredibilmente semplici, c'è una libreria che possiamo usare chiamata NewPing. Scarica e inseriscilo nel tuo Arduino Biblioteca cartella e riavvia 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 misure di distanza che ti vengono inviate a una velocità piuttosto elevata. È possibile trovare una variazione di 1 o 2 centimetri, ma va bene. Prova a far passare la mano davanti al sensore, spostandolo su e giù per osservare le letture che cambiano.

ping-output

Il codice dovrebbe essere abbastanza semplice da capire. Ci sono alcune dichiarazioni di pin rilevanti all'inizio, inclusa una distanza massima - questo può variare a seconda il sensore esatto che hai, ma fintanto che sei in grado di ottenere letture di meno di 1 metro con precisione, dovresti esserlo bene.

Nel ciclo di questa app di test, usiamo il ping () funzione per inviare un ping sonar, restituendo un valore in millisecondi di quanto tempo ha impiegato il valore per restituire. Per dare un senso a questo, usiamo le librerie NewPing costruite in costante di US_ROUNDTRIP_CM, che definisce quanti microsecondi sono necessari per percorrere un singolo centimetro. C'è anche un ritardo di 50 ms tra i ping per evitare di sovraccaricare il sensore.

Piezo Alarm

Il sensore a cristalli piezoelettrici è un cicalino semplice ed economico, e possiamo usare un pin PWM 3 per creare toni diversi. Collega un filo al pin 3, uno alla guida di terra - non importa quale.

Uso questo codice testare.

L'unico modo per uccidere l'allarme piuttosto odioso e forte è quello di staccare le spine. Il codice è un po 'complesso da spiegare, ma implica l'utilizzo di onde sinusoidali per generare un suono distintivo. Modifica i numeri per giocare con toni diversi.

Coding The Alarm System

Ora che abbiamo tutti i pezzi di questo puzzle, combiniamoli insieme.

Vai avanti e fai un nuovo schizzo, chiamato Allarme. Inizia combinando tutte le variabili e le definizioni dei pin che abbiamo mostrato negli esempi di test fino ad ora.

#includere  // Seleziona quali pin compatibili con PWM devono essere utilizzati. #define RED_PIN 10. #define GREEN_PIN 11. #define BLUE_PIN 9 #define TRIGGER_PIN 6 // Pin Arduino legato al pin del grilletto sul sensore a ultrasuoni. #define ECHO_PIN 7 // Pin di Arduino legato al pin di eco sul sensore a ultrasuoni. #define MAX_DISTANCE 100 // Distanza massima per 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 toglierci di mezzo se necessario.

void setup () {// imposta pinModes per RGB strip pinMode (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT); // ripristina le luci 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 sulle luci.

// funzione di supporto che ci consente di inviare un colore in un solo comando. colore vuoto (rosso char senza segno, verde char senza segno, blu char senza segno) // la funzione di generazione del colore. {analogWrite (RED_PIN, rosso); analogWrite (BLUE_PIN, blu); analogWrite (GREEN_PIN, verde); }

Infine, il nostro loop per ora consisterà in un semplice lampo di colore tra rosso e giallo (o, qualunque cosa tu voglia che sia la tua sveglia, basta cambiare i valori RGB).

void loop () {color (255,0,0); // ritardo rosso (100); colore (255.255,0); // ritardo giallo (100); }

Caricalo e testalo per assicurarti di essere sulla strada giusta.

Ora, integriamo il sensore di distanza per attivare quelle luci solo quando qualcosa entra, diciamo, 50 cm (poco meno della larghezza di un telaio di una porta). Abbiamo già definito i pin giusti e importato la libreria, quindi prima del tuo impostare() aggiungere la seguente riga per creare un'istanza:

Sonar NewPing (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing impostazione di pin e distanza massima. 

Al di sotto di ciò, aggiungi una variabile per memorizzare lo stato dell'allarme che viene attivato o meno, il cui valore predefinito è falso, ovviamente.

booleano attivato = falso; 

Aggiungi una linea al impostare() in modo che possiamo monitorare l'output su seriale e debug.

Serial.begin (115200); // Aprire 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 è scattato l'allarme.

void alarm () {color (255,0,0); // ritardo rosso (100); colore (255.255,0); // ritardo giallo (100); }

Ora creane uno nuovo ciclo continuo() funzione, quella in cui recuperiamo un nuovo ping, leggiamo i risultati e attiviamo l'allarme se viene rilevato qualcosa nel raggio del misuratore.

void loop () {if (triggered == true) {alarm (); } else {delay (50); // Attendi 50ms tra ping (circa 20 ping / sec). 29ms dovrebbe essere il ritardo più breve tra i ping. unsigned int uS = sonar.ping (); // Invia ping, ottieni il tempo di ping in microsecondi (uS). distanza int senza segno = uS / US_ROUNDTRIP_CM; Serial.println (distanza); if (distanza <100) {attivato = vero; } } }

Lasciami spiegare brevemente il codice:

  • Inizia controllando per vedere se l'allarme è stato attivato e, in tal caso, disattiva la funzione di allarme (al momento lampeggia solo le luci).
  • Se non è ancora stato attivato, ottieni la lettura corrente dal sensore.
  • Se il sensore sta leggendo <100 cm, qualcosa ha riempito il raggio (regola questo valore se si sta innescando troppo presto per te, ovviamente).

Prova ora, prima di aggiungere il fastidioso cicalino piezo.

Lavorando? Grande. Ora aggiungiamo di nuovo quel segnale acustico. Inserisci pinMode al impostare() routine.

pinMode (ALARM, OUTPUT); 

Quindi aggiungere il loop del cicalino piezoelettrico alla funzione alarm ():

per (int x = 0; x <180; x ++) {// converte i gradi in radianti quindi ottiene il valore sin sinVal = (sin (x * (3.1412 / 180))); // genera una frequenza dal valore sin toneVal = 2000+ (int (sinVal * 1000)); tono (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 di toni NewPing che quella standard usano gli stessi interrupt: sono sostanzialmente in conflitto e non c'è molto che puoi fare per risolverlo. Oh caro.

Non preoccuparti però. È un problema comune e qualcuno ha già una soluzione: scarica e aggiungi questo NewTone nella cartella Librerie di Arduino. Regola l'inizio del tuo programma per includerlo:

#includere 

E regola la linea:

 tono (ALARM, toneVal); 

per

 NewTone (ALARM, toneVal); 

anziché.

Questo è tutto. Imposta la sveglia sulla porta della tua camera da letto per il prossimo sfortunato sfortunato ladro.

Oppure, un cane drogato, che sembrava completamente impassibile dall'allarme.

Hai problemi con il codice? Ecco il app completa. Se ricevi errori casuali, prova a incollarli di seguito e vedrò se posso aiutarti.

Credito immagine: Allarme antincendio via Flickr

James ha una laurea in Intelligenza Artificiale ed è certificato CompTIA A + e Network +. È lo sviluppatore principale di MakeUseOf e trascorre il suo tempo libero giocando a paintball e giochi da tavolo VR. Costruisce PC da quando era un bambino.