Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Jam Alarm Sederhana dengan DS1302 RTC

Komponen dan persediaan

Jam Waktu Nyata (RTC)
× 1
Buzzer
× 1
Adafruit LCD Standar - 16x2 Putih di Atas Biru
× 1
Arduino UNO
× 1

Tentang proyek ini

Halo semuanya, dalam proyek ini kami akan mencoba membuat jam alarm yang mudah dengan papan Arduino UNO. Proyek ini adalah campuran dari modul yang berbeda yang saya gunakan sebelumnya, jika Anda terjebak pada sesuatu, Anda dapat memeriksa situs web untuk tutorial modul, karena begitulah cara saya biasanya bekerja:Lakukan sesuatu secara terpisah dan kemudian mulai mencampur. :D

Untuk proyek ini, kita membutuhkan:

  • Papan Arduino UNO, atau Anda dapat menggunakan yang sesuai untuk Anda:
  • Modul RTC DS1302:
  • Modul keypad matriks 4*4:
  • Layar LCD I2C:
  • Modul buzzer, atau buzzer 2 pin:

Jika Anda terjebak pada sesuatu, Anda dapat memeriksa tutorial sebelumnya tentang modul di atas:

Cara setup modul DS1302 RTC dengan Keypad + Arduino + LCD

Cara menggunakan modul DS1302 RTC dengan board Arduino dan layar LCD

Arduino LCD I2C penggunaan sederhana dan penulisan langsung dari monitor serialArduino LCD I2C penggunaan sederhana dan penulisan langsung dari monitor serial

Arduino uno + Matriks Keypad 4×4 + layar LCD i2c

Cara menggunakan buzzer/speaker piezo dengan Arduino

Pengkabelan:

Perpustakaan dan Kode:

Pustaka LCD i2c Anda dapat memilih ini atau mengunduhnya sendiri

Pustaka keypad Atau Anda dapat mengunduhnya dari Arduino IDE

Pustaka virtuabotix RTC DS1302

Kode: 

Unduh kode

Fungsi kode cukup sederhana, setelah kabel modul Anda dapat menekan "*" untuk mengatur waktu dan tanggal pada DS1302 RTC, layar akan menampilkan hari dan waktu saat ini jika Anda ingin mengatur alarm Anda menekan "A" dan Anda dapat mengatur jam dan menit, dan Anda dapat menonaktifkannya dengan menekan “B” sebelum waktu atau menekan tombol apa pun saat berdering.

Saya harap Anda menyukainya, jika ada masalah, Anda dapat menghubungi saya.

Kode

  • RTC_alarm_clock_LCD.ino
RTC_alarm_clock_LCD.inoArduino
Bekerja dengan UNO + RTC DS1302 + LCD i2c + keypad 4x4
(Perubahan besar dibuat 12/04/18 untuk memecahkan beberapa masalah)
//Kode ini digunakan dengan modul DS1302 RTC + 4*4 Keypad + LCD i2c + Arduino + Buzzer//Setelah memasang kabel modul, LCD akan menunjukkan tanggal dan waktu default atau yang ditetapkan sebelumnya//Tujuan dari proyek ini adalah Anda dapat mengatur modul RTC dari keypad, dan yakin itu akan tetap tersimpan//Kemudian tampilkan di layar dan setelah Anda dapat mengatur alarm.//Lihat saluran youtube Surtrtech.com atau SurtrTech untuk informasi lebih lanjut#include  //Perpustakaan yang dibutuhkan#include #include #include #define I2C_ADDR 0x27 //LCD i2c stuff#define BACKLIGHT_PIN 3#define En_pin 2#define Rw_pin 1#define Rs_pin 0#define D4_pin 4#define D5_pin 5#define D6_pin 6#define D7_pin 7LiquidCrystal_Rd,Pin_Crystal_R ,D5_pin,D6_pin,D7_pin);virtuabotixRTC myRTC(2, 3, 4); //Pengkabelan RTC (CLK,DAT,RST) //Jika Anda mengubah pengkabelan, ubah pin di sini jugaconst byte numRows=4; //jumlah baris pada keypadconst byte numCols=4; //jumlah kolom pada keypad//keymap mendefinisikan tombol yang ditekan sesuai dengan baris dan kolom seperti yang muncul pada keypadchar keymap[numRows][numCols]={{'1', '2', '3', ' A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'},{'*', '0', ' #', 'D'}};byte rowPins[numRows] ={12,11,10,9}; //Baris 0 sampai 3 //jika Anda memodifikasi pin Anda, Anda harus memodifikasi toobyte colPins[numCols]={8,7,6,5} ini; //Kolom 0 hingga 3int i1,i2,i3,i4;char c1,c2,c3,c4;char keypressed,keypressedx;int A_hour=NULL;int A_minute=NULL;int AlarmIsActive=NULL;int buzzer =13;Keypad myKeypad =Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);void setup() { Serial.begin(9600); lcd.begin (16,2); //Inisialisasi LCD lcd.setBacklightPin(BACKLIGHT_PIN,POSITIF); lcd.setBacklight(TINGGI); lcd.rumah(); }void loop() { while(keypressed ==NO_KEY){ //Selama tidak ada tombol yang ditekan kita terus menampilkan tanggal dan waktu, saya wajib untuk membersihkan layar setiap kali agar angka tidak membingungkan // Dan saya harus menambahkan sedikit penundaan itu sehingga layar menunjukkan dengan benar jika tidak, itu tidak berfungsi untuk saya keypressed =myKeypad.getKey(); lcd.clear(); //Di sini setelah membersihkan LCD kita mengambil waktu dari modul dan mencetaknya di layar dengan fungsi LCD biasa myRTC.updateTime(); if(myRTC.hours==A_hour &&myRTC.minutes==A_minute &&AlarmIsActive==1 &&myRTC.seconds>=0 &&myRTC.seconds <=2){ while(keypressedx ==NO_KEY){ tone(buzzer, 1000); //Anda dapat memodifikasi nada atau membuat penundaan suara Anda sendiri(100); nada (buzzer, 2000); penundaan(100); lcd.clear(); lcd.print("Bangun!!!"); //Pesan untuk ditampilkan saat alarm berbunyi keypressedx =myKeypad.getKey(); } } penekanan tombolx =NO_KEY; tidakNada(bel); lcd.setCursor(0,0); lcd.print(myRTC.dayofmonth); lcd.print("/"); lcd.print(myRTC.bulan); lcd.print("/"); lcd.print(myRTC.year); lcd.setCursor(0,1); lcd.print(myRTC.jam); lcd.print(":"); lcd.print(myRTC.menit); lcd.print(":"); lcd.print(myRTC.detik); penundaan(100); } if (penekanan tombol =='*') //Seperti yang kita lakukan setiap kali kita memeriksa tombol yang ditekan, kita hanya melanjutkan ke setup jika kita menekan "*" { lcd.clear(); lcd.print("Setup"); penundaan (1000); lcd.clear(); lcd.print("Tahun pemasangan"); //Jadi Anda dapat memahami cara kerjanya, pertama ia menunjukkan kepada kami "pengaturan" lalu mencetak "tahun penyiapan" dan sekarang Anda dapat menulis tahun Anda secara normal (2-0-1-8) //Ini secara otomatis lolos ke pengaturan bulan...sampai selesai //Tombol dari keypad semua dianggap karakter (c) jadi kita harus mengubahnya menjadi int itulah yang saya lakukan kemudian kita menyimpannya (i) //Kami melakukan beberapa matematika dan kami mendapatkan tahun, bulan... sebagai int sehingga kami dapat menyuntikkannya ke RTC jika tidak maka tidak akan dikompilasi //Bulan seperti April Anda harus menulis 04, 03 untuk Maret... jika tidak maka tidak akan lolos ke parameter berikutnya //The RTC virtuabotix perpustakaan sudah diatur untuk tidak menerima waktu dan tanggal yang aneh (45/17/1990) (58:90:70), dan ya tanggal lama dianggap sebagai kesalahan char keypressed2 =myKeypad.waitForKey(); if (ditekan tombol2 !=NO_KEY &&keypressed2 !='*' &&keypressed2 !='#' &&keypressed2 !='A' &&keypressed2 !='B' &&keypressed2 !='C' &&keypressed2 !='D' ) { c1 =penekanan tombol2; lcd.setCursor(0, 1); lcd.print(c1); } char keypressed3 =myKeypad.waitForKey(); if (ditekan tombol3 !=NO_KEY &&keypressed3 !='*' &&keypressed3 !='#' &&keypressed3 !='A' &&keypressed3 !='B' &&keypressed3 !='C' &&keypressed3 !='D' ) { c2 =penekanan tombol3; lcd.setCursor(1, 1); lcd.print(c2); } char keypressed4 =myKeypad.waitForKey(); if (penekanan tombol4 !=NO_KEY &&penekanan tombol4 !='*' &&penekanan tombol4 !='#' &&penekanan tombol4 !='A' &&penekanan tombol4 !='B' &&penekanan tombol4 !='C' &&penekanan tombol4 !='D' ) { c3 =penekanan tombol4; lcd.setCursor(2, 1); lcd.print(c3); } char keypressed5 =myKeypad.waitForKey(); if (penekanan tombol5 !=NO_KEY &&penekanan tombol5 !='*' &&penekanan tombol5 !='#' &&penekanan tombol5 !='A' &&penekanan tombol5 !='B' &&penekanan tombol5 !='C' &&penekanan tombol5 !='D' ) { c4 =penekanan tombol5; lcd.setCursor(3, 1); lcd.print(c4); } i1=(c1-48)*1000; //tombol yang ditekan disimpan ke dalam karakter Saya mengubahnya menjadi int kemudian saya melakukan beberapa perkalian untuk mendapatkan kode sebagai int dari xxxx i2=(c2-48)*100; i3=(c3-48)*10; i4=c4-48; int N_tahun=i1+i2+i3+i4; penundaan (500); lcd.clear(); lcd.print("Bulan pemasangan");//////////////////////////////////////////////////////// //////////////////////// char keypressed6 =myKeypad.waitForKey(); // di sini semua program dihentikan sampai Anda memasukkan empat digit kemudian dibandingkan dengan kode di atas if (ditekan tombol6 !=NO_KEY &&keypressed6 !='*' &&keypressed6 !='#' &&keypressed6 !='A' &&keypressed6 !='B' &&keypressed6 !='C' &&keypressed6 !='D' ) { c1 =keypressed6; lcd.setCursor(0, 1); lcd.print(c1); } char keypressed7 =myKeypad.waitForKey(); if (penekanan tombol7 !=NO_KEY &&penekanan tombol7 !='*' &&penekanan tombol7 !='#' &&penekanan tombol7 !='A' &&penekanan tombol7 !='B' &&penekanan tombol7 !='C' &&penekanan tombol7 !='D' ) { c2 =penekanan tombol7; lcd.setCursor(1, 1); lcd.print(c2); } i1=(c1-48)*10; i2=c2-48; int N_bulan=i1+i2; penundaan (500); lcd.clear(); lcd.print("Hari Pemasangan"); ////////////////////////////////////////////////////////////////// ////////////// char keypressed8 =myKeypad.waitForKey(); // di sini semua program dihentikan sampai Anda memasukkan empat digit kemudian dibandingkan dengan kode di atas if (ditekan tombol8 !=NO_KEY &&keypressed8 !='*' &&keypressed8 !='#' &&keypressed8 !='A' &&keypressed8 !='B' &&penekanan tombol8 !='C' &&penekanan tombol8 !='D' ) { c1 =penekanan tombol8; lcd.setCursor(0, 1); lcd.print(c1); } char keypressed9 =myKeypad.waitForKey(); if (tekanan tombol9 !=NO_KEY &&penekanan tombol9 !='*' &&penekanan tombol9 !='#' &&penekanan tombol9 !='A' &&penekanan tombol9 !='B' &&penekanan tombol9 !='C' &&penekanan tombol9 !='D' ) { c2 =penekanan tombol9; lcd.setCursor(1, 1); lcd.print(c2); } i1=(c1-48)*10; i2=c2-48; int N_hari=i1+i2; penundaan (500); lcd.clear(); lcd.print("Jam pengaturan");//////////////////////////////////////////////////////// //////////////////////////////////////////:char keypressed10 =myKeypad. tungguUntukKey(); // di sini semua program dihentikan sampai Anda memasukkan empat digit kemudian dibandingkan dengan kode di atas jika (ditekan tombol10 !=NO_KEY &&keypressed10 !='*' &&keypressed10 !='#' &&keypressed10 !='A' &&keypressed10 !='B' &&keypressed10 !='C' &&keypressed10 !='D' ) { c1 =keypressed10; lcd.setCursor(0, 1); lcd.print(c1); } char keypressed11 =myKeypad.waitForKey(); if (penekanan tombol11 !=NO_KEY &&penekanan tombol11 !='*' &&penekanan tombol11 !='#' &&penekanan tombol11 !='A' &&penekanan tombol11 !='B' &&penekanan tombol11 !='C' &&penekanan tombol11 !='D' ) { c2 =penekanan tombol11; lcd.setCursor(1, 1); lcd.print(c2); } i1=(c1-48)*10; i2=c2-48; int N_jam=i1+i2; penundaan (500); lcd.clear(); lcd.print("Menit pengaturan");//////////////////////////////////////////////////////// //////////////////////////////////////////:char keypressed12 =myKeypad. tungguUntukKey(); // di sini semua program dihentikan sampai Anda memasukkan empat digit kemudian dibandingkan dengan kode di atas jika (ditekan tombol12 !=NO_KEY &&keypressed12 !='*' &&keypressed12 !='#' &&keypressed12 !='A' &&keypressed12 !='B' &&keypressed12 !='C' &&keypressed12 !='D' ) { c1 =keypressed12; lcd.setCursor(0, 1); lcd.print(c1); } char keypressed13 =myKeypad.waitForKey(); if (penekanan tombol13 !=NO_KEY &&penekanan tombol13 !='*' &&penekanan tombol13 !='#' &&penekanan tombol13 !='A' &&penekanan tombol13 !='B' &&penekanan tombol13 !='C' &&penekanan tombol13 !='D' ) { c2 =penekanan tombol13; lcd.setCursor(1, 1); lcd.print(c2); } i1=(c1-48)*10; i2=c2-48; int N_menit=i1+i2; penundaan (500); lcd.clear(); myRTC.setDS1302Time(22, N_minutes, N_hour, 1, N_day, N_month, N_year); //setelah selesai menyetel tanggal dan waktu, kami mentransfer nilai ke modul RTC //22 singkatan detik Anda dapat menambahkan pengaturannya juga jika Anda mau //1 singkatan hari dalam seminggu, sebagai lama saya tidak menampilkannya di layar saya tidak mengubahnya keypressed=NO_KEY; //kunci "*" disimpan dalam "tekanan tombol" jadi saya menghapus nilai itu dari itu jika tidak, itu akan membuat saya dalam pengaturan lagi }//////////////////// /////////////////////Pengaturan alarm////////////////////////////////////// ////// if (ditekan tombol =='A'){ lcd.clear(); lcd.print("Konfigurasi Alarm"); penundaan (1000); lcd.clear(); lcd.print("Setel jam alarm"); char keypressed14 =myKeypad.waitForKey(); // di sini semua program dihentikan sampai Anda memasukkan empat digit kemudian dibandingkan dengan kode di atas jika (ditekan tombol14 !=NO_KEY &&keypressed14 !='*' &&keypressed14 !='#' &&keypressed14 !='A' &&keypressed14 !='B' &&keypressed14 !='C' &&keypressed14 !='D' ) { c1 =keypressed14; lcd.setCursor(0, 1); lcd.print(c1); } char keypressed15 =myKeypad.waitForKey(); if (penekanan tombol15 !=NO_KEY &&penekanan tombol15 !='*' &&penekanan tombol15 !='#' &&penekanan tombol15 !='A' &&penekanan tombol15 !='B' &&penekanan tombol15 !='C' &&penekanan tombol15 !='D' ) { c2 =penekanan tombol15; lcd.setCursor(1, 1); lcd.print(c2); } i1=(c1-48)*10; i2=c2-48; J_jam=i1+i2; penundaan (500); lcd.clear(); lcd.print("Setel menit alarm"); char keypressed16 =myKeypad.waitForKey(); // di sini semua program dihentikan sampai Anda memasukkan empat digit kemudian dibandingkan dengan kode di atas jika (ditekan tombol16 !=NO_KEY &&keypressed16 !='*' &&keypressed16 !='#' &&keypressed16 !='A' &&keypressed16 !='B' &&keypressed16 !='C' &&keypressed16 !='D' ) { c1 =keypressed16; lcd.setCursor(0, 1); lcd.print(c1); } char keypressed17 =myKeypad.waitForKey(); if (penekanan tombol17 !=NO_KEY &&penekanan tombol17 !='*' &&penekanan tombol17 !='#' &&penekanan tombol17 !='A' &&penekanan tombol17 !='B' &&penekanan tombol17 !='C' &&penekanan tombol17 !='D' ) { c2 =penekanan tombol17; lcd.setCursor(1, 1); lcd.print(c2); } i1=(c1-48)*10; i2=c2-48; A_menit=i1+i2; penundaan (500); lcd.clear(); AlarmIsActive=1; penekanan tombol=NO_KEY; } if (ditekan tombol =='B') { lcd.clear(); lcd.print("Alarm dinonaktifkan"); AlarmIsActive=0; penekanan tombol=NO_KEY; penundaan (500); } else { myRTC.updateTime(); penekanan tombol=NO_KEY; } }

Skema


Proses manufaktur

  1. Panel LCD dengan Arduino untuk Simulator Penerbangan
  2. Arduino pov vision clock
  3. Jam IV9 Numitron DIY paling sederhana dengan Arduino
  4. Jam Kata Sederhana (Arduino)
  5. Jam Arduino dengan waktu sholat Islam
  6. Jam Master
  7. Suhu Arduino. Monitor Dan Jam Waktu Nyata Dengan Tampilan 3.2
  8. Sensor Kendala Sederhana dengan Arduino
  9. TM1637 Jam Digital dengan pengaturan waktu dan fungsi alarm
  10. Menampilkan Gambar Pada Layar TFT LCD Dengan Arduino UNO!