Projekt korzysta z Arduino oraz następujących elementów:
RTClib.h
– obsługa zegara RTC,Arduino.h
– funkcje bazowe platformy Arduino,TM1637Display.h
– sterowanie wyświetlaczem 4-cyfrowym,DHT.h
– obsługa czujnika DHT11,OneWire.h
i DallasTemperature.h
– obsługa DS18B20,SPI.h
, Wire.h
– biblioteki komunikacyjne (Wire™ używany przez RTC).CLK 6
, DIO 4
– piny wyświetlacza TM1637,DHTPIN 9
, DHTTYPE DHT11
– konfiguracja czujnika DHT11,ONE_WIRE_BUS 3
– magistrala dla DS18B20.RTC_DS1307 rtc;
TM1637Display display(CLK, DIO);
DHT dht(DHTPIN, DHTTYPE);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
rtc.begin()
– uruchamia zegar RTC,sensors.begin()
– inicjalizuje DS18B20,setBrightness
) i pokazuje „8888” jako test,Serial.begin
) – do debugu pomiarów,dht.begin()
– inicjalizacja czujnika DHT11.sensors.requestTemperatures()
i getTempCByIndex(0)
– odczyt temperatury DS18B20,int
– zaokrąglenie (round
),rtc.now()
– pobiera aktualny czas; wyodrębnia godzinę i minutę,readHumidity()
i readTemperature()
,toInt()
) i wyświetlanie kolejno:Każdy odczyt – 2 sekundy.
Urządzenie to zegar typu „cyfrowego” z pomiarem temperatury i wilgotności, wizualizujący wartości na wyświetlaczu TM1637. Korzysta z trzech różnych sensorów i prostych bibliotek Arduino, co czyni projekt świetnym przykładem integracji sprzętu i oprogramowania w jednym systemie.
Filmik nagrany dawno temu i po angielsku, więc proszę o wyrozumiałość ;)
#include ''RTClib.h'' #include <Arduino.h> #include <TM1637Display.h> #include ''DHT.h'' #include <OneWire.h> #include <DallasTemperature.h> #include <SPI.h> #include <Wire.h> #define CLK 6 #define DIO 4 #define DHTPIN 9 #define DHTTYPE DHT11 #define ONE_WIRE_BUS 3 RTC_DS1307 rtc; TM1637Display display(CLK, DIO); DHT dht(DHTPIN, DHTTYPE); OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); void setup() { rtc.begin(); sensors.begin(); display.setBrightness(0x0f); display.showNumberDecEx(8888,0b01000000, false); delay(3000); display.clear(); display.setBrightness(3); Serial.begin(57600); dht.begin(); } void loop() { sensors.requestTemperatures(); float tempC = sensors.getTempCByIndex(0); int tempINT = round(tempC); DateTime now = rtc.now(); int Minute = now.minute(); int Hour = now.hour(); String strMinute; String strHour; float h = dht.readHumidity(); float t = dht.readTemperature(); if(Hour < 10) {strHour = ''0'' + String(Hour);} else if(Hour >= 10) {strHour = String(Hour);} else if(Hour == 0) {strHour = ''00'';} if(Minute < 10) {strMinute = ''0'' + String(Minute);} else if(Minute >= 10) {strMinute = String(Minute);} else if(Minute == 0) {strMinute = ''00'';} String Time; Time += strHour; Time += strMinute; if(Time == ''0''){ Time = ''0000''; } Serial.println(tempC); Serial.println(tempINT); int numTime = Time.toInt(); display.clear(); display.showNumberDecEx(numTime,0b01000000, true); delay(2000); display.clear(); display.showNumberDec(t,false,2,1); delay(2000); display.clear(); display.showNumberDec(h,false,2,1); delay(2000); display.clear(); display.showNumberDec(tempINT,false,2,1); delay(2000); }