Daftar Isi:

Jam Waktu Nyata Dengan Arduino: 3 Langkah
Jam Waktu Nyata Dengan Arduino: 3 Langkah

Video: Jam Waktu Nyata Dengan Arduino: 3 Langkah

Video: Jam Waktu Nyata Dengan Arduino: 3 Langkah
Video: NodeMCU Time Tanpa Modul RTC (NodeMCU NTP Time) | Tutorial Pemrograman Arduino dan IoT 2024, November
Anonim
Jam Waktu Nyata Dengan Arduino
Jam Waktu Nyata Dengan Arduino

Dalam proyek ini, kami akan membuat jam dengan bantuan modul Arduino dan RTC. Seperti yang kita ketahui Arduino tidak dapat menampilkan waktu yang sebenarnya sehingga kita akan menggunakan modul RTC untuk menampilkan waktu yang tepat pada LCD. Baca semua langkah dengan hati-hati itu akan banyak membantu Anda untuk membuat jarum jam.

Kode Arduino DS3231 seperti kode DS1307 dan bekerja dengan kedua chip RTC.

Kode Arduino di bawahnya tidak menggunakan pustaka apa pun untuk DS3231 RTC, pustaka Kawat adalah untuk korespondensi antara Arduino dan DS3231 menggunakan konvensi I2C.

Ya! Banyak insinyur elektronik bergantung padanya untuk proyek berbasis waktu mereka tetapi RTC tidak sepenuhnya dapat diandalkan. Ini dioperasikan dengan baterai dan harus diganti cepat atau lambat. Datang ke proyek IoT, ia menempati pin SPI (Serial Peripheral Interface) yang berharga dan menjadi berantakan dengan kabel yang kusut. Solusi…. Ini dia pahlawan kita NTP (Protokol waktu jaringan). NTP sangat akurat karena mendapat waktu dari internet. Kami akan mengoperasikan protokol ini menggunakan mode client-server. prosesnya sangat sederhana sehingga Nodemcu kami bertindak sebagai klien dan meminta paket NTP dari server menggunakan UDP. Sebagai imbalannya, server mengirimkan paket ke klien yang mem-parsing data. NTP adalah protokol sinkronisasi waktu universal. Sekarang mari kita nyalakan stasiun kerja lab kita

Langkah 1: Komponen yang Diperlukan

  • papan Arduino
  • Papan RTC DS3231
  • Layar LCD 16x2
  • 2 x tombol tekan
  • Resistor variabel 10K ohm (atau potensiometer)
  • resistor 330 ohm
  • Baterai sel koin 3V
  • Papan tempat memotong roti
  • Kabel jumper

Molekul RTC DS3231

Waktu adalah indra penting yang dibutuhkan dalam dunia manusia yang serba cepat ini. Dalam proyek waktu nyata

Kami menggunakan RTC (A. K. A Real-time clock)

RTC Real-time-clock (RTC) adalah sirkuit terpadu (IC) yang melacak waktu saat ini. RTC menangani waktu dalam mode nyata. RTC biasanya ditemukan di motherboard komputer dan sistem tertanam yang memerlukan akses tepat waktu.

Langkah 2: Koneksi Jam Arduino

Koneksi Jam Arduino
Koneksi Jam Arduino
  • Hubungkan pin SCL ke modul RTC ke Arduino A5
  • Hubungkan pin SDA ke modul RTC ke Arduino A4
  • Hubungkan VCC KE 5v dan GND KE GND
  • Hubungkan tombol tekan ke pin 8
  • Hubungkan tombol lain ke pin 9
  • Hubungkan RS LCD ke pin 2 Arduino
  • Hubungkan E LCD ke pin 3 Arduino
  • Hubungkan D7 LCD ke pin 7 Arduino
  • Hubungkan D6 LCD ke pin 6 Arduino
  • Hubungkan D5 LCD ke pin 5 Arduino
  • Hubungkan D4 LCD ke pin 4 Arduino
  • Hubungkan VSS & K ke GND
  • Hubungkan VDD & A ke 5v
  • Hubungkan vo ke pin output potensiometer

Langkah 3: Kode untuk Jam Arduino Dengan RTC

Kode untuk Jam Arduino Dengan RTC
Kode untuk Jam Arduino Dengan RTC

DS3231 bekerja dengan format BCD saja dan untuk mengkonversi BCD ke desimal dan sebaliknya saya menggunakan 2 baris di bawah ini (contoh untuk menit):// Konversi BCD ke desimalmenit = (menit >> 4) * 10 + (menit & 0x0F);

// Konversi desimal ke BCDmenit = ((menit / 10) << 4) + (menit % 10); void DS3231_display(): menampilkan waktu dan kalender, sebelum menampilkan waktu dan data kalender dikonversi dari BCD ke format desimal.void blink_parameter():

// Jam dan kalender waktu nyata dengan tombol yang disetel menggunakan DS3231 dan Arduino // sertakan kode perpustakaan LCD #termasuk // sertakan kode perpustakaan kawat (diperlukan untuk perangkat protokol I2C) #sertakan // koneksi modul LCD (RS, E, D4, D5, D6, D7) LiquidCrystal lcd(2, 3, 4, 5, 6, 7); void setup() { pinMode(8, INPUT_PULLUP); // button1 terhubung ke pin 8 pinMode(9, INPUT_PULLUP); // button2 terhubung ke pin 9 // mengatur jumlah kolom dan baris LCD lcd.begin(16, 2); Kawat.mulai(); // Join i2c bus } char Time = "TIME::: "; char Kalender = "TANGGAL: / /20"; byte i, detik, menit, jam, tanggal, bulan, tahun; void DS3231_display(){ // Konversi BCD ke desimal detik = (kedua >> 4) * 10 + (detik & 0x0F); menit = (menit >> 4) * 10 + (menit & 0x0F); jam = (jam >> 4) * 10 + (jam & 0x0F); tanggal = (tanggal >> 4) * 10 + (tanggal & 0x0F); bulan = (bulan >> 4) * 10 + (bulan & 0x0F); tahun = (tahun >> 4) * 10 + (tahun & 0x0F); // Akhiri Waktu konversi[12] = detik % 10 + 48; Waktu[11] = detik / 10 + 48; Waktu[9] = menit % 10 + 48; Waktu[8] = menit / 10 + 48; Waktu[6] = jam % 10 + 48; Waktu[5] = jam / 10 + 48; Kalender[14] = tahun % 10 + 48; Kalender[13] = tahun / 10 + 48; Kalender[9] = bulan % 10 + 48; Kalender[8] = bulan / 10 + 48; Kalender[6] = tanggal % 10 + 48; Kalender[5] = tanggal / 10 + 48; lcd.setCursor(0, 0); lcd.print(Waktu); // Menampilkan waktu lcd.setCursor(0, 1); lcd.print(Kalender); // Tampilkan kalender } void blink_parameter(){ byte j = 0; while(j 23) // Jika jam > 23 ==> jam = 0 parameter = 0; if(i == 1 && parameter > 59) // If menit > 59 ==> menit = 0 parameter = 0; if(i == 2 && parameter > 31) // If date > 31 ==> date = 1 parameter = 1; if(i == 3 && parameter > 12) // If month > 12 ==> month = 1 parameter = 1; if(i == 4 && parameter > 99) // If year > 99 ==> year = 0 parameter = 0; sprintf(teks, "%02u", parameter); lcd.setCursor(x, y); lcd.print(teks); penundaan (200); // Tunggu 200 md } lcd.setCursor(x, y); lcd.print(""); // Menampilkan dua spasi blink_parameter(); sprintf(teks, "%02u", parameter); lcd.setCursor(x, y); lcd.print(teks); blink_parameter(); if(!digitalRead(8)){ // Jika tombol (pin #8) ditekan i++; // Kenaikan 'i' untuk parameter pengembalian parameter berikutnya; // Kembalikan nilai parameter dan keluar } } } void loop() { if(!digitalRead(8)){ // Jika tombol (pin #8) ditekan i = 0; jam = edit(5, 0, jam); menit = edit(8, 0, menit); tanggal = edit(5, 1, tanggal); bulan = edit(8, 1, bulan); tahun = edit(13, 1, tahun); // Konversi desimal ke BCD menit = ((menit / 10) << 4) + (menit % 10); jam = ((jam / 10) << 4) + (jam % 10); tanggal = ((tanggal / 10) << 4) + (tanggal % 10); bulan = ((bulan / 10) << 4) + (bulan % 10); tahun = ((tahun / 10) << 4) + (tahun % 10); // Akhiri konversi // Tulis data ke DS3231 RTC Wire.beginTransmission(0x68); // Mulai protokol I2C dengan alamat DS3231 Wire.write(0); // Kirim alamat register Wire.write(0); // Setel ulang sesonds dan mulai osilator Wire.write(minute); // Tulis menit Wire.write(jam); // Tulis jam Wire.write(1); // Tulis hari (tidak digunakan) Wire.write(date); // Tulis tanggal Wire.write(bulan); // Tulis bulan Wire.write(tahun); // Tulis tahun Wire.endTransmission(); // Hentikan transmisi dan lepaskan penundaan bus I2C (200); // Tunggu 200ms } Wire.beginTransmission(0x68); // Mulai protokol I2C dengan alamat DS3231 Wire.write(0); // Kirim alamat register Wire.endTransmission(false); // I2C restart Wire.requestFrom(0x68, 7); // Meminta 7 byte dari DS3231 dan melepaskan bus I2C di akhir pembacaan detik = Wire.read(); // Baca detik dari register 0 menit = Wire.read(); // Baca menit dari register 1 jam = Wire.read(); // Baca jam dari register 2 Wire.read(); // Baca hari dari register 3 (tidak digunakan) date = Wire.read(); // Baca tanggal dari register 4 bulan = Wire.read(); // Baca bulan dari register 5 tahun = Wire.read(); // Baca tahun dari register 6 DS3231_display(); // Waktu pemutaran & penundaan kalender(50); // Tunggu 50 md }

Direkomendasikan: