ArduShop.ro

ArduShop.ro
cod tehnic.go.ro_02 reducere 5%, pentru vizitatorii paginilor mele !

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:

sâmbătă, 4 mai 2019

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

   Deoarece nu am facut mari modificari fata de ce prezentasem in articolul anterior, am pus partea 3a 😁...
   Am montat o fotorezistenta si o rezistenta de 10k alimentand-o din 3,3V pentru a proteja intrarea analogica, dupa cum am prezentat anterior, pastrand si schema
  Am schimbat ca citirea intensitatii luminoase  din mediul ambiant sa se faca la 2 secunde si daca nivelul citit e diferit de cel anterior sa schimbe luminozitatea afisajului. Programul actualizat este MatrixClock_ESP8266_DHT_3e1.ino, care pastreaza facilitatea de pornirea a ceasului chiar daca nu exista retea wi-fi si se reconecteaza daca s-a pierdut legatura, incearca sa se conecteze la un server NTP din ora in ora pentru a compara ora de acolo cu cea a cesului RTC, etc.
  Am facut 2 filmulte, in care am desscris modul de functionare:
Ceas matriceal animat cu higrometru si termometru (4)
LED Matrix Clock with ESP8266 (4)

marți, 23 aprilie 2019

Indicare schimbare stare buton

    Am folosit montajul din articolul precedent, realizat cu o placa Arduino Uno (o clona, de fapt), cu un shield cu un mic breadboard, un led (galben), un buton fara retinere si niste fire.
    Schema este aceeasi cu cea din articolul precedent:
    Programul testat este state-button_0.ino si functionarea este aratata in filmulele urmatoare:
indicare schimbare stare buton
indicator for state change of the button

sâmbătă, 20 aprilie 2019

Intarziere comanda iesire digitala folosind functia millis()

my english article

   Desi am mai prezentat folosirea functiei millis(), de exemplu in articolul Masurare timpi apasare butoane folosind functia millis(), am zis sa scriu acest articolas pentru o aplicatie mai "papabila", accea de a a aprinde un led cand se apasa un buton si acesta sa se stinga doar dupa un anumit timp, prin compararea timpului de cand s-a apasat butonul cu timpul actual. Bineinteles ca nu e un lucru nou, fiind prezenta in mai multe articole e net, unul fiind Using millis() for timing in care s eface aprinderea unui led cu intermitenta (acesta se gaseste si in exemplele din programul Arduino IDE)
    Eu am pus un buton la pinul D3 catre masa (GND) si un led la D4 conectat la masa (printr-o rezistenta de 100-470 ohmi). Am activat rezistenta de pull-up interna (de 10k) pentru a avea intrarea la plus cand butonul nu e apasat.
  Starile sunt, conform schemei logice
urmatoarele:
- sistem in asteptare, led stins
- buton apasat, led stins
- eliberare buton, led-ul se aprinde imediat
- led aprins timpul cat a fost definit
- led stins, in asteptare.
    Programul rescris de mine este delay_button.ino, care face ce am descris mai sus, iar in ecranul de monirtorizare seriala (Serial Monitor) vom vedea starile:
   Am inlocuit butonul cu un sensor de infrarosu, 
care in repaus are iesirea in LOW si cand este activat in HIGH, programul modificat devenind delay_sensor.ino.
in ecranul de monirtorizare seriala (Serial Monitor) vom vedea starile:
   Starile sunt similare:
- repaus, led stins
- detectie miscare, ledulul se aprinde
- led aprins un timp definit 
- iar repaus, ledul fiind stins.
   Pentru senzorii cu logica negativa la iesire, adica in repaus este HIGH, respectiv LOW cand e activ, am modificat programul foarte putin
acesta devenind delay_sensor1.ino.
    Am facut 2 filmulte cu senzorul cu infrarosu;
Intarziere comanda iesire digitala folosind functia millis()
delay off using millis()

duminică, 14 aprilie 2019

Stocare programe (sketch-uri Arduino) pe un canal de Github

    Deoacere lucrez de pe mai multe calculatoare si din diverse locuri, in plus vreau sa ii arat cuiva repede sau sa gaseasca repede un program (sketch Arduino), am apelat la stocarea programelor pe platforma Github, unde am propriul canal: https://github.com/tehniq3
   Pentru a avea o ordine si a fi usor de gasit un program, trebuie grupate pe directoare, aici numindu-se Repertories; deja am ajuns la 154, inainte de realizarea unuia pentru acest articol.
    Am zis sa creez un director numit test si pasii sunt urmatorii:
- se apasa pe + si se alege, dupa cum se vede si din poza de mai sus New repertory.
- apare o zona unde se da numele, in cazul de fata test

- se completeaza la descriere un comentariu, eu pun de obicei adresa articolului unde il folosesc sau de unde am luat primele informatii
- se apasa butonul Create repertory
- pentru ca un utilizator sa vad usor informatiile, vom creaa fiseirul README, prin apasarea link-ului cu acel nume
- va apare o fereastra in care se vad informatiile scrise la descriere
- aceste informatii sunt prea putine, asa ca vom pune si o poza din articolul din care ne inspiram sau din alta parte, oricum o poza semnificativa, asa ca dam click dreapta si aflam adresa pozei

- in fisierul README scriem ![nume](adresa)
- apoi apasam butonul Commit new file
- acum vom avea un fisier README vizibil cand se deschide si directorul test

- acum vom crea un fisier cu nume intuitiv si utilizabil imediat, asa ca va fi un nume urmat de terminatia ino pentru un sketch Arduino, de exemplu alarma_moto_v2.ino 
- urmeaza sa deschidem programul Arduino IDE si sa incarcam programul pe care dorim sa il facem public
- selectam tot txtul din el (CTRL+A) si apoi il copiem (CTRL+C)
-ne mutam in fisierul creat si dam descarcare (CTRL+V), adica aplicam clasica tehnica controlCcontrolV 😁
- se apasa butonul Commit new file si vom avea acum 2 fisiere in subdirectorul nostru
- apasam pe fisierul alarma_moto_v2.ino s a vedem continutul
- acum am 155 repertories
   Cum am creat fisierul alarma_moto_v2.ino  pot adauga si altele...
   Puteti accesa aces director urmand link-ul https://github.com/tehniq3/test !