Dupa ce am constatat ca ceasul RTC reglabil pe afisaj LCD4002 este stabil, am zis sa transfer proiectul pe afisajul LCD4004, pentru ca acele caractere pe 2 randuri sunt destul de prietenoase.
Schema de test este aceeasi, care include interfata i2c catre afisajul LCD4004, o schema clasica de Arduino cu modul RTC (DS3231) si un encoder KY-040
pentru ca am folosit acelasi cablaj (e cumva un cablaj universal folosit la mai multe proiecte, schimband doar afisajul cu interfata i2c: LCD1602, LCD2004, LCD4002 sau LCD4004). Cablajula fost proiectat si realizat de Vlad Gheorghe.
Programul adaptat pentru afisajul LCD4004 este LCD4004_RTC_clock_3.ino si modul de functionare se observa in filmulete:
Ora (in format: ora, minute si secunde) este afisata pe randurile 1 si 2 cu caractere mari ("desenate" pe cele 2 randuri), iar pe randurile 3 si 4 apar la fiecare secunde: data, temperatura si nume zi
Dupa cum se observa si din filmulete, daca se apasa scurt butonul de pe encoder, in loc de ora apare un mesaj ca ceasul este realizat de mine, iar pe randurile 3 si 4 temperatura, data sau numele zilei, depinde cum e momentul:
Daca se apasa indeajuns de lung pe encoder, de intra in meniul de reglaj
- an (reglaj prin rotire stanga pentru scadere si in drepta pentru crestere valoare) si trecere la reglaj luna prin apasarea butinului de pe encoder
M-am gandit sa fac si un ceas ce foloseste modul RTC de la care sa preiau ora, data si chiar si temperatura, sa fie si reglabil din encoder, dupa ce testasem asta pe afisajul LCD4004 (l-am prezentat in articolul anterior).
doar ca nu am conectat senzorul DS18B20, temperatura este preluata de la senzorul din integratul DS3231 din modulul RTC (bineinteles ca afisajul este LCD4002).
Ca si la interfata i2c de la afisaul LCD4004 am inlocuit un strap (rezistenta 0Ω) cu una de 470Ω si am scazut curentul prin ledul/ledurile de fundal de la 200-230mA la 3,8mA (2,82V cadere de tensiune). Valoarea curentului este suficienta ca lumina ledului sa nu deranjeze noaptea si sa fie vizibila informatia de pe afisaj pe timp de zi.
Dupa ce am fost multumit de modul de afisare, reglare si stabilitate la proietul anterior, de Ceas RTC cu caractere mari si termometru pe afisaj LCD2004 am trecut s la partea de proiect mult mai util, un termostat reglabil cu ceas RTC.
Schema deriva din cea a ceasului, doar ca am pus 3 leduri, unul rosu pentru temperatura scazuta (sub pragul de temperatura), unul verde pentru temperatura normala (valoare peste pragul de temperatura) si unul galben pentru a simula comanda la centrala / calorifer electric. etc (care se aprinde cand temperatura este sub pragul de temperatura si se stinge la depasirea pragului de temperatura plus valoarea histerezisului)
La o apasare scurta se comuta afisarea cu caractere mari a orei cu cea a temperaturii, apoi iar ora, etc.
Cateva exemple:
- temperatura mai mica decat pragul reglat (led rosu aprins, led galben aprins, adica incalzitor pornit, pe afisaj apare si o steluta indicand pornirea sistemului de incalzire)
- temperaura peste pragul reglat, dar mai mica decat pragul de oprire (led verde pornit indicand faptul ca temperatura e mai mare decat valoarea reglata, led galben aprins insemnand ca sistemul de incalzire e pornit, iar pe afisaj este si steluta)
- temperatura este peste pragul de decuplare (led verde aprins, led galben stins indicand oprirea sistemului de incalzire, iar pe ecran nu mai apare steluta)
Daca apasam lung pe buton (mai mult de 3-4 secunde), se intra in meniul de reglaj, de data asta avem:
Fata de articolul precedent, in care am folosit 3 butoane, acum voi folosi un encoder KY-040, schema pentru controlul a 2 leduri cu PWM (sau ulterior a unui driver pentru control sens si turatie motor de curent continuu) este
Fata de articolul Afisaj cu 4 cifre controlate de TM1637 si Arduino unde am testat afisajul, am pus un senzor de umiditate si temperatura DHT11 si am modficat o librarie pentru a afisa si niste litere, de data asta am conectat un modul de ceas de timp real cu DS3231 obtinand un simplu ceas, in prima faza.
Modul obisnuit de afisare, ararata pentru ore dintr-o cifra 09, lucru, care pe mine ma deranjeaza asa ca imi afiseaza 9 cu un spatiu in loc de 0, dupa ce am modificat sketch-ul, care devine TM1637_DS3231_cloc0a.ino, partea impotrtanta fiind asta, ca se "traduce"asa: daca cifra zecilor de la ore e zero, nu se afiseaza nimic (caracterul nr. 17 din libraria modificata TM1637).
am prezentat diferentele intre aceste doua moduri de functionare.
Dupa asta am conectat un encoder KY-040, dupa cum se vede in schema de mai jos:
montajul aratand asa (se vede si un difuzor/buzzer dintr-un calculator conectat intre pinul D7 si GND)
si am modificat sketch-ul, pentru a putea schimba ora si minutele, se apasa mai lung pe butonul encoderului pentru a intra in modul de modificare, intai se modifica ora, rotind in sensul acelor de ceasornic pentru cresterea valorii, respectiv se roteste in sens trigonometric pentru scaderea valorii orei, dupa care care se apasa pe butonul encoderului pentru a trece la modificarea minutelor, dupa modificare, se apasa iar pe buton pentru a reveni la functionarea normala.
Sketch-ul care face toate acestea este TM1637_DS3231_clock1.ino iar filmuletele in care se vede modul de functionare sunt:
Dupa ce am vazut un comentariu de la un pasionat avizat de Arduino, Vlad Gheorghe, ca functioneaza si cu DS1307 in loc de DS3231 prin inlocuirea liniei RTC_DS3231 rtc; cu RTC_DS1307 rtc; mi-am adus aminte ca eu tastam inainte asa, doar ca merge foarte bine si cu DS3231 si cu DS1307, fara alte modificari.
Am facut si eu modifcarea asta si, in plus, am facut ca la reglaj orele sub 10 sa fie afisate fara 0 in fata.