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.semesin.com/project");
  
  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

Bagikan Link halaman ini :

44 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?

    1. 1. bagaimana jika kita ingin delaynya 37 detik saja?
      2. apa yang terjadi jika jadwal ‘on’ berikutnya 30 detik lagi?
      3. apa yang dilakukan jika ingin mematikan buzzer secara manual?

    1. nilai angka jangan dimulai dengan angka nol,
      kalo mulai dengan ‘0’ misalnya pada ’08’, ’09’ akan dianggap bilangan oktal basis 8 bukan basis 10

  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.

    1. Kalo mp3 menggunakan tf player nama file nya 0000.mp3 dst
      Kalo mp3 menggunakan mp3 shield nama file nya track0000.mp3 dst

      catatan : sebelum dicoba di bel sekolah, coba dengan program example dahulu

  10. ya mas ini kalo dicoba pakai sketch xamplenya bisa bunyi normal, tapi kenapa ya kalo pakai sketch bel masih belum aktif suaranya?

    1. Bisa tetapi agak rumit tentunya, karena banyaknya item yang harus di setting
      kira kira jumlah hari x jumlah item jam pelajaran x (jam, menit, index pelajaran, dan variabel dinamis)

  11. 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)

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan.