Dupa ce am pus ceasul la teste, am constatat ca modul de afisare la temperaturii este deranjant datorita literei C foarte mici, am rescris partea de afisare a acesteai, in sensul ca pentru temperaturi pozitive, mai mari de 10 grade Celsius, am scos semnul de plus, iar la cele sub -10 grade Celsius, care sunt extrem de rare in casa 😇 am lasat C-ul ingust.
Acum modurile de afisare ale temperaturii sunt:
- temperaturi mai mari de 10 grade Celsius
- temperaturi pozitive mai mici de 10 grade Celsius
- temperaturi negativa mai mari de -10 grade Celsius
se vede modul de afisare (timpul de afisare normal al ceasului e mai scurt, iar pentru temperatura si umiditate mai lung, decat la functionarea normala), dar am refacut filmarile si am si timpii normali;
- ceas matriceal cu alarma, termometru si higrometru (3a)
In completarea articolului anterior, unde am implementat si afisarea temperaturii si umiditatii relative din aer la ceasul cu alarma, de data asta, am modificat sa avem informatia despre temperatura cu virgula:
Punctele portocalii sunt puse (ulterior) pentru usurinta afisarii, iar caracterele sunt cu galben, initial nu le pusesem la temperatura:
- temperatura negativa cu 2 cifre inainte de virgula:
- temperatura negativa cu o cifra inainte de virgula:
- temperatura pozitiva cu o cifra inainte de virgula:
- temperatura pozitiva cu 2 cifre inainte de virgula:
Am gasit un pic de timp pentru a completa proiectul de ceas matricial cu alarma, cu partea de termometru si higrometru. Senzorul folosit de mine este AM2302 (DHT22), dar se poate folosi si versiunea mai putin precisa, DHT11.
Schema nu difera mult fata de cea din articolul precedent:
Pentru inceput a trebuit sa simulez modul de afisare a temperaturii si umidittii si am realizat ca nu am caractere pentru procent, semnele +, -, semnul de grad Celsius, asa ca am studiat cum sunt create cele din exemplul functional si am modificat si eu fisierul in care sunt definite. Am constata ca fisierul se numeste FontLEDClock.h si se gaseste in subdirectorul libraries din programul Arduino IDE. pentru a nu aparea probleme am creat si eu un fisier cu nume putin diferit, FontLEDClock1.h si l-am pus in acelasi subdirector.
Am ales primele 3 litere, scrii intr-un fisier numerele in hexazecimal, corespondenta lor in binar (folosind utilitarul de la https://www.binaryhexconverter.com/hex-to-binary-converter), apoi am desenat corespondenta. Am constatat ca am caractere scrise de sus in jos, si in oglinda, sa zic asa.
Fisierul meu are modificate doar liniile unor caractere de care nu am nevoie in mod uzual:
Revenind la chestii utile, in prima faza am simulat umiditatea si temperatura, atat pentru valori negativ, cat si pozitive (numere intregi, fara virgula):
Pentru a alimenta, in masina, anumiti consumatori fara a trebui sa punem mereu contactul, la solicitarea lui Tom, am scris un program ce foloseste o placa Arduino (am desenat Uno ca e mai usor de inteles, dar s-a folosit la teste Nano). Sistemul este alimentat permanent de la baterie, are un buton de comanda, care daca se apasa scurt face ca releul sa fie alimenta si deci si consumatorul. Daca se apasa lung butonul (minim 3 secunde, cum am eu in program), se decupleaz[ consumatorul. De asemenea, avem un divizor rezistiv care, daca e alimentat si bateria nu e prea descarcata, Arduino alimenteaza bobina releului si, implicit, consumatorul este alimentat prin contactul releului. Daca tensiunea pe divizor dispare (contactul este luat), Arduino da comanda intarziata cu 5 secunde de decuplare consumator. Daca se apasa butonul lung, cand este contact pus, alimentarea consumatorului se face ori prin apasarea butonului ori prin luarea contactului si repunerea lui.
Dupa ce am rezolvat aprinderea (relativ) usoara a virgulei, am scris un programior (sketch) pentru a arata aleator ora si apoi o temperatura si cu cifra dupa virgula, dupa cum se vede si in filmuletele;
- test 2 functionare afisaj lcd cu 6 cifre (HT1621)
Programul pentru prima versiune este HT1621_test.ino, iar cel optimizat este HT1621_test4.ino.
Primul program prezinta cateva secunde ora 23:45, cu clipirea secundelor:
apoi temperatura de 17 grade Celsius:
Cel de-al doilea alege aleator ora si minutele ceasului, indicand-o cateva secunde, pastrandu-se partea de animatie la semnul dintre secunde:
apoi alege aleator o temperatura, ce poate fi negativa sau pozitiva:
Am combinat sketch-ul de la ceasul demo, ce are anumiţie cu un ceas analog urmat de unul digital, cu exemplul din libraria NTPtimeESP, obţinând un ceas precis şi frumos.
Prin iarna am gasit articolul Mini LED clock, care folosea un afisaj matriceal din 4 module de 8x8 leduri controlate de MAX7219. Partea frumoasa e ca foloseste mai multe variante de prezentare a orei, dar si ca are si partea de reglaj.
Schema care rezulta din descriere si din program este
Abia acum am implementat partea de alarma, in care se foloseste un buzzer activ, programul fiind mini_clock_1_2.ino, putand afla starea alarmei prin apasarea celui de-al doilea buton, care in mod obisnuit arata data, daca este activa alarma o arata si pea, dupa cum se vede si din filmulete:
- ceas matriceal cu alarma
Schema folosita are doar un led si o rezistenta (nu am avut buzzer activ la indemana), dar montajul este pregatit si cu un senzor de masura umiditate si temperatura de tip DHT22 (AM2302).
PS: Am gasit un ceas derivat din cel din care m-am inspirat si eu, cu un afisaj mai mare si informatii de temperatura si altele, vedeti articolul Arduino Pong Clock