Sziasztok! Artem Luzhetsky vagyok, és egy cikksorozatot fogok levezetni, amely a " Okos otthon" és az IoT (angolul - Internet of Things, Internet of Things). Megismerkedünk az alkotás csodálatos módszereivel otthoni hálózat különféle eszközökről, amelyek önállóan vagy emberi segítséggel működnek. Jól? Kezdjük el!

Az első cikk bevezető jellegű, szeretném, ha megértené, hogy a leggyakoribb táblákkal és modulokkal fogok dolgozni, hogy a legtöbb ember kipróbálhassa magát az IoT fejlesztésében.

Tehát először két mikrokontrollerre van szükségünk, amelyeket használni fogunk: és .

Arduino UNO

Azt hiszem, nem kell bemutatni ezt a táblát, nagyon népszerű a kezdők és a barkácsrajongók körében. Csak annyit mondok, hogy ennek a táblának a képességei korlátozottak, és az UNO nem tud működni a https protokollal, nincs elég számítási teljesítmény ATmega328P mikrokontroller, tehát amikor a mikrokontrollerrel és a https protokollal kell dolgoznunk, akkor az ESP8266-ot programozzuk.

ESP8266

Az Amperka cég Troyka ESP8266 moduljával fogok dolgozni, de nyugodtan használhat egy normál ESP 8266 modult, gyakorlatilag nincs különbség, a csatlakozásnál a lényeg, hogy megnézzük a tűk jelentését, és ne feledjük, hogy az ESP működik 3,3 voltos logikán, tehát vagy 5 V-on keresztül kell csatlakoztatni, de feszültségstabilizátort kell csatlakoztatni az áramkörhöz, vagy egyszerűen csak egy 3,3 voltos feszültségellátású tűt kell használni.

Ez a mikrokontroller nem a legerősebb az Espressif sorozatban az általános piacon, de az egyik legolcsóbb és legelterjedtebb. Ez lesz az IoT fejlesztéseink alapja.

További részletek

Ezenkívül létre kell hoznunk minden kísérletet:

  1. LED-ek
  2. Fotoellenállás
  3. Termisztor
  4. Ultrahangos távolságmérő
  5. Piezodinamikus
  6. Mini szervo
  7. IR érzékelő
  8. IR távirányító

Az IoT-vel való együttműködéshez nincs szükségünk az összes modulra, de az összes jövőbeli projekt megvalósításához végül mindegyiket meg kell vásárolnunk.

Programok és könyvtárak

Először is töltse le a könyvtárat, amely sokkal könnyebbé teszi az Arduino IDE-ben való munkát, ha ESP8266-ot használ - http://wiki.amperka.ru/_media/iot-m:iot-m-libs.zip

Másodszor, az IoT jobb megértéséhez olyan webhelyekre lesz szükségünk, amelyek lehetővé teszik számunkra, hogy adatokat küldjünk nekik.

  1. www.dweet.io
  2. maker.ifttt.com
  3. narodmon.ru
  4. stb.

Harmadszor - ezek is hasznosak lesznek számunkra különféle alkalmazások Androidon, hogy telefonunk segítségével vezérelhessünk egy okosotthont.

  1. OpenHab
  2. Pislogás
  3. stb.

Minden módszerrel, programmal, helyszínnel részletesen megismerkedünk a következő projektekben.

2. „Intelligens lámpa” készítése

Meguntalak már? Készítsük el a legegyszerűbbet okos lámpa, amely bekapcsol, ha a szoba sötét.

Sőt, ehhez még UNO sem kell, lehet digitális egyedi fotoszenzort használni, de a jövőben a felismerhetetlenségig megváltoztatjuk ezt a projektet, így valahol el kell kezdeni.

Ha nem biztos abban, hogy készen áll a 220 voltos árammal dolgozni, akkor zseblámpa helyett használjon hagyományos LED-et. Az elején az enyémet vettem régi lámpa TLI – 204, ezek szinte minden boltban kaphatók (előre lekapcsoltam a hálózatról).

A lámpának kétféle működési módja van (be/ki), amit szeretnék, az az, hogy növelni szeretném a funkcionalitását, meghagyva a lámpa teljes be- és kikapcsolásának lehetőségét.

Egy relével ellátott fotoellenállást nem lehet párhuzamosan csatlakoztatni az áramkörhöz másik kapcsoló használata nélkül, ezért úgy döntöttem, hogy a kétállású kapcsoló helyett háromállású billenőkapcsolót szerelek be.

Az általános elektromos diagramnak így kell kinéznie:

Ha minden helyesen megtörtént, akkor a kapcsoló harmadik helyzetében a mikrokontrollertől a reléhez való áramellátással bekapcsolhatja a lámpát.

Csatlakoztassunk egy fotoellenállást az Arduinóhoz. A diagram így néz ki:

3. Az "okos lámpa" kódja

Most írjunk egy kódot, amely átviszi az áramot a relébe, ha a szoba sötét.

#define SHINE 5 //PIN A FOTOREZISTATORON #define REL 13 //PIN A RELÉN void setup())( pinMode(SHINE, INPUT); pinMode(REL, OUTPUT); Serial.begin(9600); ) void loop ())( if (analogRead(SHINE)<600) // Если света в комнате мало, то включаем лампу { digitalWrite(REL, HIGH) } else // если много, то выключаем { digitalWrite(REL, LOW); } Serial.printIn(analogRead(SHINE)); selay(500); }

Amikor mindent csatlakoztat, ne felejtse el eltávolítani a fotóérzékelőt a lámáról, különben fényjátékkal kedveskednek. Mindennek működnie kell.

Legközelebb megpróbáljuk bonyolítani a kódot, és hozzáadni néhány további funkciót. Hamarosan találkozunk!

Ebben a kísérletben a LED-nek akkor kell bekapcsolnia, ha a fényszint egy potenciométer által beállított küszöb alá esik.

A KÍSÉRLET ALKATRÉSZEK LISTÁJA

- 1 Arduino Uno tábla;

- 1 forrasztás nélküli kenyértábla;

- 1 LED;

- 1 fotoellenállás;

- 1 db 220 Ohm névleges értékű ellenállás, 1 db 10 kOhm névleges értékű ellenállás;

- 1 változó ellenállás (potenciométer);

- 10 apa-apa vezeték.

RÉSZLETEK A KIEGÉSZÍTŐ FELADATHOZ

1 további LED;

További 1 ellenállás 220 Ohm névleges értékkel;

Még 2 vezeték.

KÖRDIAGRAMM

DIAGRAM A PENZTÁBLÁN

VÁZLAT

vázlat letöltése az Arduino IDE-hez
#define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 void setup() ( pinMode(LED_PIN, OUTPUT); ) void loop() ( // olvassa be a fényszintet. Egyébként // lehet egy változót deklarálni és hozzárendelni egy értéket egyszerre int lightness = analogRead(LDR_PIN); // kiolvassa az értéket a potenciométerről, amellyel beállítjuk // a feltételes sötétség és a világosság közötti küszöbértéket int threshold = analogRead(POT_PIN); // deklarálunk egy logikai változót, és rendelje hozzá a // „sötét van most” értéket. A logikai változók az // integer változókkal ellentétben két érték közül csak egyet tartalmazhatnak: // igaz vagy hamis. Az ilyen értékeket // logikai értéknek is nevezik. logikai tooDark = (világosság< threshold); // используем ветвление программы: процессор исполнит один из // двух блоков кода в зависимости от исполнения условия. // Если (англ. «if») слишком темно... if (tooDark) { // ...включаем освещение digitalWrite(LED_PIN, HIGH); } else { // ...иначе свет не нужен — выключаем его digitalWrite(LED_PIN, LOW); } }

MAGYARÁZAT A KÓDSZHOZ

  • Új típusú változókat használunk − logikai érték, amelyek csak értékeket tárolnak igaz (igaz, 1) vagy hamis (hamis, 0). Ezek az értékek a logikai kifejezések kiértékelésének eredményei. Ebben a példában a logikai kifejezés az könnyűség< threshold . Emberi nyelven ez így hangzik: „a megvilágítás a küszöbszint alatt van”. Ez az állítás akkor igaz, ha a megvilágítás a küszöbszint alatt van. A mikrokontroller képes összehasonlítani a változók értékeit könnyűségÉs küszöb, amelyek viszont a mérési eredmények, és kiszámítják a logikai kifejezés igazságát.
  • Ezt a logikai kifejezést csak az érthetőség kedvéért tesszük zárójelbe. Mindig jobb olvasható kódot írni. Más esetekben a zárójelek befolyásolhatják a műveletek sorrendjét, mint a hagyományos aritmetikában.
  • Kísérletünkben egy logikai kifejezés akkor lesz igaz, ha az érték könnyűségértéknél kisebb küszöb mert az operátort használtuk < . Használhatunk operátorokat > , <= , >= , = = , != , amelyek rendre "nagyobb, mint", "kisebb vagy egyenlő", "nagyobb vagy egyenlő", "egyenlő", "nem egyenlő".
  • Legyen különösen óvatos vele logikai operátor = = és ne keverje össze a hozzárendelés operátorával = . Az első esetben összehasonlítjuk a kifejezések értékeit, és megkapjuk logikai érték(igaz vagy hamis), a második esetben pedig a jobb oldali operandus értékét rendeljük a bal oldali operandushoz. A fordító nem ismeri a szándékunkat, és nem ad ki hibát, de véletlenül megváltoztathatjuk valamelyik változó értékét, és akkor sokáig keresgélünk a hibát.
  • Feltételes operátor haHa") az egyik kulcsfontosságú a legtöbb programozási nyelvben. Segítségével nem csak egy szigorúan meghatározott műveletsort tudunk végrehajtani, hanem bizonyos feltételek függvényében döntéseket is hozhatunk arról, hogy az algoritmus melyik ágát kövessük.
  • Egy logikai kifejezéshez könnyűség< threshold van jelentése: igaz vagy hamis. Kiszámoltuk és egy logikai változóba helyeztük túl sötét("túl sötét") Ezért úgy tűnik, hogy azt mondjuk: "Ha túl sötét van, kapcsolja be a LED-et"
  • Ugyanilyen sikerrel mondhatnánk, hogy „ha a megvilágítás kisebb, mint a küszöbszint, akkor kapcsolja be a LED-et”, azaz. transzfer a ha minden logikai kifejezés:
ha (könnyedség< threshold) { // ... }
  • Mögött feltételes operátor ha Kell lennie egy kódblokknak, amely végrehajtódik, ha a logikai kifejezés igaz. Ne feledkezzünk meg mindkét göndör fogszabályzóról {} !
  • Ha a kifejezés igaz, akkor csak végre kell hajtanunk egy utasításokat, azonnal utána írható ha (…) nélkül göndör fogszabályozó:
ha (könnyedség< threshold) digitalWrite(LED_PIN, HIGH);
  • Operátor ha tervezéssel bővíthető más("másképp"). Egy kódblokk vagy az azt követő egyetlen utasítás csak akkor hajtódik végre, ha a logikai kifejezés in ha jelentése van hamis , « fekszik" A göndör fogszabályzókra vonatkozó szabályok ugyanazok. Kísérletünkben azt írtuk, hogy "ha túl sötét van, kapcsolja be a LED-et, ellenkező esetben kapcsolja ki a LED-et."

KÉRDÉSEK MAGAD TESZTELÉRE

  1. Ha az analóg bemenet és a föld közé fotoellenállást szerelünk, akkor a készülékünk fordítottan fog működni: a LED a fény mennyiségének növekedésével világít. Miért?
  2. Milyen eredményt kapunk a készülék működésében, ha a LED fénye a fotoellenállásra esik?
  3. Ha az előző kérdésben leírtak szerint telepítjük a fotoellenállást, hogyan kell módosítani a programot, hogy a készülék megfelelően működjön?
  4. Tegyük fel, hogy megvan a kód ha (feltétel) (cselekvés;). Milyen esetekben kerül sor erre? akció ?
  5. Milyen értékeken y kifejezés x + y > 0 igaz lesz, ha x > 0 ?
  6. Szükséges-e jelezni, hogy mely utasításokat kell végrehajtani, ha a feltétel benne van az utasításban ha hamis?
  7. Mi a különbség az operátor között = = az üzemeltetőtől = ?
  8. Ha a konstrukciót használjuk ha (feltétel) cselekvés1; más akció2;, előfordulhat-e olyan helyzet, hogy egyik műveletet sem hajtják végre? Miért?

FELADATOK AZ ÖNÁLLÓ MEGOLDÁSHOZ

  1. Írja át a programot a változó használata nélkül túl sötét miközben megőrzi a készülék működőképességét.
  2. Adjon hozzá egy másik LED-et az áramkörhöz. Végezze el a programot úgy, hogy amikor a megvilágítás a küszöbérték alá esik, akkor egy LED bekapcsoljon, és amikor a megvilágítás a küszöbérték fele alá csökken, mindkét LED bekapcsoljon.
  3. Változtassa meg az áramkört és a programozást úgy, hogy a LED-ek ugyanilyen elv szerint kapcsoljanak be, de minél intenzívebben világítanak, annál kevesebb fény esik a fotoellenállásra.

Valószínűleg mindenkinek volt egy álma gyermekkorában (és nem is egy). Megpróbálhatod még emlékezni arra az érzésre, ami betölti a gyermek lelkét, amikor az álma valóra válik, vagy arra a távoli, ismerős csillogásra a szemében... Gyerekkoromban arról álmodoztam, hogy saját éjszakai lámpám lesz.

Jelenleg a BSUIR 4. éves hallgatója vagyok, és amikor azt mondták nekünk, hogy az áramkörtervezési kurzus nem papíron, hanem egy hardveren is elkészíthető, eszembe jutott: az éjszakai fény, amire annyira vágytam. gyereket magam is csinálhatok. Sőt, ne csak egy tárgyat készíts, ami bevilágítja a szobát a sötétben, hanem egy könnyen irányítható eszközt, amely bármilyen hangulathoz igazodik. Miért ne? Úgy döntöttem, hogy hozzáadom a színváltoztatás lehetőségét a kezemmel: minél közelebb van a kezem az éjszakai lámpához, annál fényesebben világít valamelyik szín (RGB). Az éjszakai fényt is szeretném vezérelni a távirányítóval.

Azonnal bevallom, hogy a cxem.net weboldalon kiszúrtam az ötletet. Röviden, ez a példa egy RGB mátrixot használt, amelyet eltolási regiszterekkel és ultrahangos távolságérzékelőkkel vezéreltek. De azt hittem, hogy a mátrix csak egy irányba világít, de azt akartam, hogy az éjszakai fény az oldalakon világítson.

Az áramköri elemek indoklása


felé fordítottam a figyelmem Arduino mikrokontrollerek. Az UNO eléggé megfelelő opció az én ötletemhez, egyrészt mert ez a legnépszerűbb platform és a tűk száma nem túl nagy, ellentétben a Megával, másrészt külső áramforrást is lehet rá kötni, az én esetemben 12V , ellentétben a Nanóval, harmadszor... nos, szerintem ennél a két pontnál megállhatunk. A platform rendkívül népszerű az egész világon a programozási nyelv kényelme és egyszerűsége, valamint nyílt architektúrája és programkódja miatt.

Több részletes információk Az interneten könnyen talál információkat erről a tábláról, ezért nem fogom túlterhelni a cikket.

Tehát a rendszer alapvető követelményei. Kívánt:
– érzékelők, amelyek nyomon követik az akadálytól való távolságot a rendszer vezérléséhez;
– érzékelő a távirányító jeleinek olvasásához távirányító;
– LED-ek, amelyek biztosítják a szükséges világítási funkciókat;
– egy vezérlőegység, amely az egész rendszert vezérli.

Távolságmérőkre van szükség távolságérzékelőként a projekthez, amelyek mindegyike megfelel egy bizonyos színt: piros, zöld, kék. A távolságérzékelők figyelik a kéz és az éjszakai fény távolságát, és minél közelebb kerül a kéz egy bizonyos érzékelőhöz, annál erősebben világít a távolságmérőnek megfelelő szín. Ezzel szemben minél távolabb van a kéz, annál kisebb feszültséget kap az érzékelőnek megfelelő szín.

A legnépszerűbb távolságmérők Ebben a pillanatban ezek a Sharp GP2Y0A21YK és a HC-SR04. A Sharp GP2Y0A21YK egy infravörös távolságmérő. IR adóval és IR vevővel van felszerelve: az első a sugár forrásaként szolgál, melynek visszaverődését a második megfogja. Ugyanakkor az érzékelő infravörös sugarai az emberi szem számára láthatatlanok, és ilyen intenzitás mellett ártalmatlanok.

A HC-SR04 ultrahangos érzékelővel összehasonlítva ennek az érzékelőnek vannak előnyei és hátrányai is. Az előnyök közé tartozik a semlegesség és az ártalmatlanság. Hátránya a rövidebb hatótáv és a külső zavaroktól való függés, beleértve bizonyos típusú világítást.

A projektben távolságérzékelőként használják: ultrahangos távolságmérők HC-SR04.
A HC-SR04 működési elve az echolokáció jól ismert jelenségén alapul. Használata során az adó akusztikus jelet generál, amely az akadályról visszaverődően visszatér az érzékelőhöz, és a vevő regisztrálja. Ismerve az ultrahang levegőben terjedési sebességét (kb. 340 m/s), valamint a kibocsátott és a vett jel közötti késleltetési időt, könnyen kiszámítható az akusztikus gát távolsága.

A TRIG bemenet a mikrokontroller bármely érintkezőjéhez csatlakozik. Erre a tűre impulzust kell alkalmazni. digitális jel időtartama 10 μs. A TRIG bemenet jele alapján az érzékelő ultrahang impulzusok csomagját küldi. A visszavert jel vétele után az érzékelő impulzusjelet generál az ECHO lábon, melynek időtartama arányos az akadály távolságával.

IR érzékelő. Természetesen a távirányítóhoz szükséges jelet ebből az érzékelőből olvassuk és dekódoljuk. A TSOP18 csak frekvenciában különbözik egymástól. A projekthez a VS1838B TSOP1838 érzékelőt választották ki.

A projekt azon az ötleten alapult, hogy a helyiséget bármilyen színben megvilágítsák, ami azt jelenti, hogy 3 elsődleges színre lesz szüksége, amelyekből a világítást megkapják: piros, zöld, kék. Ezért az SMD 5050RGB LED modellt választották, amely tökéletesen megbirkózik a feladattal.

Az egyes LED-ek feszültségének mértékétől függően megváltoztatják a világítás intenzitását. A LED-et ellenálláson keresztül kell csatlakoztatni, különben nem csak azt, hanem az Arduinót is tönkretehetjük. Az ellenállásra azért van szükség, hogy a LED-en lévő áramot elfogadható értékre korlátozzák. A helyzet az, hogy a LED belső ellenállása nagyon alacsony, és ha nem használ ellenállást, akkor olyan áram megy át a LED-en, hogy egyszerűen kiégeti a LED-et és a vezérlőt.

A projektben használt LED szalagok 12V-ról táplálkoznak.

Tekintettel arra, hogy a LED-ek feszültsége „kikapcsolt” állapotban 6 V, és az 5 V-ot meghaladó tápellátást kell szabályozni, kapcsolási módban tranzisztorokat kell hozzáadni az áramkörhöz. A választásom a BC547c modellre esett.

Nézzük meg röviden az elvet azok számára, akik elfelejtették munka n-p-n tranzisztor. Ha egyáltalán nem ad feszültséget, hanem egyszerűen rövidre zárja az alap és az emitter kapcsait, még ha nem is, de több ohmos ellenálláson keresztül, akkor kiderül, hogy az alap-emitter feszültsége nulla. Következésképpen nincs alapáram. A tranzisztor zárt, a kollektoráram elhanyagolhatóan kicsi, pont ugyanannyi a kezdeti áram. Ebben az esetben a tranzisztorról azt mondják, hogy lekapcsolt állapotban van. Az ellentétes állapotot telítésnek nevezzük: amikor a tranzisztor teljesen nyitva van, így nincs hova tovább nyitni. Ilyen mértékű nyitással a kollektor-emitter szakasz ellenállása olyan alacsony, hogy egyszerűen lehetetlen bekapcsolni a tranzisztort a kollektorkör terhelése nélkül, azonnal kiég. Ebben az esetben a maradék feszültség a kollektoron csak 0,3...0,5V lehet.

Ez a két állapot, a telítettség és a levágás, akkor használatos, amikor a tranzisztor kapcsolási módban működik, mint egy hagyományos reléérintkező. Ennek az üzemmódnak a fő jelentése az, hogy egy kis bázisáram nagy kollektoráramot vezérel, amely több tízszer nagyobb, mint az alapáram. Nagy kollektoráramot kapunk miatt külső forrás energiát, de a jelenlegi nyereség, ahogy mondani szokás, nyilvánvaló. Esetünkben az 5V üzemi feszültségű mikroáramkör 3 db 12V-ról működő LED-es szalagot tartalmaz.

Számítsuk ki a kulcskaszkád működési módját. Ki kell számítani az ellenállás értékét az alapáramkörben, hogy a LED-ek teljes teljesítménnyel égjenek. A számítás során szükséges feltétel, hogy az áramerősítés nagyobb vagy egyenlő legyen, mint a maximális lehetséges kollektoráram elosztása a lehetséges legkisebb alapárammal:

Ezért a szalagok üzemi feszültsége 220 V, az alapáramkör pedig 5 V feszültségű mikroáramkörről vezérelhető. Ha a tranzisztort úgy tervezték, hogy ilyen feszültséggel működjön a kollektoron, akkor a LED-ek probléma nélkül világítanak.
A feszültségesés az alap-emitter átmeneten 0,77 V, feltéve, hogy az alapáram 5 mA és a kollektoráram 0,1 A.
Az alapellenállás feszültsége a következő lesz:

Ohm törvénye szerint:

A szabványos ellenállási tartományból egy 8,2 kOhm-os ellenállást választunk. Ezzel befejeződik a számítás.

Egy problémára szeretném felhívni a figyelmet, amellyel szembesültem. Az IRremote könyvtár használatakor az Arduino lefagyott a kék szín beállításakor. Hosszas és alapos internetes keresgélés után kiderült ezt a könyvtárat az alapértelmezett 2-es időzítőt használja ehhez az Arduino modellhez. Az időzítők a PWM kimenetek vezérlésére szolgálnak.

Időzítő 0 (Rendszeridő, PWM 5 és 6);
1. időzítő (PWM 9 és 10);
2. időzítő (PWM 3 és 11).

Kezdetben PWM 11-et használtam a kék szín szabályozására. Ezért legyen óvatos, amikor PWM-mel, időzítőkkel és harmadik féltől származó könyvtárakkal dolgozik, amelyek használhatják ezeket. Furcsa ez kezdőlap Erről az árnyalatról nem szóltak semmit a Githubon. Ha szeretné, az 1-es időzítővel törölheti a sor megjegyzését, és kiírhatja a 2-t.

Az elemek összekapcsolása a kenyérsütőtáblán így néz ki:

A kenyérsütőlapon végzett tesztelés után elkezdődtek az „Elemek elhelyezése a táblán” és „Munkavégzés a forrasztópákával” fázisok. Az elkészült tábla első tesztelése után egy gondolat motoszkál a fejemben: valami elromlott. És itt kezdődik a sokak számára ismerős szakasz: „Fokozatos munka a tesztelővel”. A problémákat (több szomszédos érintkező véletlenül össze volt forrasztva) azonban gyorsan kiküszöbölték és itt a LED-ek várva várt huncut fénye.

Akkor már csak a test kérdése volt. Emiatt az érzékelőink számára lyukakkal ellátott rétegelt lemezt levágtuk. A hátlapot speciálisan levehetővé tették, így belülről is élvezheti a kilátást, és ha kívánja, befejezhet vagy újracsinálhat valamit. Ezen kívül van még 2 lyuk az alaplap és a tápegység átprogramozásához.

A testet kétkomponensű epoxi ragasztóval ragasztottuk. Érdemes megjegyezni ennek a ragasztónak a sajátosságait azok számára, akik még nem találkoztak vele. Ez a termék két külön tartályban kerül forgalomba, és ha a tartalmat összekeverjük, azonnali kémiai reakció lép fel. Keverés után gyorsan, 3-4 percen belül kell cselekednie. A további felhasználáshoz új adagot kell keverni. Tehát ha ezt próbálja megismételni, azt tanácsolom, hogy kis adagokban keverje össze, és nagyon gyorsan cselekedjen, nem lesz sok idő a gondolkodásra. Ezért érdemes előre átgondolni, hogyan és hova ragasszuk a testet. Ráadásul ezt nem lehet egy ülésben megtenni.

LED-es szalagok rögzítéséhez fedőlap egy csövet helyeztek be, amelyen az összes vezeték tökéletesen áthaladt.

Amikor felmerült a probléma a lámpaernyővel, eszembe jutott, hogy gyerekkoromban egyszerű cérnából, ragasztóból és lufiból kézműveskedtem, ami alapként szolgált. A lámpaernyő elve ugyanaz, de a poliéder becsomagolása nehezebbnek bizonyult, mint egy golyó. A menetek által a szerkezetre gyakorolt ​​nyomás hatására felfelé kezdett szűkülni, és a szálak elkezdtek leszakadni. Sürgősen, ragasztóval borított kezemmel úgy döntöttek, hogy felülről erősítik meg a szerkezetet. És akkor a CD megmentett. A végeredmény ez az éjszakai fény:

Mit szeretnél mondani a végén?

Mit kell változtatnom a projektben? A távolságérzékelők TRIG jelének ellátásához három helyett egy Arduino kimenetet használhatunk. Az IR szenzornak is biztosítanék egy lyukat (amit elfelejtettem), ami sajnos még mindig el van rejtve a tokban, amiből természetesen nem tud kiolvasni a távirányító jeleit. De ki mondta, hogy nem lehet semmit sem forrasztani, sem fúrni?

Szeretném megjegyezni, hogy ez egy érdekes félév volt, és remek alkalom arra, hogy megpróbáljak valamit nem papíron, aminek köszönhetően újabb pipát tehetek a „gyerekkori álom” tétel mellé. És ha úgy gondolja, hogy valami új kipróbálása nehéz, és nem tudja, mit tegyen először, ne aggódjon. Sok ember fejében motoszkál a gondolat: hol kezdjem, és hogyan lehet ezt egyáltalán megtenni? Sok olyan feladat van az életben, amitől meg lehet zavarodni, de ha egyszer megpróbálod, észre fogod venni, hogy csillogó szemmel hegyeket mozgathatsz, még ha ehhez egy kicsit próbálkoznod is kell.

A fotoellenállásokra épülő fényérzékelőket (világítást) gyakran használják valódi Arduino projektekben. Viszonylag egyszerűek, nem drágák, és könnyen megtalálhatók és megvásárolhatók bármely online áruházban. Az Arduino fotoellenállás lehetővé teszi a fényszint szabályozását és annak változásait. Ebben a cikkben megnézzük, mi is az a fotoellenállás, hogyan működik az arra épülő fényérzékelő, és hogyan kell megfelelően csatlakoztatni az érzékelőt az Arduino kártyákhoz.

A fotoellenállás, ahogy a neve is sugallja, közvetlenül kapcsolódik az ellenállásokhoz, amelyek gyakran szinte minden elektronikus áramkörben megtalálhatók. A hagyományos ellenállás fő jellemzője az ellenállás értéke. A feszültség és az áramerősség ettől függ, egy ellenállás segítségével beállítjuk a többi komponens szükséges üzemmódját. Általános szabály, hogy az ellenállás ellenállásértéke gyakorlatilag nem változik azonos működési feltételek mellett.

A hagyományos ellenállásokkal ellentétben fotoellenállás a környezeti fény szintjétől függően változtathatja ellenállását. Ez azt jelenti, hogy be elektronikus áramkör A paraméterek folyamatosan változnak, mindenekelőtt arra vagyunk kíváncsiak, hogy a fotoellenálláson a feszültség csökkenjen. Ha ezeket a feszültségváltozásokat rögzítjük az Arduino analóg érintkezőin, megváltoztathatjuk az áramkör logikáját, ezáltal olyan eszközöket hozunk létre, amelyek alkalmazkodnak a külső körülményekhez.

A fotoellenállásokat meglehetősen aktívan használják sokféle rendszerben. A leggyakoribb alkalmazás az utcai világítás. Ha éjszaka esik a városra vagy felhős lesz, a lámpák automatikusan felkapcsolnak. Nem ütemezés szerint, hanem a világítástól függően bekapcsolódó fotoellenállásból gazdaságos izzót készíthet otthonába. Fényérzékelő alapján akár készíthet is biztonsági rendszer, amely azonnal működésbe lép egy zárt szekrény vagy széf kinyitása és megvilágítása után. Mint mindig, az Arduino érzékelők alkalmazási körének csak a képzeletünk szab határt.

Milyen fotoellenállásokat lehet vásárolni az online áruházakban

A piacon a legnépszerűbb és legolcsóbb szenzoropció a kínai vállalatok sorozatgyártású modelljei, a VT gyártó termékeinek klónjai. Nem mindig lehet kitalálni, hogy ez vagy az a beszállító pontosan ki és mit gyárt, de a fotoellenállások használatának megkezdéséhez a legegyszerűbb lehetőség eléggé megfelelő.

A kezdő Arduino felhasználónak azt tanácsolhatjuk, hogy vásároljon egy kész fotómodult, amely így néz ki:


Ez a modul már rendelkezik minden szükséges elemmel ahhoz, hogy könnyen csatlakoztasson egy fotoellenállást az Arduino kártyához. Egyes modulok komparátor áramkört valósítanak meg, és digitális kimenetet és trim ellenállást biztosítanak a vezérléshez.

Egy orosz rádióamatőrnek azt tanácsolhatjuk, hogy forduljon az orosz PA érzékelőhöz. Eladók az FR1-3, FR1-4 stb. - még a szovjet időkben gyártották. De ennek ellenére az FR1-3 pontosabb részlet. Ebből következik az árkülönbség.FR-ért legfeljebb 400 rubelt kérnek. Az FR1-3 darabonként több mint ezer rubelbe kerül.

Fotoellenállás jelölés

Az Oroszországban gyártott modellek modern címkézése meglehetősen egyszerű. Az első két betű a PhotoResistor, a kötőjel utáni számok a fejlesztési számot jelzik. FR -765 - fotoellenállás, fejlesztés 765. Általában közvetlenül az alkatrész testére van jelölve

A VT érzékelő ellenállási tartománya a jelölési diagramon látható. Például:

  • VT83N1 - 12-100 kOhm (12K – megvilágított, 100K – sötétben)
  • VT93N2 - 48-500 kOhm (48K – megvilágított, 100K – sötétben).

Néha a modellekkel kapcsolatos információk tisztázása érdekében az eladó egy speciális dokumentumot biztosít a gyártótól. Az üzemi paraméterek mellett ott van feltüntetve az alkatrész pontossága is. Minden modellnek van egy érzékenységi tartománya a spektrum látható részén. Gyűjtő fényérzékelő Meg kell értenie, hogy a művelet pontossága relatív fogalom. Még az ugyanazon gyártótól, azonos tételből vagy vásárlásból származó modellek esetében is 50%-kal vagy még ennél is nagyobb eltérés lehet.

Gyárilag az alkatrészeket a vöröstől a zöld fényig terjedő hullámhosszra hangolják. A többség „lát” és infravörös sugárzás. A különösen precíz alkatrészek még az ultraibolya fényt is képesek érzékelni.

Az érzékelő előnyei és hátrányai

A fotoellenállások fő hátránya a spektrumérzékenység. A beeső fény típusától függően az ellenállás több nagyságrenddel is változhat. A hátrányok közé tartozik még alacsony sebesség reakciók a megvilágítás változásaira. Ha a lámpa villog, az érzékelőnek nincs ideje reagálni. Ha a változás gyakorisága meglehetősen magas, az ellenállás általában nem látja, hogy a megvilágítás változik.

Az előnyök közé tartozik az egyszerűség és a hozzáférhetőség. Az ellenállás közvetlen megváltoztatása a ráeső fény függvényében lehetővé teszi az egyszerűsítést elektromos diagram kapcsolatokat. Maga a fotoellenállás nagyon olcsó, számos Arduino készletben és konstruktorban megtalálható, ezért szinte minden kezdő Arduino gyártó számára elérhető.

Fotoellenállás csatlakoztatása Arduinohoz

Projektekben arduino A fotoellenállást fényérzékelőként használják. Az információ fogadásával a kártya be- és kikapcsolhatja a reléket, elindíthatja a motorokat és üzeneteket küldhet. Természetesen az érzékelőt helyesen kell csatlakoztatnunk.

A fényérzékelő csatlakozási rajza az Arduino-hoz meglehetősen egyszerű. Ha fotoellenállást használunk, akkor a kapcsolási rajzon az érzékelő feszültségosztóként van megvalósítva. Az egyik kar a megvilágítási szinttől függően változik, a második pedig feszültséget lát el az analóg bemeneten. A vezérlő chipben ezt a feszültséget egy ADC-n keresztül digitális adatokká alakítják. Mert Ha az érzékelő ellenállása csökken, amikor fény éri, a rajta eső feszültség értéke is csökken.

Attól függően, hogy az osztó melyik karjába helyeztük a fotoellenállást, az analóg bemenetre emelt vagy csökkentett feszültség kerül. Ha a fotoellenállás egyik lába a földre van kötve, akkor a maximális feszültségérték a sötétségnek felel meg (a fotoellenállás ellenállása maximális, szinte az összes feszültség esik rajta), a minimális érték pedig a jó megvilágításnak (az ellenállás közel nulla, a feszültség minimális). Ha a fotoellenállás kart csatlakoztatjuk a tápegységhez, akkor a viselkedés az ellenkezője lesz.

Maga a tábla felszerelése nem okozhat nehézséget. Mivel a fotoellenállásnak nincs polaritása, mindkét oldalról csatlakoztatható, a lapra forrasztható, áramköri lap segítségével vezetékekkel csatlakoztatható, vagy hagyományos kapcsokkal (krokodilkapcsokkal) használható a csatlakoztatáshoz. Az áramkör áramforrása maga az Arduino. Fotoellenállás az egyik láb a földhöz csatlakozik, a másik az ADC kártyához (példánkban - AO). Egy 10 kOhm-os ellenállást csatlakoztatunk ugyanahhoz a lábhoz. Természetesen nem csak az A0 analóg érintkezőhöz csatlakoztathat fotoellenállást, hanem bármely másikhoz is.

Néhány szó a további 10 K ellenállásról, amelynek két funkciója van az áramkörünkben: korlátozza az áramkörben lévő áramot és formál szükséges feszültség osztóval ellátott áramkörben. Áramkorlátozásra van szükség olyan helyzetben, amikor egy teljesen megvilágított fotoellenállás élesen csökkenti az ellenállását. A feszültséggenerálás pedig az analóg porton előre látható értékekre szolgál. Valójában a fotoellenállásainkkal való normál működéshez 1K ellenállás is elegendő.

Az ellenállás értékének változtatásával az érzékenységi szintet a „sötét” és a „világos” oldalra tudjuk „eltolni”. Tehát 10 K ad gyors váltás a fény kezdete. 1K esetén a fényérzékelő pontosabban határozza meg magas szint megvilágítás

Ha kész fényérzékelő modult használ, a csatlakoztatás még egyszerűbb lesz. A VCC modul kimenetét a kártya 5V-os csatlakozójára, a GND-t a földre kötjük. A fennmaradó érintkezőket az Arduino csatlakozókhoz csatlakoztatjuk.

Ha a kártyának van digitális kimenete, akkor azt digitális tűkre küldjük. Ha analóg, akkor menjen az analógra. Az első esetben triggerjelet kapunk - a megvilágítási szintet túllépték (a trigger küszöbértéket beállító ellenállással lehet beállítani). Az analóg tűkből a tényleges megvilágítási szinttel arányos feszültségértéket kaphatunk.

Példavázlat egy fényérzékelőről egy fotoellenálláson

Csatlakoztattuk az áramkört a fotoellenállással az Arduino-hoz, és megbizonyosodtunk arról, hogy minden megfelelően történt. Most már csak a vezérlő programozása van hátra.

A fényérzékelő vázlatának megírása meglehetősen egyszerű. Csak az aktuális feszültség értékét kell eltávolítanunk arról az analóg érintkezőről, amelyhez az érzékelő csatlakoztatva van. Ez az általunk ismert analogRead() függvény segítségével történik. Ezután a fényerőtől függően néhány műveletet végrehajthatunk.

Írjunk vázlatot egy fényérzékelőhöz, amely a következő áramkör szerint kapcsolja be vagy ki a LED-et.

A működési algoritmus a következő:

  • Határozza meg az analóg láb jelszintjét.
  • Összehasonlítjuk a szintet a küszöbértékkel. A maximális érték a sötétségnek, a minimális érték a maximális megvilágításnak felel meg. Válasszunk egy 300-zal egyenlő küszöbértéket.
  • Ha a szint alacsonyabb, mint a küszöb, sötét van, be kell kapcsolnia a LED-et.
  • Ellenkező esetben kapcsolja ki a LED-et.
#define PIN_LED 13 #define PIN_PHOTO_SENSOR A0 void setup() ( Serial.begin(9600); pinMode(PIN_LED, OUTPUT); ) void loop() ( int val = analógRead(PIN_PHOTO_SENSOR); Serial.println(val); if ( val< 300) { digitalWrite(PIN_LED, LOW); } else { digitalWrite(PIN_LED, HIGH); } }

A fotoellenállást letakarva (kézzel vagy fényálló tárggyal) megfigyelhetjük a LED be- és kikapcsolását. A kódban a küszöb paraméter megváltoztatásával kényszeríthetjük az izzót, hogy ki/be kapcsoljon, amikor különböző szinteken világítás.

Telepítéskor próbálja meg a fotoellenállást és a LED-et a lehető legtávolabb elhelyezni egymástól, hogy a fényes LED-ből kevesebb fény essen a fényérzékelőre.

Fényérzékelő és egyenletes változás a háttérvilágítás fényerejében

Módosíthatja a projektet úgy, hogy a LED fényereje a megvilágítás szintjétől függően változzon. A következő változtatásokat adjuk hozzá az algoritmushoz:

  • A villanykörte fényerejét PWM-en keresztül változtatjuk, 0-tól 255-ig terjedő értékeket küldve a LED-del ellátott lábra az AnaWrite() segítségével.
  • Ahhoz, hogy a fényérzékelő fényszintjének digitális értékét (0-tól 1023-ig) a LED fényerő PWM tartományába (0-tól 255-ig) konvertáljuk, a map() függvényt használjuk.

Vázlat példa:

#define PIN_LED 10 #define PIN_PHOTO_SENSOR A0 void setup() ( Serial.begin(9600); pinMode(PIN_LED, OUTPUT); ) void loop() ( int val = analógRead(PIN_PHOTO_SENSOR); Serial.println(val); int ledPower = map(val, 0, 1023, 0, 255); // A kapott értéket konvertálja a PWM jelszintre. Minél alacsonyabb a megvilágítási érték, annál kevesebb energiát kell a LED-nek szolgáltatnunk PWM-en keresztül. analogWrite(PIN_LED, ledPower) // Fényerő módosítása)

Más csatlakozási mód esetén, amelyben az analóg portról érkező jel arányos a megvilágítás mértékével, az értéket a maximumból kivonva még „vissza kell fordítania”:

Int érték = 1023 – analógRead(PIN_PHOTO_RESISTOR);

Fényérzékelő áramkör fotoellenállás és relé segítségével

A relékkel végzett munka vázlatainak példáit az Arduino relék programozásáról szóló cikk tartalmazza. Ebben az esetben nem kell bonyolult mozdulatokat tennünk: a „sötétség” meghatározása után egyszerűen bekapcsoljuk a relét, és a megfelelő értéket alkalmazzuk a tűjére.

#define PIN_RELAY 10 #define PIN_PHOTO_SENSOR A0 void setup() ( pinMode(PIN_RELAY, OUTPUT); digitalWrite(PIN_RELAY, HIGH); ) void loop() ( int val = analógRead(PIN_PHOTO_SENSOR); if (érték< 300) { // Светло, выключаем реле digitalWrite(PIN_RELAY, HIGH); } else { // Темновато, включаем лампочку digitalWrite(PIN_RELAY, LOW); } }

Következtetés

A fotoellenálláson alapuló fényérzékelőt használó projektek meglehetősen egyszerűek és hatékonyak. Sok érdekes projektet hajthat végre, és a felszerelés költsége nem lesz magas. A fotoellenállás egy további ellenállású feszültségosztó áramkörrel van csatlakoztatva. A szenzor egy analóg portra csatlakozik a különböző fényszintek mérésére, vagy egy digitális portra, ha csak a sötétség ténye érdekel. A vázlatban egyszerűen kiolvassuk az adatokat egy analóg (vagy digitális) portról, és eldöntjük, hogyan reagáljunk a változásokra. Reméljük, hogy most ilyen egyszerű „szemek” jelennek meg a projektjeiben.

Következő projektünkhöz fotoellenállást fogunk használni. És megfontoljuk egy éjszakai lámpa megvalósítását a hálószobában, amely automatikusan bekapcsol, amikor sötét van, és kikapcsol, amikor világos lesz.

A fotoellenállás ellenállása a rá eső fénytől függ. Fotoellenállás használata együtt normál ellenállás 4,7 kOhm, kapunk egy feszültségosztót, amelyben a fényerőtől függően változik a fotoellenálláson áthaladó feszültség.

Az osztó feszültségét az Arduino ADC bemenetére kapcsoljuk. Ott összehasonlítjuk a kapott értéket egy bizonyos küszöbértékkel, és be- vagy kikapcsoljuk a lámpát.

Az elosztó kapcsolási rajza az alábbiakban látható. Ha a megvilágítás növekszik, a fotoellenállás ellenállása csökken, és ennek megfelelően az osztó kimenetén (és az ADC bemenetén) nő a feszültség. Amikor a megvilágítás csökken, minden fordítva történik.

Az alábbi fotó mutatja összeszerelt áramkör a kenyérdeszkán. A 0V és 5V feszültségek az Arduino-tól származnak. Az A0 tűt ADC bemenetként használják.

Az alábbiakban egy Arduino vázlat látható. Ebben az oktatóanyagban egyszerűen be- és kikapcsoljuk az Arduino kártyába épített LED-et. A 13-as lábhoz egy világosabb LED-et csatlakoztathat (~220 ohmos ellenálláson keresztül). Ha erősebb terhelést, például izzólámpát csatlakoztat, akkor azt relén vagy tirisztoron keresztül kell csatlakoztatni.

A programkódban vannak kommentált részek, ezek a hibakeresésre szolgálnak. Lehetőség lesz az ADC értékének szabályozására (0 és 1024 között). Ezenkívül meg kell változtatnia a kódban szereplő 500-as értéket (be- és kikapcsolási küszöb) arra az értékre, amelyet kísérletileg választott ki a megvilágítás megváltoztatásával.

/* ** Éjszakai fény ** ** www.hobbytronics.co.uk */ int sensorPin = A0; // az ADC bemeneti lábának beállítása előjel nélküli int sensorValue = 0; // digitális érték photoresistor void setup() ( pinMode(13, OUTPUT); Serial.begin(9600); // soros adatkimenet indítása (tesztelés céljából) ) void loop() ( sensorValue = analogRead(sensorPin); // olvassa ki az értéket a fotoellenállás if (sensorValue<500) digitalWrite(13, HIGH); // включаем else digitalWrite(13, LOW); // выключаем // Для отладки раскомментируйте нижеследующие строки //Serial.print(sensorValue, DEC); // вывод данных с фоторезистора (0-1024) //Serial.println(""); // возврат каретки //delay(500); }