Mainos

Tunnista liike ja pelota sitten isku tunkeilijasta korkealla äänimerkillä ja vilkkuvilla valoilla. Kuulostaako siltä hauskaa? Tietysti se tekee. Se on tämänpäiväisen Arduino-projektin tavoite, joka sopii aloittelijoille. Kirjoitamme kokonaan tyhjästä ja testaamme matkalla, jotta voit toivottavasti saada jonkinlaisen käsityksen siitä, kuinka se kaikki tapahtuu, sen sijaan, että asennat jo tekemäni.

Vastuuvapauslauseke: Tämä ei todellakaan suojaa talosi. Se voimin anna siskosi ikävä shokki, kun hän hiipii huoneeseesi.

Sinä tulet tarvitsemaan:

  • Arduino
  • Ultraääni “ping” -anturi, käytän HC-SR04 PIR olisi parempi, mutta ne ovat kalliita. Ping-anturi voidaan sijoittaa piilevästi oviaukkoon ja palvella silti samaa perustyötä, ja se on vain 5 dollaria
  • Pietsosummeri
  • LED-nauhavalaisin, samalla johdotuksella, jota käytimme takaisin tähän projektiin Luo oma dynaaminen ympäristövalaistus mediakeskukseenJos katsot paljon elokuvia tietokoneellasi tai mediakeskuksessa, olen varma, että olet kohdannut valaistusongelman; sammutatko kaikki valot kokonaan? Pidätkö heitä täydellä räjähdyksellä? Tai... Lue lisää .

Kun asennat tätä projektia, älä poista kaikkea joka kerta - jatka vain rakentamista viimeiseen lohkoon. Siihen mennessä, kun siirryt “Hälytysjärjestelmän koodaus” -osaan, kaikki bitit ja kappaleet pitäisi olla kytketty kiinni, ja näyttävät tältä:

Valmiin-johdotus

Vilkkuvat valot

Käytä kytkentäkaaviota tästä projektista Luo oma dynaaminen ympäristövalaistus mediakeskukseenJos katsot paljon elokuvia tietokoneellasi tai mediakeskuksessa, olen varma, että olet kohdannut valaistusongelman; sammutatko kaikki valot kokonaan? Pidätkö heitä täydellä räjähdyksellä? Tai... Lue lisää kytkeä LED-nauhat; älä muuta tappeja, koska tarvitsemme PWM-lähtöä. Käyttää tämä koodi testata johdotus nopeasti. Jos kaikki menee hyvin, sinulla pitäisi olla tämä:

led-RGB-testi

Etäisyysanturi

SR04-moduulista löydät 4 nastaa. VCC ja GND mene + 5 V kiskoon ja vastaavasti maahan; TRIG on nasta, jota käytetään sonarisignaalin lähettämiseen, laita tämä nastaan ​​6; ECHO käytetään lukemaan signaali takaisin (ja siten laskemaan etäisyys) - laita tämä kohtaan 7.

SR04

Jotta asiat olisivat uskomattoman yksinkertaisia, on olemassa kirjasto, jota voimme käyttää NewPing. Lataa ja sijoita Arduino-laitteeseesi Kirjasto -kansio ja käynnistä IDE uudelleen ennen jatkamista. Testaa käyttämällä tämä koodi; avaa sarjamonitori ja varmista, että nopeus on asetettu 115200 baudiin. Jos onnea, sinun pitäisi nähdä, että jotkut etäisyysmittaukset lähetetään takaisin sinulle melko suurella nopeudella. Saatat löytää variaation 1 tai 2 senttimetriä, mutta tämä on hieno. Yritä ajaa kättäsi anturin edessä ja siirtää sitä ylös ja alas tarkkailemaan muuttuvia lukemia.

ping-ulostulo

Koodin tulisi olla melko yksinkertainen ymmärtää. Alussa on muutama ilmoitus merkityksellisistä tapista, mukaan lukien enimmäisetäisyys - tämä voi vaihdella riippuen tarkka anturi, joka sinulla on, mutta niin kauan kuin pystyt saamaan alle yhden metrin lukemat tarkasti, sinun pitäisi olla hieno.

Tämän testisovelluksen silmukassa käytämme ping () Toiminto lähettää luotainpingin, jolloin saadaan arvo millisekunteina siitä, kuinka kauan arvon palauttaminen kesti. Tämän ymmärtämiseksi käytämme NewPing-kirjastoja, jotka on rakennettu vakiona US_ROUNDTRIP_CM, joka määrittelee kuinka monta mikrosekuntia kuluu yhden senttimetrin kulkemiseen. Pingien välillä on myös 50 ms: n viive anturin ylikuormituksen välttämiseksi.

Piezohälytys

Piezo-kristalli-anturi on yksinkertainen ja halpa summeri, ja voimme käyttää PWM-nastaa 3 erilaisten äänien tekemiseen. Kytke yksi johdin napaan 3, toinen maadoituskiskoon - sillä ei ole väliä mikä.

Käyttää tämä koodi Testata.

Ainoa tapa tappaa melko turhauttava ja äänekäs hälytys on vedä pistokkeet. Koodi on hieman monimutkainen selittää, mutta siihen sisältyy siniaaltojen käyttö selkeän äänen luomiseksi. Säädä numeroita pelataksesi eri äänillä.

Hälytysjärjestelmän koodaus

Nyt kun meillä on kaikki tämän palapelin palat, yhdistetään ne yhteen.

Mene eteenpäin ja tee uusi luonnos, nimeltään Hälytys. Aloita yhdistämällä kaikki muuttujat ja pin-määritelmät, jotka olemme koeesimerkeissä tähän mennessä.

#sisältää  // Valitse käytettävät PWM-yhteensopivat tapit. #definine RED_PIN 10. #define GREEN_PIN 11. #define BLUE_PIN 9 #define TRIGGER_PIN 6 // Arduino-nasta kiinnitetty ultraäänianturin liipaisintappiin. #define ECHO_PIN 7 // Arduino-nasta on kiinnitetty ultraäänianturin kaikuun. #define MAX_DISTANCE 100 // Suurin etäisyys, johon haluamme pingota (senttimetreinä). #define ALARM 3 float sinVal; int toneVal; 

Aloita kirjoittamalla perustiedot perustaa() toiminto - käsittelemme vain toistaiseksi valoja. Olen lisännyt 5 sekunnin viiveen ennen kuin pääsilmukka alkaa antaa meille jonkin aikaa poistua tieltä tarvittaessa.

void setup () {// aseta pinModes RGB-kaistaleelle pinMode (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT); // nollaa valot analogWrite (RED_PIN, 0); analogWrite (BLUE_PIN, 0); analogWrite (RED_PIN, 0); viive (5000); }

Käytämme aputoimintoa, jonka avulla voimme nopeasti kirjoittaa yhden RGB-arvon valoihin.

// auttajatoiminto, jonka avulla voimme lähettää värin yhdessä komennossa. tyhjä väri (allekirjoittamaton punainen, allekirjoittamaton vihreä, allekirjoittamaton sininen) // väriä tuottava toiminto. {analogWrite (RED_PIN, punainen); analogWrite (BLUE_PIN, sininen); analogWrite (GREEN_PIN, vihreä); }

Lopuksi, silmukkamme nyt koostuu yksinkertaisesta värisäilöstä punaisen ja keltaisen välillä (tai, mitä haluat hälytyksen olevan - muuta vain RGB-arvoja).

tyhjä silmukka () {väri (255,0,0); // punainen viive (100); väri (255 255,0); // keltainen viive (100); }

Lataa ja testaa se varmistaaksesi, että olet oikealla tiellä.

Integroidaan nyt etäisyysanturi, joka laukaisee nuo valot vain, kun jotain tulee esimerkiksi 50 cm (vain pienempi kuin oven rungon leveys). Olemme jo määritellyt oikeat nastat ja tuoneet kirjaston, joten ennen omaasi perustaa() funktio lisää seuraava rivi sen toteuttamiseksi:

NewPing-luotain (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Nappien NewPing-asetukset ja suurin etäisyys. 

Lisää sen alle muuttuja tallentamaan hälytystila, joka laukaistaan ​​tai ei, oletusarvoisesti väärä, tietysti.

boolean triggered = false; 

Lisää rivi kohtaan perustaa() -toiminto, jotta voimme seurata sarjan ja virheen lähtöä.

Serial.begin (115200); // Avaa sarjamonitori 115200 baudilla nähdäksesi ping-tulokset. 

Nimeämme seuraavaksi nykyinen silmukka uudelleen hälytys() - tätä kutsutaan, jos hälytys on lauennut.

tyhjä hälytys () {väri (255,0,0); // punainen viive (100); väri (255 255,0); // keltainen viive (100); }

Luo nyt uusi silmukka () Toiminto, jossa haemme uuden pingin, luemme tulokset ja laukaistamme hälytyksen, jos jotain havaitaan mittarialueella.

void loop () {if (triggered == true) {hälytys (); } else {viivytys (50); // odota 50ms pingien välillä (noin 20 ping / s). 29 ms: n tulisi olla lyhin viive pingien välillä. allekirjoittamaton int uS = sonar.ping (); // Lähetä ping, saat pingiajan mikrosekunnissa (uS). allekirjoittamaton etäisyys = uS / US_ROUNDTRIP_CM; Serial.println (etäisyys); if (etäisyys <100) {laukaistu = totta; } } }

Selitän koodia lyhyesti:

  • Aloita tarkistamalla, onko hälytys laukaistu, ja jos on, sammuta hälytystoiminto (vilkkuu vain valoja tällä hetkellä).
  • Jos se ei ole vielä käynnistynyt, hanki nykyinen lukema anturilta.
  • Jos anturin lukema on <100 cm, jokin on täyttänyt säteen (säädä tätä arvoa, jos se laukaisee sinulle liian aikaisin).

Kokeile sitä nyt, ennen kuin lisäämme ärsyttävän pietsosummerin.

Toimi? Loistava. Nyt lisätään summeri takaisin. Lisätä pinMode että perustaa() rutiinia.

pinMode (HÄLYTYS, TULOS); 

Lisää sitten pietsosummerin silmukka hälytystoimintoon ():

for (int x = 0; x <180; x ++) {// muuntaa asteet radiaaneiksi ja saada sitten sin-arvo sinVal = (sin (x * (3.1412 / 180))); // generoi taajuus sin-arvosta toneVal = 2000+ (int (sinVal * 1000)); ääni (HÄLYTYS, ääniVal); }

Jos yrität kääntää tässä vaiheessa, tapahtuu virhe - olen jättänyt tämän tarkoituksella, jotta näet joitain yleisiä ongelmia. Tässä tapauksessa sekä NewPing että tavallinen äänikirjasto käyttävät samoja keskeytyksiä - ne ovat ristiriidassa keskenään, eikä korjaamiseen voi tehdä paljon. Ohhoh.

Ei huolta. Se on yleinen ongelma, ja jokaisella on jo ratkaisu - lataa ja lisää tämä NewTone Arduino Libraries -kansioon. Säädä ohjelman alku alkamaan sisällyttää tämä:

#sisältää 

Ja säädä rivi:

 ääni (HÄLYTYS, ääniVal); 

että

 NewTone (hälytys, toneVal); 

sen sijaan.

Se siitä. Aseta hälytys makuuhuoneesi oviaukossa seuraavalle onnettomalle mahdolliselle murtovarkaudelle.

Tai huono koira, joka vaikutti hälytykseltä täysin rauhalliselta.

Onko sinulla vaikeuksia koodin kanssa? Tässä on täydellinen sovellus. Jos saat satunnaisia ​​virheitä, kokeile liittää ne alla ja katson, voinko auttaa.

Kuvaluotto: Palohälytys Flickrin kautta

Jamesilla on teknisen älykunnan kandidaatin tutkinto ja hän on CompTIA A + ja Network + -sertifioitu. Hän on MakeUseOfin johtava kehittäjä ja viettää vapaa-aikansa pelaamalla VR-paintballia ja lautapelejä. Hän on rakennettu tietokoneita lapsuudestaan ​​asti.