Bel Sekolah menggunakan tabel database fleksibel berbasis Arduino

Bel sekolah digital dimanfaatkan untuk menentukan waktu pertukaran kegiatan di sekolah-sekolah. Jadwal untuk sebuah sekolah berbeda dengan sekolah lainnya, baik perbedaan tingkat sekolah maupun zona waktunya. Selain itu terdapat juga perbedaan jadwal untuk masing masing hari, seperti senin pertama setiap bulan untuk upacara dan hari lainnya yang mempunyai kekhususan waktu. Bel sekolah digital berbasis arduino atau mikrokontroller lain memiliki kemampuan penjadwalan jam pelajaran tersebut. selain itu bel sekolah digital arduino juga mudah dalam pengembangan nantinya.

Dalam perancangan bel sekolah arduino ini dibatasi hanya sampai pengaplikasian tabel database arduino fleksibel yang bisa disesuaikan dengan kebutuhan. Bel sekolah berbasis arduino ini hanya berupa penerapan dasar saja yang bisa dikombinasikan dengan aplikasi Bel Sekolah fungsional lainnya.

Untuk pengembangannya bisa saja perangkat bel sekolah otomatis berbasis arduino ini ditambahkan sistem entri data dari bluetooth, wifi, PC dll. juga bisa ditambahkan sistem output multimedia seperti alarm, suara, running text, DMD dan lain-lain.

Kelebihan perancangan ini adalah:

  1. Tabel database jadwal fleksibel
  2. Pembacaan RTC dengan interupsi sehingga menghemat resource
  3. Pemanfaatan sleep mode

Komponen yang digunakan:

  1. Arduino Uno
  2. RTC DS3231

berikut skema / rangkaian bel sekolah dengan arduino:

dan program/sketch Arduino:

#include <DS3232RTC.h>
#include <avr/sleep.h>

#define SQWPin 12

struct Waktu
{ 
  byte jam; 
  byte menit; 
};

struct TabelMataPelajaran
{
  byte aktif;
  Waktu waktu;
  byte hariAktif;
  byte mingguAktif;
  byte kegiatan;
};

enum _kegiatan
{
  JamPelajaran1,
  JamPelajaran2,
  JamPelajaran3,
  JamPelajaran4,
  JamPelajaran5,
  JamPelajaran6,
  JamPelajaran7,
  JamPelajaran8,
  JamPelajaran9,
  JamPelajaran10,
  JamPelajaran11,
  JamPelajaran12,
  JamPelajaran13,
  JamPelajaran14,
  JamPelajaran15,
  Masuk,
  Upacara,
  Istirahat,
  SelesaiIstirahat,
  Kepramukaan,
  Khusus,
  Pulang,
  PulangJumat,
  PulangSabtu
};

volatile bool interupsiDetik;
byte indexMataPelajaran;

#define hariAktifSenin 1<<6
#define hariAktifSelasa 1<<5
#define hariAktifRabu 1<<4
#define hariAktifKamis 1<<3
#define hariAktifJumat 1<<2
#define hariAktifSabtu 1<<1
#define hariAktifMinggu 1<<7

String namaHari[] = {"Minggu","Senin","Selasa","Rabu","Kamis","Jum;at","Sabtu"};
#define _hariAktif(Sen,Sel,Rab,Kam,Jum,Sab,Mgu) (Mgu<<7)|(Sen<<6)|(Sel<<5)|(Rab<<4)|(Kam<<3)|(Jum<<2)|(Sab<<1)
#define _mingguAktif(Mgu1,Mgu2,Mgu3,Mgu4,Mgu5) (Mgu1<<7)|(Mgu2<<6)|(Mgu3<<5)|(Mgu4<<4)|(Mgu5<<3)
#define _waktu(Jam, Menit) {Jam, Menit}
#define Aktif 1
#define TidakAktif 0



TabelMataPelajaran jadwalBelajar[35];
Waktu waktu;
tmElements_t tm;

void setup() {
  byte i = 0;

  //Senin
  jadwalBelajar[i++] = {Aktif, _waktu(  6, 45 ), hariAktifSenin,            _mingguAktif(1,0,0,0,0), Upacara};
  jadwalBelajar[i++] = {Aktif, _waktu(  6, 45 ), hariAktifSenin,            _mingguAktif(0,1,1,1,1), JamPelajaran1};
  jadwalBelajar[i++] = {Aktif, _waktu(  6, 45 ), _hariAktif(0,1,1,1,1,0,0), _mingguAktif(1,1,1,1,1), JamPelajaran1};
  
  jadwalBelajar[i++] = {Aktif, _waktu(  7, 30 ), _hariAktif(1,1,1,1,0,0,0), _mingguAktif(1,1,1,1,1), JamPelajaran2};
  jadwalBelajar[i++] = {Aktif, _waktu(  8, 15 ), _hariAktif(1,1,1,1,0,0,0), _mingguAktif(1,1,1,1,1), JamPelajaran3};
  jadwalBelajar[i++] = {Aktif, _waktu(  9, 0  ), _hariAktif(1,1,1,1,0,0,0), _mingguAktif(1,1,1,1,1), JamPelajaran4};
  jadwalBelajar[i++] = {Aktif, _waktu(  9, 45 ), _hariAktif(1,1,1,1,0,0,0), _mingguAktif(1,1,1,1,1), Istirahat};
  jadwalBelajar[i++] = {Aktif, _waktu( 10, 15 ), _hariAktif(1,1,1,1,0,0,0), _mingguAktif(1,1,1,1,1), JamPelajaran5};
  jadwalBelajar[i++] = {Aktif, _waktu( 11, 0  ), _hariAktif(1,1,1,1,0,0,0), _mingguAktif(1,1,1,1,1), JamPelajaran6};
  jadwalBelajar[i++] = {Aktif, _waktu( 11, 45 ), _hariAktif(1,1,1,1,0,0,0), _mingguAktif(1,1,1,1,1), Istirahat};
  jadwalBelajar[i++] = {Aktif, _waktu( 12, 30 ), _hariAktif(1,1,1,1,0,0,0), _mingguAktif(1,1,1,1,1), JamPelajaran7};
  jadwalBelajar[i++] = {Aktif, _waktu( 13, 15 ), _hariAktif(1,1,1,1,0,0,0), _mingguAktif(1,1,1,1,1), JamPelajaran8};

  jadwalBelajar[i++] = {Aktif, _waktu( 14, 0  ), _hariAktif(1,1,1,0,0,0,0), _mingguAktif(1,1,1,1,1), JamPelajaran9};
  jadwalBelajar[i++] = {Aktif, _waktu( 14, 45 ), _hariAktif(1,1,1,0,0,0,0), _mingguAktif(1,1,1,1,1), JamPelajaran10};

  jadwalBelajar[i++] = {Aktif, _waktu( 14, 0  ), hariAktifKamis,            _mingguAktif(1,1,1,1,1), Kepramukaan};
  jadwalBelajar[i++] = {Aktif, _waktu( 14, 45 ), hariAktifKamis,            _mingguAktif(1,1,1,1,1), Khusus};

  jadwalBelajar[i++] = {Aktif, _waktu( 15, 30 ), _hariAktif(1,1,1,1,0,0,0), _mingguAktif(1,1,1,1,1), Pulang};

  jadwalBelajar[i++] = {Aktif, _waktu(  7, 25 ), hariAktifJumat,            _mingguAktif(1,1,1,1,1), JamPelajaran2};
  jadwalBelajar[i++] = {Aktif, _waktu(  8, 5  ), hariAktifJumat,            _mingguAktif(1,1,1,1,1), JamPelajaran3};
  jadwalBelajar[i++] = {Aktif, _waktu(  8, 45 ), hariAktifJumat,            _mingguAktif(1,1,1,1,1), JamPelajaran4};
  jadwalBelajar[i++] = {Aktif, _waktu(  9, 25 ), hariAktifJumat,            _mingguAktif(1,1,1,1,1), Istirahat};
  jadwalBelajar[i++] = {Aktif, _waktu(  9, 55 ), hariAktifJumat,            _mingguAktif(1,1,1,1,1), JamPelajaran5};
  jadwalBelajar[i++] = {Aktif, _waktu( 10, 35 ), hariAktifJumat,            _mingguAktif(1,1,1,1,1), JamPelajaran6};
  jadwalBelajar[i++] = {Aktif, _waktu( 11, 15 ), hariAktifJumat,            _mingguAktif(1,1,1,1,1), PulangJumat};

  indexMataPelajaran = i;

  Serial.begin(9600);
  Serial.println("Bel Sekolah menggunakan tabel database flexibel berbaasis Arduino");
  Serial.println("Bisa ditambahkan input bluetooth, wifi, PC, komputer dll");
  Serial.println("Bisa ditambahkan output multimedia seperti suara, alarm, running text, dmd dll");
  Serial.println("https://www.project.semesin.com");
  
  byte ControlRegister;
  RTC.readRTC(0x0E,&ControlRegister,1);
  ControlRegister &= ~(0x07<<2);
  RTC.writeRTC(0x0E, &ControlRegister,1);

  *digitalPinToPCMSK(SQWPin) |= bit (digitalPinToPCMSKbit(SQWPin));
  PCIFR  |= bit (digitalPinToPCICRbit(SQWPin));
  PCICR  |= bit (digitalPinToPCICRbit(SQWPin));
 
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_enable();

////Set waktu sekali saja
//  tm.Day = 1;
//  tm.Month = 4;
//  tm.Year = CalendarYrToTm(2018);
//  tm.Hour = 15;
//  tm.Minute = 24;
//  tm.Second = 00;
//
//  time_t t = makeTime(tm);
//  tm.Wday = dayOfWeek(t);
//  RTC.write(tm);
//  TampilkanWaktu();
}

ISR (PCINT0_vect)
{
  if(digitalRead(SQWPin))
  {
    interupsiDetik = true;
  }
}  

void loop() {
  
  
  if(interupsiDetik)
  {
    interupsiDetik = false;
    RTC.read(tm);
    
    if(tm.Second == 0)
    {
      TampilkanWaktu();//***
      
      byte hariKeDiTanggal1 = (((tm.Wday + 8)  - (tm.Day % 7)) % 7);
      byte SeninKe = ((tm.Day + 7 - hariKeDiTanggal1) / 7);
      byte mingguKe = ((tm.Day + 8 - hariKeDiTanggal1) / 7) + 1;
      
      for(byte i=0; i<indexMataPelajaran ;i++)
      {
        if(jadwalBelajar[i].aktif)
        {
          if((jadwalBelajar[i].waktu.jam == tm.Hour) && 
          (jadwalBelajar[i].waktu.menit == tm.Minute) && 
          (jadwalBelajar[i].hariAktif & (1<<(8-tm.Wday))) &&
          (jadwalBelajar[i].mingguAktif & (1<<(8-SeninKe))))
          {
            TampilkanWaktu();
            //Bisa ditambahkan sistem output
            switch(jadwalBelajar[i].kegiatan)
            {
              case JamPelajaran1:
                Serial.println("Jam Pelajaran 1");
                break;
              case JamPelajaran2:
                Serial.println("Jam Pelajaran 2");
                break;
              case JamPelajaran3:
                Serial.println("Jam Pelajaran 3");
                break;
              case JamPelajaran4:
                Serial.println("Jam Pelajaran 4");
                break;
              case JamPelajaran5:
                Serial.println("Jam Pelajaran 5");
                break;
              case JamPelajaran6:
                Serial.println("Jam Pelajaran 6");
                break;
              case JamPelajaran7:
                Serial.println("Jam Pelajaran 7");
                break;
              case JamPelajaran8:
                Serial.println("Jam Pelajaran 8");
                break;
              case JamPelajaran9:
                Serial.println("Jam Pelajaran 9");
                break;
              case JamPelajaran10:
                Serial.println("Jam Pelajaran 10");
                break;
              case JamPelajaran11:
                Serial.println("Jam Pelajaran 11");
                break;
              case JamPelajaran12:
                Serial.println("Jam Pelajaran 12");
                break;
              case JamPelajaran13:
                Serial.println("Jam Pelajaran 13");
                break;
              case JamPelajaran14:
                Serial.println("Jam Pelajaran 14");
                break;
              case JamPelajaran15:
                Serial.println("Jam Pelajaran 15");
                break;
              case Masuk:
                Serial.println("Masuk");
                break;
              case Upacara:
                Serial.println("Upacara");
                break;
              case Istirahat:
                Serial.println("Istirahat");
                break;
              case SelesaiIstirahat:
                Serial.println("Selesai istirahat");
                break;
              case Kepramukaan:
                Serial.println("Kepramukaan");
                break;
              case Khusus:
                Serial.println("Khusus");
                break;
              case Pulang:
                Serial.println("Jam pelajaran telah selesai, sampai jumpa esok hari");
                break;
              case PulangJumat:
                Serial.println("Jam pelajaran telah selesai, sampai jumpa minggu depan");
                break;
              case PulangSabtu:
                Serial.println("Jam pelajaran telah selesai, sampai jumpa minggu depan");
                break;
              default:
                Serial.println("Lainnya");
                break;
            }
          }
        }
      }
    }
  }
  delay(100);//Selesaikan Serial nge print, hapus saja jika tidak diperlukan
  sleep_mode();
}
void TampilkanWaktu()
{
  Serial.print("Waktu = ");
  print2digits(tm.Hour);
  Serial.write(':');
  print2digits(tm.Minute);
  Serial.write(':');
  print2digits(tm.Second);
  Serial.print(", Tanggal = ");
  Serial.print(namaHari[tm.Wday-1]);
  Serial.write(' ');
  Serial.print(tm.Day);
  Serial.write('/');
  Serial.print(tm.Month);
  Serial.write('/');
  Serial.print(tmYearToCalendar(tm.Year));
  Serial.println();
}

void print2digits(int number) {
  if (number >= 0 && number < 10) {
    Serial.write('0');
  }
  Serial.print(number);
}

contoh Bel Sekolah Arduino Uno dengan output modul mini MP3 DFPlayer (library DFPlayer_Mini_Mp3.h) dan software serial : Bel_Sekolah_tanpa_interupsi.ino

Bel sekolah bluetooth dengan kontrol android : disini

67 thoughts on “Bel Sekolah menggunakan tabel database fleksibel berbasis Arduino

    1. dari RTC namanya pin SQW (square wave) berlaku untuk DS1307 dan DS3231, bila disetting aktif, pin ini akan mengeluarkan pulsa sebesar 1Hz, 4096Hz, 8192Hz atau 32768Hz, dalam sketch ini bertindak sebagai interrupt/reqeust.
      Tujuan membaca sinyal SQW (1Hz) adalah agar pembacaan detik oleh arduino hanya ketika detik RTC telah berubah ditandai dengan RTC low->high, jadi resource arduino tidak boros.

  1. Untuk perintah menyalakan alarm menggunakan DFPlayer, kodingnya diset dimananya mas? kasih contoh sketcnya dong mas….

    1. Contoh penggunaan output Mini MP3 DFPlayer

                  
      switch(jadwalBelajar[i].kegiatan)
      {
        case JamPelajaran1:
          Serial.println("Jam Pelajaran 1");
          mp3_play (1);//Output suara (tergantung modul dan library yang digunakan)
          break;
        case JamPelajaran2:
          Serial.println("Jam Pelajaran 2");
          mp3_play (2);
          break;
        case dan seterusnya:
      
  2. nah…. pas saya include DFpnya malah jadi eror mas… gimana tuh?

    #include <DS3232RTC.h>
    #include <avr/sleep.h>
    #include <SoftwareSerial.h>
    #include <DFPlayer_Mini_Mp3.h>
    
    SoftwareSerial mySerial(10, 11); // RX, TX
    

    pesan eror:
    libraries\SoftwareSerial\SoftwareSerial.cpp.o (symbol from plugin): In function `SoftwareSerial::read()’:

    (.text+0x0): multiple definition of `__vector_3′

    sketch\Bel_2.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here

    collect2.exe: error: ld returned 1 exit status

    exit status 1
    Error compiling for board Arduino/Genuino Uno.

    1. terjadi karena bentrok antara interupt yang digunakan
      Software serial dan
      baris program ini

        *digitalPinToPCMSK(SQWPin) |= bit (digitalPinToPCMSKbit(SQWPin));
        PCIFR  |= bit (digitalPinToPCICRbit(SQWPin));
        PCICR  |= bit (digitalPinToPCICRbit(SQWPin));
      

      alternatif pemecahan:
      * Tanpa menggunakan softwareSerial tetapi menggunakan HardwareSerial (Serial biasa pin 0 dan 1)
      kelemahannya bongkar pasang pin tx saat upload.

      * Menghapus baris *digitalPinToPCMSK(SQWPin) |= bit (digitalPinToPCMSKbit(SQWPin)); (dan 2 lainnya)
      artinya menghilangkan fungsi SQW => pembacaan RTC pada umumnya

      void loop() {
      RTC.read(tm);
      delay(1000); //perkiraan 1 detik
      }

      * Memindahkan pin SQW ke jalur pinChange interupsi selain _vector_3

      catatan:
      pin SQW pada RTC berfungsi membangkitkan gelombang 1Hz (1 pulsa per detik) yang dideteksi melalui interupsi. Kegunaanya sebagai sinyal bahwa rtc detik telah berubah, yang akhirnya untuk menghemat clock (resources) arduino, dari pada menggunakan fungsi delay() atau millis().

  3. halo mas gmn kabarnya?
    lngsung ke laptop yaaaa…..ni kisahnya saya nyoba bkin sket sndri buat alarm. Dapet kendala pas di program relay. awal arduino menyala,relay lngsung on. padahal pngennya on pas waktu alarmnya aja. Bisa bntuin koreksi mas?
    <#include

    #include

    #include

    LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address

    DS3231 rtc(SDA, SCL);

    Time t;
    #define inrelay 8
    #define buz 11

    int Hor;

    int Min;

    int Sec;

    void setup()

    {

    Wire.begin();

    rtc.begin();

    Serial.begin(9600);
    pinMode(inrelay, OUTPUT) ;
    pinMode(buz, OUTPUT);

    lcd.begin(16,2);

    lcd.setCursor(0,0);

    lcd.print(“ALARM”);

    lcd.setCursor(0,1);

    lcd.print(“JAM “);

    // Buat set jamnya tp gak aq pake soalnya dah di set sebelumnya

    //rtc.setDOW(WEDNESDAY); // Set hari

    //rtc.setTime(12, 0, 0); // Set jamnya

    //rtc.setDate(1, 1, 2014); // Set tanggal

    delay(2000);

    }

    void loop()

    {

    t = rtc.getTime();

    Hor = t.hour;

    Min = t.min;

    Sec = t.sec;

    lcd.setCursor(0,0);

    lcd.print(“Time: “);

    lcd.print(rtc.getTimeStr());

    lcd.setCursor(0,1);

    lcd.print(“Date: “);

    lcd.print(rtc.getDateStr());

    if( Hor == 8 && (Min == 55 || Min == 56)) //ini durasi waktu alarmnya mas contoh jam 8.55 selama 1 menit

    {

    Buzzer();

    Buzzer();

    lcd.clear();

    lcd.print(“WAKTUNYA”);

    lcd.setCursor(0,1);

    lcd.print(“MAKAN”);

    Buzzer();

    Buzzer();

    }

    delay(1000);

    }

    void Buzzer()

    {

    digitalWrite(buz,HIGH);

    delay(500);

    digitalWrite(buz, LOW);

    delay(500);

    }
    >

    saya bingung ama koding relaynya mas… kebalik mulu. kasih contoh ya mas thanks

    1. Inisialisasi Relay (umumnya inverting mode)

      digitalWrite(inrelay, HIGH);
      pinMode(inrelay, OUTPUT) ;//<<baris 31 dalam contoh
      

      Aktifasi relay

      void Buzzer()
      {
      digitalWrite(inrelay, LOW);
      digitalWrite(buz,HIGH);
      delay(500);
      digitalWrite(buz, LOW);
      delay(500);
      digitalWrite(inrelay, HIGH);
      
      }
      
  4. halo mas gmn kabarnya?
    lngsung ke laptop yaaaa…..ni kisahnya saya nyoba bkin sket sndri buat alarm. Dapet kendala pas di program relay. awal arduino menyala,relay lngsung on. padahal pngennya on pas waktu alarmnya aja. Bisa bntuin koreksi mas?

    #include <DS3231.h>
    
    #include <Wire.h>
    
    
    #include <LiquidCrystal_I2C.h>
    
    
    LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address
    
    DS3231  rtc(SDA, SCL);
    
    Time  t;
    #define inrelay 8
    #define buz 11
    
    int Hor;
    
    int Min;
    
    int Sec;
    
    
    
    
    void setup()
    
    {  
    
      Wire.begin();
    
      rtc.begin();
    
      Serial.begin(9600);
      pinMode(inrelay, OUTPUT) ;
      pinMode(buz, OUTPUT);
    
      lcd.begin(16,2);     
    
      lcd.setCursor(0,0);
    
      lcd.print("PRIS TECH");
    
      lcd.setCursor(0,1);
    
      lcd.print("BEL OTOMATIS ");
    
      // The following lines can be uncommented to set the date and time
    
      //rtc.setDOW(WEDNESDAY);     // Set Day-of-Week to SUNDAY
    
      //rtc.setTime(12, 0, 0);     // Set the time to 12:00:00 (24hr format)
    
      //rtc.setDate(1, 1, 2014);   // Set the date to January 1st, 2014
    
      delay(2000);
    
    }
    
    
    
    
    void loop()
    
    {
    
      t = rtc.getTime();
    
      Hor = t.hour;
    
      Min = t.min;
    
      Sec = t.sec;
    
      lcd.setCursor(0,0);
    
      lcd.print("Time: ");
    
      lcd.print(rtc.getTimeStr());
    
     lcd.setCursor(0,1);
    
     lcd.print("Date: ");
    
     lcd.print(rtc.getDateStr());
    
    
    
    
     if( Hor == 8 &&  (Min == 55 || Min == 56)) //Comparing the current time with the Alarm time
    
    {
    
    Buzzer();
    
    Buzzer();
    
    lcd.clear();
    
    lcd.print("WAKTUNYA");
    
    lcd.setCursor(0,1);
    
    lcd.print("MAKAN");
    
    Buzzer();
    
    Buzzer();
    
    } 
    
     delay(1000); 
    
    }
    
    
    
    
    void Buzzer()
    
    {
    
    digitalWrite(buz,HIGH);
    
    delay(500);
    
    digitalWrite(buz, LOW);
    
    delay(500);
    
    }
    
    1.  
        if ( Hor == 8 && (Min == 55 || Min == 56)) //ini durasi waktu alarmnya mas contoh jam 8.55 selama 1 menit
        {
          digitalWrite(inrelay, LOW);
          Buzzer();
          Buzzer();
          lcd.clear();
          lcd.print(“WAKTUNYA”);
          lcd.setCursor(0, 1);
          lcd.print(“MAKAN”);
          Buzzer();
          Buzzer();
          digitalWrite(inrelay, HIGH);
        }
      
  5. untuk penambahan jadwalnya gmn mas?
    saya coba

     if( Hor == 12 &&  (Min == 41 || Min == 41)) //Comparing the current time with the Alarm time
    
    {
    
    Buzzer();
    
    Buzzer();
    
    lcd.clear();
    
    lcd.print("WAKTUNYA");
    
    lcd.setCursor(0,1);
    
    lcd.print("MAKAN");
    
    Buzzer();
    
    Buzzer();
    
    } 
    
     delay(1000); 
     if( Hor == 12 &&  (Min ==55 || Min == 55)) //Comparing the current time with the Alarm time
    
    {
    
    Buzzer();
    
    Buzzer();
    
    lcd.clear();
    
    lcd.print("WAKTUNYA");
    
    lcd.setCursor(0,1);
    
    lcd.print("MAKAN");
    
    Buzzer();
    
    Buzzer();
    
    } 
    
     delay(1000); 
    
    

    malah eror di bagian yg ini

    Buzzer();
    
    Buzzer();
    
    1. tambahkan Hx dan Mx untuk masing-masing jadwal (x=nomor jadwal)
      if(
      ( Hor == H1 && (Min == M1 || Min == M1+1)) ||
      ( Hor == H2 && (Min == M2 || Min == M2+1)) ||
      ( Hor == Hx && (Min == Mx || Min == Mx+1))
      ……..
      }

      atau buat dalam array jadwal

  6. ternyata untuk menyalakan relay tanpa putus selama 1 mnit durasi alarm harus seperti ini mas…… trus digit low nya ditaruh dmn ya mas agar relay mati setelah durasi alarm 1 menit?

    #include <DS3231.h>
    
    #include <Wire.h>
    
    
    #include <LiquidCrystal_I2C.h>
    
    
    LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set alamat I2C LCD
    
    DS3231  rtc(SDA, SCL);
    
    Time  t;
    #define inrelay 8
    #define buz 11
    
    int Hor;
    
    int Min;
    
    int Sec;
    
    
    
    
    void setup()
    
    {  
    
      Wire.begin();
    
      rtc.begin();
    
      Serial.begin(9600);
      pinMode(inrelay, OUTPUT) ;
      pinMode(buz, OUTPUT);
    
      lcd.begin(16,2);     
    
      lcd.setCursor(0,0);
    
      lcd.print("PRIS TECH");
    
      lcd.setCursor(0,1);
    
      lcd.print("BEL OTOMATIS ");
    
      // The following lines can be uncommented to set the date and time
    
      //rtc.setDOW(WEDNESDAY);     // Set Hari
    
      //rtc.setTime(12, 0, 0);     // Set Jam 12.00
    
      //rtc.setDate(29, 06, 2018);   // Set Tanggal 29 Jun 2018
    
      delay(2000);
    
    }
    
    
    
    
    void loop()
    
    {
    
      t = rtc.getTime();
    
      Hor = t.hour;
    
      Min = t.min;
    
      Sec = t.sec;
    
      lcd.setCursor(0,0);
    
      lcd.print("Time: ");
    
      lcd.print(rtc.getTimeStr());
    
     lcd.setCursor(0,1);
    
     lcd.print("Date: ");
    
     lcd.print(rtc.getDateStr());
    
    
    
    
     if( Hor == 23 &&  (Min == 23|| Min == 23)) //durasi alarm 1 menit
    
    {
    digitalWrite(inrelay, HIGH);
      Buzzer();
      Buzzer();
      lcd.clear();
      lcd.print("WAKTUNYA");
      lcd.setCursor(0, 1);
      lcd.print("MAKAN");
      Buzzer();
      Buzzer();
     
    
    } 
    
     delay(1000); 
    
    }
    
    
    
    
    void Buzzer()
    
    {
    
    
    digitalWrite(buz,HIGH);
    delay(500);
    digitalWrite(buz, LOW);
    delay(500);
    
    
    }
    
  7. Oh ternyata diginikan bs mati

     if( Hor == 00 &&  (Min == 10|| Min == 10)) //durasi alarm 1 menit
    
    {
    digitalWrite(inrelay, HIGH);
      Buzzer();
      Buzzer();
      lcd.clear();
      lcd.print("WAKTUNYA");
      lcd.setCursor(0, 1);
      lcd.print("MAKAN");
      Buzzer();
      Buzzer();
     
    
    } 
    
     delay(1000); 
     if( Hor == 00 &&  (Min == 11|| Min == 11))
    { digitalWrite(inrelay, LOW);
    }
    
    

    ada efek jeleknya gk klo pake ini?

  8. mas mau nanya, utk setting waktu jadwal pelajarannya yg mana mz? misal jadwal pelajaran pertama adalah jam 07.00 sampai jam 09.00 dengan keluar output keterangan jam pelajaran pada running text

    1. jadwalBelajar[i].waktu.jam
      jadwalBelajar[i].waktu.menit

      disetting pada baris

        jadwalBelajar[i++] = {Aktif, _waktu(  6, 45 ), hariAktifSenin,            _mingguAktif(1,0,0,0,0), Upacara};
        jadwalBelajar[i++] = {Aktif, _waktu(  6, 45 ), hariAktifSenin,            _mingguAktif(0,1,1,1,1), JamPelajaran1};
        jadwalBelajar[i++] = {Aktif, _waktu(  6, 45 ), _hariAktif(0,1,1,1,1,0,0), _mingguAktif(1,1,1,1,1), JamPelajaran1};
        dan seterusnya 
      
  9. Assalamu’alaikum wrwb,
    Alhamdulillah belajar project JWS nya sudah berhasil dan sudah terpampang di masjid kampung saya, semoga Jariyahnya juga mengalir ke mas Asep ila yaumil qiyamah.
    sekarang saya semangat untuk belajar membuat bel sekolah arduino ini semoga nanti bisa saya aplikasikan di sekolah tempat saya mengajar, yang selama ini masih menggunakan aplikasi bel dengan laptop. Tutorial bel sekolah ini sudah saya coba tapi ada kendala kenapa ketika sudah masuk waktu sesuai dg yang disetting koq gak ada bunyi dari rangkaian bel ini.
    apa mungkin koneksi pin ada yang salah ya mas? ini pin yang saya hubungkan sudah sesuai:
    RTCDS3231 SDA ke pin A4 arduino,
    SCL ke pin A5 arduino
    SQW ke pin 12
    MP3 DFPlayer: RX ke pin 10 arduino
    TX ke pin 11 arduino
    2 pin Spk_1 dan Spk_2 sudah terhubung ke speaker.
    SD card sudah terisi audio MP3 sesuai pesan bel masuk dan istirahat dengan nama file: 1.mp3, 2.mp3, 3.mp3, dst.
    apakah karena nama filenya mp3 yang salah ya? Mohon pencerahannya, trimakasih
    Wassalamu’alaikum wrwb.

  10. Ass Maaf gan sya lagi buat tugas akhir membuat bell otomatis, alat yg saya pke arduino, rtc ds1307, dfplayermini, lcd 16×2, speaker saya bingung di rangkaian nya menghubungkan antar pin nya, bisa tolong gambarin conroh rangkaian nya min? Tolong

    1. Arduino memiliki pin-pin yang fleksibel dan pin khusus (seperti i2c, spi, hardware serial)
      jadi kalo merakit rangkaian tidak terlalu sulit, hanya antara fisik rangkaian dan sketch harus sama posisi pinnya.
      dalam kasus ini ds1307 (I2C) posisi pin (wajib) di SCL dan SDA
      LCD 16×2 terserah mau dipasang dimana
      DF player mini terserah mau dipasang dimana (untuk uno semua pin bisa digunakan sebagai softserial)

  11. gan gak jalan kenapa ya diem di
    Serial.println(“Bel Sekolah menggunakan tabel database flexibel berbaasis Arduino”);
    Serial.println(“Bisa ditambahkan input bluetooth, wifi, PC, komputer dll”);
    Serial.println(“Bisa ditambahkan output multimedia seperti suara, alarm, running text, dmd dll”);
    Serial.println(“https://www.project.semesin.com”);

  12. Permisi mas mau tanya saya ingin menampilkan waktu RTC pada LCD saat saya coba mengapa detiknya tidak berjalan mas, hanya menit dan jam yang berjalan, mohon solusinya mas

    1. sketch ini menggunakan pinSQW sebagai interupsi detik,
      ::pastikan pin sqw rtc terhubung ke pin 12 arduino
      kemudian tambahkan kode lcd dalam scope interupsiDetik

      if(interupsiDetik)
      {
      interupsiDetik = false;
      RTC.read(tm);

      ****
      tambahkan disini
      ****

      if(tm.Second == 0) //<< scope menit {

  13. Permisi mas maaf saya mau tanya lagi seandainya saya ingin membuat pemanggil guru saat pergantian pelajaran, bisakah saya masukkan fungsi baru seperti ‘if’ ke dalam case pada jam pelajaran tertentu atau memasukkan fungsi di luar switch case

  14. Pak misalnya saya menggunakan relay, saat case jam pertama relay aktif tapi saat case itu berhenti dia tetap aktif atau kembali ke posisi awal ?
    Terus saya ingin mematikan relaynya di case lain seperti apa…
    Terimakasih

Leave a Reply to Lutfi Cancel reply

Your email address will not be published. Required fields are marked *