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:
-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:
