reklama
Zjistit pohyb, pak vyděsit sakra z vetřelce s vysoko postavenými zvuky alarmu a blikajícími světly. Zní to zábavně? Samozřejmě, že ano. To je cíl dnešního projektu Arduino, vhodný pro začátečníky. Budeme psát úplně od nuly a testování, jak jdeme, takže můžete snad získat představu o tom, jak se to všechno dělá, spíše než jednoduše instalovat něco, co jsem již udělal.
Zřeknutí se odpovědnosti: váš dům to vlastně nebude chránit. To mohl když se vkradne do tvého pokoje, udělej ošklivé šoku.
Budeš potřebovat:
- Arduino
- Ultrazvukový senzor „ping“, který používám HC-SR04 PIR by bylo lepší, ale ty jsou drahé. Senzor ping může být tajně umístěn ve dveřích a stále obsluhovat stejnou základní práci, a je pouze 5 $
- Pískový bzučák
- LED pásové světlo, se stejným zapojením, jaké jsme použili zpět v tomto projektu Vytvořte si vlastní dynamické okolní osvětlení pro mediální centrumPokud sledujete hodně filmů v počítači nebo v mediálním centru, jsem si jistý, že jste čelili dilematu osvětlení; úplně zhasnete všechna světla? Máte je na plném výbuchu? Nebo... Přečtěte si více .
Při zapojování do tohoto projektu neodstraňujte pokaždé vše - jen pokračujte v budování posledního bloku. Než se dostanete do sekce „Coding The Alarm System“, měli byste si nechat zapojit všechny kousky a kousky a vypadat takto:
Záblesky
Použijte schéma zapojení z tohoto projektu Vytvořte si vlastní dynamické okolní osvětlení pro mediální centrumPokud sledujete hodně filmů v počítači nebo v mediálním centru, jsem si jistý, že jste čelili dilematu osvětlení; úplně zhasnete všechna světla? Máte je na plném výbuchu? Nebo... Přečtěte si více připojit svůj LED pásek; neměňte kolíky, protože potřebujeme výstup PWM. Použití tento kód pro rychlé vyzkoušení zapojení. Pokud vše půjde dobře, měli byste mít toto:
Senzor vzdálenosti
V modulu SR04 najdete 4 piny. VCC a GND přejděte na + 5 V kolejnici, respektive uzemněte; TRIG je pin používaný k vyslání sonarového signálu, nasaďte jej na pin 6; ECHO se používá ke čtení signálu zpět (a proto k výpočtu vzdálenosti) - položte to na 7.
Aby věci byly neuvěřitelně jednoduché, existuje knihovna, kterou můžeme použít NewPing. Stáhněte si a umístěte do svých Arduino Knihovna složku a restartujte IDE před pokračováním. Test pomocí tento kód; otevřete sériový monitor a ujistěte se, že je rychlost nastavena na 115200 baudů. S trochou štěstí byste měli vidět, jak se vám některá měření vzdálenosti posílají zpět poměrně vysokou rychlostí. Můžete najít rozptyl 1 nebo 2 centimetry, ale je to v pořádku. Zkuste spustit ruku před senzorem, pohybovat nahoru a dolů a sledovat měnící se hodnoty.
Kód by měl být docela srozumitelný. Na začátku je několik deklarací příslušných kolíků, včetně maximální vzdálenosti - to se může lišit podle přesný senzor, který máte, ale pokud dokážete přesně odečíst méně než 1 metr, měli byste být pokuta.
Ve smyčce této testovací aplikace používáme ping () funkce vyslat sonar ping, získat zpět hodnotu v milisekundách, jak dlouho trvalo, než se hodnota vrátí. Abychom to pochopili, používáme knihovny NewPing postavené na konstantě US_ROUNDTRIP_CM, který definuje, kolik mikrosekund potřebuje jeden centimetr. Mezi pingy je také zpoždění 50 ms, aby nedošlo k přetížení senzoru.
Piezo Alarm
Piezo krystalový senzor je jednoduchý a levný bzučák a my můžeme použít PWM pin 3 k vytvoření různých tónů. Připojte jeden vodič ke kolíku 3, jeden ke kostře - nezáleží na tom, které.
Použití tento kód testovat.
Jediným způsobem, jak zabít poněkud nepříjemný a hlasitý poplach, je vytáhnout zástrčky. Tento kód je trochu složitý na vysvětlení, ale zahrnuje použití sinusových vln k vytvoření výrazného zvuku. Vylepšete čísla tak, abyste mohli hrát s různými tóny.
Kódování poplachového systému
Nyní, když máme všechny kousky této hádanky, spojme je dohromady.
Jděte do toho a vytvořte nový náčrt Poplach. Začněte tím, že zkombinujete všechny proměnné a definice pinů, které jsme dosud použili v příkladech testů.
#zahrnout // Vyberte, které kolíky podporující PWM se mají použít. #define RED_PIN 10. #define GREEN_PIN 11. #define BLUE_PIN 9 #define TRIGGER_PIN 6 // Arduino pin je připojen ke spouštěcímu kolíku na ultrazvukovém senzoru. #define ECHO_PIN 7 // Arduino pin vázaný na echo pin na ultrazvukovém senzoru. #define MAX_DISTANCE 100 // Maximální vzdálenost, za kterou chceme ping (v centimetrech). #define ALARM 3 float sinVal; int toneVal;
Začněte psáním základní založit() funkce - prozatím se budeme zabývat pouze světly. Přidal jsem 5sekundové zpoždění, než se spustí hlavní smyčka, aby nám poskytl nějaký čas, abychom se v případě potřeby dostali z cesty.
void setup () {// set pinModes pro RGB strip pinMode (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT); // reset světel analogWrite (RED_PIN, 0); analogWrite (BLUE_PIN, 0); analogWrite (RED_PIN, 0); zpoždění (5000); }
Použijeme pomocnou funkci, která nám umožní rychle zapsat do světel jednu hodnotu RGB.
// pomocná funkce, která nám umožňuje poslat barvu jedním příkazem. prázdná barva (nepodepsaná char červená, nepodepsaná char zelená, nepodepsaná char blue) // funkce generování barev. {analogWrite (RED_PIN, červený); analogWrite (BLUE_PIN, modrý); analogWrite (GREEN_PIN, zelená); }
Nakonec se naše smyčka prozatím bude skládat z jednoduchého barevného záblesku mezi červenou a žlutou (nebo, ať už chcete, aby byl váš alarm jakýkoli - změňte pouze hodnoty RGB).
void loop () {color (255,0,0); // červené zpoždění (100); barva (255 255,0); // žluté zpoždění (100); }
Nahrajte a otestujte to, abyste se ujistili, že jste na správné cestě.
Nyní integrujme dálkový senzor, který spouští tato světla, pouze když něco přijde, řekněme 50 cm (jen menší než šířka zárubně). Definovali jsme správné kolíky a knihovnu jsme importovali, takže před vámi založit() funkce přidejte následující řádek k vytvoření instance:
Sonar NewPing (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing nastavení pinů a maximální vzdálenosti.
Pod tím přidejte proměnnou pro uložení stavu spuštěného nebo neprovedeného poplachu, samozřejmě s výchozím nastavením na false.
boolean triggered = false;
Přidejte řádek do založit() fungují tak, abychom mohli sledovat výstup na sériovém a ladícím.
Serial.begin (115200); // Otevřete sériový monitor s rychlostí 115200 baudů, abyste viděli výsledky pingu.
Dále přejmenujme aktuální smyčku poplach() - to se nazývá, pokud byl spuštěn alarm.
void alarm () {color (255,0,0); // červené zpoždění (100); barva (255 255,0); // yelow delay (100); }
Nyní vytvořte nový smyčka() funkce, ve které načteme nový ping, přečteme výsledky a spustíme alarm, pokud je něco detekováno v dosahu měřiče.
void loop () {if (triggered == true) {alarm (); } else {delay (50); // Počkejte 50ms mezi pingy (asi 20 ping / sec). 29 ms by mělo být nejkratším zpožděním mezi pingy. unsigned int uS = sonar.ping (); // Odeslat ping, získejte čas ping v mikrosekundách (uS). unsigned int distance = uS / US_ROUNDTRIP_CM; Serial.println (vzdálenost); if (vzdálenost <100) {triggered = true; } } }
Dovolte mi krátce vysvětlit kód:
- Začněte tím, že zkontrolujete, zda byl spuštěn alarm, a pokud ano, vypněte funkci alarmu (v tuto chvíli pouze blikají světla).
- Pokud ještě není spuštěn, získejte aktuální hodnotu ze senzoru.
- Pokud senzor čte <100 cm, něco vycpalo paprsek (upravte tuto hodnotu, pokud pro vás spouští příliš brzy, samozřejmě).
Vyzkoušejte to hned, než přidáme nepříjemný piezový bzučák.
Pracovní? Skvělý. Nyní přidáme ten bzučák zpět. Přidat pinMode do založit() rutina.
pinMode (ALARM, OUTPUT);
Poté přidejte smyčku piezo bzučáku do funkce alarm ():
pro (int x = 0; x <180; x ++) {// převádět stupně na radiány a poté získat hodnotu hříchu sinVal = (sin (x * (3,1412 / 180)))); // generovat frekvenci z hodnoty sin sintonVal = 2000+ (int (sinVal * 1000)); tón (ALARM, toneVal); }
Pokud se pokusíte zkompilovat v tomto okamžiku, narazíte na chybu - nechal jsem to úmyslně, abyste viděli některé běžné problémy. V takovém případě používá knihovna NewPing i standardní tónová stejná přerušení - v zásadě se střetávají a není co dělat, abyste je napravili. Ach drahá.
Žádné obavy. Je to běžný problém a někdo již má řešení - stáhněte si ho a přidejte NewTone do složky Arduino Libraries. Upravte začátek programu tak, aby obsahoval toto:
#zahrnout
A upravte řádek:
tón (ALARM, toneVal);
na
NewTone (ALARM, toneVal);
namísto.
A je to. Nastavte si budík ve dveřích své ložnice pro další nešťastný potenciální lupič.
Nebo pes nahoře, který se zdál být alarmem úplně nevázaný.
Máte potíže s kódem? Tady je kompletní aplikace. Pokud máte náhodné chyby, zkuste je vložit níže a uvidím, jestli vám mohu pomoci.
Obrazový kredit: Požární hlásič přes Flickr
James má bakalářský titul v oboru umělé inteligence a je držitelem certifikátu CompTIA A + a Network +. Je hlavním vývojářem MakeUseOf a tráví svůj volný čas hraním VR paintballu a deskových her. Staví počítače od dětství.