Isi kandungan:

Jam Masa Sebenar Dengan Arduino: 3 Langkah
Jam Masa Sebenar Dengan Arduino: 3 Langkah

Video: Jam Masa Sebenar Dengan Arduino: 3 Langkah

Video: Jam Masa Sebenar Dengan Arduino: 3 Langkah
Video: Cara Membaca Jam dan Tanggal dengan Modul Real Time Clock (RTC) DS1302 Arduino Uno 2024, Julai
Anonim
Jam Masa Sebenar Dengan Arduino
Jam Masa Sebenar Dengan Arduino

Dalam projek ini, kami akan membuat jam dengan bantuan modul Arduino dan RTC. Seperti yang kita ketahui, Arduino tidak dapat memaparkan waktu yang sebenarnya jadi kita akan menggunakan modul RTC untuk memaparkan waktu yang tepat di LCD. Baca semua langkah dengan teliti, ia akan banyak membantu anda membuat kerja jam.

Kod DS3231 Arduino adalah seperti kod DS1307 dan berfungsi dengan kedua-dua cip RTC.

Kod Arduino di bawahnya tidak menggunakan perpustakaan mana pun untuk DS3231 RTC, perpustakaan Wire adalah untuk korespondensi antara Arduino dan DS3231 menggunakan konvensi I2C.

Yeah! Banyak jurutera elektronik bergantung pada projek berdasarkan masa mereka tetapi RTC tidak boleh dipercayai sepenuhnya. Ia dikendalikan dengan bateri dan mesti diganti segera atau lambat. Datang ke projek IoT ia memerlukan pin SPI (Serial Peripheral Interface) yang berharga dan tidak kemas dengan wayar yang kusut. Penyelesaian…. Inilah NTP wira kami (protokol masa Rangkaian). NTP begitu tepat kerana mendapat masa dari internet. Kami akan mengoperasikan protokol ini menggunakan mod pelayan pelanggan. prosesnya sangat mudah sehingga Nodemcu kami bertindak sebagai pelanggan dan meminta paket NTP dari pelayan menggunakan UDP. Sebagai balasan, pelayan menghantar paket kepada klien yang menguraikan data. NTP adalah protokol penyegerakan masa sejagat. Sekarang mari kita menerangi stesen kerja makmal kita

Langkah 1: Komponen yang Diperlukan

  • Papan Arduino
  • Papan RTC DS3231
  • Skrin LCD 16x2
  • Butang tekan 2 x
  • Perintang pemboleh ubah 10K ohm (atau potensiometer)
  • Perintang 330 ohm
  • Bateri sel duit syiling 3V
  • Papan roti
  • Wayar pelompat

RTC mocule DS3231

Masa adalah rasa penting yang diperlukan dalam dunia manusia yang serba pantas ini. Dalam projek masa nyata

Kami menggunakan RTC (A. K. A Jam masa nyata)

RTC Real-time-clock (RTC) adalah litar bersepadu (IC) yang memantau masa semasa. RTC mengurus masa dalam mod sebenar. RTC biasanya terdapat di papan induk komputer dan sistem tertanam untuk memerlukan akses tepat pada masanya.

Langkah 2: Sambungan Jam Arduino

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

Langkah 3: Kod untuk Jam Arduino Dengan RTC

Kod untuk Jam Arduino Dengan RTC
Kod untuk Jam Arduino Dengan RTC

DS3231 berfungsi dengan format BCD sahaja dan untuk menukar BCD menjadi perpuluhan dan sebaliknya saya menggunakan 2 baris di bawah (contoh untuk minit): // Tukarkan BCD ke perpuluhan = (minit >> 4) * 10 + (minit & 0x0F);

// Tukar perpuluhan menjadi BCDminute = ((minit / 10) << 4) + (minit% 10); batal DS3231_display (): memaparkan masa dan kalendar, sebelum memaparkan waktu dan data kalendar ditukar dari BCD ke format perpuluhan. kosongkan blink_parameter ():

// Jam dan kalendar masa nyata dengan butang set menggunakan DS3231 dan Arduino // sertakan kod perpustakaan LCD #sertakan / sertakan kod perpustakaan Wire (diperlukan untuk peranti protokol I2C) #sertakan // sambungan modul LCD (RS, E, D4, D5, D6, D7) LiquidCrystal lcd (2, 3, 4, 5, 6, 7); batal persediaan () {pinMode (8, INPUT_PULLUP); // butang1 disambungkan ke pin 8 pinMode (9, INPUT_PULLUP); // butang2 disambungkan ke pin 9 // tetapkan lajur dan baris LCD lcd.begin (16, 2); Wire.begin (); // Sertailah i2c bus} char Time = "TIME:::"; char Calendar = "TARIKH: / / 20"; bait i, kedua, minit, jam, tarikh, bulan, tahun; batal DS3231_display () {// Tukar BCD ke perpuluhan saat = (kedua >> 4) * 10 + (kedua & 0x0F); minit = (minit >> 4) * 10 + (minit & 0x0F); jam = (jam >> 4) * 10 + (jam & 0x0F); tarikh = (tarikh >> 4) * 10 + (tarikh & 0x0F); bulan = (bulan >> 4) * 10 + (bulan & 0x0F); tahun = (tahun >> 4) * 10 + (tahun & 0x0F); // Masa penukaran akhir [12] =% kedua 10 + 48; Masa [11] = kedua / 10 + 48; Masa [9] = minit% 10 + 48; Masa [8] = minit / 10 + 48; Masa [6] = jam% 10 + 48; Masa [5] = jam / 10 + 48; Kalendar [14] = tahun% 10 + 48; Kalendar [13] = tahun / 10 + 48; Kalendar [9] = bulan% 10 + 48; Kalendar [8] = bulan / 10 + 48; Kalendar [6] = tarikh% 10 + 48; Kalendar [5] = tarikh / 10 + 48; lcd.setCursor (0, 0); lcd.print (Masa); // Waktu paparan lcd.setCursor (0, 1); lcd.print (Kalendar); // Paparan kalendar} kekosongan kosong_parameter () {byte j = 0; manakala (j 23) // Jika jam> 23 ==> jam = 0 parameter = 0; if (i == 1 && parameter> 59) // Jika minit> 59 ==> minit = 0 parameter = 0; if (i == 2 && parameter> 31) // Jika tarikh> 31 ==> tarikh = 1 parameter = 1; if (i == 3 && parameter> 12) // Jika bulan> 12 ==> bulan = 1 parameter = 1; if (i == 4 && parameter> 99) // Jika tahun> 99 ==> tahun = 0 parameter = 0; sprintf (teks, "% 02u", parameter); lcd.setCursor (x, y); lcd.print (teks); kelewatan (200); // Tunggu 200ms} lcd.setCursor (x, y); lcd.print (""); // Paparkan dua ruang blink_parameter (); sprintf (teks, "% 02u", parameter); lcd.setCursor (x, y); lcd.print (teks); blink_parameter (); if (! digitalRead (8)) {// Jika butang (pin # 8) ditekan i ++; // Kenaikan 'i' untuk parameter pengembalian parameter seterusnya; // Nilai parameter kembali dan keluar}}} gelung kosong () {if (! DigitalRead (8)) {// Jika butang (pin # 8) ditekan i = 0; jam = sunting (5, 0, jam); minit = sunting (8, 0, minit); tarikh = sunting (5, 1, tarikh); bulan = sunting (8, 1, bulan); tahun = suntingan (13, 1, tahun); // Tukar perpuluhan menjadi BCD minit = ((minit / 10) << 4) + (minit% 10); jam = ((jam / 10) << 4) + (jam% 10); tarikh = ((tarikh / 10) << 4) + (tarikh% 10); bulan = ((bulan / 10) << 4) + (bulan% 10); tahun = ((tahun / 10) << 4) + (tahun% 10); // Penukaran akhir // Tulis data ke DS3231 RTC Wire.beginTransmission (0x68); // Mulakan protokol I2C dengan alamat DS3231 Wire.write (0); // Hantar alamat daftar Wire.write (0); // Tetapkan semula sesonds dan mulakan pengayun Wire.write (minit); // Tulis minit Wire.write (jam); // Tulis jam Wire.write (1); // Tulis hari (tidak digunakan) Wire.write (tarikh); // Tulis tarikh Wire.write (bulan); // Tulis bulan Wire.write (tahun); // Tulis tahun Wire.endTransmission (); // Hentikan penghantaran dan lepaskan kelewatan bas I2C (200); // Tunggu 200ms} Wire.beginTransmission (0x68); // Mulakan protokol I2C dengan alamat DS3231 Wire.write (0); // Hantar alamat daftar Wire.endTransmission (false); // I2C mulakan semula Wire.requestFrom (0x68, 7); // Minta 7 bait dari DS3231 dan lepaskan bas I2C pada akhir bacaan kedua = Wire.read (); // Baca saat dari daftar 0 minit = Wire.read (); // Baca minit dari daftar 1 jam = Wire.read (); // Baca jam dari daftar 2 Wire.read (); // Baca hari dari daftar 3 (tidak digunakan) tarikh = Wire.read (); // Tarikh baca dari daftar 4 bulan = Wire.read (); // Baca bulan dari daftar 5 tahun = Wire.read (); // Baca tahun dari daftar 6 DS3231_display (); // Masa diet & kelewatan kalendar (50); // Tunggu 50ms}

Disyorkan: