Sådan fremstilles et simpelt Arduino alarmsystem

  • Brian Curtis
  • 0
  • 4135
  • 579
Reklame

Registrer bevægelse, og skræm derefter pokker ud af en ubuden gæst med en høj tonehøjde og blinkende lys. Lyder det sjovt? Selvfølgelig gør det det. Det er målet med dagens Arduino-projekt, der er velegnet til begyndere. Vi skriver helt fra bunden og tester, mens vi går sammen, så du forhåbentlig kan få en idé om, hvordan det hele bliver gjort, snarere end blot at installere noget, jeg allerede har lavet.

Ansvarsfraskrivelse: dette vil ikke faktisk beskytte dit hus. Det magt give din søster et ondt chok, når hun sniger sig ind i dit værelse.

Du har brug for:

  • En Arduino
  • ultralyd “ping” sensor, jeg bruger HC-SR04 En PIR ville være bedre, men de er dyre. En ping-sensor kan placeres uhyggeligt i en døråbning og stadig tjene det samme grundlæggende job, og er kun $ 5
  • En piezo summer
  • LED-strimmellys med de samme ledninger, som vi brugte tilbage i dette projekt. Byg din egen dynamiske omgivelsesbelysning til et mediecenter. Byg dit eget dynamiske omgivelsesbelysning til et mediecenter. Hvis du ser en masse film på din pc eller mediecenter, Jeg er sikker på, at du har stået over for lysdilemmaet; slukker du alle lys helt? Holder du dem på fuld eksplosion? Eller… .

Når du tilslutter dette projekt, skal du ikke fjerne alt hver gang - bare fortsæt med at bygge videre på den sidste blok. På det tidspunkt, du kommer til “Kodning af alarmsystemet” sektion, skal du have alle bits og stykker forbundet, så du ser sådan ud:

Blinkende lys

Brug ledningsdiagrammet fra dette projekt. Byg din egen dynamiske omgivelsesbelysning til et mediecenter. Byg dit eget dynamiske omgivelsesbelysning til et mediecenter. Hvis du ser en masse film på din pc eller mediecenter, er jeg sikker på, at du står over for belysning dilemma; slukker du alle lys helt? Holder du dem på fuld eksplosion? Eller ... for at tilslutte din LED-strip; skift ikke nålene, da vi har brug for PWM-output. Brug denne kode til hurtigt at teste dine ledninger. Hvis alt går godt, skal du have dette:

Afstandsføler

På SR04-modulet finder du 4 ben. VCC og GND gå til henholdsvis + 5V skinne og jord; TRIG er den pin, der bruges til at sende et ekkolodsignal, sæt dette på pin 6; EKKO bruges til at læse signalet tilbage (og derfor beregne afstanden) - sæt dette på 7.

For at gøre tingene utroligt enkle er der et bibliotek, vi kan bruge kaldet NewPing. Download og placer i dine Arduino's Bibliotek mappe og genstarte IDE'en, før du fortsætter. Test ved hjælp af denne kode; åbn den serielle skærm, og sørg for, at hastigheden er indstillet til 115200 baud. Med held og lykke skal du se, at nogle afstandsmålinger sendes tilbage til dig med en ret høj hastighed. Du finder muligvis en varians på 1 eller 2 centimeter, men det er fint. Prøv at køre hånden foran sensoren, bevæg den op og ned for at se de skiftende målinger.

Koden skal være ganske enkelt at forstå. Der er et par erklæringer af relevante stifter i starten, inklusive en maksimal afstand - dette kan variere afhængigt af den nøjagtige sensor, du har, men så længe du er i stand til at få mindre end 1 meters måling nøjagtigt, skal du have det godt.

I løkken på denne testapp bruger vi ping () funktion til at sende en ekkolods-ping, og få en værdi tilbage i millisekunder, hvor lang tid det tog før værdien kom tilbage. For at give mening om dette bruger vi NewPing-biblioteker, der er bygget konstant af US_ROUNDTRIP_CM, hvilket definerer hvor mange mikrosekunder det tager at gå en centimeter. Der er også en 50 ms forsinkelse mellem pings for at undgå overbelastning af sensoren.

Piezo Alarm

Piezo krystalsensoren er en enkel og billig summer, og vi kan bruge en PWM-pin 3 til at lave forskellige toner. Tilslut en ledning til pin 3, en til jordskinne - det betyder ikke noget.

Brug denne kode til at teste.

Den eneste måde at dræbe den ret modbydelige og høje alarm på er at trække i stikkene. Koden er lidt kompliceret at forklare, men den involverer at bruge sinusbølger til at generere en karakteristisk lyd. Tilpas numrene for at spille med forskellige toner.

Kodning af alarmsystemet

Nu hvor vi har alle brikkerne i dette puslespil, lad os kombinere dem sammen.

Gå videre og lav en ny skitse, kaldet Alarm. Start med at kombinere alle variabler og pin-definitioner, vi har i testeksemplerne indtil nu.

#include // Vælg hvilke PWM-stifter, der skal bruges. #definere RED_PIN 10 # definere GREEN_PIN 11 # definere BLUE_PIN 9 #definere TRIGGER_PIN 6 // Arduino-pin bundet til at udløse pin på ultralydssensoren. #definér ECHO_PIN 7 // Arduino-pin bundet til ekko-pin på ultralydssensoren. #define MAX_DISTANCE 100 // Maksimal afstand, vi ønsker at pinge til (i centimeter). #definer ALARM 3 float sinVal; int toneVal; 

Begynd med at skrive et grundlæggende Opsætning() funktion - vi behandler kun lysene i øjeblikket. Jeg har tilføjet en forsinkelse på 5 sekunder, før hovedsløjfen er startet, så vi får tid til at komme ud af vejen, hvis det er nødvendigt.

tom opsætning () // sæt pinModes til RGB strip pinMode (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT); // nulstille lys analogWrite (RED_PIN, 0); analogWrite (BLUE_PIN, 0); analogWrite (RED_PIN, 0); forsinkelse (5000); 

Lad os bruge en hjælperfunktion, der giver os mulighed for hurtigt at skrive en enkelt RGB-værdi ud til lysene.

// hjælperfunktion, der gør det muligt for os at sende en farve i en kommando tom farve (usigneret char rød, usigneret char grøn, usigneret char blue) // den farve genererende funktion analogWrite (RED_PIN, rød); analogWrite (BLUE_PIN, blå); analogWrite (GREEN_PIN, grøn); 

Endelig vil vores løkke for nuværende bestå af en simpel farveblitz mellem rød og gul (eller hvad du end vil have din alarm til - bare ændre RGB-værdier).

void loop () farve (255,0,0); // rød forsinkelse (100); farve (255,255,0); // gul forsinkelse (100); 

Upload og test det for at sikre, at du er på det rigtige spor.

Lad os nu integrere afstandsføleren for kun at udløse disse lys, når der inden for noget kommer inden for 50 cm (bare mindre end bredden på en dørkarme). Vi har allerede defineret de rigtige ben og importeret biblioteket, så før dit Opsætning() funktion tilføje følgende linje for at øjeblikkelig gøre det:

NyPing-ekkolodd (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing-opsætning af stifter og maksimal afstand. 

Under det tilføjes en variabel for at gemme tilstanden af ​​alarmen, der udløses eller ikke, og som standard er selvfølgelig falsk.

boolsk udløst = falsk; 

Føj en linje til Opsætning() funktion, så vi kan overvåge output på seriel og debug.

Serial.begin (115200); // Åbn seriel skærm ved 115200 baud for at se pingresultater. 

Lad os derefter omdøbe den aktuelle løkke til alarm () - det er, hvad der kaldes, hvis alarmen er udløst.

tom alarm () farve (255,0,0); // rød forsinkelse (100); farve (255,255,0); // yelow-forsinkelse (100); 

Opret nu en ny loop () funktion, hvor vi henter en ny ping, læser resultaterne og udløser alarmen, hvis der registreres noget inden for målerområdet.

void loop () if (udløst == true) alarm ();  andet forsinkelse (50); // Vent 50ms mellem pings (ca. 20 pings / sek). 29 ms skal være den korteste forsinkelse mellem pings. usigneret int u = sonar.ping (); // Send ping, få pingtid i mikrosekunder (us). usigneret int-afstand = uS / US_ROUNDTRIP_CM; Serial.println (afstand); hvis (afstand < 100) triggered = true;    

Lad mig forklare koden kort:

  • Start med at kontrollere for at se, om alarmen er udløst, og i bekræftende fald, sluk alarmfunktionen (bare blinkende lysene i øjeblikket).
  • Hvis det ikke er udløst endnu, skal du få den aktuelle aflæsning fra sensoren.
  • Hvis sensoren læser <100 cm, something has padded the beam (adjust this value if it's triggering too early for you, obviously).

Giv det en prøvekørsel nu, før vi tilføjer den irriterende piezo-summer.

Arbejder? Store. Lad os nu tilføje den summer tilbage. Tilføje pinMode til Opsætning() rutine.

pinMode (ALARM, OUTPUT); 

Føj derefter piezo summer-loop til alarm () -funktionen:

for (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);  

Hvis du prøver at samle på dette tidspunkt, kommer du til en fejl - jeg har overladt dette med vilje, så du kan se nogle almindelige problemer. I dette tilfælde bruger både NewPing og standardtone-biblioteket de samme afbrydelser - de er i modstrid med dem, og der er ikke meget, du kan gøre for at ordne det. Åh gud.

Ingen bekymringer dog. Det er et almindeligt problem, og nogen har en løsning allerede - download og tilføj denne NewTone til din Arduino Biblioteker-mappe. Juster starten af ​​dit program, så det inkluderer dette:

#omfatte  

Og juster linjen:

 tone (ALARM, toneVal); 

til

 NewTone (ALARM, toneVal); 

i stedet.

Det er det. Indstil alarmen i døren til dit soveværelse for den næste uheldige indbrudstyv.

Eller en dumhund, der syntes aldeles upasset af alarmen.

Har du problemer med koden? Her er den komplette app. Hvis du får tilfældige fejl, kan du prøve at indsætte dem nedenfor, så ser jeg, om jeg kan hjælpe.

Billedkredit: Brandalarm via Flickr




Endnu ingen kommentarer

Om moderne teknologi, enkel og overkommelig.
Din guide i en verden af moderne teknologi. Lær hvordan du bruger de teknologier og gadgets, der omgiver os hver dag, og lær, hvordan du finder interessante ting på Internettet.