sâmbătă, 13 aprilie 2019

Comunicare unidirectionala intre 2 placi Arduino

english version

   Pentru a transmite unidirectional (adica doar de al un Arduino catre altul), dar si oarecum securizat  (adica fara sa apara erori de comunicare), se pot folosi mai multe metode, una find prin legare directa folosind comunicarea seriala (de fapt doar o parte din ea, TX de la cel care trimite si pinul RX de la cel ce primeste si firul de masa GND); alta metoda e cea prin transmisie radio (emitator RF -> receptor RF), comunicatii prin Wi-Fi, etc.
   Am testat, pentru simplitate, varianta cu legarea pe 2 fire (comunicatie unidirectionala) si masa (GND), schema de conectare este extrem de simpla:
   Pentru un exemplu de utilizare a unor transmissi simple dintre cel din stanga catre cel din dreapta, vedeti articolul Tech Thurday #005: Arduino to Arduino Serial Communication.
   Pentru a fi un experiment ce poate fi folosit la ceva practic, am ales sa folosesc pentru placa Arduino, ce trimite comenzi, un shield cu afisaj LCD1602 si 5 butoane conectate intr-un divizor rezisistiv, cum e cel prezentat la https://www.dfrobot.com si cel folosit de mine sa realizez un termistat; este cel prezentat in articolul Termostat cu control umiditate (higrostat) - partea a 3-a
Divizorul rezisitiv poate avea valorile astea, dar exista versiuni cu alte valori:
O schema mai detaliata se gaseste la https://www.dfrobot.com
Oricum sketch-ul de la https://www.dfrobot.com/ are posibilitatea alegerii din cele 2 versiuni
   Shiled-ul care l-am gasit eu primul este cel cu versiunea 1.0, asa ca am activat partea aceea:
   Am montat pini pentru a putea lega fire si am realizat un mic montaj la al 2-lea Arduino cu 5 led-uri (LED1 la D4, LED2 la D5, LED3 la D6, LED4 la D7 si LED5 la D8) la masa (GND, cu o rezistenta de limitare a curentului prin leduri de 220 ohmi (100 ohmi ... 1kohm) catre masa (GND).
   Pentru partea de codificare si transmitere a informatiei am folosit programul transmiter_v0.ino, iar pentru receptor si decodificator programul receiver_v0.ino.
   Starile sunt:
- nici un buton apasat
- apasat butonul SELECT (selectie)
- apasat butonul LEFT (stanga)
- apasat butonul RIGHT (dreapta)
- apasat butonul UP (sus)
- apasat butonul DOWN (jos)
  Am facut si un filmulet pentru a fi mai usor de inteles cum apar starile, este cel numit comunicare unidirectionala intre 2 Arduino
   Pentru a intelege cum functioneaza partea de codare din emitator, voi explica partea de divizor rezistiv.
- buton neapasat:
- buton RIGHT apasat
- buton UP apasat
- buton DOWN apasat
- buton LEFT apasat
- buton SELECT apasat
   Am mai facut 2 filmulete;
comunicare unidirectionala intre 2 Arduino (2)
Unidirectional Communication between 2 Arduino boards

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;

luni, 8 aprilie 2019

Camera de supraveghere cu ESP32-CAM

   Am cumparat o placa de dezvoltare ESP32-CAM, care are, dupa cum spune si numele, un microcontroler ESP32 si o camera OV2460 de 2Mpixeli (UXGA - 1632x1232).
   Am gasit mai multe filmulete si articole, dar eu am testat ce am gasit in articolul Ai-Thinker ESP32-CAM in the Arduino IDE si am instalat placa ESP32 cum e prezentat in articolul ESP32 Built-in OLED – Heltec WiFi Kit 32
    Am conectat-o ca in schema
si se face legatura cu firul verde cand se incarca programul, eventual se mai apasa si butonul de RESET daca nu intra in modul de programare, apoi se decupleaza legatura si se apasa si pe butonul de RESET.
    Am ales exemplul din librarie, cel cu camera si am vazut in serial adresa unde se conecteaza
   Am alimentat camera dintr-o baterie externa, pentru teste:
La adresa vazuta in serial apare o pagina cu controale:
   Am facut si 2 filmulete, pentru a vedea mai bine cum se comporta aceasta mica camera de supraveghere:
camera de supraveghere cu ESP32-CAM
ESP32-CAM as surveillance camera
09.04.2019
   Am intrerupt testele de lunga durata, deoarece am constatat ca bateria externa se descarca relativ rapid si a crescut temperatura pe placa de dezvoltare. Am masurat curentul consumat din usb si e maricel, deci trebuie o alimentare externa dintr-o sursa in comutatie sau un LM7805 cu radiator mare...
PS: Un alt articol foarte bine prezentat este ESP32-CAM Video Streaming and Face Recognition with Arduino IDE de pe site-ul https://randomnerdtutorials.com/ !

joi, 4 aprilie 2019

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

    Fata de articolul anterior, ceasul indica temperatura cu mai multa precizie, adica nu doar +250C, ci +24,70C.
    Programul folosit este MatrixClock_ESP8266_DHT_2.ino, iar schema este aceeasi
dupa cum constata si pisica noastra, Jessie:
   Modul de prezentare a orei, zilei, datei, temperaturii si umiditatii relative a aerului sunt prezentate in filmuletele:
LED Matrix Clock with ESP8266 (3)
09.04.2019
   Am modificat programul sa porneasca ceasul si daca nu are conexiune wi-fi, sa se reconecteze la reteaua wi-fi daca se deconecteaza intre timp, verifica la ora (sau mai rar) daca datele din RTC sunt corecte (ca si cele de pe serverul NTP) si isi schimba intensitatea de la minim pentru noapte (am ales intre orele 20 si 7 dimineata). Versiunea modifcata este MatrixClock_ESP8266_DHT_3.ino si permite:
- schimabre perioada de verificare server NTP:
- schimbare ore de noapte (intensitate luminoasa scazuta)

- indicare "evenimente" in ecranul de monitorizare seriala (conectare la retea wi-fi, verificare server NTP, primire date dae de la server NTP, autoreglaj ceas, schimbare intensitate luminoasa, masurare temperatura si umiditate relativa aer, etc)


duminică, 31 martie 2019

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

    Dupa ce am primit de la Mihai Brindusoiu un afisaj matriceal compus din 6 module comandate cu MAX7219, am testat si ei eu ceasurile cu autoreglare zilnica de pe internet, pe care le prezentasem anterior (aici si aici), apoi folosind programul care i-a fost modificat de autorul ceasului original pentru afisaje cu diverse configuratii (cel de aici) am adaugat si un senzor DHT22, schema devenind
   Programul adaptat de mine este MatrixClock_ESP8266_DHT.ino si el indica ca si cel original data incepand cu secunda 45, numele zilei si data, doar ca am mai adaugat si temperatura si umiditatea citite de senzorul DHT22 (AM2302). Eu folosesc libraria DHT de aici.
   Cel mai bine se vede functionarea in filmuletele realizate de mine:

   Am pastrat cea mai importanta facilitate, aceea de a se conecta la reteaua Wi-Fi locala si de acolo la un server dedicat (NTP) si a compara ora de acolo cu cea din RTC, daca difera se corecteaza ora din RTC.

4.4.2019
   Am schimbat putin programul (sketch-ul) pentru a fi mai usor de modificat partea de text deplasabil, dupa cum se vede AICI
   Am facut inca 2 filmulete:

vineri, 15 martie 2019

Termostat simplu (2)

   Desi pe blog am tot postat termostate, cu afisaje cu led, alfanumerice sau grafice, de data asta am conceput unul simplu, la cererea prietenului meu, George Dacin, care voia ceva simplu si bun..
   Unul similar se gaseste in articolul Termostat simplu, dar cel din acest articol a fost conceput dupa cerintele lui George...
   Schema, care permite alimentarea de la o sursa de 12Vcc, pentru a folosi un releu de 12V, are  inclus un stabilizator liniar cu LM7805 (cu radiator) pentru cei 5V necesari alimentarii placii de dezvoltare Arduino, a afisajului alfanumeric LCD1602 cu interfata i2c si a senzorului de temperatura de tip DS18B20:
  Se poate folosi si un modul de stabilizator in comutatie (step down) in locul stabilizatorului liniar LM7805, se poate folosi un releu de 5V si atunci se renunta la stabilizator si se aliemnteaza dintr-un incarcator de telefon "smart"... 
  Se mai poate renunta la tranzistor si releul si sa se utilizeze un modul cu releu, etc...
  Exista 2 butoane, unul de crestere cu pas de 0,1 grade Celsius si unul de scadere cu 0,1 grade Celsius a temperaturii dorite (valoarea reglata este memorata in EEPROM-ul microcontrolerului care echipeaza placa de dezvoltare Arduino Uno (sau Nano, Mini Po, etc). Programul scris de mine este simplethermostat.ino, si are reglat histerezisul la 0,5 grade Celsius, adica la scaderea temperaturii sub valoarea reglata, se alimenteaza releul, inchizand contactele COM-NO si astfel se porneste o centrala, un radiator, etc. Pe ecran apare in parea dreapta jos o steluta indicand conectarea sursei de caldura. Daca temperatura creste cu 0,5 grade Celsius peste valoarea dorita, releului i se taie alimentarea si se deschide contactul COM-NO.
   O alta poza cu termostatul realizat practic de George:
24.03.2019
   Deoarece am vazut la George ca exista posiblitatea sa se "joace" cineva si sa scoata din domeniul uzual valorile de temperatura dorita
am modificat in programul simplethermostat.ino sa (re)activez limitarea temperaturii minime si maxime, programul devenind din 
in
pentru reglaj de la +5 la +270C.

4.5.2019
   Sketch-ul simplethermostat.ino foloseste pentru afisajul LCD cu interfata i2c libraria de e stocata pe https://github.com/tehniq3/used_library !