Jam LED Matrix Tepat Tinggi dengan DS3231 RTC, Cuaca BME280, Sensor Cahaya BH1750 & Konektivitas NTP ESP01
Komponen dan Perlengkapan
Arduino Nano R3
×
1
Maxim Integrated DS3231MPMB1 Modul Periferal
Yang murah di Ebay, resistor dihapus agar baterai tidak meledak
×
1
SparkFun Atmospheric Sensor Breakout - BME280
Yang murah dari Ebay
×
1
Sensor Cahaya BH1750
Dari Ebay
×
1
Max7219 Matriks LED 32x8
×
1
Kapasitor 10 µF
×
2
Espressif ESP8266 ESP-01
Opsional jika Anda ingin pengaturan waktu melalui NTP
×
1
LM3940IT3.3
Regulator LDO 3.3v untuk ESP01
×
1
Papan Level Shifter SparkFun
Diperlukan oleh ESP01
×
1
Tentang Proyek Ini
Inilah yang membuat saya tertarik dengan Arduino. Saya menemukan LED Word Clock milik Nick, dan pikir saya ingin membuatnya.
Sejak mengunduh kodenya, saya telah memodifikasinya untuk menyertakan sensor dan tombol tambahan serta menambahkan ESP01.
BH1750 digunakan untuk Meredam tampilan secara otomatis tergantung pada kondisi cahaya, dan dapat mematikan tampilan di malam hari. BME280 menampilkan suhu, kelembaban dan tekanan. ESP01 digunakan untuk mendapatkan waktu dari pool.ntp.org.
Tombol tambahan ada untuk memudahkan penyesuaian pengaturan. Anda dapat menyesuaikan pengaturan sensor cahaya menggunakan tombol, serta mengubah font dan pengaturan NTP/DST/UTC.
Enam font baru telah ditambahkan, saya membuat font menggunakan: https://dotmatrixtool.com/.
Saya telah melakukan perubahan cukup banyak pada jam kata, kini memiliki lebih banyak kata dan telah memindahkan cukup banyak ke PROGMEM untuk menghemat RAM.
Kode sekarang lengkap, kecuali bug-bug yang tidak diketahui dan penyesuaian di sini dan di sana, saya akan membuat kotak untuknya.
Anda perlu menyesuaikan kode sensor cahaya agar sesuai dengan kondisi cahaya Anda, saya mengkode ini saat sinar matahari terang duduk di samping jendela.
ESP01 digunakan untuk mendapatkan waktu melalui NTP, ESP01 dikodekan untuk tidur (wifi mati) saat tidak dibutuhkan, dan dibangunkan melalui serial untuk mendapatkan waktu dalam format UNIX. Nama SSID dan kata sandi dikirimkan melalui kode Arduino untuk kenyamanan.
Versi ini juga memiliki perhitungan DST/UTC dan BST. Pengaturan ini dapat disesuaikan atau dinonaktifkan melalui menu.
Pengaturan disimpan ke EEPROM, ini berarti jika Anda mematikan dan menyalakan kembali, perubahan yang Anda buat melalui menu akan disimpan.
Saat ESP01 berjalan, Arduino Serial akan menunjukkan ini:
Arduino : Sent NTP request to ESP01 ESP01 : NTP request received from Arduino [attempt 1 of 3] Connecting to SSID: TheInternets....connected SSID: TheInternets, IP Address: 192.168.0.135 Signal Strength (RSSI): -42 dBm Sending NTP packet to: 195.195.221.100 [attempt 1] Sending NTP packet to: 195.195.221.100 [attempt 2] UNIX1562848457 Disabling WiFi....ok
Lebih banyak gambar dan instruksi akan hadir...
Menggabungkan semuanya:
Pemasangan:
DS3231, BH1750 and BME280: SCL PINS = A5 SDA PINS = A4 VCC = 3.3v LED Matrix: CLK = D11 CS = D10 DIN = D12 VCC = 5v Switches: D2 - Menu D3 - Date / + D4 - Temp / - D5 - Display options ESP01 - Optional D7 - TX pin of ESP01 D6 - RX pin of ESP01
Ini adalah variabel global yang dapat Anda ubah:
// Global variables (changeable defaults), numbers in [] brackets are the EEPROM storage location for that value // Clock settings // [200] Default intensity/brightness (0-15), can be set via menu byte intensity = 2; // [201] Default clock mode. Default = 0 (basic_mode) byte clock_mode = 0; // [206] Define random mode - changes the display type every few hours. Default = 0 (off) bool random_mode = 0; // [207] Define font random mode - changes the font every few hours. 1 = random font on bool random_font_mode = 0; // [208] Define 12 or 24 hour time. 0 = 24 hour. 1 = 12 hour bool ampm = 0; // Light settings // [202] Default display on/off mode, used by light sensor. 0 = normal, 1 = always on, 2 - always off, 3 - 5 = defined by hour_off_1,2,3 byte display_mode = 5; // [209] Default auto light intensity setting bool auto_intensity = 1; // These three define the hour light sensor can turn off display if dark enough, format is 24 hours, the routine for // this checks between 8.00 and one of these values byte hour_off_1 = 21; byte hour_off_2 = 22; byte hour_off_3 = 23; // Font settings - these are set via the setup Font menu, see set_font_case() routine for all default values: // [203] Default clock large font style byte font_style = 2; // [204] Default clock large font offset adjustment byte font_offset = 1; // [205] Default clock large font columns adjustment byte font_cols = 6; // DST NTP and UTC settings // [210] Enable DST function, 1 = enable, 0 = disable bool dst_mode = 1; // [211] Enable NTP function, 1 = enable, 0 = disable bool ntp_mode = 1; // Number of seconds to adjust NTP value before applying to DS3231, takes a few hundred milliseconds to process the ESP01 data byte ntp_adjust = 1; // [213] UTC offset adjustment, hours int8_t utc_offset = 0; // The hour daily NTP/DST sync happens, should be left at 2am if using DST mode byte ntp_dst_hour = 2; // Number of time to retry NTP request 1 = 35 seconds(ish) in total, values 1 - 9 byte ntp_max_retry = 3; // Used to calculate when to quit ntp() when it's not receiving data, value in seconds, it is multiplied by ntp_max_retry byte ntp_timeout = 45; // Global constants - SSID and password for WiFi, passed to ESP01 via SoftwareSerial // The combined SSID and password length cannot exceed 72 characters // The length of your SSID name, e.g SSID = MyWifi, ssid_len = 6 const byte ssid_len = 8; // Your SSID name, e.g MyWifi const char ssid[] = "YourSSID"; // The length of your SSID password, e.g password = password, pass_len = 8 const byte pass_len = 12; // Your SSID password, e.g password const char pass[] = "YourPassword";
Kode
Ratti3's Github
https://github.com/Ratti3/miniclock
Skematik
Tidak ada BH1750, terhubung dengan cara yang sama seperti BME280