Hirdetés

Érzékelje a mozgást, majd ijesztje ki a betolakodót a magas behatolású riasztó hangokkal és villogó fényekkel. Jól hangzik? Természetesen igen. Ez a mai Arduino projekt célja, amely kezdőknek is megfelelő. Teljesen a semmiből írunk és tesztelünk, amint végigmegyünk, így remélhetőleg valami ötletet is kaphat arról, hogyan történik ez, mintsem, hogy egyszerűen telepítsen valamit, amit már készítettem.

Jogi nyilatkozat: ez nem fog valójában megvédeni a házat. Azt esetleg szenvedjen a nővérednek csúnya sokkkal, amikor a szobájába csap.

Szükséged lesz:

  • Arduino
  • Ultrahangos „ping” érzékelő, használom HC-SR04 A PIR jobb lenne, de ezek drágák. A ping-érzékelőt rejtett módon be lehet helyezni egy ajtóba, és továbbra is ugyanazt az alapvető munkát szolgálhatja, és csak 5 dollár
  • Piezo zümmögő
  • LED-es szalagfény, ugyanolyan vezetékkel, mint mi vissza a projektbe Készítse el saját dinamikus környezeti megvilágítását egy médiaközpont számáraHa sok filmet néz a számítógépen vagy a médiaközpontban, biztos vagyok benne, hogy szembe kell néznie a világítási dilemmával; kikapcsolja az összes fényt? Teljes robbanás közben tartja őket? Vagy...
    instagram viewer
    Olvass tovább
    .

Miközben bekapcsolja ezt a projektet, ne távolítsa el mindent minden alkalommal - csak az utolsó blokkra kell építened. Mire eljut a „A riasztórendszer kódolása” szakaszba, az összes bittel és darabmal össze kell vezetnie, és úgy néz ki valami ilyesmi:

kész kábelezés

Villogó fények

Használja a kapcsolási rajzot ebből a projektből Készítse el saját dinamikus környezeti megvilágítását egy médiaközpont számáraHa sok filmet néz a számítógépen vagy a médiaközpontban, biztos vagyok benne, hogy szembe kell néznie a világítási dilemmával; kikapcsolja az összes fényt? Teljes robbanás közben tartja őket? Vagy... Olvass tovább akassza fel a LED-csíkot; ne cserélje ki a csapokat, mivel PWM kimenetre van szükségünk. Használat ezt a kódot a vezetékek gyors tesztelésére. Ha minden jól megy, akkor rendelkeznie kell ezzel:

led rgb-teszt

Távolságérzékelő

Az SR04 modulon 4 érintkező található. VCC és GND menjen a + 5 V-os sínre és a földre; KERÉKKÖTŐ a szonárjel küldéséhez használt tű, helyezze ezt a 6. tűre; VISSZHANG a jel visszaolvasására szolgál (és ezért kiszámítja a távolságot) - tegye ezt 7-re.

sr04

Annak érdekében, hogy a dolgok hihetetlenül egyszerűek, van egy könyvtár, amelyet hívhatunk NewPing. Töltse le és helyezze el Arduino-jába Könyvtár mappát, és indítsa újra az IDE-t, mielőtt folytatná. Tesztelje a ezt a kódot; nyissa fel a soros monitort, és ellenőrizze, hogy a sebesség 115200 baudra van-e állítva. Ha szerencsét lát, látnia kell, hogy néhány távolságmérést elég nagy sebességgel küld vissza neked. Lehet, hogy 1 vagy 2 centiméter szórást mutat, de ez jó. Próbálja meg mozgatni a kezét az érzékelő előtt, mozgassa felfelé és lefelé, hogy megfigyelje a változó értékeket.

ping-kimenet

A kód megértésének meglehetősen egyszerűnek kell lennie. A rajtnál néhány nyilatkozat van a vonatkozó csapokról, ideértve a maximális távolságot is - ez a típustól függően változhat a pontos érzékelője van, de mindaddig, amíg 1 méternél kevesebb mérést tud elérni, addig kell lennie bírság.

A teszt alkalmazás hurkában a ping () Ez a funkció egy szonár ping kiküldésére szolgál, és ezredmásodpercben visszakapja az értéket, mennyi ideig tartott az érték visszatérése. Ennek értelmezéséhez a NewPing könyvtárakat használjuk, amelyek állandója állandó US_ROUNDTRIP_CM, amely meghatározza, hogy hány mikrosekundumot vesz igénybe egy centiméter megtételéhez. 50 másodperces késleltetés van a pingok között az érzékelő túlterhelésének elkerülése érdekében.

Piezo riasztás

A Piezo kristályérzékelő egy egyszerű és olcsó hangjelző, és különféle hangok készítéséhez használhatunk PWM 3 tűt. Csatlakoztasson egy vezetéket a 3-as érintkezőhöz, egy a földelősínhez - nem számít, melyik.

Használat ezt a kódot tesztelni.

A meglehetősen kellemetlen és hangos riasztás megsemmisítésének egyetlen módja a dugók meghúzása. A kód megmagyarázása egy kicsit bonyolult, de magában foglalja a szinuszhullámok használatát a megkülönböztető hang létrehozásához. Finomítsa a számokat, hogy különböző hangjelzésekkel játszhasson.

A riasztórendszer kódolása

Most, hogy megvan a puzzle összes darabja, egyesítsük össze őket.

Készítsen egy új vázlatot, az úgynevezett Riasztás. Kezdje az összes olyan változó és a PIN-definíciók kombinálásával, amelyek eddig a tesztpéldákban voltak.

#include  // Válassza ki, melyik PWM-képes csapokat kell használni. #define RED_PIN 10. #define GREEN_PIN 11. #define BLUE_PIN 9 #define TRIGGER_PIN 6 // Arduino tű rögzítve az ultrahangérzékelő ravaszt csapjával. #define ECHO_PIN 7 // Az Arduino csap az ultrahangos érzékelő visszapillantójához van kötve. #define MAX_DISTANCE 100 // A maximális távolság, amelyre pingolni akarunk (centiméterben). #define ALARM 3 float sinVal; int toneVal; 

Kezdje az alapvető cikk írásával beállít() funkció - most csak a fényekkel foglalkozunk. Hozzáadtam egy 5 másodperces késleltetést, mielőtt a fő hurok elindul, hogy adjon nekünk egy kis időt arra, hogy szükség esetén távozzunk az útból.

void setup () {// pinModes beállítása az RGB csíkhoz pinMode (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT); // reset fények analogWrite (RED_PIN, 0); analogWrite (BLUE_PIN, 0); analogWrite (RED_PIN, 0); késleltetés (5000); }

Használjunk segítő funkciót, amely lehetővé teszi számunkra, hogy egy RGB-értéket gyorsan kiírjunk a lámpákba.

// helper funkció, amely lehetővé teszi számunkra, hogy színt küldjünk egy parancsban. érvénytelen szín (aláírhatatlan char piros, aláíratlan char green, alá nem írt char blue) // a szín előállító funkció. {analogWrite (RED_PIN, piros); analoWrite (BLUE_PIN, kék); analoWrite (ZÖLD_PIN, zöld); }

Végül, a hurok most egy egyszerű színes villanásból áll, a vörös és a sárga között (vagy bármi is legyen az a riasztás, csak változtassa meg az RGB értékeket).

void loop () {szín (255,0,0); // piros késleltetés (100); szín (255,255,0); // sárga késleltetés (100); }

Töltse fel és tesztelje azt, hogy a helyes úton haladjon.

Beépítjük a távolságérzékelőt, hogy csak akkor kapcsoljon be ezeket a lámpákat, ha valami, mondjuk, 50 cm-en belül van (csak kevesebb, mint egy ajtókeret szélessége). Már meghatároztuk a megfelelő tűket és importáltuk a könyvtárat, tehát az ön előtt beállít() függvény hozzáadja a következő sort a pillanat létrehozásához:

NewPing szonár (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // A csapok és a maximális távolság NewPing beállítása. 

Alatta adjon hozzá egy változót, hogy tárolja a bekapcsolt vagy nem bekapcsolt riasztás állapotát, alapértelmezés szerint hamis alapértelmezés szerint.

logikai indítás = hamis; 

Adjon hozzá egy sort a beállít() funkciót, így nyomon követhetjük a kimenetet soros és hibakeresés közben.

Serial.begin (115200); // Nyissa meg a soros monitort 115200 baud sebességgel a ping eredmények megtekintéséhez. 

Ezután átnevezzük az aktuális hurkot a következőre riasztás() - ezt hívják, ha a riasztás kioldott.

void alarm () {szín (255,0,0); // piros késleltetés (100); szín (255,255,0); // sárga késés (100); }

Most hozzon létre egy új hurok() funkció, amelyben új ping-t kér, beolvassa az eredményeket és riasztást vált ki, ha valamit észlelnek a mérőtartományon belül.

void loop () {if (triggered == true) {riasztás (); } else {késleltetés (50); // Várjon 50ms-ot a pingok között (kb. 20 ping / sec). A 29 ms legyen a legrövidebb késés a pingok között. aláíratlan int uS = sonar.ping (); // Ping küldés, a ping idejének megadása mikrosekundumokban (uS). alá nem írt belső távolság = uS / US_ROUNDTRIP_CM; Serial.println (távolság); if (távolság <100) {kiváltva = igaz; } } }

Hadd magyarázzam röviden a kódot:

  • Első lépésként ellenőrizze, hogy nem váltott-e be riasztást, és ha igen, akkor kapcsolja ki a riasztási funkciót (csak villog a fények pillanatnyilag).
  • Ha még nem indul el, akkor szerezze be az érzékelő aktuális értékét.
  • Ha az érzékelő <100 cm-es leolvasása van, valami letette a fényt (állítsa be ezt az értéket, ha nyilvánvalóan túl korán vált ki az Ön számára).

Próbáld ki most, mielőtt hozzáadnánk a bosszantó piezo hangjelzőt.

Dolgozó? Nagy. Most tegyük hozzá ezt a zümmögőt. hozzáad pinMode hoz beállít() rutin.

pinMode (RIASZTÁS, KIMENET); 

Ezután adjuk hozzá a piezo hangjelző hurkot a riasztás () funkcióhoz:

mert (int x = 0; x <180; x ++) {// fokokat radiánokká konvertál, majd megkapja a sinVal = sin értéket (sin (x * (3.1412 / 180))); // generáljon frekvenciát a sin értékről toneVal = 2000+ (int (sinVal * 1000)); hang (ALARM, toneVal); }

Ha megpróbálja lefordítani ezen a ponton, akkor hiba lép fel - ezt szándékosan hagytam be, hogy láthass néhány gyakori problémát. Ebben az esetben mind a NewPing, mind a standard hangtár ugyanazokat a megszakításokat használja - alapvetően ellentmondásosak, és nem sok mindent lehet megtenni, hogy kijavítsák. Ó, drágám.

De nem kell aggódnia. Ez egy általános probléma, és valakinek már van megoldása - töltse le és add hozzá NewTone az Arduino könyvtárak mappájába. Állítsa be a program elejét az alábbiakkal:

#include 

És állítsa be a sort:

 hang (ALARM, toneVal); 

nak nek

 NewTone (RIASZTÁS, toneVal); 

helyette.

Ez az. Állítsa be a riasztást a hálószoba ajtajában a következő szerencsétlen betörőre.

Vagy egy elmosódott kutya, akit a riasztás teljesen eltakarított.

Probléma van a kóddal? Itt van a teljes alkalmazás. Ha véletlenszerű hibákat tapasztal, próbálkozzon az alábbiakkal, és megnézem, tudok-e segíteni.

Kép jóváírása: Tűzjelző Flickr-en keresztül

James rendelkezik mesterséges intelligencia BSc-vel, CompTIA A + és Network + tanúsítvánnyal rendelkezik. A MakeUseOf vezető fejlesztője, és szabadidejét VR paintballon és társasjátékokon játszik. Gyerekkora óta épít PC-ket.