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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
#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

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      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?

    1
    2
    3
    4
    5
    6
    #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

      1
      2
      3
      *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)

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

      Aktifasi relay

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      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?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    #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. 1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    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

    1
    2
    3
    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?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    #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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    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

      1
      2
      3
      4
      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

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