Chytrá WiFi zásuvka Sonoff S26
Chytrá domácnost umožňuje ovládat elektrické spotřebiče na dálku. A přesně to umožní zásuvka Sonoff S26.
Arduino modul s proudovým senzorem ACS712 funguje na principu Hallova jevu, integrovaný obvod umístěný na modulu tedy generuje elektrické napětí na základě okolního elektrického a magnetického pole, které vytváří elektrický proud procházející svorkami. Nám pak stačí změřit zmíněné napětí z modulu s proudovým senzorem ACS712 pomocí Arduino analogového vstupu a přepočítat ho na proud za pomoci konstanty, kterou udává výrobce proudového senzoru. Samotný senzor ACS712 lze zakoupit ve dvou variantách pro měření různých velikostí proudu, jedná ±5A a ±20A. Tento článek je zaměřen na 5A variantu, ale při použití jiného typu modulu stačí v kódu u proměnné „konstanta“ použít příslušnou hodnotu uvedenou v komentáři. Další výhodou proudového senzoru ACS712 je možnost měřit proud v obou směrech, můžeme tedy dostat kladný i záporný výsledek. Při měření nulového proudu tím pádem dostaneme napětí rovné polovině napájecího napětí modulu, tedy Vcc/2.
Pro úspěšné propojení s Arduinem je potřeba na modulu s proudovým senzorem použít 3 propojovací piny. Připojíme VCC na +5V, OUT na A0 a GND na zem. Výstupní pin senzoru OUT můžeme samozřejmě připojit na jiný volný analogový vstup Arduino desky. Měřenou zátěž pak zapojíme mezi svorky na druhé straně modulu, jak můžete vidět na obrázku níže.
První ukázkový kód obsahuje měření stejnosměrného proudu (DC). Na začátku programu nastavíme číslo pinu pro analogový vstup a dále inicializujeme proměnnou s konstantou pro přepočet měřeného napětí na proud a nastavení offsetu na polovinu napájecího napětí. V podprogramu setup nastavíme komunikaci po sériové lince s rychlostí 9600 baud a zvolený analogový vstupní pin jako vstupní. V loop smyčce pak při každém průběhu vytvoříme proměnné pro měření a výpočty proudu a v další smyčce for provedeme za sebou 100 měření včetně přepočtu napětí na proud. Jednotlivých 100 výsledků měření zároveň ukládáme do proměnné „soucet“ a po dokončení měření vydělíme tuto proměnnou 100, aby jsme získali průměr z provedených 100 měření. Tento výsledek poté vytiskneme po sériové lince a po malé pauze se celý program opět opakuje.
// Proudový senzor ACS712 5A // Měření stejnosměrného proudu // číslo pinu připojeného analogového vstupu const int analogIn = A0; // konstanta pro přepočet naměřeného napětí na proud // použijte 100 pro 20A verzi int konstanta = 185; // proměnná pro nastavení offsetu, polovina Vcc int offset = 2500; void setup(){ // komunikace přes sériovou linku rychlostí 9600 baud Serial.begin(9600); // inicializace analogového vstupu pinMode(analogIn, INPUT); } void loop(){ // proměnné pro měření a výpočty proudu int analog= 0; double napeti = 0; double proud = 0; double soucet = 0; // provedení stovky měření pro ustálení výsledku for(int i=0;i<100;i++){ // načtení hodnoty analogového vstupu analog = analogRead(analogIn); // přepočet napětí na proud dle informací od výrobce napeti = (analog * 5000.0) / 1023.0; proud = (napeti - offset) / konstanta; // uložení výsledku pro následné zprůměrování soucet += proud; delay(10); } // výpočet průměru ze stovky měření proud = (soucet/100); // výpis výsledku na 3 desetinná místa Serial.print("Proud: "); Serial.print(proud,3); Serial.println(" A"); // vyčkej 1 s kvůli zbytečnému množství tisknutých znaků delay(1000); }
Pokud potřebujete měřit střídavý proud (AC), je zde uveden také druhý ukázkový kód. Jeho začátek je podobný s předchozím příkladem. V loop funkci pak využíváme námi vytvořenou měřící funkci zmerVpp, která s využitím funkce while (opakování smyčky do splnění podmínek – rozdíl mezi uloženým časem a aktuálním 1 vteřina) vždy najde maximální a minimální hodnotu napětí a vrátí její rozdíl. Při tisknutí výsledku si můžete všimnout, že proměnné jsou označeny jako RMS (Root Mean Square), což v češtině znamená efektivní hodnota proudu.
// Proudový senzor ACS712 5A // Měření střídavého proudu // číslo pinu připojeného analogového vstupu const int analogIn = A0; // konstanta pro přepočet naměřeného napětí na proud // použijte 100 pro 20A verzi int konstanta = 185; void setup(){ // komunikace přes sériovou linku rychlostí 9600 baud Serial.begin(9600); // inicializace analogového vstupu pinMode(analogIn, INPUT); } void loop(){ // proměnné pro výpočty proudu double napeti = 0; double napetiRMS = 0; double proudRMS = 0; napeti = zmerVpp(); // přepočet napětí na proud napetiRMS = (napeti/2.0) *0.707; proudRMS = (napetiRMS * 1000)/konstanta; // výpis výsledku na 3 desetinná místa Serial.print("Proud: "); Serial.print(proudRMS,3); Serial.println(" A"); } float zmerVpp() { // proměnné pro měření float vysl; int napAng; int maximum = 0; int minimum = 1023; unsigned long mezicas = millis(); // opakování měření po dobu 1 vteřiny while((millis()-mezicas) < 1000) { // načtení hodnoty analogového vstupu napAng = analogRead(analogIn); // hledání maxima if (napAng > maximum) { maximum = napAng; } // hledání minima if (napAng < minimum) { minimum = napAng; } } // přepočet hodnoty analogového vstupu na napětí vysl = ((maximum - minimum) * 5.0)/1023.0; return vysl; }
Po nahrání programu do Arduino desky si můžeme otevřít Sériový monitor a sledovat změřený proud mezi svorkami.
Jako výsledek dostaneme podobný výpis:
Proud: 0.955 A Proud: 0.950 A Proud: 0.942 A Proud: 1.288 A Proud: 1.279 A
Rád bych zde upozornil, že použitý proudový senzor ACS712 nelze využívat jako přesný ampérmetr, protože při malých proudech do cca 300 mA není jeho měření moc přesné kvůli okolnímu elektromagnetickému rušení. A druhá poznámka je k uvedeným konstantám, kdy sám výrobce je označuje jako orientační. Pokud byste tedy chtěli senzorem měřit přesnější hodnoty, doporučuji srovnat jeho výstup s jiným měřícím přístrojem lepší přesnosti na několika různých hodnotách proudu a příslušně upravit měřící konstantu. Já osobně jsem zjistil, že můj testovaný modul ve variantě 5A a v měřeném rozsahu 1-3 A udával nejlepší výsledky s konstantou 125.
Seznam použitých komponent:
http://dratek.cz/arduino/1072-arduino-5a-proudovy-senzor-acs712-1438011598.html
http://dratek.cz/arduino/1222-arduino-proudovy-senzor-20a-modul-acs712-1458245452.html
http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
http://dratek.cz/arduino/844-arduino-nepajive-pole.html
http://dratek.cz/arduino-kabelaz-propoje-rozsireni/1063-arduino-vodice-samec-samec-40-kusu.html
Chytrá domácnost umožňuje ovládat elektrické spotřebiče na dálku. A přesně to umožní zásuvka Sonoff S26.
e-Paper displeje už jsou dostupné i pro bastlení za rozumné ceny a pro jejich ovládání se hodí tento Driver.