Pornind de la un filmulet, care in descriere are toate informatiile necesare pentru a realiza un vu-metru cu leduri adresabile, am inceput intai sa compilez programul si apoi am facut un montaj de test.
Articolul de la care am inceput se numeste Amazing Light Effects With VU Meter Using RGB LED
Folosind schema si sketch-ul din articolul Amazing Light Effects With VU Meter Using RGB LED se pot regla intensitatea si nivelul de zero al semnalului pentru partea de vumetru si pot alege mai multe jocuri de lumini sau de vu-metre:
Am folosit aceasta schema si cu programul din articolul Neo Pixel Arduino Vu Meter pentru a vedea cum reactioneaza mai programul cel complex, din primul articol.
Am facut un filmulet cu vumetrul simplu, in care am folosit sketch-ul vumeter_simple.ino (in care semnalul audio din preamplificator este la A2), iar pinul de comanda pentru banda d eleduri adresabile este la D6.
apoi am inceput sa fac filmulete cu cel complex, modifican intre timp programul pentru efecte cat mai frumoase. Programul este vumeter_complex.ino si in afara de conectarea la pinul A2 a preamplificatorului audio si iesirea catre leduri la D6, mai are un semireglabil (potentiometru) conectat la A0 pentru reglaj intensitate luminoasa si inca unul la A1 pentru reglarea nivelului de "liniste" pentru partea de vu-metru (stingere leduri cand nu e semnal).
Partea cea mai grea a fost a preamplificatorului de microfon, deoarece in articole este specificat un modul de preaamplificare cu MAX4466, care arata asa
avand o schema tipica de preamplificator
iar eu aveam unele care sunt "tari de ureche", deoarece nu au amplificare, ci sunt doar pentru teste gen batut din palme sau fluierat
care are schema, ce contine doar 2 comparatoare de tensiune, utile pentru detectie depasire un prag predefinit (reglat)
Deoarece trebuie sa fluier sau sa dau muzica extrem de tare, am construit un preamplificator, folosind schema din articolul LM358 microphone amplifier doar ca rezistenta din reactie are 470k in loc de 100k
Sistemul de detectie al unui obiect sau a unei persoane la o distanta mai mica de un senzor ultrasonic combinat cu un releu de timp poate fi folosit pentru a aprinde lumina din curte, sa actioneze un electromagnet pentru dechiderea unei usi sau poate avea o aplicatie mai speciala cum ar fi pornirea unei pompe pentru pulverizarea unor susbstante intr-un tunel de dezinfectie.
Schema montajului este
In urma unei discutii cu adicontakt (care a fost pe elforum), am inceput sa studiez despre cum sa implementez modul de programare de la distanta OTA la placile de dezvoltare ce au ESP8266.
Am realizat ca am intalnit asa ceva la ceasul prezentat in articolul Ceas animat complex cu date de pe net
dar atunci nu a intrat in atentia mea modul de lucru.
Revenind, am cautat pe net despre OTA si am alesa sa ma informez din articolul ESP8266 OTA Updates with Arduino IDE | Over the Air de pe site-ul lui Santos.
Cautand un link pentru libraria ArduinoOTA am gasit articolul OTA Updates cu mai multe detalii, inclusiv despre configurarea cu parola si alte facilitati.
In mare, trebuie sa aven instalat Pyton 2.7 (daca aveti configurate placile cu ESP32, sigur il aveti) apoi se incarca programul BasicOTA din libraria ArduinoOTA
si astfel apare un port virtual cu un nume ce include adresa IP locala
Apoi se incarca programul dorit, in cazul de fata, un program ce trimite datele de la un senzor DHT11 (sau mai bine DHT22) si o tensiune pe un canal Thingspeak, acesta fiind adicontakt_DHT_OTA.ino.
Programul este derivat din unul clasic, la care am adaugat partea de conectare OTA.
Incarcand noul sketch, pe canalul de Thingspeak se pot vedea
In urma testelor cu un DHT22 (AM2302) am constatat ca apar uneori valori anormale, asa ca am pus un DTH11, dar si la acesta au aparut, mult mai rar, ce-i drept, erori, asa ca am cautat o librarie care ar putea sa fie ai stabila pentru ESP8266, asa ca am dat de cea numita DHT sensor library for ESPx
si am constatat ca si pentru DHT11 arata temperatura "cu virgula"
Impreuna cu zvonacfirst de pe elforum, am realizat un multimetru de panou cu protectii, realizat dupa ideea dansului ca un sandvis (din 3 placi: placa de baza la mijloc, afisaj LCD1602 si placa auxiliara), dupa cum se vede in imaginile de mai jos,
dar mai ales in filmuletul urmator:
Modulul trebuie sa faca urmatoarele:
- sa masoare tensiunea de intrare pana la cca. 55V
- sa masoare curent consumat pana la cca 10A
- sa calculeze puterea consumata
- sa masoare temeperatura cu un senzort LM35
- in functie de temperatura masurata sa porneasca cu turatie scazuta ventilatorul, ulterior sa o creasca pana la maxim
- daca temperatura este redusa se poate cupla releul si astfel se alimenteaza sarcina (consumatorul)
- daca temperatura este prea mare se decupleaza consumatorul si nu se mai poate face reconectarea decat dupa ce scade temperatura
- daca se depaseste curentul maxim se decupleaza consumatorul
- poate functiona si fara placa auxiliara comportandu-se ca un simplu multimetru de panou
Schema a suferit ceva modificari, incercand sa implementam pe 2 versiuni mari, cea a lui Georgel, cu un ATmega8 ce foloseste referinta interna de 2,56V, eu preferand pe un ATmega328 cu referinta externa cu TL431 la 2,495, deoarece dar merge si cucea interna e doar 1,1V si trebuiau deoarece nu trebuie multe modificari. In functie de compilare, se poate folosi cuartul extern sau cel intern. Ideea e(ra) sa se poate folosi ce e la indemana, dar pe parcurs, versiunea cu ATmega8 e (deja) la limita cu spatiul.
In mare, pe placa principala se gasesc:
- microcontrolerul cu oscilator cu cuart (in functie de preferinta, acesta poate lipsi)
- stabilizator de 5V, cu alimentare de la o sursa exterioara de 8-12V pentru ca se foloseste un LM7805 in capsula TO-220
- un divizor rezistiv pentru masurarea tensiunii
- un sunt de 10mOhmi si un sistem de amplificare cu operational, care a suferi mai multe modificari.
- senzor LM35
- referinta externa (doar la versiunea cu ATmega328 este strict necesara)
Pe placa auxiliara se gasesc:
- tranzistor de comanda + releu de cuplare/decuplare consumatori
- tranziator pentru alimentare ventilator
- avertizor sonor (buzzer activ)
Dupa incarcarea softului la modulul lui zvonacfirst, pe ecran apare urmatoarele informatii:
Cateva poze cu cablajele primului prototip de placa de baza, proiectate si realizate de zvonacfirst:
Dupa ce am primit si eu cablajele, am inceput sa pun piesele:
Dupa ce am testat prototipul, am adaugat niste noi masuratori pentru autocorectie in vederea reducerii influentei traseelor cablajului si faptului ca tensiunea pe sunt e foarte mica.
Acum, la pornire, modulul isi face un test si isi configureaza anumite valori:
- prezentare
- mesaj pentru deconectarea oricarui consumator de la borne;
- o masurare de offset (tensiune de iesire operational, fata de ce se estimase)
- masurare influenta alimentare releu
- masurare influenta alimentare ventilator la turatie maxima
- masurare influenta alimentare ventilator la turatie medie (PWM)
- masurare influenta alimentare releu si ventilator la turatie maxima
- masurare influenta alimentare releu si ventilator la turatie medie (PWM)
- mesaj pentru ca se poate conecta un consumator de la borne;
- daca nu este conectata alimentarea la conectorul modulului
- daca se conecteaza alimentarea (releul are contactul deschis, aparand semnul !)
- daca se apasa lung pe buton, releului conecteaza intrarea la iesire si consumatorul poate fi si el alimentat (releul are contactul inchis, aparand semnul =)
Am facut inca 2 filmulete, care arata cum se face autocalibrarea:
Pentru versiunea 2, tensiunea de referinta e de valoare apropiata si divizorul rezistiv pentru masurare tensiune poate avea valori: R1 = 47..56kΩ si R2 = 1kΩ
respectiv pentru versiunea 2 de R1 = 22kΩ si 1kΩ, pentru a acoperi 55V pe intrare.
Pentru variantele cu referinta de 2,56V (referinta interna la ATmega8) si rezistentele R1 = 22kΩ, R2 = 1kΩ, tensiunea maxima pe intrare este de aproximativ 59V, iar daca R1 = 47kΩ, R2 = 1kΩ de 123V.
Pentru variantele cu referinta de 2,495V (referinta externa cu TL431) si rezistentele R1 = 22kΩ, R2 = 1kΩ, tensiunea maxima pe intrare este de aproximativ 57V, iar daca R1 = 47kΩ, R2 = 1kΩ de 120V.
Pentru versiunea cu referinta de 1,1V (referinta internal ATmega328) se poate folosi doar versiunea de minim R1 = 47kΩ, R2 = 1kΩ, pentru care tensiunea maxima este de 53V, recomandandu-se R1 = 51kΩ, R2 = 1kΩ, pentru care tensiunea maxima este de 57V sau eu as recomanda R1 = 56kΩ, R2 = 1kΩ, pentru care tensiunea maxima este de 64V.
Pentru masurarea curentului, schema initiala este
eu am preferat schema cu ridicarea nivelului tensiunii pe intrarea suntului, deci si pe iesirea operationalului:
Pentru a face, cel putin, pentru moment, se masoara tensiunea pe iesirea operationalului la curent 0 (fara consumator) si apoi la un curent cunoscut, de aceea in program, exista configurare versiuni:
- pentru dzvonacfirst, ATmega8 cu referinta interna, R1 de 56kΩ
- pentru mine, ATmega328 cu referinta externa cu TL431 si R1 de 22kΩ
- pentru zvonacfirst, ATmega328 cu referinta interna si R1 de 47kΩ
In functie de amprenta releului sau cum este legat contactul COM-NC sau COM-NO, se modifica comanda acestuia din program
Curentul maxim la care se decupleaza consumatorul se modifica din linia:
Configurarile se aleg functie de "persoana", adica de variabila model:
Initial se va face corectia curentului, modificand variabila ka pana indicatiile de curent sunt corecte (valoarea optima se obine in mai multi pasi), apoi kv pentru tensiune (valoarea optima se obine in mai multi pasi), sunt configurabile in zona de setup()
Cand ma refeream ca "valoarea optima se obine in mai multi pasi', procedura e urmatoarea: daca se masoara pe aparatul de masura, considerat etalon ca avem un curent de 223mA (adica 0,223A), iar pe indicatorul nostru este 0,19A, coeficientul profilului nostru e ka = 1.014, noul coeficient va avea valoarea de 1,014 * 0,223 / 0.19 = 1.19.. s eincarca din nou programul cu noua valoare si trebuie sa se obtina 0,22A, apoi se masoara la alta valoare de curent pana sunteti multumiti de indicatii. Similar, se face si pentru coeficientul pentru tensiune.
Trebuie sa recomand folosirea, pentru referinta externa, a unui TL431 cu terminatia B (precizie 0,5%) sau A (1%), deoarece 2% il are si referinta interna a micocontrolerului:
Cam atat e de prezentat despre programul din versiunea actuala, care este indicator_panou_0c0f.ino.
Ca de obicei, si schema si programul pot fi imbunatatite, dar pentru moment, cam asta am testat si eu si zvonacfirst, care mi-a trimis masuratori pe un domeniu mai larg,din care se vede precizia de masura: