In acest articol vom realiza un ceas care, pe langa functia lui de a afisa ora si data ne va arata de asemenea temperatura si umiditatea aerului din incapere.

Pentru a face acest lucru vom folosi un modul RTC 1307, un senzor DHT22, un afisaj LCD color de 128*160 pixeli cu chipset ST7735 si un Arduino Nano.

Conexiunile vor fi facute in felul urmator:

Senzor temperatura DHT22     -        Arduino

Out                                            -        D2

+5V

GND

Modul RTC DS1307                 -        Arduino

SDA                                         -        A4

SCL                                          -         A5

+5V

GND 

Display LCD ST7735               -         Arduino

CLK                                         -          D13

SDA                                         -          D11

RS                                           -          D8

RST                                         -           D7

CS                                           -           D9

+3V3

GND 

De asemenea mai avem nevoie si de urmatoarele librarii:

-TFT_ST7735

-TimeLib

-DS1307RTC

-DHT

Sketchul folosit este urmatorul:

#include <TFT_ST7735.h>
#include <SPI.h>
#include <Wire.h>
#include <TimeLib.h>
#include <DS1307RTC.h>
#include "DHT.h"
#define TFT_GREY 0x5AEB
#define DHTPIN 2
#define DHTTYPE DHT22
TFT_ST7735 tft = TFT_ST7735();
DHT dht(DHTPIN, DHTTYPE);
float hum;
float temp; 
int ora, minut, secunda, zi, luna, an, ziSapt;
const char *Zile[8] = {"", "Luni", "Marti", "Miercuri", "Joi", "Vineri", "Sambata", "Duminica"};
const char *Luni[12] = {"Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie",
                       "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"};

void setup() {
  Wire.begin();  
  dht.begin();
  tft.init();
  tft.setRotation(2);
  tft.fillScreen(TFT_GREY);
  tft.setTextSize(1);
  
  tft.fillRect(2, 2, 122, 20, TFT_CYAN);
  tft.setCursor(4, 4, 2);
  tft.setTextColor(TFT_RED);  
  tft.println("Ceas, termometru");
  
  tft.fillRect(2, 25, 122,20, TFT_CYAN);
  tft.setCursor(4, 27, 2);
  tft.setTextColor(TFT_RED);
  tft.print("si indicator ");
  
  tft.fillRect(2, 48, 122, 20, TFT_CYAN);
  tft.setTextColor(TFT_RED);
  tft.setCursor(4, 52, 2);
  tft.print("de umiditate"); 

  tft.fillRect(2, 71, 122, 20, TFT_WHITE);
  tft.setTextColor(TFT_RED);
  tft.setCursor(4, 73, 2);
  tft.println("www.");
  
  tft.fillRect(2, 94, 122, 20, TFT_WHITE);
  tft.setTextColor(TFT_RED);
  tft.setCursor(4, 96, 2);
  tft.print("  electronicstore");
  
  tft.fillRect(2, 117, 122, 20, TFT_WHITE);
  tft.setTextColor(TFT_RED);
  tft.setCursor(4, 119, 2);
  tft.print("                .ro"); 
  delay(3000);  
}

void loop() {
  tmElements_t tm;
  if (RTC.read(tm)) {
    ora = tm.Hour;
    minut = tm.Minute;
    secunda = tm.Second;
    zi = tm.Day;
    luna = tm.Month;
    an = tmYearToCalendar(tm.Year);
    ziSapt = tm.Wday;
    luna = luna + 1;
  }
  hum = dht.readHumidity();
  temp= dht.readTemperature();
  
  tft.fillRect(2, 2, 122, 20, TFT_WHITE);
  tft.setCursor(4, 4, 2);
  tft.setTextColor(TFT_BLUE);  
  tft.print("Temp.: ");
  tft.print(temp);
  tft.print(" ");
  tft.drawCircle(93, 5, 2, TFT_BLUE);
  tft.print(" C");
  
  tft.fillRect(2, 25, 122,20, TFT_WHITE);
  tft.setCursor(4, 27, 2);
  tft.setTextColor(TFT_BLUE);
  tft.print("Umiditate: ");  
  tft.print(hum);
  tft.print(" %"); 
  
  
  tft.fillRect(2, 48, 122, 20, TFT_WHITE);
  tft.setTextColor(TFT_BLUE);
  tft.setCursor(4, 52, 2);
  tft.print("Ora: ");
  if (ora >= 0 && ora < 10) {
    tft.print("0");
  } tft.print(ora); 
  tft.print(":");
  if (minut >= 0 && minut < 10) {
    tft.print("0");
  } tft.print(minut);
  tft.print(":");
  if (secunda >= 0 && secunda < 10) {
    tft.print("0");
  }
  tft.print(secunda);
  
  tft.fillRect(2, 71, 122, 20, TFT_WHITE);
  tft.setTextColor(TFT_BLUE);
  tft.setCursor(10, 73, 2);
  tft.print(Zile[ziSapt]);

  tft.fillRect(2, 94, 122, 20, TFT_WHITE);
  tft.setTextColor(TFT_BLUE);
  tft.setCursor(15, 96, 2);
  tft.print(zi);
  tft.print(" ");
  tft.print(Luni[luna]);

  tft.fillRect(2, 117, 122, 20, TFT_WHITE);
  tft.setTextColor(TFT_BLUE);
  tft.setCursor(50, 119, 2);
  tft.print(an); 

  delay(1000);
}

 2 poze cu montajul sunt mai jos:

 

 

Nu sunt comentarii

Acest website foloseste cookie-uri pentru o experienta placuta in timpul navigarii.