Nočné svetlo zo starej žiarovky, založené na Arduino a WS2812. Úlohy na samostatné riešenie

Asi každý mal v detstve nejaký sen (a nejeden). Môžete si dokonca skúsiť spomenúť na pocit, ktorý napĺňa detskú dušu, keď sa mu splní sen, alebo na tú vzdialenú, známu iskru v jeho očiach... Ako dieťa som sníval o vlastnom nočnom svetielku.

Teraz som študentom 4. ročníka na BSUIR, a keď nám povedali, že projekt kurzu v dizajne obvodov sa dá urobiť nie na papieri, ale na kuse hardvéru, došlo mi: nočné svetlo, ktoré som si tak želal ako dieťa môžem urobiť sám. Navyše nevyrobte len predmet, ktorý osvetlí miestnosť v tme, ale aj zariadenie, ktoré možno ľahko ovládať tak, aby vyhovovalo akejkoľvek nálade. Prečo nie? Rozhodol som sa pridať možnosť meniť farby pomocou rúk: čím bližšie je moja ruka k nočnému svetlu, tým jasnejšia sa rozsvieti jedna z farieb (RGB). Tiež by som chcel ovládať nočné svetlo pomocou diaľkového ovládača.

Hneď sa priznám, že nápad som si všimol na webovej stránke cxem.net. Stručne povedané, tento príklad používal maticu RGB, ktorá bola riadená pomocou posuvných registrov a ultrazvukových snímačov vzdialenosti. Ja som si ale myslel, že matrix svieti len jedným smerom, no chcel som, aby nočné svetlo svietilo do strán.

Zdôvodnenie prvkov obvodu


Svoju pozornosť som obrátil na mikrokontroléry Arduino. UNO je pre moju predstavu celkom vhodná možnosť, jednak preto, že je to najpopulárnejšia platforma a počet pinov nie je na rozdiel od Mega príliš veľký a jednak sa k nemu dá pripojiť externý zdroj napájania, v mojom prípade je to 12V , na rozdiel od Nano, po tretie... no, myslím, že sa môžeme zastaviť pri týchto dvoch bodoch. Platforma je mimoriadne populárna na celom svete vďaka pohodliu a jednoduchosti programovacieho jazyka, ako aj otvorenej architektúre a programovému kódu.

Viac detailné informácie Informácie o tejto doske môžete ľahko nájsť na internete, takže článok nebudem preťažovať.

Takže základné požiadavky na systém. Požadovaný:
– senzory, ktoré budú sledovať vzdialenosť k prekážke na ovládanie systému;
– snímač na čítanie signálov z diaľkového ovládača diaľkové ovládanie;
– LED diódy, ktoré zabezpečia potrebnú funkčnosť osvetlenia;
– riadiaca jednotka, ktorá bude riadiť celý systém.

Projekt vyžaduje diaľkomery ako snímače vzdialenosti, z ktorých každý bude zodpovedať konkrétnej farbe: červenej, zelenej, modrej. Snímače vzdialenosti budú sledovať vzdialenosť ruky k nočnému svetlu a čím bližšie sa ruka priblíži k určitému senzoru, tým silnejšie sa rozsvieti farba zodpovedajúca tomuto diaľkomeru. Naopak, čím ďalej je ručička, tým menšie napätie sa aplikuje na farbu zodpovedajúcu senzoru.

Najpopulárnejšie diaľkomery na tento moment sú to Sharp GP2Y0A21YK a HC-SR04. Sharp GP2Y0A21YK je infračervený diaľkomer. Je vybavený IR žiaričom a IR prijímačom: prvý slúži ako zdroj lúča, ktorého odraz zachytáva druhý. Zároveň sú IR lúče snímača pre ľudské oko neviditeľné a pri takejto intenzite sú neškodné.

V porovnaní s ultrazvukovým snímačom HC-SR04 má tento snímač výhody aj nevýhody. Medzi výhody patrí neutralita a nezávadnosť. Nevýhodou je kratší dosah a závislosť od vonkajšieho rušenia vrátane niektorých typov osvetlenia.

Používané ako snímače vzdialenosti pre projekt: ultrazvukové diaľkomery HC-SR04.
Princíp činnosti HC-SR04 je založený na známom fenoméne echolokácie. Pri jeho použití vysielač generuje akustický signál, ktorý sa po odraze od prekážky vracia späť k senzoru a prijímač ho zaregistruje. Pri znalosti rýchlosti šírenia ultrazvuku vo vzduchu (približne 340 m/s) a času oneskorenia medzi vysielaným a prijímaným signálom je ľahké vypočítať vzdialenosť k akustickej bariére.

Vstup TRIG sa pripája k akémukoľvek kolíku mikrokontroléra. Na tento kolík musí byť aplikovaný impulz. digitálny signál trvanie 10 μs. Na základe signálu na vstupe TRIG snímač vyšle balík ultrazvukových impulzov. Po prijatí odrazeného signálu generuje snímač impulzný signál na pin ECHO, ktorého trvanie je úmerné vzdialenosti od prekážky.

IR senzor. Z tohto snímača bude samozrejme načítaný a dekódovaný signál potrebný pre diaľkové ovládanie. TSOP18 sa od seba líšia iba frekvenciou. Pre projekt bol vybraný snímač VS1838B TSOP1838.

Projekt bol založený na myšlienke osvetlenia miestnosti v akejkoľvek farbe, čo znamená, že budete potrebovať 3 základné farby, z ktorých bude osvetlenie získané: červená, zelená, modrá. Preto bol zvolený model SMD 5050RGB LED, ktorý sa s úlohou dokonale vyrovná.

V závislosti od množstva napätia dodávaného do každej LED diódy budú meniť intenzitu tohto osvetlenia. LED musí byť pripojená cez odpor, inak riskujeme, že zničíme nielen ju, ale aj Arduino. Rezistor je potrebný na obmedzenie prúdu na LED na prijateľnú hodnotu. Faktom je, že vnútorný odpor LED je veľmi nízky a ak nepoužijete rezistor, cez LED bude prechádzať taký prúd, že jednoducho vyhorí LED aj ovládač.

LED pásy použité v projekte sú napájané 12V.

Vzhľadom na to, že napätie na LED v stave “vypnuté” je 6V a je potrebné regulovať napájanie, ktoré presahuje 5V, je potrebné v spínacom režime doplniť obvod o tranzistory. Moja voľba padla na model BC547c.

Pre tých, ktorí zabudli, stručne zvážime princíp fungovania npn tranzistor. Ak vôbec nepripojíte napätie, ale jednoducho skratujete svorky základne a emitora, aj keď nie, ale cez odpor niekoľkých ohmov, ukáže sa, že napätie medzi základňou a emitorom je nulové. V dôsledku toho neexistuje žiadny základný prúd. Tranzistor je uzavretý, kolektorový prúd je zanedbateľne malý, len rovnaký počiatočný prúd. V tomto prípade sa hovorí, že tranzistor je v stave odpojenia. Opačný stav sa nazýva saturácia: keď je tranzistor úplne otvorený, takže už nie je kam ďalej otvárať. S týmto stupňom otvorenia je odpor sekcie kolektor-emitor taký nízky, že je jednoducho nemožné zapnúť tranzistor bez zaťaženia v kolektorovom obvode, okamžite vyhorí. V tomto prípade môže byť zvyškové napätie na kolektore len 0,3...0,5V.

Tieto dva stavy, nasýtenie a vypnutie, sa používajú, keď tranzistor pracuje v spínacom režime, ako bežný reléový kontakt. Hlavným významom tohto režimu je, že malý základný prúd riadi veľký kolektorový prúd, ktorý je niekoľko desiatok krát väčší ako základný prúd. Veľký kolektorový prúd sa získa vďaka externý zdroj energie, no aj tak je aktuálny zisk, ako sa hovorí, zjavný. V našom prípade mikroobvod, ktorého prevádzkové napätie je 5V, obsahuje 3 pásiky s LED diódami pracujúcimi od 12V.

Vypočítajme prevádzkový režim kľúčovej kaskády. Je potrebné vypočítať hodnotu odporu v základnom obvode, aby LED svietili na plný výkon. Nevyhnutnou podmienkou pri výpočte je, aby prúdový zisk bol väčší alebo rovný podielu delenia maximálneho možného kolektorového prúdu minimálnym možným základným prúdom:

Preto môžu mať prúžky prevádzkové napätie 220 V a základný obvod možno ovládať z mikroobvodu s napätím 5 V. Ak je tranzistor navrhnutý tak, aby pracoval s takýmto napätím na kolektore, LED diódy budú svietiť bez problémov.
Pokles napätia na prechode báza-emitor je 0,77V za predpokladu, že základný prúd je 5mA a kolektorový prúd je 0,1A.
Napätie na základnom rezistore bude:

Podľa Ohmovho zákona:

Zo štandardného rozsahu odporov vyberáme odpor 8,2 kOhm. Tým je výpočet dokončený.

Chcel by som vás upozorniť na jeden problém, s ktorým som sa stretol. Pri použití knižnice IRremote Arduino pri úprave modrej farby zamrzlo. Po dlhom a dôkladnom hľadaní na internete sa ukázalo, že táto knižnica štandardne používa Timer 2 pre tento model Arduino. Časovače sa používajú na ovládanie PWM výstupov.

Časovač 0 (systémový čas, PWM 5 a 6);
časovač 1 (PWM 9 a 10);
Časovač 2 (PWM 3 a 11).

Na reguláciu modrej farby som spočiatku používal PWM 11. Preto buďte opatrní pri práci s PWM, časovačmi a knižnicami tretích strán, ktoré ich môžu používať. To je zvláštne domovskej stránke O tejto nuancii na Github nebolo nič povedané. Ak chcete, môžete odkomentovať riadok pomocou časovača 1 a komentovať 2.

Spojenie prvkov na doštičke vyzerá takto:

Po testovaní na doske sa začali fázy „Umiestňovanie prvkov na dosku“ a „Práca so spájkovačkou“. Po prvom testovaní hotovej dosky sa mi vkradne do hlavy myšlienka: niečo sa pokazilo. A tu začína fáza, ktorá je mnohým známa, „Náročná práca s testerom“. Problémy (niekoľko susedných kontaktov bolo náhodne zletených dohromady) sa však rýchlo odstránili a tu je dlho očakávané zlomyseľné svetlo LED.

Potom to už bola len záležitosť tela. Z tohto dôvodu bola vyrezaná preglejka s otvormi pre naše senzory. Zadný kryt bol vyrobený špeciálne odnímateľný, aby ste si mohli vychutnať pohľad zvnútra a na želanie niečo dokončiť alebo prerobiť. Má tiež 2 otvory na preprogramovanie dosky a zdroja.

Karoséria bola lepená dvojzložkovým epoxidovým lepidlom. Za zmienku stojí zvláštnosť tohto lepidla pre tých, ktorí sa s ním predtým nestretli. Tento produkt sa dodáva v dvoch samostatných nádobách a keď sa obsah zmieša, dôjde k okamžitej chemickej reakcii. Po zmiešaní musíte konať rýchlo, do 3-4 minút. Pre ďalšie použitie je potrebné namiešať novú porciu. Takže ak sa to pokúšate zopakovať, moja rada pre vás je miešať v malých dávkach a konať veľmi rýchlo, nebude veľa času na premýšľanie. Preto stojí za to vopred premýšľať o tom, ako a kde lepiť telo. Navyše sa to nedá urobiť na jedno posedenie.

Na montáž pásikov s LED diódami Horný kryt bola vložená trubica, cez ktorú dokonale prešli všetky drôty.

Keď sa objavil problém s tienidlom, spomenul som si, ako som ako dieťa vyrábal remeslá z jednoduchej nite, lepidla a balóna, ktorý slúžil ako základ. Princíp tienidla je rovnaký, ale balenie mnohostenu sa ukázalo byť náročnejšie ako guľa. Vplyvom tlaku, ktorý nite vyvíjali na konštrukciu, sa začala smerom nahor zužovať a nite začali vypadávať. Naliehavo, s rukami pokrytými lepidlom, bolo rozhodnuté posilniť štruktúru zhora. A potom prišlo na pomoc CD. Konečným výsledkom je toto nočné svetlo:

Čo by ste chceli povedať na záver?

Čo by som mal v projekte zmeniť? Na dodanie signálu TRIG do senzorov vzdialenosti je možné použiť jeden výstup Arduino namiesto troch. Ešte by som zaobstaral otvor pre IR senzor (na ktorý som zabudol), ktorý je, žiaľ, stále skrytý v púzdre, z ktorého, prirodzene, nevie čítať signály z diaľkového ovládača. Kto však povedal, že nemôžete nič spájkovať ani vŕtať?

Chcel by som poznamenať, že to bol zaujímavý semester a skvelá príležitosť vyskúšať si niečo, čo nie je na papieri, vďaka čomu môžem pri položke „detský sen“ zaškrtnúť. A ak si myslíte, že vyskúšať niečo nové je ťažké a neviete, čo robiť skôr, nezúfajte. Mnohým ľuďom behá v hlave myšlienka: kde začať a ako sa to dá vôbec urobiť? V živote je veľa úloh, z ktorých sa môžete zmiasť, ale keď to skúsite, všimnete si, že so zábleskom v očiach dokážete hory prenášať, aj keď sa o to musíte trochu snažiť.

Pre dodatočnú úlohu

    1 ďalšia LED

    1 ďalší odpor s nominálnou hodnotou 220 Ohmov

    2 ďalšie drôty

Schematický diagram

Schéma na doske

Poznámka

    V tomto experimente inštalujeme fotorezistor medzi napájací zdroj a analógový vstup, t.j. do polohy R1 v obvode deliča napätia. Potrebujeme to, aby pri poklese osvetlenia dostávali na analógovom vstupe menšie napätie.

    Pokúste sa umiestniť komponenty tak, aby LED neosvetľovala fotorezistor.

Skica

p050_night_light.ino #define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 void setup() ( pinMode(LED_PIN, OUTPUT) ; ) void loop() ( // prečítať úroveň osvetlenia. Mimochodom, oznamte // môžete jej priradiť premennú aj hodnotu naraz int svetlost = analogRead(LDR_PIN) ; // odčítame hodnotu z potenciometra, ktorým regulujeme // prahová hodnota medzi podmienenou tmou a svetlom int prah = analogRead(POT_PIN) ; // deklarujeme boolovskú premennú a priradíme jej hodnotu // "Je teraz tma." Booleovské premenné, na rozdiel od // celé čísla, môže obsahovať iba jednu z dvoch hodnôt: // pravda alebo lož. Takéto hodnoty // nazývaný aj boolean. boolean tooDark = (ľahkosť< threshold) ; // použite vetvenie programu: procesor vykoná jeden z // dva bloky kódu v závislosti od vykonania podmienky. // Ak je (anglicky „if“) príliš tmavé... ak (príliš tmavé) ( // ...zapni osvetlenie digitalWrite(LED_PIN, HIGH) ; ) inak ( // ...inak svetlo netreba - vypnite ho digitalWrite(LED_PIN, LOW) ; ))

Vysvetlenia pre kód

    Používame nový typ premennej - boolean, ktorý ukladá iba hodnoty true (true, 1) alebo false (false, 0). Tieto hodnoty sú výsledkom vyhodnotenia boolovských výrazov. V tomto príklade je boolovský výraz ľahkosť< threshold . На человеческом языке это звучит как: «освещенность ниже порогового уровня». Такое высказывание будет истинным, когда освещенность ниже порогового уровня. Микроконтроллер может сравнить значения переменных lightness и threshold , которые, в свою очередь, являются результатами измерений, и вычислить истинность логического выражения.

    Tento logický výraz uvádzame do zátvoriek len kvôli prehľadnosti. Vždy je lepšie napísať čitateľný kód. V iných prípadoch môžu zátvorky ovplyvniť poradie operácií, ako pri bežnej aritmetike.

    V našom experimente bude boolovský výraz pravdivý, keď je hodnota svetlosti menšia ako prahová hodnota, pretože sme použili operátor< . Мы можем использовать операторы > , <= , >= , == , != , čo znamená „väčšie ako“, „menšie ako alebo rovné“, „väčšie alebo rovné“, „rovná sa“, „nerovná sa“, v uvedenom poradí.

    Pozor si dajte najmä na logický operátor == a nezamieňajte si ho s operátorom priradenia = . V prvom prípade porovnáme hodnoty výrazov a získame logickú hodnotu (pravda alebo nepravda) a v druhom prípade priradíme hodnotu pravého operandu ľavému operandu. Kompilátor nepozná naše zámery a nevydá chybu, ale môžeme náhodne zmeniť hodnotu nejakej premennej a potom dlho hľadať chybu.

    Podmienený príkaz if je jedným z kľúčových vo väčšine programovacích jazykov. S jeho pomocou môžeme vykonávať nielen presne definovanú postupnosť akcií, ale aj rozhodovať o tom, ktorú vetvu algoritmu nasledovať, v závislosti od určitých podmienok.

    Logický výraz ľahkosť< threshold есть значение: true или false . Мы вычислили его и поместили в булеву переменную tooDark («слишком темно»). Таким образом мы как бы говорим «если слишком темно, то включить светодиод»

    S rovnakým úspechom by sme mohli povedať „ak je osvetlenie nižšie ako prahová úroveň, zapnite LED“, t.j. odovzdať celý logický výraz, ak:

ak (ľahkosť< threshold) { // ... }

    vzadu podmienený operátor ak nevyhnutne nasleduje blok kódu, ktorý sa vykoná, ak je logický výraz pravdivý. Nezabudnite na obe kučeravé zátvorky ()!

    Ak, ak je výraz pravdivý, stačí vykonať jeden pokyn, možno ho napísať hneď za ak (...) bez kučeravé zátvorky:

ak (ľahkosť< threshold) digitalWrite(LED_PIN, HIGH) ;

    Príkaz if možno rozšíriť o konštrukt else. Blok kódu alebo jeden príkaz, ktorý za ním nasleduje, sa vykoná len vtedy, ak sa booleovský výraz v if vyhodnotí ako nepravda. Pravidlá týkajúce sa kučeravých zátvoriek sú rovnaké. V našom experimente sme napísali "ak je príliš tma, zapnite LED, inak vypnite LED."

Svetelné senzory (osvetlenie), postavené na báze fotorezistorov, sa pomerne často používajú v skutočných Arduino projektoch. Sú pomerne jednoduché, nie drahé a dajú sa ľahko nájsť a kúpiť v akomkoľvek internetovom obchode. Fotorezistor Arduino umožňuje ovládať úroveň osvetlenia a reagovať na jeho zmeny. V tomto článku sa pozrieme na to, čo je fotorezistor, ako funguje svetelný senzor na ňom založený a ako správne pripojiť senzor k doskám Arduino.

Fotorezistor, ako už názov napovedá, priamo súvisí s odpormi, ktoré sa často nachádzajú v takmer akomkoľvek elektronickom obvode. Hlavnou charakteristikou konvenčného odporu je hodnota jeho odporu. Od toho závisí napätie a prúd, pomocou rezistora nastavíme požadované prevádzkové režimy ostatných komponentov. Hodnota odporu rezistora sa spravidla za rovnakých prevádzkových podmienok prakticky nemení.

Na rozdiel od bežného odporu, fotorezistor môže meniť svoj odpor v závislosti od úrovne okolitého svetla. To znamená, že v elektronický obvod Parametre sa budú neustále meniť, v prvom rade nás zaujíma pokles napätia na fotorezistore. Zaznamenaním týchto zmien napätia na analógových kolíkoch Arduina môžeme zmeniť logiku obvodu, čím vytvoríme zariadenia, ktoré sa prispôsobia vonkajším podmienkam.

Fotorezistory sa pomerne aktívne používajú v širokej škále systémov. Najbežnejšou aplikáciou je pouličné osvetlenie. Ak na mesto padne noc alebo sa zamračí, svetlá sa automaticky rozsvietia. Ekonomickú žiarovku pre domácnosť si môžete vyrobiť z fotorezistora, ktorý sa nezapína podľa plánu, ale v závislosti od osvetlenia. Môžete si dokonca vyrobiť bezpečnostný systém na báze svetelného senzora, ktorý sa spustí ihneď po otvorení a rozsvietení zatvorenej skrinky alebo trezoru. Ako vždy, rozsah použitia akýchkoľvek Arduino senzorov je obmedzený len našou predstavivosťou.

Aké fotorezistory je možné zakúpiť v internetových obchodoch

Najpopulárnejšie a cenovo dostupná možnosť senzory na trhu sú modely sériovej výroby od čínskych firiem, klony produktov od výrobcu VT. Nie je vždy možné zistiť, kto a čo presne vyrába tento alebo ten dodávateľ, ale na začiatok s fotorezistormi je najjednoduchšia možnosť celkom vhodná.

Začínajúcemu používateľovi Arduina možno odporučiť, aby si kúpil hotový fotografický modul, ktorý vyzerá takto:


Tento modul už obsahuje všetky potrebné prvky pre jednoduché pripojenie fotorezistor na dosku Arduino. Niektoré moduly implementujú komparačný obvod a poskytujú digitálny výstup a trimovací odpor na ovládanie.

Ruskému rádioamatérovi možno odporučiť, aby sa obrátil na ruský PA senzor. K dispozícii na predaj sú FR1-3, FR1-4 atď. - boli vyrobené ešte v sovietskych časoch. Ale napriek tomu je FR1-3 presnejší detail. Z toho vyplýva rozdiel v cene.Za FR si pýtajú nie viac ako 400 rubľov. FR1-3 bude stáť viac ako tisíc rubľov za kus.

Označenie fotorezistora

Moderné označovanie modelov vyrobených v Rusku je pomerne jednoduché. Prvé dve písmená sú PhotoResistor, čísla za pomlčkou označujú vývojové číslo. FR -765 - fotorezistor, vývoj 765. Zvyčajne značené priamo na tele dielu

Snímač VT má rozsah odporu uvedený v schéme označenia. Napríklad:

  • VT83N1 - 12-100kOhm (12K – osvetlené, 100K – v tme)
  • VT93N2 - 48-500kOhm (48K – osvetlené, 100K – v tme).

Niekedy na objasnenie informácií o modeloch predajca poskytuje špeciálny dokument od výrobcu. Okrem prevádzkových parametrov je tam uvedená aj presnosť dielu. Všetky modely majú rozsah citlivosti vo viditeľnej časti spektra. Zberateľstvo svetelný senzor Musíte pochopiť, že presnosť prevádzky je relatívny pojem. Dokonca aj v prípade modelov od rovnakého výrobcu, rovnakej šarže alebo rovnakého nákupu sa môže líšiť o 50 % alebo viac.

V továrni sú diely naladené na vlnové dĺžky od červeného po zelené svetlo. Väčšina ľudí tiež „vidí“ infračervené žiarenie. Obzvlášť presné časti dokážu rozpoznať aj ultrafialové svetlo.

Výhody a nevýhody snímača

Hlavnou nevýhodou fotorezistorov je spektrálna citlivosť. V závislosti od typu dopadajúceho svetla sa odpor môže meniť o niekoľko rádov. Medzi nevýhody patrí tiež pomalá rychlosť reakcie na zmeny osvetlenia. Ak kontrolka bliká, snímač nestihne zareagovať. Ak je frekvencia zmien dosť vysoká, rezistor vo všeobecnosti prestane „vidieť“, že sa osvetlenie mení.

Medzi výhody patrí jednoduchosť a dostupnosť. Priama zmena odporu v závislosti od dopadajúceho svetla vám umožňuje zjednodušiť elektrická schéma spojenia. Samotný fotorezistor je veľmi lacný, je súčasťou mnohých súprav a konštruktérov Arduino, a preto je dostupný takmer každému začínajúcemu výrobcovi Arduina.

Pripojenie fotorezistora k Arduinu

V projektoch arduino Fotorezistor sa používa ako svetelný senzor. Na základe informácií z nej môže doska zapínať alebo vypínať relé, spúšťať motory a odosielať správy. Prirodzene, snímač musíme správne pripojiť.

Schéma pripojenia svetelného senzora k Arduinu je pomerne jednoduchá. Ak použijeme fotorezistor, tak v schéme zapojenia je snímač implementovaný ako delič napätia. Jedno rameno sa mení v závislosti od úrovne osvetlenia, druhé dodáva napätie na analógový vstup. V čipe regulátora sa toto napätie prevádza na digitálne dáta cez ADC. Pretože Keď sa odpor snímača pri dopade svetla zníži, zníži sa aj hodnota napätia, ktoré naň dopadne.

V závislosti od toho, do ktorého ramena deliča sme umiestnili fotorezistor, bude na analógový vstup privedené buď zvýšené alebo znížené napätie. Ak je jedna noha fotorezistora pripojená k zemi, potom maximálna hodnota napätia bude zodpovedať tme (odpor fotorezistora je maximálny, takmer všetko napätie na ňom klesne) a minimálna hodnota bude zodpovedať dobrému osvetleniu (odpor je blízko nule, napätie je minimálne). Ak pripojíme rameno fotorezistora k zdroju, správanie bude opačné.

Inštalácia samotnej dosky by nemala spôsobovať žiadne ťažkosti. Keďže fotorezistor nemá žiadnu polaritu, môže byť pripojený z ktorejkoľvek strany, môže byť prispájkovaný k doske, prepojený vodičmi pomocou dosky plošných spojov, alebo použiť na pripojenie s obyčajnými sponami (krokosvorkami). Zdrojom energie v obvode je samotné Arduino. Fotorezistor jedna noha je pripojená k zemi, druhá je pripojená k doske ADC (v našom príklade - AO). K tej istej nohe pripojíme odpor 10 kOhm. Prirodzene, môžete pripojiť fotorezistor nielen k analógovému kolíku A0, ale aj k akémukoľvek inému.

Niekoľko slov o prídavnom odpore 10 K. V našom obvode má dve funkcie: obmedzenie prúdu v obvode a tvarovanie požadované napätie v obvode s deličom. Obmedzenie prúdu je nevyhnutné v situácii, keď plne osvetlený fotorezistor prudko znižuje svoj odpor. A generovanie napätia je pre predvídateľné hodnoty na analógovom porte. Vlastne za normálna operácia Pri našich fotorezistoroch stačí odpor 1K.

Zmenou hodnoty odporu môžeme „posunúť“ úroveň citlivosti na „tmavú“ a „svetlú“ stranu. Takže 10 K dá rýchle prepínanie nástup svetla. V prípade 1K bude svetelný senzor presnejšie detekovať vysokú úroveň osvetlenia.

Ak používate pripravený modul svetelný senzor, potom bude pripojenie ešte jednoduchšie. Výstup modulu VCC pripojíme na 5V konektor na doske, GND na zem. Zvyšné piny pripojíme ku konektorom Arduino.

Ak má doska digitálny výstup, tak ho posielame na digitálne piny. Ak je analógový, prejdite na analógový. V prvom prípade dostaneme spúšťací signál - bola prekročená úroveň osvetlenia (prah spúšťania je možné nastaviť pomocou nastavovacieho odporu). Z analógových kolíkov budeme schopní získať hodnotu napätia úmernú skutočnej úrovni osvetlenia.

Príklad náčrtu svetelného senzora na fotorezistore

Obvod s fotorezistorom sme pripojili k Arduinu a ubezpečili sme sa, že je všetko urobené správne. Teraz zostáva už len naprogramovať ovládač.

Napísanie náčrtu pre svetelný senzor je celkom jednoduché. Potrebujeme iba odstrániť aktuálnu hodnotu napätia z analógového kolíka, ku ktorému je pripojený snímač. To sa robí pomocou funkcie analogRead(), ktorú všetci poznáme. Potom môžeme vykonať niektoré akcie v závislosti od úrovne osvetlenia.

Napíšme náčrt pre svetelný senzor, ktorý zapína alebo vypína LED pripojenú podľa nasledujúceho obvodu.

Prevádzkový algoritmus je nasledujúci:

  • Určte úroveň signálu z analógového kolíka.
  • Hladinu porovnávame s prahovou hodnotou. Maximálna hodnota bude zodpovedať tme, minimálna hodnota bude zodpovedať maximálnemu osvetleniu. Zvolíme prahovú hodnotu rovnajúcu sa 300.
  • Ak je úroveň nižšia ako prahová hodnota, je tmavá, musíte zapnúť LED.
  • V opačnom prípade vypnite LED.
#define PIN_LED 13 #define PIN_PHOTO_SENSOR A0 void setup() ( Serial.begin(9600); pinMode(PIN_LED, OUTPUT); ) void loop() ( int val = analogRead(PIN_PHOTO_SENSOR); Serial.println(val); if ( val< 300) { digitalWrite(PIN_LED, LOW); } else { digitalWrite(PIN_LED, HIGH); } }

Zakrytím fotorezistora (rukami alebo svetlovzdorným predmetom) môžeme pozorovať zapínanie a vypínanie LED. Zmenou parametra prahu v kóde môžeme vynútiť zapnutie/vypnutie žiarovky pri rôznych úrovniach osvetlenia.

Pri inštalácii sa snažte umiestniť fotorezistor a LED čo najďalej od seba, aby na svetelný senzor dopadalo menej svetla z jasnej LED.

Svetelný senzor a plynulá zmena jasu podsvietenia

Projekt môžete upraviť tak, aby sa jas LED menil v závislosti od úrovne osvetlenia. Do algoritmu pridáme nasledujúce zmeny:

  • Jas žiarovky zmeníme pomocou PWM, odosielaním hodnôt od 0 do 255 na kolík s LED pomocou analógWrite().
  • Na prevod digitálnej hodnoty úrovne osvetlenia zo svetelného senzora (od 0 do 1023) do rozsahu PWM jasu LED (od 0 do 255) použijeme funkciu map().

Príklad náčrtu:

#define PIN_LED 10 #define PIN_PHOTO_SENSOR A0 void setup() ( Serial.begin(9600); pinMode(PIN_LED, OUTPUT); ) void loop() ( int val = analogRead(PIN_PHOTO_SENSOR); Serial.println(val); int ledPower = map(val, 0, 1023, 0, 255); // Prevod výslednej hodnoty na úroveň signálu PWM. Čím nižšia je hodnota osvetlenia, tým menej energie musíme dodať LED cez PWM. analogWrite(PIN_LED, ledPower) ; // Zmena jasu)

V prípade iného spôsobu pripojenia, pri ktorom je signál z analógového portu úmerný stupňu osvetlenia, budete musieť dodatočne „obrátiť“ hodnotu odčítaním od maxima:

Int val = 1023 – analogRead(PIN_PHOTO_RESISTOR);

Obvod svetelného senzora pomocou fotorezistora a relé

Príklady náčrtov pre prácu s relé sú uvedené v článku o programovaní relé v Arduine. V tomto prípade nemusíme robiť zložité pohyby: po určení „tmy“ jednoducho zapneme relé a aplikujeme zodpovedajúcu hodnotu na jeho kolík.

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

Záver

Projekty využívajúce svetelný senzor na báze fotorezistora sú pomerne jednoduché a efektívne. Môžete realizovať veľa zaujímavých projektov a náklady na vybavenie nebudú vysoké. Fotorezistor je pripojený pomocou obvodu deliča napätia s dodatočným odporom. Senzor je pripojený k analógovému portu na meranie rôznych úrovní osvetlenia alebo k digitálnemu, ak nás zaujíma iba tma. V náčrte jednoducho načítame dáta z analógového (alebo digitálneho) portu a rozhodneme sa, ako reagovať na zmeny. Dúfajme, že teraz sa takéto jednoduché „oči“ objavia vo vašich projektoch.

V tomto experimente by sa LED mala rozsvietiť, keď úroveň svetla klesne pod prah nastavený potenciometrom.

ZOZNAM ČASTÍ PRE EXPERIMENT

- 1 doska Arduino Uno;

- 1 nepájkovaná doska na krájanie;

- 1 LED;

- 1 fotorezistor;

- 1 rezistor s nominálnou hodnotou 220 Ohmov, 1 rezistor s nominálnou hodnotou 10 kOhm;

- 1 premenlivý odpor (potenciometer);

- 10 mužských a mužských drôtov.

PODROBNOSTI PRE DODATOČNÚ ÚLOHU

1 ďalšia LED;

Ďalší 1 odpor s nominálnou hodnotou 220 Ohmov;

2 ďalšie drôty.

SCHÉMA OBVODU

DIAGRAM NA BEZPLATNE

SKICA

stiahnite si skicu pre Arduino IDE
#define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 void setup() ( pinMode(LED_PIN, OUTPUT); ) void loop() ( // čítanie úrovne jasu. Mimochodom, // môžete deklarovať premennú a priradiť hodnota k nemu naraz int lightness = analogRead(LDR_PIN); // načítajte hodnotu z potenciometra, ktorý používame na úpravu // prahovej hodnoty medzi podmienenou tmou a svetlom int threshold = analogRead(POT_PIN); // deklarujte a logickej premennej a priraďte jej hodnotu // „je teraz tma". Booleovské premenné môžu na rozdiel od // celočíselných premenných obsahovať iba jednu z dvoch hodnôt: // true alebo false. Takéto hodnoty // sa tiež nazývajú boolean. boolean tooDark = (ľahkosť< threshold); // используем ветвление программы: процессор исполнит один из // двух блоков кода в зависимости от исполнения условия. // Если (англ. «if») слишком темно... if (tooDark) { // ...включаем освещение digitalWrite(LED_PIN, HIGH); } else { // ...иначе свет не нужен — выключаем его digitalWrite(LED_PIN, LOW); } }

VYSVETLIVKY KU KÓDU

  • Používame nový typ premenných − boolovská hodnota, ktoré uchovávajú iba hodnoty pravda (pravda, 1) alebo falošný (nepravda, 0). Tieto hodnoty sú výsledkom vyhodnotenia boolovských výrazov. V tomto príklade je booleovský výraz ľahkosť< threshold . V ľudskom jazyku to znie ako: „osvetlenie pod prahovou úrovňou“. Takéto vyhlásenie bude pravdivé, keď bude osvetlenie pod prahovou úrovňou. Mikrokontrolér dokáže porovnávať hodnoty premenných ľahkosť A prah, čo sú zase výsledky merania, a vypočítať pravdivosť logického výrazu.
  • Tento logický výraz uvádzame do zátvoriek len kvôli prehľadnosti. Vždy je lepšie napísať čitateľný kód. V iných prípadoch môžu zátvorky ovplyvniť poradie operácií, ako pri bežnej aritmetike.
  • V našom experimente bude booleovský výraz pravdivý, keď je hodnota ľahkosť menej ako hodnota prah pretože sme použili operátora < . Môžeme použiť operátorov > , <= , >= , = = , != , čo znamená „väčšie ako“, „menšie alebo rovné“, „väčšie alebo rovné“, „rovná sa“, „nerovná sa“, v uvedenom poradí.
  • Buďte obzvlášť opatrní s logickým operátorom = = a nemýľte si ho s operátorom priradenia = . V prvom prípade porovnáme hodnoty výrazov a získame logickú hodnotu (pravda alebo nepravda) a v druhom prípade priradíme hodnotu pravého operandu ľavému operandu. Kompilátor nepozná naše zámery a nevydá chybu, ale môžeme náhodne zmeniť hodnotu nejakej premennej a potom dlho hľadať chybu.
  • Podmienený operátor akAk") je jedným z kľúčových vo väčšine programovacích jazykov. S jeho pomocou môžeme vykonávať nielen presne definovanú postupnosť akcií, ale aj rozhodovať o tom, ktorú vetvu algoritmu nasledovať, v závislosti od určitých podmienok.
  • Pre logické vyjadrenie ľahkosť< threshold existuje význam: pravda alebo falošný. Vypočítali sme to a vložili do booleovskej premennej príliš tmavé("príliš tmavé") Zdá sa teda, že hovoríme „ak je príliš tma, zapnite LED“
  • S rovnakým úspechom by sme mohli povedať „ak je osvetlenie nižšie ako prahová úroveň, zapnite LED“, t.j. preniesť na ak všetky logické výrazy:
ak (ľahkosť< threshold) { // ... }
  • Za podmienečným vyhlásením ak Musí existovať blok kódu, ktorý sa vykoná, ak je logický výraz pravdivý. Nezabudnite na obe kučeravé rovnátka {} !
  • Ak, ak je výraz pravdivý, stačí vykonať jeden inštrukcie, môže sa písať hneď po ak (…) bez kučeravých zátvoriek:
ak (ľahkosť< threshold) digitalWrite(LED_PIN, HIGH);
  • Operátor ak možno rozšíriť dizajnom inak("inak"). Blok kódu alebo jeden príkaz, ktorý za ním nasleduje, sa vykoná iba vtedy, ak je logický výraz v ak má význam falošný , « klamať" Pravidlá týkajúce sa kučeravých zátvoriek sú rovnaké. V našom experimente sme napísali "ak je príliš tma, zapnite LED, inak vypnite LED."

OTÁZKY, KTORÉ SI Otestujete

  1. Ak nainštalujeme fotorezistor medzi analógový vstup a zem, naše zariadenie bude pracovať opačne: LED sa rozsvieti, keď sa zvýši množstvo svetla. prečo?
  2. Aký výsledok činnosti zariadenia dostaneme, ak svetlo z LED dopadne na fotorezistor?
  3. Ak nainštalujeme fotorezistor tak, ako je uvedené v predchádzajúcej otázke, ako musíme zmeniť program, aby zariadenie fungovalo správne?
  4. Povedzme, že máme kód ak (podmienka) (akcia;). V akých prípadoch sa to bude robiť? akcie ?
  5. V akých hodnotách r výraz x + y > 0 bude pravda, ak x > 0 ?
  6. Je potrebné uviesť, ktoré inštrukcie sa majú vykonať, ak je podmienka v príkaze ak falošné?
  7. Aký je rozdiel medzi operátorom = = od operátora = ?
  8. Ak použijeme konštrukciu if (podmienka) akcia1; iná akcia2;, môže nastať situácia, že sa nevykoná žiadna z akcií? prečo?

ÚLOHY NA SAMOSTATNÉ RIEŠENIE

  1. Prepíšte program bez použitia premennej príliš tmavé pri zachovaní funkčnosti zariadenia.
  2. Pridajte ďalšiu LED do obvodu. Dokončite program tak, že keď osvetlenie klesne pod prahovú hodnotu, rozsvieti sa jedna LED a keď osvetlenie klesne pod polovicu prahovej hodnoty, rozsvietia sa obe LED.
  3. Zmeňte obvod a naprogramujte tak, aby sa LED diódy zapínali podľa rovnakého princípu, ale svietili tým intenzívnejšie, čím menej svetla dopadá na fotorezistor.




Hore