Se afișează postările cu eticheta NodeMcu. Afișați toate postările
Se afișează postările cu eticheta NodeMcu. Afișați toate postările

miercuri, 22 mai 2019

Masurare tensiune si curent cu ESP8266 pentru monitorizare panou solar

    Microcontrolelere ESP8266 si, implicit, placile de dezvoltare echipate cu ele, gen WeMos, NodeMCU au doar o intrare de masura analogica, care are maxim 1,0V in cazul microcontrolerului si 3,3V pentru placile de dezvoltare datorita unui divizor (uzual 220k/100k). A se vedea ce am scris in articolul Ceas matriceal animat cu ESP8266 si RTC (DS3231) cu informatii despre temperatura si umiditate (3)
   Aceste informatii sunt din articolul NodeMCU ADC with Arduino IDE
   Pentru a monitoriza, de exemplu, un panou solar de cca 300W, vom folosi un divizor rezistiv R2 = 43k cu R1 = 1k1, respectiv un senzor de curent cu ACS712-20 (sau ACS712-30)... in caz extrem se poate folosi si un senzor ACS712-05B, deoarece senzorul permite un supracurent de pana la 12-13A. De asemenea, vom folosi un divizor rezistiv R4 = 3k3 cu R3 = 1k1.
   Dupa cum se observa, sunt 2 iesiri, care nu se pot masura direct cu ESP8266, asa ca vom folosi un comutator CMOS, eu alegand comutatorul cvadruplu CD4066,
 
din care voi folosi 2 comutatoare (A si B)
   Deoarece placile de dezvoltare cu ESP8266 lucreaza cu tensiunea de 3,3V se alimenteza integratul cu aceea tensiune. Cand se masoara tensiunea de pe A'0 se comanda pinul 13 pentru a coneca pinul 1 cu 2, iar daca se masoara tensiunea de la iesirea senzorului ACS712 se comanda pinul 5 pentru a conecta pinul 3 cu 4. Pinii 2 si 4 sunt conectati impreuna, deci acolo vom lega pinul de masura analogic ADC0 sau AN0 (A0) al placii.
   Senzorii de curent ACS712 i-am prezentat in articolele Senzorul de curent ACS712 (I) si Senzorul de curent ACS712 (II)
care au in repaus pe ieisire 2,5V crescand aceasta tensiune (sau scazand, functie de sensul de conectare) cu 0,185V/A pentru sensorul de 5A, 0,1V/A pentru senzorul de 20A, respectiv 0.066V/A la cel de 30A
   Folosind divizorul nostru, vom avea pentru 3,3V la intrarea lui
   De test, daca nu s-ar conecta senzorul de curent si am lega iesirea divizorului R4-R3 la un voltmetru, am avea urmatoarele valori:
   Daca am conecta un pinul ce ar corespunde ieisirii senzorui de curent de 5A (ACS712-05B) pentru tensiunile de test (3,3V si 0V) am avea corespondenta curentilor
asta trebuie sa obtinem daca incarcam un sketch de test.
    Pentru a testa functionarea partii de masura curent, ne folosim de informatiile din articolul The ACS712 Current Sensor with an Arduino doar ca am adaptat ptrogramul pentru cazul meu, cand am acel divizor 3k3-1k1 si tensiunea de referinta de 3,3V (de fapt e tensiunea maxima pe intrarea placilor cu ESP8266). Programul de test este test_ACS712_esp8266.ino si in ecranul de monitorizare seriala vom observa ceva de genul (test cu 4,9V la intrare)
   Cu valorile din schema, pentru conectarea pinului de masura la 3,3V vom obtine la intrarea pinului A0 de pe placa de dezvoltare cu ESP8266:
    De test, daca am lega iesirea divizorului R2-R1 la un voltmetru, am avea urmatoarele valori:
    Pentru testarea partii de divizor la partea  de masura tensiune, se folosesc informatiile din articolul Arduino 25V Voltage Sensor Module User Manual, programul de test fiind test_voltagedivider_esp8266.ino.
   In ecranul de monitorizare seriala, vom gasi ceva de genul
   Pentru teste reale, impreuna cu amicul Alex, incepem si niste teste reale...
   Pasul urmator este cel de testare a masuratorilor de tensiune si curent conform schemei indicate la inceputul articolului si pentru asta am adaugat comanda pe rand a comutatoarelor din CD4066, dupa cum se vede in programul test_VA_esp8266.ino.
   Pentru valorile lui si o calibrare bruta, Alex a obtinut:
23.05.2019
    Deoarece initial ma gandisem sa testeam pe un ESP8266 "chior", am dimensionat divizoarele pentru tensiunea maxima pe intrarea analogica de 1,0V, apoi testele au fost facute pe placa cu ESP8266 cu tensiune maxima de 3,3V, asa ca tensiunile maxime sunt

joi, 11 aprilie 2019

Ceas matriceal animat cu ESP8266 si RTC (DS3231) cu informatii despre temperatura si umiditate (3)

    Dupa ce am tot discutat cu Mihai ce sa mai punem la acest ceas, am ajuns la concluzia ca e mai bine sa punem un fotorezisor cu care sa se regleze intensitatea luminoasa.
    Fata de schema folosita anterior
am adaugat o fotorezistenta si o rezistenta de 10k, cum este circuitul desenat in articolul NodeMCU With LDR
   Schema devine
   Deoarece placa de dezvoltare NodeMCU are un divizor rezisitiv, dupa cum se vede in materialul de la https://upverter.com/jgoldshlag/db39ed0e7f46a523/nodemcu/, trebuie adaugate inca 2 rezistente daca se foloseste un ESP12 separat, pentru limitarea tensiunii la 1V pe intrarea anlogica, ca in articolul NodeMCU ADC with Arduino IDE
   Programul MatrixClock_ESP8266_DHT_3e.ino indica, prin aprinderea unui led ca nu s-a sincronizat ceasul intern (RTC) cu cel de pe serverul NTP prin conectarea periodica la acesta folosindu-ne de reteaua wi-fi de acasa.
   Mihai a realizat un ceas intr-un patcablu de 60mm;

joi, 10 ianuarie 2019

Comunicare intre 2 ESP-uri in retea proprie

   Microcontroler-ele ESP8266 care se gasesc pe placi simple sau cu interfata USB (NodeMCU, WeMos, etc) pot lucra in retele Wi-Fi ("uairles") ca un simplu client intr-o retea sau pot fi ele "router-e" in modul AP (Acces Point)
   Multe proiecte lucreaza intr-o retea Wi-Fi clasica, dar am gasit un material in care se foloseste un ESP8266 ca AP (creeaza reteaua) si altul care se conecteaza la acea retea Wi-Fi si comunica intre ele.
   Materialul se numeste Accesspoint - Station Communication Between Two ESP8266 MCUs si a fost usor de reprodus.
   Am facut si eu mici modificari in programele AP-ului si clientului (AP_1.ino, respectiv ST_1.ino), pe ecranele de monitorizare seriala, vedem, la server-ul (router-ul) nostru
iar la client, care se conecteaza imediat la reteaua "Wemos_AP" si saluta pe sef
care-i raspunde
  Reteaua Wi-Fi "Wemos_AP" o pot vedea si de pe telefon
si ma conecta la ea
avand parametrii
   Am facut si un prim filmulet numit Comunicare intre 2 ESP-uri in retea proprie.

14.01.2019
    Dupa o scurta perioada am observat ca se pierde comunicarea dintre cele 2 ESP-uri, din cauza "clientului", asa ca am incercat diverse metode (subrutina de reconectare, reset soft, apoi hard reset)... singura cu sanse vizibile de reusita a fost reset-ul hard, dar si acolo am intampinat probleme, pana mi-am adus aminte ca am mai rezolvat cumva aceasta problema la o placa de retea clasica cu W5100 si am presentat solutia in articolul Termostat controlat de pe o pagina web (2).
    Pe scurt solutia era sa schimb ordinea clasica a definirii pinului ca iesire si trecerea lui in HIGH, adica intai i spun ca trebuie sa fie in HIGH si apoi ca e pin ca iesire...
ca sa fiu sigur i-am mai "spus" odata ca trebuei sa fie in HIGH...
   Schema de conectare e simpla: pinul D0 se leaga la RST (RESET) si acesta ajunge in LOW cand se numara prea multe iteratii sau se pierde legatura sau "se pierd date pe drum"...
   Am facut si 2 filmulete:
Comunicare in retea proprie intre 2 ESP-uri cu autoreconectare
Accesspoint - Station Communication Between Two ESP8266 MCUs
19.01.2019
  Am schimbat D0 cu D5 si legatura e mult mai stabila.
01.02.2019
    Am testat si versiunea de a "culca" clientul si a-l "trezi" periodic pentru a putea reduce mult curentul, pentru a putea face ceva util, gen statie meteo cu comunicare wi-fi. Am realizat un filmulet in care se poate vedea partea cu consumul, care se numeste Comunicatie wi-fi intre 2 ESP-uri si se revine la conectarea pinului D0 la RESET, "client"-ul foloseste programul ST_1_sleep.ino

versiunea in engleza fiind wifi communication between 2 ESP8266, client using sleep system

luni, 4 decembrie 2017

Termostat cu NodeMCU (ESP8266) pe pagina Cayenne

   Dupa ce m-am familiarizat un pic cu serverul Cayenne si configurarile pentru placa de dezvoltare NodeMCU v.0.9 (ESP8266), am realizat un sistem de imi monitorizeaza temperatura si umiditatea relativa a aerului prin informatiile primite de la un senzor AM2302 (DHT22) si care imi poate comanda un led (poate fi folosit is un releu) de pe o interfata PC sau telefon cu Android sau iOS (iPhone) folosindu-ma de o placa NodeMCU (ESP8266), acum prezint un sistem de termostat.
   Termostatul foloseste acelasi senzor AM2302 (DHT22) pentru temperatura si umiditatea relativa a aerului din incinta, comanda se face de pe o iesire digitala a placi NodeMCU (aceeasi ca si in proiectul anterior), dar reglajul se face de pe 2 butoane virtuale.
   Eu ma folosit pentru teste si ledurile de pe placa NodeMCU, ca si in proiectul anterior: ledul rosu de la GPIO16 (D0), ledul albastru de la GPIO2 (D4), senzorul este tot la GPIO5 (D1), iar ledul exterior inseriat cu o rezistenta de 100 ohmi la GPIO0 (D3).
  Sketch-ul folosit este Cayenne_thermostat_ESP8266.ino si avem indicatie de led rosu daca temperatura este mai mare decat cea setata cu +0,25 grade, iar ledul albastru se aprinde cand temperatura este mai mica cu 0,25 grade Celsius.
  Eu am folosit aceasi placa si acelasi canal, cu cele 3 date de identificare unice
   Am adaugat noi butoane si indicatii (Add New -> Device/Widget), se selecteaza placa (denumita de mine NodeMCU v0.9) si se completeaza campurile.
   Butoanele si indicatiile mele sunt configurate astfel:
- temperatura de la senzor este receptionata pe canalul 1
- umiditatea relativa de la senzor este receptionata pe canalul 0
- starea de functionare a sistemului de incalzire (centralei) este receptionata pe canalul 2
- butonul de crestere a temperaturii dorite este pe canalul 3
- butonul de scadere a temperaturii dorite este pe canalul 4
- temperatura dorita este afisajata e canalul 5
   Pentru butoanele de comanda am folosit niste artificii, in sensul ca sunt butoane ON/OFF doar ca dupa ce sunt transmise datele la server revin automat pe liber, ca un fel de buton cu revenire.
  Temperatura setata este memorata in EEPROM-ul ESP-ului de pe placa NiodeMCU si afisata pe canalul 6.
   Tenmoeratura este reglata cu un histerezist total de 0,5 grade, de data asta centrala se opreste la +0,25 grade peste pragul reglat, respectiv reporneste cand tempratura este cu 0,25 grade mai putin de pragul reglat.
   Prezint 2 filmulete, in care descriu modul de functionare si reglare:
Termostat cu NodeMCU pe server Cayenne
Cayenne thermostat with NodeMCU
   Vlad a realizat si el un test cu o placuta cu un ESP8266MOD, din aceea fara simpla, si a constatat ca pot apare probleme daca se foloseste GPIO0 (D3), deoare ce la reconectarea alimentarii ii intra in modul de prograamre, asa ca el a mutat ledul pe GPIO15 (D8).
   Din aplicatia Android, ca si de pe cea iPhone, se pot modifica modurile de prezentare al butoanelor sau indicatiilor.
   Dupa intrarea pe canalul termostatului:
poate apare starea de centrala oprita
sau pornita
   Configuratia se poate vedea si modiifca si de pe telefon:
- umiditatea relativa a aerului, de pe canalul 0
- temperatura aerului, de pe canalul 1
- starea centralei, de pe canalul 2
- butonul de crestere a temepraturii dorite, de pe canalul 3
- butonul de scadere a temperaturii dorite, de pe canalul 4
- temperatura dorita, de pe canalul 5
    Am modificat  indicarea umidtatii relative ca un "ceas" (gauge):
si pot vedea urmatorile stari:
   Am modificat simbolurile pentru butoanele de crestere si scadere a temperaturii dorite:
obtinand
   Am schimbat si la centrala
obtinand
   Am schimbat iar la partea de indicare stare centrala
obtinand
   Pe pot vedea istorice ale parametriilor afisati, care se si pot descarca... deci e un termostat numai bun... se pot trimite si emailul la anumite valori ale temperaturilor, prin activare "trigger"-e.
- neactivate
- activare pentru trimitere email daca temperatura este peste 30 grade Celsius
- activare pentru trimitere email daca umiditatea este mai mare de 90%
- activare trimitere mesaje
   Ca idee, se pot primi SMS-uri, dar se trimit din SUA si nu stiu ce costuri sunt pentru mine sau cei ce au serverul, asa ca nu am abuzat de aceasta "facilitate".
   Ca idee, pe un IPhone prezentarea este cu o zecimala, pe cand la Android era cu 2 zecimale.