Różnice między wybraną wersją a wersją aktualną.
Poprzednia rewizja po obu stronachPoprzednia wersjaNowa wersja | Poprzednia wersja | ||
projekty:digital_clock_ard [2025/05/07 15:02] – administrator | projekty:digital_clock_ard [2025/06/16 10:29] (aktualna) – administrator | ||
---|---|---|---|
Linia 1: | Linia 1: | ||
- | [[https:// | + | ====== Arduino: Zegar cyfrowy z pomiarem temperatury ====== |
- | === Kod źródłowy arduino | + | === Opis urządzenia === |
+ | |||
+ | Projekt korzysta z Arduino oraz następujących elementów: | ||
+ | * **RTC_DS1307** – moduł zegara czasu rzeczywistego (biblioteka RTClib), | ||
+ | * **TM1637Display** – wyświetlacz 4-cyfrowy z podświetleniem – sterowany przez CLK i DIO, | ||
+ | * **DHT11** – sensor temperatury i wilgotności powietrza (podłączony do pinu 9), | ||
+ | * **DS18B20** – cyfrowy termometr (sensory podłączone do magistrali OneWire na pinie 3). | ||
+ | |||
+ | === Import bibliotek === | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | === Definicje pinów i obiekty === | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * Obiekty: | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | === setup() === | ||
+ | |||
+ | - '' | ||
+ | - '' | ||
+ | - Ustawia jasność wyświetlacza ('' | ||
+ | - Inicjuje port szeregowy ('' | ||
+ | - '' | ||
+ | |||
+ | === loop() – cykl główny === | ||
+ | |||
+ | - '' | ||
+ | - Konwersja na '' | ||
+ | - '' | ||
+ | - Odczyt z DHT11: '' | ||
+ | - Formatowanie czasu jako 4-cyfrowego stringa (np. " | ||
+ | - Konwersja do liczby ('' | ||
+ | * godzina i minuta, | ||
+ | * temperatura z czujnika DHT11 (°C), | ||
+ | * wilgotność z DHT11 (%), | ||
+ | * temperatura z DS18B20 (wartość całkowita), | ||
+ | | ||
+ | |||
+ | === Zastosowane moduły/ | ||
+ | |||
+ | * **RTClib** – obsługa modułów RTC DS1307/ | ||
+ | * **TM1637Display** – pokazanie cyfr na wyświetlaczu 4‑segmentowym z kropką dziesiętną, | ||
+ | * **DHT** – odczyt wilgotności i temperatury z DHT11, | ||
+ | * **OneWire + DallasTemperature** – obsługa nawet wielu termometrów 1-wire, | ||
+ | * **SPI** i **Wire** – wymagane przez niektóre z powyższych (np. RTC). | ||
+ | |||
+ | === Przykład działania === | ||
+ | |||
+ | - Na starcie wyświetlacz pokazuje „8888” – test działania wszystkich segmentów, | ||
+ | - Potem wyświetla czas (hhmm), | ||
+ | - Następnie co 2 sekundy kolejno: | ||
+ | * temperatura DHT11 (np. „23.5” → " | ||
+ | * wilgotność DHT11 (np. „45.2” → " | ||
+ | * temperatura DS18B20 (np. „24” → 24°C). | ||
+ | |||
+ | === Możliwe modyfikacje === | ||
+ | |||
+ | * Dodanie przycisków do ustawiania czasu, | ||
+ | * Rejestracja danych w EEPROM lub kartę SD, | ||
+ | * Rozbudowa interfejsu – np. menu wyboru wyświetlanych wartości, | ||
+ | * Zastosowanie DS3231 dla większej dokładności RTC. | ||
+ | |||
+ | |||
+ | === Podsumowanie === | ||
+ | |||
+ | Urządzenie to zegar typu „cyfrowego” z pomiarem temperatury i wilgotności, | ||
+ | |||
+ | |||
+ | === Filmik z prezentacją === | ||
+ | |||
+ | Filmik nagrany dawno temu i po angielsku, więc proszę o wyrozumiałość ;) | ||
+ | |||
+ | {{youtube> | ||
+ | |||
+ | === Kod === | ||
<code cpp> | <code cpp> | ||
- | # | + | # |
#include < | #include < | ||
#include < | #include < | ||
- | # | + | # |
#include < | #include < | ||
#include < | #include < | ||
Linia 57: | Linia 144: | ||
if(Hour < 10) | if(Hour < 10) | ||
- | {strHour = "0" | + | {strHour = '' |
else if(Hour >= 10) | else if(Hour >= 10) | ||
{strHour = String(Hour); | {strHour = String(Hour); | ||
else if(Hour == 0) | else if(Hour == 0) | ||
- | {strHour = "00";} | + | {strHour = '' |
if(Minute < 10) | if(Minute < 10) | ||
- | {strMinute = "0" | + | {strMinute = '' |
else if(Minute >= 10) | else if(Minute >= 10) | ||
{strMinute = String(Minute); | {strMinute = String(Minute); | ||
else if(Minute == 0) | else if(Minute == 0) | ||
- | {strMinute = "00";} | + | {strMinute = '' |
| | ||
| | ||
Linia 76: | Linia 163: | ||
Time += strMinute; | Time += strMinute; | ||
- | if(Time == "0"){ | + | if(Time == '' |
- | Time = "0000"; | + | Time = '' |
} | } | ||
Linia 98: | Linia 185: | ||
} | } | ||
- | |||
</ | </ | ||
+ |