joi, 7 iulie 2016

Sistem masurare si control umiditate sol in 4 zone

   Deoarece o placa Arduino are mai multe intrari analogice, putem extinde sistemul de irigare de la o zona supravegheata si controlata la (cel putin) 4.
   Schema, gandita de mine, arata asa:
   Ca si in celelalte cazuri, senzorii nu sunt alimentati permanent, pentru a se reduce efectele electrocoroziunii acestora.
   In cazul de fata, se alimenteaza primul senzor, se citeste umiditate, se deconecteaza senzorul, in functie de valoarea acesteia se porneste o pompa (sau se deschide o electrovalva) sau doar se contorizeaza timpul trecut de la ultima udare
apoi se alimenteaza al doilea senzor, se masoara umiditatea, se deconecteaza senzorul, in functie de valoarea acesteai se porneste pompa (sau se deschide o electrovalva) sau doar se contorizeaza timpul trecut de la ultima udare
se alimenteaza al treilea senzor, se masoara umiditatea, se deconecteaza senzorul, in functie de valoarea acesteai se porneste pompa (sau se deschide o electrovalva) sau doar se contorizeaza timpul trecut de la ultima udare
se alimenteaza si al patrulea senzor, se masoara umiditatea, se deconecteaza senzorul, in functie de valoarea acesteai se porneste pompa (sau se deschide o electrovalva) sau doar se contorizeaza timpul trecut de la ultima udare
dupa care se repeta ciclul de masuratori.. conform programului (sketch-ului) cu text in limba romana sau in engleza.
   Am facut 3 filmulete, in care am folosit doar un senzor de umiditate, ca atat am avut la dispozitie:

30.07.2016
   Pentru ca pe piata exista diverse module de relee, unele cu comanda normala, altele inversate, adica dac ape intrarea de comanda se aplica 5V, bobina releului este atrasa sau eliberata, asa ca am mai pus un jumper (daca este liber comanda e normala si daca este inchis comanda este inversata) la care se foloseste sketch-ul lcd1602_i2c_soilhumidity_ver4.ino cu schema:

Potentiometrul digital dublu MCP4261

   In articolul anterior am conectat un potentiometru digital simplu MCP41010 la o placa Arduino Mega, de data asta am conectat un potentiometru dublu digital MCP4261-502E/P care se comanda tot prin protocolul SPI, cursorul are 256 trepte din valoarea potentiometrului (8 biti).
   Pe net am gasit articolul Arduino - Using digital potentiometers part 2 (MCP4251), care m-a ajutat sa testez pe al meu.
   Fiind dublu, capsula este mai mare:
semnificatia pinilor fiind:
   Schema mea de test este urmatoarea:
iar sketch-ul folosit este MCP4261_mega_lcd1602_i2c_test.ino.
si am testat niste cazuri particulare:
- ambele potentiometre au cursoarele la minim:
- primul potentiometru are cursorul la minim, la doilea la maxim:
- ambele potentiometre au cursoeale (aproape) la maxim:
- primul potentiometru are cursorul la maxim, al doilea la minim:
apoi am pus sa "numere" ambele, putand aparea mici "erori":
   Am facut si 2 filmulete:
- potentiometru digital dublu MCP4261 cu Arduino Mega 
MCP4261 digital dual potentiometer with Arduino Mega
   Am facut mici modificari in sketch, devenind MCP4261_mega_lcd1602_i2c_test2.ino si, astfel, am comenzi simultane sau diferite pentriu fiecare potentiometru, dupa cum se vede in ceel 2 filmulete:
potentiometru digital dublu MCP4261 cu Arduino Mega (2)
MCP4261 digital dual potentiometer with Arduino Mega (2)

Potentiometrul digital MCP41xxx

   Deoarece am gasit un modul radio cu TEA5767 pe care l-am conectat cu o placa Arduino, am constat ca ar fi util si un sistem de reglaj digital al volumului, asa ca am zis sa testez intai un potentiometru digital MCP41010 care are 10 kohmi, care se controleaza prin interfata SPI si are 256 trepte ca valoare (0...255).
   Am gasit cateva informatii utile pe net, dar m-am oprit la 2 dintre ele:
Single/Dual digital Potentiometer (MCP41xxx, MCP42xxx) de pe site-ul www.arduino-projekte.de/
MCP41010 Digital Potentiometer Arduino User Manual de pe site-ul Henry’s Bench
   Eu am avut libera o placa Arduino Mega, asa ca am adaptat sketch-ul gasit in cel de-al doilea articol, punand si un afisaj alfanumeric 1602 cu interfata i2c, sketch-ul folosit de mine fiind MCP41xxx_lcd1602_i2c_test.ino.
   Schema de test este:

  La primele teste, din cauza unui breadboard de calitate slaba, la trimiterea comenzii de 0, aveam o valoare foarte mare a ternsiunii pe divizorul rezistiv, in loc de cativa mV, aveam cca 580mV.
  Am facut repede 2 filmulete:
test potentiometru digital MCP41010 si Arduino Mega
test with MCP41010 digital potentiometer and Arduino Mega
   Initial, nu am realizat ca e ceva in neregula, stiind ca exista o rezistenta interna, dar dupa citirea  fisei tehnice am intels ca rezistenta minima are valoarea tipica de cca 52 ohmi sau in caz extrem 100 ohmi.
   Am refacut legaturile si am obtinut urmatoarele valori, cand potentiometrul este alimentat la 5V:
- treapta 0:
- treapta 255:
   Am conectat pinul potentiometrului la tensiunea de 3,3V, obtinand in acest caz:
- treapta 0:
- treapta 255:
   Se pot comanda mai multe potentiometre de genul asta, prin conectarea pinilor SI, respectiv SCK la pinii SPI corepsunzatori, iar pinii CS la pini diferiti, deoarece potentiometrul schimba valoarea doar daca pinul CS este la masa...
   Am refacut testele si am 2 noi filmulete...
test potentiometru digital MCP41010 si Arduino Mega (2)
- test with MCP41010 digital potentiometer and Arduino Mega (2) 

luni, 4 iulie 2016

Sistem masurare si control umiditate sol (2)

   In articolul anterior am prezentat modul cum se poate masura si controla umiditatea din sol (pentru un ghiveci sau sau o zona mai mare), utilizand o metoda originala de reducere a efectului de electrocoroziune prin alimentarea pentru scurt timp a senzorilor si apoi pauza de repaus.. de data asta avem indicatii si cat timp a trecut de la ultima udate, folosind functia millis() care contorizeaza timpul in ms de cand e pornita placa Arduino, numarul returnat la apelarea acestei functii este pentru cca 50 zile, dupa care revine la zero, dupa cum se poate citi in materialul de la https://www.arduino.cc/en/Reference/Millis. Oricum eu am facut sa se afiseze maxim 999 ore si 59 minute care fac cam 42 de zile, arhisuficient pentru un ghiveci..
   Schema de conectare este aceeasi:
   Sketch-ul folosit este lcd1602_i2c_umditatesol_ver2.ino si avem aceleasi situatii, cand se masoara rar umiditatea cand ea este mai mare decat reglata:
iar cand umiditatea este scazuta si porneste pompa, masuratorile sunt mai dese:
   Am facut si un filmulet numit masurare cu afisare date si control umiditate sol cu Arduino (3) in care prezint modul de functionare al acestui montaj:
PS: Am facut o mica modificare in sketch si am si versiune in engleza a informatiilor: