Alarm Bangun Tidur Menggunakan NTP Server

Indobot Update

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.

  1. Software Arduino IDE
  2. Koneksi Internet (Hotspot)
  3. NodeMCU ESP8266
  4. LCD 16×2
  5. LCM 1602 IIC (Driver LCD)
  6. Buzzer
  7. Push Button
  8. Projectboard
  9. 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!

Ingin Tahu Program Kami Lebih Lanjut?

Silahkan isi Formulir Dibawah Ini untuk Diskusi dengan Tim Indobot Academy.

Baca Juga

Bagikan:

Tags

Tinggalkan komentar

whatsapp whatsapp