Alarm Bangun Tidur Menggunakan NTP Server
Hallo semuanya.
Kalian sudah menggunakan NodeMCU ESP8266 sebagai project kalian?
Sudah? Belum? Sayang sekali kalau belum.
Soalnya pada project kali ini, kita akan menggunakan NodeMCU ESP8266 sebagai device controllernya. Sebenarnya bisa juga menggunakan Arduino Uno, namun teman-teman harus menambahkan modul ESP8266 untuk koneksi internet. Selain nodeMCU, bisa juga menggunakan Wemos ya (pokoknya yang ada wifinya).
Kenapa butuh yang ada Wifinya? Karena project NTP server adalah project yang mengambil waktu ter update dari internet. Biasanya kita bisa menggunakan RTC sebagai pengatur waktu yang tepat, namun jika tidak ada RTC, kita hanya cukup menggunakan internet. Seperti itu.
Jadi bagaimana caranya?
NTP server adalah waktu yang dapat berjalan dengan melalui jaringan internet. Sehingga tampilan jam akan sama dengan jam lainnya berdasarkan jam internet dengan sinkronisasi. NTP adalah singkatan dari Network Time Protocol. NTP inilah yang menjadi standar internet protokol yang biasa digunakan dalam perangkat-perangkat elektronik. Jika teman-teman perhatikan, penunjukkan jam dan tanggal yang muncul pada hp atau laptop kita, akan dapat menyesuaikan diri dengan lokasi teman-teman. Hal inilah yang dinamakan dengan NTP.
Nahhh pada project ini, kita akan menggunakan NTP sebagai dasar waktu untuk pembuatan jam digital. Sedangkan untuk menjadi alarm, kita dapat menambahkan button untuk mematikan alarm dan buzzer untuk membuat bunyi berisik agar kita bisa bangun.
Belajar elektronika step by step dengan bantuan tangga belajar? Regitrasi dulu dan dapatkan konsultasi dari kami!
Langsung saja kita praktikkan.
Siapkan Alat dan Bahan
Alat dan bahan untuk project ini adalah sebagai berikut.
- Software Arduino IDE
- Koneksi Internet (Hotspot)
- NodeMCU ESP8266
- LCD 16×2
- LCM 1602 IIC (Driver LCD)
- Buzzer
- Push Button
- Projectboard
- Kabel jumper
baca juga: Membuat Jam Digital tanpa RTC Skala Internasional dengan NTP Server
Rangkaian
Susun device di atas menjadi rangkaian seperti berikut. Pastikan semua terhubung dengan baik.
Program
Tahap selanjutnya adalah penulisan program pada Arduino IDE. Buatlah program seperti berikut.
//program waktu dengan NTP Server oleh indobot.co.id #include <TimeLib.h> #include <ESP8266WiFi.h> #include <WiFiUdp.h> #include <LiquidCrystal_I2C.h> #define button D1 #define buzzer D2 int jam = 4; int menit = 30; LiquidCrystal_I2C lcd(0x27,16,2); const char ssid[] = "hotspot portabel"; // nama hostpot yang anda gunakan const char pass[] = "hotspotpermanen"; // password hotspot yang anda gunakan // NTP Servers: static const char ntpServerName[] = "us.pool.ntp.org"; const int timeZone = 7; // time zone menggunakan GMT +7 (untuk WIB) //bagi kalian yang bukan WIB, silakan cari GMT d tempat masing-masing WiFiUDP Udp; unsigned int localPort = 8888; time_t getNtpTime(); void digitalClockDisplay(); void printDigits(int digits); void sendNTPpacket(IPAddress &address); void setup() { Serial.begin(9600); delay(250); Serial.println("NTP Indobot Project"); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, pass); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.print("IP number assigned by DHCP is "); Serial.println(WiFi.localIP()); Serial.println("Starting UDP"); Udp.begin(localPort); Serial.print("Local port: "); Serial.println(Udp.localPort()); Serial.println("waiting for sync"); setSyncProvider(getNtpTime); setSyncInterval(300); lcd.init (); //Mulai LCD lcd.setBacklight(HIGH); pinMode (button, OUTPUT); pinMode (buzzer,INPUT); } time_t prevDisplay = 0; void loop() { int Kbutton = digitalRead(button); if (timeStatus() != timeNotSet) { if (now() != prevDisplay) { prevDisplay = now(); digitalClockDisplay(); } } if (Kbutton == LOW){ alarm(); } } void alarm(){ if (hour() == jam && minute() == menit) { digitalWrite(buzzer,HIGH); delay(10000); digitalWrite(buzzer,LOW); delay(100); } } void digitalClockDisplay() { lcd.setCursor(0,0); //tampilan hari bulan tahun lcd.print(day()); lcd.print("."); lcd.print(month()); lcd.print("."); lcd.print(year()); lcd.setCursor(0,1); // tampilan jam, menit, detik lcd.print("pkl : "); lcd.print(hour()); printDigits(minute()); printDigits(second()); } void printDigits(int digits) { lcd.print(":"); if (digits < 10) lcd.print('0'); lcd.print(digits); } /*-------- NTP code ----------*/ const int NTP_PACKET_SIZE = 48; byte packetBuffer[NTP_PACKET_SIZE]; time_t getNtpTime() { IPAddress ntpServerIP; while (Udp.parsePacket() > 0) ; Serial.println("Transmit NTP Request"); // get a random server from the pool WiFi.hostByName(ntpServerName, ntpServerIP); Serial.print(ntpServerName); Serial.print(": "); Serial.println(ntpServerIP); sendNTPpacket(ntpServerIP); uint32_t beginWait = millis(); while (millis() - beginWait < 1500) { int size = Udp.parsePacket(); if (size >= NTP_PACKET_SIZE) { Serial.println("Receive NTP Response"); Udp.read(packetBuffer, NTP_PACKET_SIZE); unsigned long secsSince1900; secsSince1900 = (unsigned long)packetBuffer[40] << 24; secsSince1900 |= (unsigned long)packetBuffer[41] << 16; secsSince1900 |= (unsigned long)packetBuffer[42] << 8; secsSince1900 |= (unsigned long)packetBuffer[43]; return secsSince1900 - 2208988800UL + timeZone * SECS_PER_HOUR; } } Serial.println("No NTP Response :-("); return 0; } void sendNTPpacket(IPAddress &address) { memset(packetBuffer, 0, NTP_PACKET_SIZE); packetBuffer[0] = 0b11100011; packetBuffer[1] = 0; packetBuffer[2] = 6; packetBuffer[3] = 0xEC; packetBuffer[12] = 49; packetBuffer[13] = 0x4E; packetBuffer[14] = 49; packetBuffer[15] = 52; Udp.beginPacket(address, 123); Udp.write(packetBuffer, NTP_PACKET_SIZE); Udp.endPacket(); } |
baca juga: Tutorial Arduino UNO R3 Membuat Alarm dengan Vibration Sensor
Ganti ssid dan password sesuai dengan yang kalian gunakan. setelah jam sudah disesuaikan dengan wilayah kita, ketika kita putus koneksi juga tidak masalah asalkan nodeMCU kita masih menyala. Masukkan time zone sesuai wilayah teman-teman ya (dapat dilihat di GMT). Pada program di atas, alarm hanya akan menyala selama 1 menit. Nah silakan teman-teman bisa variasikan dengan menyalakannya lebih lama dan cobalah untuk menambahkan tombol-tombol lainnya seperti alarm yang ada di smartphone kita.
Selamat mencoba.
Kamu pemula dan ingin belajar/bikin project elektronika dari nol? Ikuti program dari Indobot!