Ahoj všichni! Jsem Artem Luzhetsky a budu vést sérii článků věnovaných „ chytrý domov"a IoT (anglicky - Internet of Things, Internet of things). Seznámíme se s úžasnými způsoby vytváření domácí síť z různých zařízení, která budou fungovat buď autonomně, nebo s pomocí osoby. Studna? Začněme!

První článek je úvodní, chci, abyste pochopili, že budu pracovat s nejběžnějšími deskami a moduly, aby si většina lidí mohla vyzkoušet vývoj IoT.

Pro začátek tedy potřebujeme dva mikrokontroléry, které budeme používat: a.

Arduino UNO

Myslím, že vám tuto desku nemusím představovat, je velmi oblíbená mezi začátečníky a kutily. Řeknu jen, že možnosti této desky jsou omezené a UNO neumí pracovat s protokolem https, je toho málo výpočetní výkon ATmega328P mikrokontrolér, takže až budeme muset pracovat s mikrokontrolérem a protokolem https, naprogramujeme ESP8266.

ESP8266

Budu pracovat s modulem Troyka-modul ESP8266 od Amperky, ale můžete klidně použít běžný modul ESP 8266, prakticky nemají žádné rozdíly, hlavní je při zapojování koukat na hodnotu pinů a pamatovat si, že ESP funguje podle na 3,3 voltovou logiku, proto musíte buď připojit přes 5 voltů, ale k obvodu připojit regulátor napětí, nebo jednoduše použít pin s napájecím napětím 3,3 voltu.

Tento mikrokontrolér není nejvýkonnější v řadě Espressif na běžném trhu, ale je jedním z nejlevnějších a nejběžnějších. Bude základem našeho rozvoje IoT.

Další detaily

Budeme také muset vytvořit všechny experimenty:

  1. LED diody
  2. fotorezistor
  3. Termistor
  4. ultrazvukový dálkoměr
  5. Piezo reproduktor
  6. Mini Servo
  7. IR senzor
  8. IR dálkové ovládání

Pro práci s IoT není nutné mít všechny tyto moduly, ale abychom mohli realizovat všechny budoucí projekty, budeme je nakonec muset všechny zakoupit.

Programy a knihovny

Nejprve - stáhněte si knihovnu, která vám pomůže mnohem snadněji pracovat v Arduino IDE, pokud používáte ESP8266 - http://wiki.amperka.ru/_media/iot-m:iot-m-libs.zip

Za druhé, abychom se lépe seznámili s IoT, budeme potřebovat webové stránky, které nám poskytnou možnost posílat na ně data.

  1. www.dweet.io
  2. maker.iftt.com
  3. narodmon.ru
  4. atd.

Za třetí - budeme také potřebovat různé aplikace na androidu, abychom mohli ovládat chytrou domácnost pomocí telefonu.

  1. otevřený rozbočovač
  2. Blikat
  3. atd.

Se všemi metodami, programy a lokalitami se podrobně seznámíme v dalších projektech.

2. Výroba „chytré lampy“

Už jsem tě nudil? Udělejme to nejjednodušší chytrá lampa který se zapne, pokud je v místnosti tma.

Vlastně k tomu nepotřebujete ani UNO, můžete použít digitální vlastní foto senzor, ale v budoucnu tento projekt změníme k nepoznání, takže někde začít musíte.

Pokud si nejste jisti, že jste připraveni pracovat s elektřinou 220 voltů, použijte místo baterky běžnou LED. Na začátku jsem si vzal svůj stará lampa TLI - 204, takové jsou téměř v každém obchodě (předem odpojené od sítě).

Lampa má dva druhy práce (zapnuto/vypnuto), co chci dělat, chci zvýšit její funkčnost, ponechat možnost lampu úplně rozsvítit a zhasnout.

Zapojení fotorezistoru s relé nějak paralelně k obvodu bez použití dalšího přepínače nepůjde, proto jsem se rozhodl dát místo dvoupolohového přepínač třípolohový.

Obecný elektrický obvod by měl vypadat takto:

Pokud je vše provedeno správně, pak ve třetí poloze přepínače můžete přivedením proudu do relé z mikrokontroléru zapnout lampu.

Připojíme fotorezistor k arduinu. Schéma vypadá takto:

3. Kód pro „chytrou lampu“

Nyní napíšeme kód, kterým budeme přenášet proud do relé, pokud je v místnosti tma.

#define SHINE 5 //PIN NA FOTORESISTORU #define REL 13 //PIN ON RELAY 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); }

Až vše připojíte, nezapomeňte z lamy vyjmout fotosenzor, jinak vás čeká světelná show. Všechno musí fungovat.

Příště se pokusíme kód zkomplikovat a přidat pár dalších funkcí. Brzy se uvidíme!

V tomto experimentu by se měla LED rozsvítit, když úroveň světla klesne pod prahovou hodnotu nastavenou potenciometrem.

SEZNAM DÍLŮ K EXPERIMENTU

- 1 deska Arduino Uno;

- 1 nepájené prkénko na krájení;

- 1 LED;

- 1 fotorezistor;

- 1 rezistor s jmenovitou hodnotou 220 Ohm, 1 rezistor s jmenovitou hodnotou 10 kOhm;

- 1 proměnný odpor (potenciometr);

- 10 vodičů samec-samec.

PODROBNOSTI PRO VOLITELNÝ CÍL

1 další LED;

Další 1 rezistor s nominální hodnotou 220 ohmů;

2 další dráty.

ZÁKLADNÍ DIAGRAM

DIAGRAM NA PLÁTNÍKU

SKICA

Stáhněte si skicu pro Arduino IDE
#define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 void setup() ( pinMode(LED_PIN, OUTPUT); ) void loop() ( // přečtení úrovně osvětlení. Mimochodem, můžete // deklarovat proměnnou a přiřadit hodnota k němu najednou int lightness = analogRead(LDR_PIN); // přečte hodnotu z potenciometru, kterým nastavujeme // prahovou hodnotu mezi podmíněnou tmou a světlem int threshold = analogRead(POT_PIN); // deklarujeme booleovskou proměnnou a přiřaďte mu hodnotu // „je teď tma". Booleovské proměnné na rozdíl od // celých čísel mohou obsahovat pouze jednu ze dvou hodnot: // true (eng. true) nebo false (eng. false). Takové hodnoty ​​// se také nazývají boolean (eng. boolean).boolean tooDark = (lehkost< threshold); // используем ветвление программы: процессор исполнит один из // двух блоков кода в зависимости от исполнения условия. // Если (англ. «if») слишком темно... if (tooDark) { // ...включаем освещение digitalWrite(LED_PIN, HIGH); } else { // ...иначе свет не нужен — выключаем его digitalWrite(LED_PIN, LOW); } }

VYSVĚTLENÍ KÓDŮ

  • Používáme nový typ proměnných − booleovský, které pouze ukládají hodnoty skutečný (pravda, 1) nebo Nepravdivé (nepravda, 0). Tyto hodnoty jsou výsledkem vyhodnocení booleovských výrazů. V tomto příkladu je booleovský výraz světlost< threshold . V lidské řeči to zní jako: "osvětlení pod prahovou úrovní." Takové tvrzení bude pravdivé, když je osvětlení pod prahovou úrovní. Mikrokontrolér může porovnávat hodnoty proměnných světlost a práh, což jsou zase výsledky měření, a vypočítají pravdivost logického výrazu.
  • Tento logický výraz jsme vzali v závorkách pouze pro přehlednost. Vždy je lepší napsat čitelný kód. V jiných případech mohou závorky ovlivnit pořadí operací, jako v běžné aritmetice.
  • V našem experimentu bude booleovský výraz pravdivý, když je hodnota světlost menší hodnotu práh, protože jsme použili operátora < . Můžeme použít operátory > , <= , >= , = = , != , což znamená větší než, menší nebo rovno, větší nebo rovno, rovno, ne rovno, v tomto pořadí.
  • Buďte obzvláště opatrní s logický operátor = = a nepleťte si to s operátorem přiřazení = . V prvním případě porovnáme hodnoty výrazů a dostaneme booleovský(pravda nebo nepravda) a ve druhém případě přiřadíme hodnotu pravého operandu levému operandu. Překladač nezná naše záměry a nedá chybu, ale můžeme omylem změnit hodnotu nějaké proměnné a pak dlouho hledat chybu.
  • Podmíněný operátor -li-li“) je jedním z klíčových ve většině programovacích jazyků. S jeho pomocí můžeme provádět nejen pevně definovanou posloupnost akcí, ale v závislosti na určitých podmínkách se rozhodovat, jakou větev algoritmu budeme následovat.
  • Pro logické vyjádření světlost< threshold existuje význam: skutečný nebo Nepravdivé. Spočítali jsme to a vložili do booleovské proměnné moc tmavý("moc tmavý"). Tak nějak říkáme "pokud je příliš tma, zapněte LED"
  • Stejně dobře bychom mohli říci „pokud je osvětlení menší než prahová úroveň, tak rozsviť LED“, tzn. přenést na -li celý logický výraz:
jestliže (lehkost< threshold) { // ... }
  • Za podmíněný operátor -li musí následovat blok kódu, který se provede, pokud je logický výraz pravdivý. Nezapomeňte na obě kudrnatá rovnátka {} !
  • Pokud, pokud je výraz pravdivý, musíme pouze provést jeden pokyn, lze jej napsat ihned po li(...) bez složené závorky:
jestliže (lehkost< threshold) digitalWrite(LED_PIN, HIGH);
  • Operátor -li lze designově rozšířit jiný("v opačném případě"). Blok kódu nebo jediný příkaz za ním bude proveden pouze v případě, že je booleovský výraz v -li má význam Nepravdivé , « Nepravdivé". Pravidla pro složená rovnátka jsou stejná. V našem experimentu jsme napsali "pokud je příliš tma, zapněte LED, jinak vypněte LED."

OTÁZKY, KTERÉ SI ZKONTROLUJTE

  1. Pokud nainstalujeme fotorezistor mezi analogový vstup a zem, naše zařízení bude pracovat obráceně: LED se rozsvítí, když se zvýší množství světla. Proč?
  2. Jaký výsledek činnosti zařízení získáme, když světlo z LED dopadne na fotoodpor?
  3. Pokud jsme fotorezistor nainstalovali tak, jak je popsáno v předchozí otázce, jak musíme změnit program, aby zařízení fungovalo správně?
  4. Řekněme, že máme kód if (podmínka) (akce;). V jakých případech bude akce ?
  5. V jakých hodnotách y výraz x + y > 0 bude pravda, pokud x > 0 ?
  6. Je povinné specifikovat, které instrukce se mají provést, pokud je podmínka v příkazu -li Nepravdivé?
  7. Jaký je rozdíl mezi operátorem = = od operátora = ?
  8. Pokud použijeme konstrukci if (podmínka) akce1; jinak akce2;, může nastat situace, kdy nebude provedena žádná z akcí? Proč?

ÚKOLY PRO SAMOSTATNÉ ŘEŠENÍ

  1. Přepište program bez použití proměnné moc tmavý při zachování funkčnosti zařízení.
  2. Přidejte do obvodu další LED. Dokončete program tak, že když osvětlení klesne pod prahovou hodnotu, rozsvítí se jedna LED, a když osvětlení klesne pod polovinu prahové hodnoty, rozsvítí se obě LED.
  3. Změňte obvod a naprogramujte tak, aby se LED zapínaly stejným způsobem, ale svítily tím silněji, čím méně světla dopadá na fotoodpor.

Pravděpodobně každý v dětství měl sen (a více než jeden). Můžete si dokonce zkusit vzpomenout na pocit, který zaplaví dětskou duši, když se mu splní jeho sen, nebo na tu vzdálenou známou jiskru v jeho očích... Jako dítě jsem snil o vlastním nočním světýlku.

Nyní jsem studentem 4. ročníku na BSUIR, a když nám bylo řečeno, že projekt v oboru obvodů nelze udělat na papíře, ale na kusu železa, došlo mi: noční světlo, které jsem si tak přál jako dítě, mohu vyrobit sám. A aby to nebyl jen předmět, který v noci osvětlí místnost, ale zařízení, které lze snadno ovládat pro jakoukoli náladu. Proč ne? Rozhodl jsem se přidat možnost měnit barvy pomocí rukou: čím blíže je ruka k nočnímu světlu, tím jasnější jedna z barev (RGB) pálí. A také bych chtěl ovládat noční světlo dálkovým ovladačem.

Hned se musím přiznat, že jsem tento nápad zachytil na webu cxem.net. Stručně řečeno, tento příklad používal matici RGB, která byla řízena posuvnými registry a ultrazvukovými senzory vzdálenosti. Ale myslel jsem, že matrice svítí jen jedním směrem, ale chtěl jsem, aby noční světlo svítilo do stran.

Zdůvodnění prvků obvodu


Obrátil jsem svou pozornost na Mikrokontroléry Arduino. UNO je pro mou představu celkem vhodná varianta, jednak proto, že je to nejoblíbenější platforma a počet pinů není na rozdíl od Mega příliš velký a jednak k němu lze připojit externí zdroj napájení, v mém případě je to 12V , na rozdíl od Nano , za třetí ... no, myslím, že se můžete pozastavit nad těmito dvěma body. Platforma je velmi populární po celém světě díky pohodlí a jednoduchosti programovacího jazyka, stejně jako otevřené architektuře a programovému kódu.

Více detailní informace o této desce lze snadno najít na internetu, takže článek nebudu zahlcovat.

Takže hlavní požadavky na systém. Požadované:
- senzory, které budou sledovat vzdálenost k překážce pro ovládání systému;
– senzor pro čtení signálů z dálkového ovladače dálkové ovládání;
- LED diody, které zajistí potřebnou funkčnost osvětlení;
- řídící jednotka, která bude řídit celý systém.

Jako snímače vzdálenosti pro projekt jsou zapotřebí dálkoměry, z nichž každý bude odpovídat určitou barvu: červená, zelená, modrá. Snímače vzdálenosti budou hlídat vzdálenost ruky od nočního světla a čím blíže se ruka k určitému senzoru přiblíží, tím silněji vypálí barva odpovídající tomuto dálkoměru. Naopak, čím dále je ručička, tím menší napětí je přiváděno na barvu odpovídající senzoru.

Nejoblíbenější dálkoměry na tento moment jedná se o Sharp GP2Y0A21YK a HC-SR04. Sharp GP2Y0A21YK je infračervený dálkoměr. Je vybaven IR zářičem a IR přijímačem: první slouží jako zdroj paprsku, jehož odraz zachytí druhý. Infračervené paprsky snímače jsou přitom pro lidské oko neviditelné a v této intenzitě jsou neškodné.

Ve srovnání s ultrazvukovým měničem HC-SR04 má tento měnič výhody i nevýhody. Mezi výhody patří neutralita a nezávadnost. A nevýhodou je menší dosah a závislost na vnějším rušení včetně určitých typů osvětlení.

Jako senzory vzdálenosti pro projekt jsme použili ultrazvukové dálkoměry HC-SR04.
Princip činnosti HC-SR04 je založen na známém fenoménu echolokace. Při jeho použití emitor generuje akustický signál, který se odražený od překážky vrací zpět k senzoru a je zaznamenáván přijímačem. Při znalosti rychlosti šíření ultrazvuku vzduchem (asi 340 m/s) a době zpoždění mezi vysílaným a přijímaným signálem je snadné vypočítat vzdálenost k akustické bariéře.

Vstup TRIG je připojen k libovolnému pinu mikrokontroléru. Na tento výstup musí být přiveden impuls. digitální signál trvání 10 µs. Na signál na vstupu TRIG snímač vyšle shluk ultrazvukových pulzů. Po přijetí odraženého signálu generuje snímač na výstupu ECHO pulzní signál, jehož doba trvání je úměrná vzdálenosti od překážky.

IR senzor. Z tohoto senzoru bude samozřejmě načten a dekódován signál potřebný pro dálkové ovládání. TSOP18 se liší pouze frekvencí. Pro projekt je vybrán snímač VS1838B TSOP1838.

Projekt byl založen na myšlence osvětlit místnost jakoukoli barvou, což znamená, že budou potřeba 3 základní barvy, ze kterých bude osvětlení získáno: červená, zelená, modrá. Proto byl vybrán model SMD 5050RGB LED, který se s úkolem dokonale vyrovná.

V závislosti na velikosti napětí aplikovaného na každou LED změní intenzitu tohoto osvětlení. LED musí být zapojena přes rezistor, jinak riskujeme, že zničíme nejen ji, ale i Arduino. Rezistor je potřebný k omezení proudu na LED na přijatelnou hodnotu. Faktem je, že vnitřní odpor LED je velmi nízký a pokud nepoužijete rezistor, tak LEDkou projde takový proud, který jednoduše spálí LED i ovladač.

LED pásky použité v projektu jsou napájeny 12V.

Vzhledem k tomu, že napětí na LED ve stavu "vypnuto" je 6V a je nutné regulovat napájení, které přesahuje 5V, je nutné obvod doplnit o tranzistory v režimu klíče. Moje volba padla na model BC547c.

Zvažte krátce, pro ty, kteří zapomněli, princip fungování npn tranzistor. Pokud vůbec nepřipojíte napětí, ale jednoduše vezmete a uzavřete svorky báze a emitoru, i když ne na krátkou dobu, ale přes odpor několika ohmů, ukáže se, že napětí báze-emitor je nulové. Proto neexistuje žádný základní proud. Tranzistor je uzavřený, kolektorový proud je zanedbatelný, jen stejný počáteční proud. V tomto případě se říká, že tranzistor je ve stavu cutoff. Opačný stav se nazývá saturace: když je tranzistor plně otevřený, takže už není kam dál otevírat. Při takovém stupni otevření je odpor sekce kolektor-emitor tak malý, že je prostě nemožné zapnout tranzistor bez zátěže v kolektorovém obvodu, okamžitě vyhoří. V tomto případě může být zbytkové napětí na kolektoru pouze 0,3 ... 0,5V.

Tyto dva stavy, saturace a přerušení, se používají, když tranzistor pracuje v režimu klíče, jako normální kontakt relé. Hlavním smyslem tohoto režimu je, že malý proud báze řídí velký kolektorový proud, který je několik desítekkrát větší než proud báze. Díky externímu zdroji energie se získá velký kolektorový proud, ale přesto je, jak se říká, zřejmé zesílení proudu. V našem případě mikroobvod, jehož provozní napětí je 5V, obsahuje 3 pásky s LED pracujícími od 12V.

Vypočítejme provozní režim klíčové kaskády. Je nutné vypočítat hodnotu odporu v základním obvodu, aby LED svítily na plný výkon. Nezbytná podmínka ve výpočtu, že proudový zisk je větší nebo roven podílu dělení maximálního možného kolektorového proudu minimálním možným základním proudem:

Pásky tedy mohou být pro provozní napětí 220V a základní obvod lze ovládat z mikroobvodu s napětím 5V. Pokud je tranzistor navržen pro práci s tímto kolektorovým napětím, pak se LED diody rozsvítí bez problémů.
Úbytek napětí na přechodu báze-emitor je 0,77V za předpokladu, že proud báze je 5mA, kolektorový proud je 0,1A.
Napětí na základním rezistoru bude:

Ohmův zákon:

Ze standardní řady odporů vybereme odpor 8,2 kOhm. Tím je výpočet dokončen.

Chci vás upozornit na jeden problém, se kterým jsem se setkal. Při použití knihovny IRremote by Arduino při úpravě modré barvy viselo. Po dlouhém a pečlivém hledání na internetu se ukázalo, že ano daná knihovna používá výchozí časovač 2 pro tento model Arduino. Časovače se používají k ovládání PWM výstupů.

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

Zpočátku jsem k regulaci modré používal PWM 11. Buďte proto opatrní při práci s PWM, časovači a knihovnami třetích stran, které je mohou používat. Je zvláštní, že na domovská stránka Na githubu nebylo o této nuanci nic řečeno. Pokud chcete, můžete odkomentovat řádek pomocí časovače 1 a okomentovat 2.

Spojovací prvky na prkénku vypadají takto:

Po testování na breadboardu začaly fáze „Umístění prvků na desku“ a „Práce s páječkou“. Po prvním testování hotové desky se mi vkrádá do hlavy myšlenka: něco se pokazilo. A zde začíná pro mnohé známá fáze „Práce s testerem“. Poruchy (několik sousedních kontaktů bylo omylem připájeno) však byly rychle odstraněny a je tu dlouho očekávaná zlomyslná LED kontrolka.

Navíc ta záležitost byla jen za tělem. Při této příležitosti byla vyřezána překližka s otvory pro naše senzory. Zadní kryt byl vyroben speciálně odnímatelný, abyste si mohli vychutnat pohled zevnitř a na přání něco dodělat nebo předělat. Má také 2 otvory pro přeprogramování desky a napájení.

Pouzdro bylo nalepeno na dvousložkové epoxidové lepidlo. Za zmínku stojí zvláštnost tohoto lepidla pro ty, kteří se s ním ještě nesetkali. Tento soudruh je dodáván ve dvou samostatných nádobách, při jejichž smíchání dochází k okamžité chemické reakci. Po smíchání musíte jednat rychle, do 3-4 minut. Pro další použití je třeba namíchat novou porci. Takže pokud se to snažíte zopakovat, radím vám, míchejte po malých dávkách a jednajte velmi rychle, nebude moc času na přemýšlení. Proto se vyplatí předem zvážit, jak a kam pouzdro nalepit. A nejde to zvládnout na jedno posezení.

Pro upevnění pásků s LED dovnitř horní kryt byla vložena trubka, kterou dokonale procházely všechny dráty.

Když vyvstala otázka se stínidlem, vzpomněl jsem si, jak jsem v dětství vyráběl řemesla z jednoduché nitě, lepidla a balónku, který sloužil jako základ. Princip pro stínidlo byl vzat stejný, ale ukázalo se, že je obtížnější navinout mnohostěn než míč. Vlivem tlaku vyvíjeného nitěmi na konstrukci se začala směrem nahoru zužovat a nitě začaly odpadávat. Naléhavě, s rukama v lepidle, bylo rozhodnuto posílit strukturu shora. A pak přišlo na pomoc CD. Konečným výsledkem je toto noční světlo:

co chceš říct na závěr?

Co bych měl v projektu změnit? Pro napájení signálu TRIG senzorů vzdálenosti by mohl být použit jeden výstup Arduino místo tří. Ještě bych opatřil otvor pro IR čidlo (na které jsem zapomněl), které je bohužel schované v pouzdře, ze kterého samozřejmě neumí číst signály z dálkového ovládání. Kdo však řekl, že nemůžete nic pájet a vrtat?

Rád bych poznamenal, že to byl zajímavý semestr a skvělá příležitost vyzkoušet si něco, co není na papíře, díky čemuž mohu dát ještě jedno zaškrtnutí u položky „dětský sen“. A pokud se vám zdá, že vyzkoušet něco nového je obtížné a nevíte, co dělat dřív, nezoufejte. Mnoho lidí má v hlavě myšlenku: kde začít a jak to lze vůbec udělat? V životě je mnoho úkolů, ze kterých se můžete splést, ale jakmile to zkusíte, všimnete si, že s jiskrou v očích dokážete hory přenášet, i když se o to musíte trochu snažit.

Světelné senzory (osvětlení), postavené na bázi fotorezistorů, se poměrně často používají ve skutečných arduino projektech. Jsou poměrně jednoduché, nejsou drahé, snadno se dají najít a koupit v každém internetovém obchodě. Fotorezistor arduino umožňuje ovládat úroveň osvětlení a reagovat na jeho změnu. V tomto článku se podíváme na to, co je to fotorezistor, jak na jeho základě funguje světelný senzor, jak správně připojit senzor k deskám Arduino.

Fotorezistor, jak název napovídá, přímo souvisí s odpory, které se často nacházejí téměř v každém elektronickém obvodu. Hlavní charakteristikou konvenčního rezistoru je hodnota jeho odporu. Na něm závisí napětí a proud, pomocí rezistoru nastavujeme požadované provozní režimy ostatních součástek. Hodnota odporu rezistoru za stejných provozních podmínek se zpravidla prakticky nemění.

Na rozdíl od konvenčního rezistoru, fotorezistor může měnit svůj odpor v závislosti na úrovni okolního světla. To znamená, že v elektronický obvod parametry se budou neustále měnit, v první řadě nás zajímá napětí dopadající na fotorezistor. Zafixováním těchto změn napětí na analogových pinech arduina můžeme změnit logiku obvodu, čímž vytvoříme zařízení, která se přizpůsobí vnějším podmínkám.

Fotorezistory jsou široce používány v široké škále systémů. Nejčastější aplikací je pouliční osvětlení. Pokud na město padne noc nebo se zatáhne, světla se automaticky rozsvítí. Z fotorezistoru si můžete vyrobit ekonomickou žárovku pro domácnost, která se nezapíná podle plánu, ale v závislosti na osvětlení. Na základě světelného senzoru můžete dokonce vyrobit bezpečnostní systém, která se spustí ihned po otevření a rozsvícení uzavřené skříně nebo trezoru. Jako vždy je rozsah jakýchkoli arduino senzorů omezen pouze naší představivostí.

Jaké fotorezistory lze zakoupit v internetových obchodech

Nejoblíbenější a cenově nejdostupnější možností snímače na trhu jsou modely sériové výroby čínských společností, klony produktů VT. Ne vždy se tam dá jít na mizinu, kdo a co přesně ten či onen dodavatel vyrábí, ale nejjednodušší varianta je docela vhodná začít pracovat s fotoodpory.

Začínajícímu arduinistovi lze doporučit, aby si koupil hotový fotomodul, který vypadá takto:


Tento modul již má všechny potřebné prvky pro snadné připojení fotorezistoru k desce arduino. Některé moduly mají komparační obvod a k dispozici je digitální výstup a trimr pro ovládání.

Ruskému radioamatérovi lze doporučit, aby se obrátil na ruský FR senzor. Komerčně dostupné FR1-3, FR1-4 atd. - vydané ještě v sovětských dobách. Ale navzdory tomu je FR1-3 přesnější detail. Z toho vyplývá rozdíl v ceně.Za FR požadují maximálně 400 rublů. FR1-3 bude stát více než tisíc rublů za kus.

Označení fotorezistoru

Moderní značení modelů vyrobených v Rusku je poměrně jednoduché. První dvě písmena jsou PhotoResistor, čísla za pomlčkou označují vývojové číslo. FR -765 - fotorezistor, vyvolání 765. Obvykle značeno přímo na těle dílu

Snímač VT má ve schématu značení rozsah odporu. Například:

  • VT83N1 – 12-100kΩ (12K podsvícený, 100K tmavý)
  • VT93N2 - 48-500kOhm (48K - osvětlené, 100K - ve tmě).

Někdy pro objasnění informací o modelech prodejce poskytuje zvláštní dokument od výrobce. Kromě parametrů práce je tam uvedena i přesnost dílu. U všech modelů je rozsah citlivosti umístěn ve viditelné části spektra. Sbírání světelný senzor musíte pochopit, že přesnost provozu je podmíněný koncept. I u modelů stejného výrobce, jedna šarže, jeden nákup, se může lišit o 50 % i více.

Ve výrobě jsou díly nastaveny na vlnovou délku od červeného po zelené světlo. Většina přitom „vidí“ a infračervené záření. Zvláště přesné detaily dokážou zachytit i ultrafialové světlo.

Výhody a nevýhody senzoru

Hlavní nevýhodou fotorezistorů je jejich citlivost na spektrum. V závislosti na typu dopadajícího světla se odpor může lišit o několik řádů. Mezi nevýhody patří také nízká rychlost reakce na změny osvětlení. Pokud kontrolka bliká, senzor nestihne zareagovat. Pokud je frekvence změn poměrně vysoká, rezistor obecně přestane "vidět", že se osvětlení mění.

Mezi výhody patří jednoduchost a dostupnost. Přímá změna odporu v závislosti na dopadajícím světle vám umožňuje zjednodušit elektrické schéma spojení. Samotný fotorezistor je velmi levný, je součástí mnoha arduino kitů a návrhářů, proto je dostupný téměř každému začínajícímu arduinu.

Připojení fotorezistoru k arduinu

V projektech arduino Fotorezistor se používá jako světelný senzor. Na základě informací z něj může deska zapínat nebo vypínat relé, spouštět motory, odesílat zprávy. Samozřejmě v tomto případě musíme snímač správně připojit.

Schéma připojení světelného senzoru k arduinu je poměrně jednoduché. Pokud použijeme fotorezistor, tak ve schématu zapojení je snímač realizován jako dělič napětí. Jedno rameno se změní z úrovně osvětlení, druhé - dodává napětí na analogový vstup. V čipu řadiče se toto napětí převádí na digitální data prostřednictvím ADC. Protože Pokud se odpor snímače při dopadu světla sníží, pak se sníží i hodnota napětí na něj dopadajícího.

Podle toho, do kterého ramene děliče fotorezistor vložíme, bude na analogový vstup přivedeno buď zvýšené nebo snížené napětí. V případě, že je jedna větev fotorezistoru připojena k zemi, pak maximální hodnota napětí bude odpovídat tmě (odpor fotorezistoru je maximální, téměř veškeré napětí na něm klesne) a minimální hodnota bude odpovídat dobré osvětlení (odpor se blíží nule, napětí je minimální). Pokud připojíme rameno fotorezistoru k napájení, pak bude chování opačné.

Samotná instalace desky by neměla způsobovat potíže. Vzhledem k tomu, že fotorezistor nemá žádnou polaritu, můžete jej připojit v libovolném směru, můžete jej připájet k desce, propojit dráty pomocí desky plošných spojů nebo použít pro připojení obyčejné spony (krokodýly). Zdrojem energie v obvodu je samotné arduino. fotorezistor je jednou nohou připojen k zemi, druhá je připojena k ADC desky (v našem příkladu - AO). Na stejnou nohu připojíme rezistor 10 kΩ. Fotorezistor samozřejmě můžete připojit nejen k analogovému pinu A0, ale i k jakémukoli jinému.

Pár slov o přídavném odporu 10K. V našem obvodu má dvě funkce: omezovat proud v obvodu a vytvářet správné napětí v obvodu s děličem. Omezení proudu je potřeba v situaci, kdy plně osvětlený fotorezistor prudce snižuje svůj odpor. A tvarování napětí je pro předvídatelné hodnoty na analogovém portu. Ve skutečnosti odpor 1K stačí pro běžný provoz s našimi fotoodpory.

Změnou hodnoty rezistoru můžeme „posunout“ úroveň citlivosti na „tmavou“ a „světlou“ stranu. Takže 10 K dá rychlé přepínání příchod světa. V případě 1K bude světelný senzor přesněji detekovat vysokou úroveň osvětlení.

Pokud použijete hotový modul světelného senzoru, pak bude připojení ještě jednodušší. Výstup modulu VCC připojíme k 5V konektoru na desce, GND - k zemi. Zbývající piny jsou připojeny ke konektorům arduino.

Pokud má deska digitální výstup, pak jej pošleme na digitální piny. Když analogové, tak analogové. V prvním případě obdržíme spouštěcí signál - překročení úrovně osvětlení (spouštěcí práh lze upravit pomocí ladícího odporu). Z analogových pinů můžeme získat hodnotu napětí úměrnou skutečné úrovni osvětlení.

Příklad náčrtu světelného senzoru na fotorezistoru

Připojili jsme obvod fotorezistoru k arduinu a ujistili jsme se, že vše bylo provedeno správně. Nyní zbývá naprogramovat ovladač.

Psaní náčrtu pro světelný senzor je celkem jednoduché. Potřebujeme pouze převzít aktuální hodnotu napětí z analogového pinu, ke kterému je připojen snímač. To se provádí pomocí funkce analogRead() známé nám všem. Poté můžeme provádět některé akce v závislosti na úrovni světla.

Napíšeme náčrt pro světelný senzor, který zapíná nebo vypíná LED připojenou následovně.

Algoritmus práce je následující:

  • Určete úroveň signálu z analogového pinu.
  • Porovnejte hladinu s prahovou hodnotou. Maximální hodnota bude odpovídat tmě, minimální - maximálnímu osvětlení. Zvolme prahovou hodnotu rovnou 300.
  • Pokud je úroveň nižší než prahová hodnota - tmavá, musíte rozsvítit LED.
  • V opačném případě vypněte 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 fotorezistoru (rukama nebo neprůhledným předmětem) můžeme pozorovat rozsvícení a zhasnutí LED. Změnou parametru prahu v kódu můžeme přinutit žárovku, aby se rozsvítila / zhasla, když různé úrovně osvětlení.

Při montáži se snažte umístit fotorezistor a LED co nejdále od sebe, aby na světelný senzor dopadalo méně světla z jasné LED.

Senzor okolního světla a plynulá změna jasu podsvícení

Projekt můžete upravit tak, aby se jas LED měnil v závislosti na úrovni osvětlení. Do algoritmu přidáme následující změny:

  • Změníme jas žárovky pomocí PWM, odesíláním hodnot od 0 do 255 na kolík s LED pomocí analogWrite ().
  • Pro převod digitální hodnoty úrovně osvětlení ze světelného senzoru (od 0 do 1023) do rozsahu PWM jasu LED (od 0 do 255) použijeme funkci map().

Pří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); // Převod přijaté hodnoty na úroveň signálu PWM. Čím menší je hodnota světla, tím méně energie potřebujeme dodávat LED přes PWM. analogWrite(PIN_LED, ledPower ); // změna jasu)

V případě jiného způsobu připojení, kdy je signál z analogového portu úměrný stupni osvětlení, bude nutné hodnotu dodatečně „převrátit“ odečtením od maxima:

int val = 1023 - analogRead(PIN_PHOTO_RESISTOR);

Schéma světelného senzoru na fotorezistoru a relé

Příklady náčrtu pro práci s relé jsou uvedeny v článku o programování relé v arduinu. V tomto případě nemusíme dělat složitá gesta: po určení „tmy“ jednoduše zapneme relé a na jeho kolík aplikujeme příslušnou hodnotu.

#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ávěr

Projekty využívající světelný senzor na bázi fotorezistoru jsou poměrně jednoduché a efektivní. Můžete realizovat mnoho zajímavých projektů, přičemž náklady na vybavení nebudou vysoké. Fotorezistor je zapojen podle obvodu děliče napětí s přídavným odporem. Senzor je připojen k analogovému portu pro měření různých úrovní osvětlení nebo k digitálnímu, pokud je pro nás důležitá pouze skutečnost, že je tma. V náčrtu jednoduše načteme data z analogového (nebo digitálního) portu a rozhodneme se, jak reagovat na změny. Doufejme, že se nyní ve vašich projektech objeví taková jednoduchá „očka“.

Pro náš další projekt budeme používat fotorezistor. A zvážíme implementaci nočního světla v ložnici, které se automaticky zapne, když je tma, a zhasne, když se rozsvítí.

Odpor fotorezistoru závisí na dopadajícím světle. Použití fotorezistoru ve spojení s konvenční odpor 4,7 kOhm, získáme dělič napětí, ve kterém se napětí procházející fotorezistorem mění v závislosti na úrovni osvětlení.

Napětí z děliče přivedeme na vstup Arduino ADC. Tam porovnáme přijatou hodnotu s určitým prahem a zapneme nebo vypneme lampu.

Schéma zapojení děliče je uvedeno níže. Když se osvětlení zvyšuje, odpor fotorezistoru klesá a v souladu s tím se zvyšuje napětí na výstupu děliče (a vstupu ADC). Když světlo zhasne, opak je pravdou.

Níže uvedená fotografie ukazuje sestavený obvod na prkénku. Napětí 0V a 5V je převzato z Arduina. Pin A0 se používá jako vstup ADC.

Náčrt Arduina je zobrazen níže. V tomto tutoriálu jednoduše zapneme a vypneme LED, která je zabudována do desky Arduino. Jasnější LED, můžete připojit ke kolíku 13 (přes odpor ~220 ohmů). Pokud připojíte výkonnější zátěž, jako je žárovka, měla by být připojena přes relé nebo tyristor.

V kódu programu jsou komentované sekce, které slouží k ladění. Bude možné ovládat hodnotu ADC (od 0 do 1024). Také musíte změnit hodnotu 500 v kódu (zapnutí a vypnutí prahu) na hodnotu, kterou empiricky vyberete změnou osvětlení.

/* ** Noční světlo ** ** www.hobbytronics.co.uk */ int sensorPin = A0; // nastavení vstupní paty pro ADC unsigned int sensorValue = 0; // digitální hodnota fotorezistor void setup() ( pinMode(13, OUTPUT); Serial.begin(9600); // spuštění sériového výstupu dat (pro testování) ) void loop() ( sensorValue = analogRead(sensorPin); // přečtení hodnoty z fotorezistoru, pokud (sensorValue<500) digitalWrite(13, HIGH); // включаем else digitalWrite(13, LOW); // выключаем // Для отладки раскомментируйте нижеследующие строки //Serial.print(sensorValue, DEC); // вывод данных с фоторезистора (0-1024) //Serial.println(""); // возврат каретки //delay(500); }