Bel Sekolah Otomatis Berbasis Arduino Uno

images

Latar Belakang

Seiring dengan perkembangan teknologi, penerapan sistem otomatis dalam lingkungan pendidikan menjadi suatu kebutuhan untuk meningkatkan efisiensi dan kedisiplinan. Salah satu aspek penting dalam kegiatan belajar mengajar di sekolah adalah penggunaan bel sebagai penanda waktu masuk kelas, pergantian jam pelajaran, waktu istirahat, dan pulang sekolah.

Pada umumnya, bel sekolah masih dioperasikan secara manual oleh petugas. Sistem manual ini memiliki beberapa kelemahan, seperti keterlambatan membunyikan bel, ketidakkonsistenan jadwal, serta ketergantungan pada kehadiran petugas. Hal tersebut dapat berdampak pada kurang optimalnya kedisiplinan waktu bagi guru maupun siswa.

Oleh karena itu, diperlukan sebuah sistem bel sekolah yang dapat bekerja secara otomatis dan akurat sesuai dengan jadwal yang telah ditentukan. Dengan memanfaatkan teknologi mikrokontroler Arduino yang dipadukan dengan modul Real Time Clock (RTC), bel sekolah dapat diatur untuk berbunyi secara otomatis berdasarkan waktu yang telah diprogram, tanpa memerlukan pengoperasian manual.

Selain itu, penambahan layar LCD pada sistem ini berfungsi sebagai media informasi yang menampilkan waktu saat ini dan status bel, sehingga memudahkan pengguna dalam memantau kinerja sistem. Penerapan proyek ini diharapkan mampu meningkatkan kedisiplinan, mengurangi kesalahan manusia, serta menjadi sarana pembelajaran bagi siswa dalam memahami penerapan teknologi mikrokontroler di lingkungan sekolah.

Berdasarkan latar belakang tersebut, kami mengusulkan pembuatan “Bel Sekolah Otomatis Berbasis Arduino” sebagai solusi teknologi yang sederhana, efektif, dan aplikatif untuk mendukung kegiatan operasional sekolah.

Tujuan Proyek

Tujuan proyek ini adalah untuk membuat sistem bel sekolah yang bekerja secara otomatis sesuai jadwal waktu, meningkatkan kedisiplinan siswa dan guru, serta menerapkan teknologi Arduino sebagai solusi praktis dalam mendukung kegiatan operasional dan pembelajaran di sekolah

Cara Kerja

Input: Waktu real-time dari modul RTC (jam dan menit).

Proses: Arduino membaca waktu dari RTC lalu mencocokkannya dengan jadwal bel yang telah diprogram.

Output: Buzzer atau bel sekolah berbunyi dan informasi waktu serta status ditampilkan pada LCD.

 

 

Souce Code

Berikut ini disajikan source code dari proyek sistem bel sekolah otomatis

#include

#include

#include

 

LiquidCrystal_I2C lcd(0x27, 16, 2);

RTC_DS3231 rtc;

// ================= PIN =================

#define BTN_MODE   A0

#define BTN_SET    A1

#define BTN_UP     A2

#define BTN_DOWN   A3

#define RELAY 8

#define BUZZER 13

#define FIRE_ALARM 7

// ================= DATA =================

int hh, mm, ss;

// jadwal

#define TOTAL_BELL 3

int bellHH[TOTAL_BELL] = {7, 9, 12};

int bellMM[TOTAL_BELL] = {0, 30, 0};

// ================= STATUS =================

bool ringing = false;

int counter = 0;

unsigned long lastMillis = 0;

bool bellTriggered = false;

// ================= MENU =================

int menu = 0;        // 0=RUN,1=SET,2=PILIH

int editMode = 0;    // 0=tidak,1=jam,2=menit

int indexBell = 0;

 

// ================= DEBOUNCE =================

unsigned long lastDebounce[4] = {0,0,0,0};

bool lastReading[4] = {HIGH,HIGH,HIGH,HIGH};

bool buttonState[4] = {HIGH,HIGH,HIGH,HIGH};

int btnPin[4] = {BTN_MODE, BTN_SET, BTN_UP, BTN_DOWN};

const unsigned long debounceDelay = 50;

// =========================================

void setup() { 

  Wire.begin();

  Serial.begin(9600);

  lcd.init();

  lcd.backlight();

  for(int i=0;i<4;i++){

    pinMode(btnPin[i], INPUT_PULLUP);

  }

  pinMode(RELAY, OUTPUT);

  pinMode(BUZZER, OUTPUT);

  pinMode(FIRE_ALARM, INPUT_PULLUP);

  digitalWrite(RELAY, HIGH);

  digitalWrite(BUZZER, LOW);

  // RTC

  if (!rtc.begin()) {

    lcd.print("RTC ERROR!");

    while (1);

  }

  // ⚠️ Jalankan SEKALI saja lalu comment

  rtc.adjust(DateTime(F(_DATE), F(TIME_)));

  lcd.setCursor(0,0);

  lcd.print("SMART BELL");

  lcd.setCursor(0,1);

  lcd.print("INITIALIZING");

  delay(2000);

  lcd.clear();

}

// =========================================

void loop() {

  bacaRTC();

  bacaTombol();

  // ???? FIRE ALARM PRIORITAS

  if(digitalRead(FIRE_ALARM)==LOW){

    StartBell();

  }

  // ================= AUTO BEL =================

  if(menu == 0 && !ringing){

    for(int i=0;i

      if(hh == bellHH[i] && mm == bellMM[i] && ss == 0 && !bellTriggered){

        StartBell();

        bellTriggered = true;

      }

    }

  }

   if(ss > 2) bellTriggered = false;

  // ================= TIMER =================

  if(ringing){

    if(millis() - lastMillis >= 1000){

      lastMillis = millis();

      counter--;

      if(counter <= 0) StopBell();

    }

  }

  tampil();

}

// =========================================

// RTC

// =========================================

void bacaRTC(){

  DateTime now = rtc.now();

  hh = now.hour();

  mm = now.minute();

  ss = now.second();

// =========================================

// TOMBOL (DEBOUNCE STABIL)

// =========================================

void bacaTombol(){

  for(int i=0;i<4;i++){

    bool reading = digitalRead(btnPin[i]);

    if(reading != lastReading[i]){

      lastDebounce[i] = millis();

    }

    if((millis() - lastDebounce[i]) > debounceDelay){

      if(reading != buttonState[i]){

        buttonState[i] = reading; 

        if(buttonState[i] == LOW){

          handleButton(i);

        }

      }

    }

    lastReading[i] = reading;

  }

}

// =========================================

// HANDLE TOMBOL

// =========================================

void handleButton(int btn){

  switch(btn){

    case 0: // MODE

      menu++;

      if(menu > 2) menu = 0;

      lcd.clear();

      break;

    case 1: // SET

      if(menu == 1){

        editMode++;

        if(editMode > 2) editMode = 0;

      }

      break;

    case 2: // UP

      if(menu == 1){

        if(editMode == 1){

          bellHH[indexBell]++;

          if(bellHH[indexBell] > 23) bellHH[indexBell] = 0;

        }

        else if(editMode == 2){

          bellMM[indexBell]++;

          if(bellMM[indexBell] > 59) bellMM[indexBell] = 0;

        }

      }

      if(menu == 2){

        indexBell++;

        if(indexBell >= TOTAL_BELL) indexBell = 0;

      }

      break; 

    case 3: // DOWN

      if(menu == 1){

        if(editMode == 1){

          if(bellHH[indexBell] == 0) bellHH[indexBell] = 23;

          else bellHH[indexBell]--;

        }

        else if(editMode == 2){

          if(bellMM[indexBell] == 0) bellMM[indexBell] = 59;

          else bellMM[indexBell]--;

        }

      }

      if(menu == 2){

        if(indexBell == 0) indexBell = TOTAL_BELL-1;

        else indexBell--;

      }

      break;

  }

}

// =========================================

// BEL

// =========================================

void StartBell(){

  ringing = true;

  counter = 5;

  digitalWrite(RELAY, LOW);

  digitalWrite(BUZZER, HIGH);

void StopBell(){

  ringing = false;

  digitalWrite(RELAY, HIGH);

  digitalWrite(BUZZER, LOW);

}

// =========================================

// LCD

// =========================================

void tampil(){

  lcd.setCursor(0,0);

  if(hh<10) lcd.print("0");

  lcd.print(hh);

  lcd.print(":"); 

  if(mm<10) lcd.print("0");

  lcd.print(mm);

  lcd.print(":");

  if(ss<10) lcd.print("0");

  lcd.print(ss);

  lcd.print("   "); // bersihkan sisa karakter

  lcd.setCursor(0,1);

  if(menu == 0){

    lcd.print("AUTO MODE     ");

  }

  else if(menu == 1){

    lcd.print("SET ");

    lcd.print(bellHH[indexBell]);

    lcd.print(":");

    lcd.print(bellMM[indexBell]);

    if(editMode == 1) lcd.print(" H ");

    else if(editMode == 2) lcd.print(" M ");

    else lcd.print("   ");

  }

  else if(menu == 2){

    lcd.print("PILIH BELL ");

    lcd.print(indexBell+1);

    lcd.print("   ");

  }

}

 

 

TIM Proyek Bel Sekolah Otomatis Berbasis Arduino :

Akram Ziyad (Ketua tim, Teknisi Hardware, Coding)

Abdillah (Dokumentasi)

Andi Almira (Coding/Pemrograman)

Nurul Amelia.R (Desain)

Maulifia Azzahra (Presentasi)

Nabila Azzahra ( Desain dan Dokumentasi)


TAG Berita

Dipost Oleh admin

kutipan "Ilmu itu ibarat samudera tak bertepi"

Tinggalkan Komentar