Programování | Pojďme programovat elektroniku | Stavebnice

Pojďme programovat elektroniku: Ovládneme pomocí Wi-Fi starou pokojovou lampu

  • Dnes si vyzkoušíme práci s elektromagnetickým relé
  • Připojíme ho k Wi-Fi mikropočítači
  • Z prohlížeče budeme zapínat světla v bytě

V říjnu jsme v našem seriálu Pojďme programovat elektroniku postavil jednoduché chytré světýlko, které jsem zapínal a vypínal pomocí Wi-Fi mikrokontroleru ESP8266 na prototypovací destičce NodeMCU za pár desetikorun.

Tehdy to nicméně nebyla žádná domácí lampa, ale jen slaboučká LED dioda připojená na jeden z digitálních pinů. Mikropočítač se po startu připojil do domácí Wi-Fi a spustil primitivní webový server. Když jsem pak zadal do prohlížeče jeho IP adresu, zobrazil se formulář s dvojicí tlačítek, pomocí kterých jsem mohl drobné světýlko zapnout, nebo vypnout.

Chytré elektrické spínače

Celá ukázka sloužila skutečně jen jako principiální demonstrace komunikace pomocí bezdrátové domácí sítě a já tehdy zmínil, že by bylo mnohem zajímavější připojit k mikrokontroleru magnetické relé, které by na povel spínalo 230V napájení velké pokojové lampy.

333982125 488531825 596734621 85383173 979184152
Jedna z mnoha chytrých Wi-Fi zásuvek od TP-Linku. Aplikace vedle zapnutí a časového plánování zobrazuje také spotřebu.

Ostatně takových chytrých spínačů a zásuvek dnes najdete na webu hromadu. Cena těch lepších se pohybuje okolo tisícikoruny a často mají dispozici i mobilní ovládací aplikaci. Jeden takový Wi-Fi spínač TP-Link HS110 doma používám i já. Každý den podvečer mi ve stanovený čas zapne ambientní lampu a o půlnoci ji zase poslušně vypne.

Postavíme si vlastní Wi-Fi spínač 230V

Dnes si postavíme úplně to samé. Teda skoro, nebude to totiž tak hezké a nebudeme to ovládat mobilní aplikací, ale světlo sepneme opět z prohlížeče. Materiálová cena? Dohromady okolo 100-150 kaček.

Opět použiji prototypovací desku NodeMCU, jejíž mozek tvoří mikrokontroler s podporou Wi-Fi ESP8266. Kusová cena na eBayi se u ověřených prodejců pohybuje okolo 80-150 korun. Pak budeme potřebovat pár drátků a samozřejmě magnetické relé pro spínání naší 230V sítě.

32348848 195445814
NodeMCU v3 a 5V moduly s magnetickým relé na eBayi

Na eBayi a dalších nejčastěji narazíte na některou z variant modulů s pětivoltovým relé Songle SRD-05VDC-SL-C jako na obrázku níže. Princip fungování magnetického relé je prostý. Z jedné strany je připojený živý (zpravidla hnědý) 230V vodič lampy a z druhé napájení samotného relé (v našem případě 5V VCC a GND) a signální vodič (IN), kterým to celé ovládáme.

63217061 368549875 487007901
Modul magnetického relé a NodeMCU v3. Podle popisků jste si mohli všimnout, že se v tomto případě jedná o relé s 12V napájením, 5V model ale vypadá na první pohled stejně.

Když bude na signálovém vodiči vyšší napětí, relé pomocí elektromagnetu sepne 230V obvod napájení lampy a ta se rozsvítí. Jakmile napětí na signálovém vodiči klesne, relé obvod zase odpojí a lampa zhasne.

Stačí tedy signálový vodič propojit s některým z digitálních pinů Arduina a dalších mikropočítačů a na tomto pinu pak nastavovat buď vyšší napětí (HIGH) pro sepnutí, nebo naopak nižší (LOW) pro odpojení. NodeMCU sice pracuje v napětí 3,3V, což by pro napájení 5V relé nemuselo stačit, jeho poslední neoficiální generace V3 ale disponuje i pinem VU (Voltage USB), který má napětí USB konektoru a tedy nabídne okolo 5V. Nabízí se také podobné destičky Wemos D1 Mini, které na eBayi seženete také za cenu dvou, tří piv.

124983791 834477106 622735554 774096463
Příprava kabelu lampičky (využil jsem rozpojení vodičů v místě původního vypínače lampičky) a připojení k elektromagnetickému relé a ModeMCU. Žlutý signálový vodič relé je na NodeMCU připojený na digitální pin D1. Napájení relé pak na prototypovací desce poskytují piny 5V napětí (VU) a zem (GND).

Dva režimy elektromagnetického relé

Výše popsané schéma má jednu nevýhodu. Abychom sepnuli nějaký 230V obvod, musí být relé neustále pod napětím a může spotřebovávat zbytečně moc elektrické energie. Každý takový modul relé má tedy zpravidla tři konektory pro připojení obvodu s 230V napětím.

Jejich význam je vyznačen buď schematickou grafikou jako v našem případě, anebo pomocí zkratek NO (Normally Open), NC (Normally Closed) a C (Common).

911580246
Režimy NO a NC zapojení 230V vodiče do modulu relé

Jeden konec vodiče naší lampy tedy bude vždy připojený do zdířky C a ten druhý buď do NO, nebo NC. Když bude připojený do NO, obvod bude za běžných okolností otevřený a uzavře se jen v případě, že sepneme relé. Pokud však bude vodič připojený do zdířky NC, bude za běžných okolností stále uzavřený a obvodem tedy bude procházet proud, který můžeme naopak pomocí relé odpojit. Tento scénář se hodí pro případy, kdy obvodem většinu času prochází proud a my jej potřebujeme jen čas od času krátce rozpojit. V takovém případě může být samotné relé po většinu času odpojené od elektřiny a aktivujeme jej až podle potřeby.

509299642 147779356
Zapojení v režimu NO (dokud nesepnu relé, 230V obvodem neteče proud) a NC (dokud nesepnu relé, 230V obvodem teče proud)

Lampa je ale po většinu dne vypnutá, takže nám samozřejmě více vyhovuje ten první a energeticky náročnější scénář.

A to je vlastně vše. Nyní si už opět vypůjčím programový kód našeho říjnového příkladu a budu tentokrát již velkou lampu rozsvěcovat a zhasínat klepáním na tlačítka ve webovém prohlížeči třeba z postele. Stačí mít po ruce mobil.

126009487 165181221 861753331 984808360
Relé v nesepnutém a sepnutém stavu a ovládací webový formulář na jednoduchém HTTP serveru spuštěném v nitru NodeMCU

Spínací a vypínací URL adresa je zároveň jednoduchým API, takže bych nad tím vším mohl postavit třeba onu mobilní aplikaci. A pokud bude NodeMCU stále spuštěné, mohu dopsat i pár řádků kódu pro automatické spouštění v daný čas. Ostatně práci s přesným RTC časem a modulem s vlastní baterií jsme si na Živě.cz. už také vyzkoušeli. V případě NodeMCU ale není obvod RTC hodin potřeba, přesný čas totiž můžeme synchronizovat pomocí internetového spojení.

Napojení na experimentálního hlasového asistenta vlastní výroby

NodeMCU jsem pomocí spínací URL nakonec napojil na svého čistě studijního hlasového asistenta jménem KUBA, a mohu tak ovládat osvětlení třeba hlasovým povelem „Ó ty velevážená umělá inteligence, zapni světlo.“ Pokud tedy nechcete čekat, až se Google Home a další naučí česky, prostě si je sami sestavte a naprogramujte. Titul z MIT k tomu dnes opravdu nepotřebujete.

Ovládání magnetického relé ve formě modulu pro Arduino a další drobné mikrokontrolery je tedy velmi jednoduché. Jelikož ale pracujeme s vyšším napětím a proudem, zároveň je třeba myslet na riziko úrazu elektrickým proudem při špatné manipulaci s vodiči. Tento článek je tedy pouze demonstrací, jak dané součástky fungují a nelze jej považovat za návod hotového elektrického produktu.

Na úplný závěr nesmím zapomenout opět na zdrojový kód pro NodeMCU a Arduino IDE

#include <ESP8266WiFi.h>

// Nazev Wi-Fi site, do ktere se mam pripojit
const char* ssid = "Kloboukovo";

// Heslo Wi-Fi site, do ktere se mam pripojit
const char* password = "********";

// Je rele sepnute?
bool rele = false;

// Webovy server pobezi na portu 80 (HTTP komunikace)
WiFiServer server(80);

// Promenna s HTTP pozadavkem z prohlizece
String request;

void setup() {
 // Nastartuj seriovou linku, do ktere budu vypisovat provozni informace
 Serial.begin(9600);

 // Na pin D1 je pripojene rele, nastavim jej tedy na vystup
 // Zaroven nastavim nizkée napeti, aby se rele po startu nesepnulo
 pinMode(D1, OUTPUT);
 digitalWrite(D1, LOW);

 // Pripojeni k Wi-Fi
 Serial.println();
 Serial.print("Pripojuji k ");
 Serial.println(ssid);
 WiFi.begin(ssid, password);

 // Dokud nejsem pripojeny k Wi-Fi,zapisuj do seriove linky tecky progressbaru
 while (WiFi.status() != WL_CONNECTED) {
 delay(100);
 Serial.print(".");
 }

 // Jsem pripojeny k Wi-Fi a mohu pokracovat
 Serial.println();
 Serial.println("WiFi pripojena!");

 // Spusteni serveru
 server.begin();
 Serial.println("Server spusten");

 // Napis IP adresu, kterou mikropocitac dostal
 Serial.print("Pouzij k pripojeni tuto adresu: ");
 Serial.print("http://");
 Serial.println(WiFi.localIP());
}

// Smycka loop se opakuje stale dokola
void loop() {
 // Pokud ma promenna rele hodnotu pravda, posli na pin D1 vyssi napeti a sepni rele
 if (rele == true) digitalWrite(D1, HIGH);
 else digitalWrite(D1, LOW);

 // Cekej, dokud se nepripoji nejaky klient
 WiFiClient client = server.available();
 if (!client) {
 return;
 }

 // Cekej, dokud klient neposle nejaka data
 Serial.println("Novy klient!");
 while (!client.available()) {
 delay(1);
 }

 // Precti a vypis prvni radek od klienta s URL dotazem
 request = client.readStringUntil('\r');
 Serial.println(request);
 client.flush();

 // Pokud je v radku vyraz ON, nastav promennou rele na pravdu
 if (request.indexOf("ON") > -1) rele = true;
 // Pokud je v radku vyraz OFF, nastav promennou rele na nepravdu
 if (request.indexOf("OFF") > -1) rele = false;

 // Posli pripojenemu klientu HTML kod stranky s tlacitky
 client.println("HTTP/1.1 200 OK");
 client.println("Content-Type: text/html");
 client.println("");
 client.println("<!DOCTYPE html>");
 client.println("<html><body>");
 client.print("<h1>Muj Wi-Fi spinac pro 230V</h2>");
 // Tlacitko pro sepnuti rele vede na adresu /ON
 client.println("<a href=\"/ON\"><button>Sepnout rele</button></a>");
 // Tlacitko pro odpojeni rele vede na adresu /OFF
 client.println("<a href=\"/OFF\"><button>Vypnout rele</button></a><br />");
 client.println("</body></html>");

 // To je vse, ted jeste 1 ms pockam a cela smycka se muze zopakovat
 delay(1);
 Serial.println("Klient odpojen");
 Serial.println("");
}

Téma: Programování pro děti

programovaniprodeti.jpgAlgoritmické myšlení, logické uvažování, dovednost analyzovat problém a najít jeho řešení… to se hodí už dnes a do budoucna budou tyto schopnosti čím dál důležitější. Zábavnou formou se k nim vyplatí vést i děti. Sledujeme pro vás dostupné nástroje, stavebnice, služby a postupy.

Doporučujeme speciál Computeru Programování pro děti. Za 99 Kč si ho můžete objednat online a během několika dnů vám dorazí do poštovní schránky.

Diskuze (33) Další článek: Google koupil startup Cronologics, který vyvíjí vlastní chytré hodinky CoWatch

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , , ,