Ceas - Data - Termometru cu DS18B20, DS1307, 4 Digiti LED si animatii





   Acum ceva timp, mi-am dorit sa-mi realizez un ceas care sa poata afisa ora, data si temperatura de la 1-2 senzori DS 18B20. Ceasul trebuia conceput in mediul Arduino si afisare pe 4 digiti LED multiplexati, asa mai invatam si eu cate ceva despre Arduino, senzori, multiplexare, etc.

   Asa ca am inceput cautari pe Google ca sa caut informatii despre ceasuri realizate cu modul RTC bazat pe DS1307 si afisare multiplexata pe 4 digiti LED.  Am gasit diverse proiecte, unele mai simple,altele mai complicate.

   Am asezat pe breadboard un afisaj 4 digiti (anod comun), un modul RTC cu DS1307 si am inceput creearea si testarea unor mici coduri (sketch-uri) inspirate din modele gasite.  Rezultatele au fost multumitoare pentru mine pentru partea de afisare-citire ceas-data de la DS1307.

  Dupa aceasta etapa, am inceput cautari pentru citire-afisare si implementare in cod a unui senzor de temperatura DS 18B20.  Dupa cateva esecuri, ba lipsea o librarie din cod, ba nu scriam o linie bine, etc, am reusit cu brio implementarea in cod (sketch) si a partii de citire-afisare a senzorului DS 18B20.

   Ce nu am reusit eu si era suparator, era prezenta acelui fliker al afisajului la citirea-afisarea temperaturei de la senzorul DS 18B20.  Dupa ceva cautari, intrebari pe la prieteni care se pricep la Arduino, am ajuns la concluzia ca NU se poate fara acel fliker, deoarece senzorul DS necesita un mic timp de vreo 750 ms necesar pentru citire temperatura.

   Parca tot nu eram eu linistit cu acel fliker si am inceput iar cautari pe Google pentru eliminarea, sau reducerea lui. Am ajuns pe forumul Arduino si acolo am gasit o chestie frumoasa, pentru a reusi sa nu mai existe acel fliker, cineva implementase in cod o tranzitie animata intre afisare ora, data si temperatura.  Asa ca senzorul DS avea "timp" sa trimita informatiile, acel timp (fliker) fiind acum camuflat de acea animatie, care arata si frumos pe afisaj.

    Am reusit sa implementez si acea animatie intre ora, data, temperatura si m-am gandit sa implementez si un al doilea senzor DS 18B20,care trebuie sa citeasca temperatura din exterior (afara), primului senzor ii revenea sarcina citirii unei temperaturi din interior (camera). Din teste,dupa implementarea lui in cod,am remarcat ca NU afisa OK pe afisaj temperaturile negative.

   La partea de convertire-citire temperatura negativa, m-am impotmolit putin, fiind incepator, asa ca l-am rugat pe prietenul Niq_ro, in functie de timpul lui liber, daca poate sa ma ajute sa rezolv si afisare temperaturilor negative. El m-a indrumat ce modificari sa fac, dar fiind mai greu sa comunicam, s-a decis ca sa aseze si el pe breadboard modelul de ceas care il realizasem eu.

   Cautand prin cutiute, a ajuns la concluzia ca NU are afisaj cu Anod Comun, modul RTC cu DS 1307 si senzor DS 18B20, asa ca a pus pe breadboard un afisaj cu Catod Comun, un senzor DHT11 si pentru inceput-teste, in loc de modul RTC, scria in cod de"mana" ora,minut, zi, luna.

   Asa ca am ajuns amandoi, ca sa testam acelasi model de ceas, dar pentru doua situatii-modele diferite. 
  Vreau sa ii multumesc lui Niq_ro pe aceasta cale pentru sprijinul acordat.

   Detalii despre proiectul lui, le puteti gasi aici : Ceas animat cu termometru şi higrometru pe afisaj multiplexat cu 4 cifre led


  Ceasul meu nu arata prea grozav in poze, deh, este pe breadboard, multe fire, aglomeratie, etc, dar atasez cateva poze din timpul testelor, dupa care urmeaza trecerea lui pe "curat" pe un cablaj dedicat.


    Afisarea orei pe digiti:


  Asa cum am scris mai sus,pentru a identifica cele doua temperaturi de la cei doi senzori, daca tot aveam in cod acea animatie, am folosit posibilitatea afisarii (inaintea afisarii temperaturei) a unui scris, Int pentru interior si Out pentru exterior, litere care le puteam afisa pe digitii cu 7 segmente

   Afisare Int inainte de temperatura interior:



Afisarea temperaturei din interior:



Afisare data pe digiti:




   Codul ceasului realizat de mine il puteti gasi aici:



  Un clip cu functionarea ceasului:




5 comentarii:

  1. Hello, how can I modify the sketch so that it marks the temperature with the decimal. Example 30.5c, can you help me?
    pascualpalacios525@gmail.com

    RăspundețiȘtergere
    Răspunsuri
    1. I will try these days to draw a diagram, but the connections can be seen in the Arduino code. Sorry for the english, google translate.

      Ștergere
  2. I assembled your circuit and it works well, but I would like the temperature to be marked with decimal, when you have it modified, you can send it to my email.
    pascualpalacios525@gmail.com
    a greeting

    RăspundețiȘtergere
  3. Hello, the photoresistor does not adjust the brightness of the screens, I connected it to pin A0 with its respective resistance to +5vcc, can you help me?

    RăspundețiȘtergere
    Răspunsuri
    1. Hello, the photoresistor must be connected to pin A4, not to pin A0.
      If you have connected the photoresistor to pin A0 and you cannot connect it to pin A4, the pin to which it is connected must be changed in the code, here:

      #define senzorlumina A4 // pin for photoresitor: VCC (+5VDC) ---|= 10k =|------ Analog pin (A3) ------|= LDR =|------| (GND)

      Change A0 instead of A4 then upload the code again to the Arduino

      Ștergere