Bel sekolah adalah pengingat waktu yang digunakan di sekolah sebagai penanda pergantian jadwal.
Bel sekolah digital bisa di aplikasikan dalam bentuk:
-
- Aplikasi komputer
adalah aplikasi yang ditanam dalam komputer dan bisa dijalankan secara otomatis. sistem ini mudah dalam pengaturan, memiliki data jadwal sangat besar, peringatan admin, backup, update suara mudah, perekan suara, kunci aplikasi dll. Kelemahannya adalah komputer dan aplifier suara harus tetap hidup dan bergantung kepada adanya daya listrik/ups termasuk biaya listrik, pesan sponsor pada aplikasi gratis, biaya pengadaan dan perawatan komputer. - Aplikasi android
Aplikasi / apk android memiliki sama dengan aplikasi komputer dan aplikasi android dapat terhubung dengan sistem tata suara melalui bluetooth dan kabel audio. kekurangannya adalah device android harus selalu berada dekat dengan sistem (selalu standby) - Aplikasi perangkat mandiri
Sistem bel sekolah otomatis dapat dibangun dengan perangkat mandiri menggunakan microkontroller dengan biaya murah dan bisa dikembangkan untuk keperluan lainnya seperti :- bisa menggunakan baterai sebagai daya cadangannya
- Pendeteksi gempa dan peringatan
- Notifikasi sms ke pengajar
- Mekanuisme kunci pagar
- Panggilan melalui microphone yang tertuju langsung ke kelas tertentu
- dan lain-lain sesuai kebutuhan
Kekurangan sistem ini adalah ruang penyimpanan data jadwal dan suara terbatas, pengaturan jadwal yang sulit melalui tombol/keypad.
- Aplikasi komputer
Dalam proyek ini menggabungkan perangkat mandiri dengan platform arduino yang dikombinasikan dengan aplikasi/apk android sebagai kontrolnya.
Skema bel sekolah otomatis dengan kontrol android:
komponen bel sekolah arduino control android:
- Arduino Uno
- Bluetooth HC-05
- RTC DS3231
- LCD 1602 + I2C backpack
- modul Relay 1 channel
- DF Player mini mp3
- Speaker
tampilan Aplikasi bel sekolah android :
sketch/aplikasi bel sekolah bluettoth android :
#define namaSekolah "Nama Sekolah" #define SQWPin A3 #define pinRelay 8 #define relayOn LOW #include <avr/sleep.h> #include <SoftwareSerial.h> #include <DFPlayer_Mini_Mp3.h> #include "RTC.h" #include <EEPROM.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> #define tokenEEPROM 0x83 SoftwareSerial bluetooth(2, 3); // RX, TX SoftwareSerial mp3Serial(4, 5); // RX, TX LiquidCrystal_I2C lcd(0x3F, 16, 2); // set the LCD address to 0x27 for a 16 chars and 2 line display struct Waktu { byte jam; byte menit; }; struct TabelMataPelajaran { byte aktif; Waktu waktu; byte hariAktif; byte mingguAktif; byte kegiatan; }; const char kegiatanText[][17] PROGMEM = { "- ", "Jam Pelajaran 1 ", "Jam Pelajaran 2 ", "Jam Pelajaran 3 ", "Jam Pelajaran 4 ", "Jam Pelajaran 5 ", "Jam Pelajaran 6 ", "Jam Pelajaran 7 ", "Jam Pelajaran 8 ", "Jam Pelajaran 9 ", "Jam Pelajaran 10", "Jam Pelajaran 11", "Jam Pelajaran 12", "Jam Pelajaran 13", "Jam Pelajaran 14", "Jam Pelajaran 15", "Masuk ", "Upacara ", "Istirahat ", "Istirahat1 ", "Istirahat2 ", "Istirahat3 ", "Selesai istiraht", "Kepramukaan ", "Khusus ", "Pulang ", "Pulang Jum'at ", "Pulang Sabtu ", "Musik 1 ", "Musik 2 ", "Musik 3 ", "Musik 4 ", "Musik 5 ", "Musik 6 ", "Hadits 1 ", "Hadits 2 ", "Hadits 3 ", "Hadits 4 ", "Hadits 5 ", "Hadits 6 ", }; enum _kegiatan { TidakAda, JamPelajaran1, JamPelajaran2, JamPelajaran3, JamPelajaran4, JamPelajaran5, JamPelajaran6, JamPelajaran7, JamPelajaran8, JamPelajaran9, JamPelajaran10, JamPelajaran11, JamPelajaran12, JamPelajaran13, JamPelajaran14, JamPelajaran15, Masuk, Upacara, Istirahat, Istirahat1, Istirahat2, Istirahat3, SelesaiIstirahat, Kepramukaan, Khusus, Pulang, PulangJumat, PulangSabtu, Musik1, Musik2, Musik3, Musik4, Musik5, Musik6, Hadits1, Hadits2, Hadits3, Hadits4, Hadits5, Hadits6, }; enum PengaturanAndroid { cekAses, pengaturanJadwal, pengaturanWaktu, }; char karakterMusik[8] = { 0b00000, 0b00100, 0b00110, 0b00101, 0b00101, 0b00100, 0b11100, 0b11100 }; byte karakterDetik1[8] = { 0b00000, 0b00000, 0b00000, 0b00100, 0b00000, 0b00000, 0b00000, 0b00000 }; byte karakterDetik2[8] = { 0b00000, 0b00000, 0b00100, 0b01010, 0b00100, 0b00000, 0b00000, 0b00000 }; byte karakterDetik3[8] = { 0b00000, 0b00100, 0b01010, 0b10001, 0b01010, 0b00100, 0b00000, 0b00000 }; byte karakterSetting[8] = { 0b00100, 0b00100, 0b00100, 0b01110, 0b00100, 0b10001, 0b01010, 0b00100 }; volatile bool interupsiDetik; byte indexMataPelajaran; RTC_DS3231 rtc; DateTime now; bool rtcValid; byte indexPengaturanJadwal = 0; #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 char namaHari[][7] = {"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,Mgu6) (Mgu1<<7)|(Mgu2<<6)|(Mgu3<<5)|(Mgu4<<4)|(Mgu5<<3)|(Mgu6<<2) #define _waktu(Jam, Menit) {Jam, Menit} #define Aktif 1 #define TidakAktif 0 TabelMataPelajaran jadwalBelajar[40]; Waktu waktu; char bufWaktu[40]; byte detikSebelumnya = 60; byte tanggalSebelumnya = 0; Waktu jadwalBerikutnya; byte menitBel; bool statusBel; bool statusPengingat; byte jadwalBerikutnyaKegiatan; void setup() { digitalWrite(pinRelay, !relayOn); pinMode(pinRelay, OUTPUT); pinMode(SQWPin, INPUT_PULLUP); Serial.begin(9600); Serial.println(F("Bel Sekolah Dengan Kontrol Android")); Serial.println(F("https://www.project.semesin.com")); Serial.println(); Wire.begin(); Wire.beginTransmission(0x3F); if (Wire.endTransmission()) { lcd = LiquidCrystal_I2C(0x27, 16, 2); } lcd.begin(); lcd.command (0x40 | (0 << 3)); for (byte i = 0; i < 8; i++) lcd.write (karakterDetik1[i]); lcd.command (0x40 | (1 << 3)); for (byte i = 0; i < 8; i++) lcd.write (karakterDetik2[i]); lcd.command (0x40 | (2 << 3)); for (byte i = 0; i < 8; i++) lcd.write (karakterDetik3[i]); lcd.command (0x40 | (3 << 3)); for (byte i = 0; i < 8; i++) lcd.write (karakterDetik2[i]); lcd.command (0x40 | (4 << 3)); for (byte i = 0; i < 8; i++) lcd.write (karakterMusik[i]); lcd.command (0x40 | (5 << 3)); for (byte i = 0; i < 8; i++) lcd.write (karakterSetting[i]); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Bel Sekolah"); lcd.setCursor(0, 1); lcd.print(namaSekolah); mp3Serial.begin(9600); bluetooth.begin (9600); bluetooth.listen(); mp3_set_serial (mp3Serial); mp3_set_volume (15);//full volume 0x30 rtc.begin(); if (rtc.lostPower()) { Serial.println(F("RTC lost power, lets set the time!")); rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); } rtc.writeSqwPinMode(DS3231_SquareWave1Hz); if (EEPROM.read(sizeof(jadwalBelajar)) != tokenEEPROM) { nilaiAwal(); EEPROM.write(sizeof(jadwalBelajar), tokenEEPROM); Serial.println("setting awal"); } EEPROM.get(0, jadwalBelajar); cekJadwalHariIni(); delay(1000); lcd.clear(); Serial.println(F("Sistem bel sekolah dimulai")); } void loop() { if (digitalRead(SQWPin)) { if (rtcValid) { rtcValid = false; now = rtc.now(); uint16_t unixJadwalBerikutnya = (jadwalBerikutnya.jam * 60) + jadwalBerikutnya.menit; uint16_t unixWaktu = (now.jam * 60) + now.menit; if (!now.detik) { if (jadwalBerikutnyaKegiatan && (jadwalBerikutnya.jam == now.jam) && (jadwalBerikutnya.menit == now.menit)) { lcd.setCursor(6, 1); lcd.print((char)4); lcd.setCursor(0, 0); lcd.print((__FlashStringHelper *)kegiatanText[jadwalBerikutnyaKegiatan]); mp3_play (jadwalBerikutnyaKegiatan); Serial.println((__FlashStringHelper *)kegiatanText[jadwalBerikutnyaKegiatan]); menitBel = jadwalBerikutnya.menit; statusBel = true; statusPengingat = false; } else if (jadwalBerikutnyaKegiatan && (unixWaktu == unixJadwalBerikutnya - 1)) { statusPengingat = true; digitalWrite(pinRelay, relayOn); Serial.println("Pengingat bel masuk 1 menit lagi"); } } if (menitBel != now.menit) { if (statusBel) { lcd.setCursor(6, 1); lcd.print(' '); digitalWrite(pinRelay, !relayOn); cariJadwal(); statusBel = false; tanggalSebelumnya = 0; } } //tampilan if (statusPengingat) { lcd.setCursor(1, 1); if (now.detik % 2) { sprintf(bufWaktu, "%02d:%02d", jadwalBerikutnya.jam, jadwalBerikutnya.menit); lcd.print(bufWaktu); } else { lcd.print(" "); } } if (detikSebelumnya != now.detik) { sprintf(bufWaktu, "%02d:%02d:%02d", now.jam, now.menit, now.detik); lcd.setCursor(8, 1); lcd.print(bufWaktu); lcd.setCursor(0, 1); lcd.print((char)(now.detik % 4)); sprintf(bufWaktu, "%02d:%02d:%02d %s, %02d/%02d/%02d", now.jam, now.menit, now.detik, namaHari[now.hari - 1], now.tanggal, now.bulan, now.tahun - 2000); Serial.println(bufWaktu); } if (tanggalSebelumnya != now.tanggal) { tanggalSebelumnya = now.tanggal; lcd.clear(); lcd.print(namaHari[now.hari - 1]); lcd.print(','); sprintf(bufWaktu, "%02d/%02d/%02d", now.tanggal, now.bulan, now.tahun - 2000); lcd.setCursor(8, 0); lcd.print(bufWaktu); cariJadwal(); } } } else { rtcValid = true; } cekBluetooth(); } void cekBluetooth() { uint8_t tokenMulai; uint8_t perintah; uint8_t parameter; uint8_t panjang1; uint8_t panjang2; char c; uint8_t i, j; uint8_t tokenSelesai; byte bufferSerial[100]; byte *alamat; if (bluetooth.available()) { tokenMulai = bluetoothRead(); if (tokenMulai == 0xFD) { panjang1 = bluetoothRead(); panjang2 = bluetoothRead(); if (panjang2 == 254 - panjang1) { if (panjang1 >= sizeof(bufferSerial)) { panjang1 = sizeof(bufferSerial); } uint16_t timeOut = 0xFFF; i = 0; do { if (bluetooth.available()) { c = bluetoothRead(); bufferSerial[i++] = c; } } while ((i < panjang1 + 3) && (timeOut--)); perintah = bufferSerial[0]; parameter = bufferSerial[1]; tokenSelesai = bufferSerial[i - 1]; if (tokenSelesai == 0x00) { delay(10); bluetooth.write(254); switch (perintah) { case cekAses: bluetooth.write(1); bluetooth.write(254); break; case pengaturanJadwal: lcd.setCursor(6, 1); lcd.print((char)5); memcpy((byte*)&jadwalBelajar[parameter], bufferSerial + 2, sizeof(TabelMataPelajaran)); if (parameter == (sizeof(jadwalBelajar) / sizeof(TabelMataPelajaran)) - 1) { EEPROM.put(0, jadwalBelajar); Serial.println("Jadwal diterima"); lcd.setCursor(6, 1); lcd.print(' '); tanggalSebelumnya = 0; } break; case pengaturanWaktu: memcpy((byte*)&now, bufferSerial + 2, sizeof(DateTime)); rtc.adjust(now); tanggalSebelumnya = 0; Serial.println("Setting waktu diterima"); break; } } else { bluetooth.write(252);//data tidak benar } } } } } byte bluetoothRead() { uint16_t timeOut = 0xFFF; while (!bluetooth.available() && timeOut--); return bluetooth.read(); } void nilaiAwal() { byte i = 0; jadwalBelajar[i++] = {Aktif, _waktu( 6, 45 ), hariAktifSenin , _mingguAktif(1, 0, 0, 0, 0, 0), Upacara}; jadwalBelajar[i++] = {Aktif, _waktu( 6, 45 ), hariAktifSenin , _mingguAktif(0, 1, 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, 1), JamPelajaran1}; jadwalBelajar[i++] = {Aktif, _waktu( 7, 30 ), _hariAktif(1, 1, 1, 1, 0, 0, 0), _mingguAktif(1, 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, 1), JamPelajaran3}; jadwalBelajar[i++] = {Aktif, _waktu( 9, 0 ), _hariAktif(1, 1, 1, 1, 0, 0, 0), _mingguAktif(1, 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, 1), Istirahat}; jadwalBelajar[i++] = {Aktif, _waktu( 10, 15 ), _hariAktif(1, 1, 1, 1, 0, 0, 0), _mingguAktif(1, 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, 1), JamPelajaran6}; jadwalBelajar[i++] = {Aktif, _waktu( 11, 45 ), _hariAktif(1, 1, 1, 1, 0, 0, 0), _mingguAktif(1, 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, 1), JamPelajaran7}; jadwalBelajar[i++] = {Aktif, _waktu( 13, 15 ), _hariAktif(1, 1, 1, 1, 0, 0, 0), _mingguAktif(1, 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, 1), JamPelajaran9}; jadwalBelajar[i++] = {Aktif, _waktu( 14, 45 ), _hariAktif(1, 1, 1, 0, 0, 0, 0), _mingguAktif(1, 1, 1, 1, 1, 1), JamPelajaran10}; jadwalBelajar[i++] = {Aktif, _waktu( 14, 0 ), hariAktifKamis, _mingguAktif(1, 1, 1, 1, 1, 1), Kepramukaan}; jadwalBelajar[i++] = {Aktif, _waktu( 14, 45 ), hariAktifKamis, _mingguAktif(1, 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, 1), Pulang}; jadwalBelajar[i++] = {Aktif, _waktu( 7, 25 ), hariAktifJumat, _mingguAktif(1, 1, 1, 1, 1, 1), JamPelajaran2}; jadwalBelajar[i++] = {Aktif, _waktu( 8, 5 ), hariAktifJumat, _mingguAktif(1, 1, 1, 1, 1, 1), JamPelajaran3}; jadwalBelajar[i++] = {Aktif, _waktu( 8, 45 ), hariAktifJumat, _mingguAktif(1, 1, 1, 1, 1, 1), JamPelajaran4}; jadwalBelajar[i++] = {Aktif, _waktu( 9, 25 ), hariAktifJumat, _mingguAktif(1, 1, 1, 1, 1, 1), Istirahat}; jadwalBelajar[i++] = {Aktif, _waktu( 9, 55 ), hariAktifJumat, _mingguAktif(1, 1, 1, 1, 1, 1), JamPelajaran5}; jadwalBelajar[i++] = {Aktif, _waktu( 10, 35 ), hariAktifJumat, _mingguAktif(1, 1, 1, 1, 1, 1), JamPelajaran6}; jadwalBelajar[i++] = {Aktif, _waktu( 11, 15 ), hariAktifJumat, _mingguAktif(1, 1, 1, 1, 1, 1), PulangJumat}; EEPROM.put(0, jadwalBelajar); } void cekJadwalHariIni() { Serial.println("Jadwal hari ini"); for (byte i = 0; i < sizeof(jadwalBelajar) / sizeof(TabelMataPelajaran) ; i++) { Serial.print(jadwalBelajar[i].aktif); Serial.print('\t'); Serial.print(jadwalBelajar[i].waktu.jam); Serial.print('\t'); Serial.print(jadwalBelajar[i].waktu.menit); Serial.print('\t'); Serial.print(jadwalBelajar[i].hariAktif, HEX); Serial.print('\t'); Serial.print(jadwalBelajar[i].mingguAktif, HEX); Serial.print('\t'); Serial.print(jadwalBelajar[i].kegiatan); Serial.print('\t'); char buf[20]; memcpy_P(buf, kegiatanText[jadwalBelajar[i].kegiatan], sizeof(kegiatanText[0])); Serial.print(buf); Serial.println(); } } void cariJadwal() { uint16_t unixWaktu = (now.jam * 60) + now.menit; byte hariKeDiTanggal1 = ((now.hari + 7 - (now.tanggal % 7)) % 7) + 1; byte SeninKe = ((now.tanggal + ((hariKeDiTanggal1 + 4) % 7)) / 7); //senin pertama byte mingguKe = ((now.tanggal + hariKeDiTanggal1 + 6 - 1) / 7); Serial.print("SeninKe = "); Serial.println(SeninKe); Serial.print("mingguKe = "); Serial.println(mingguKe); uint16_t unixTerkecil = UINT16_MAX; jadwalBerikutnyaKegiatan = 0; Waktu waktuTerkecil; for (byte i = 0; i < sizeof(jadwalBelajar) / sizeof(TabelMataPelajaran); i++) { if ( (jadwalBelajar[i].aktif) && (jadwalBelajar[i].hariAktif & (1 << (8 - now.hari))) && (jadwalBelajar[i].mingguAktif & (1 << (8 - mingguKe))) ) { uint16_t unixJadwal = (jadwalBelajar[i].waktu.jam * 60) + jadwalBelajar[i].waktu.menit; if (unixWaktu < unixJadwal) { if (unixTerkecil > unixJadwal) { unixTerkecil = unixJadwal; jadwalBerikutnya.jam = jadwalBelajar[i].waktu.jam; jadwalBerikutnya.menit = jadwalBelajar[i].waktu.menit; jadwalBerikutnyaKegiatan = jadwalBelajar[i].kegiatan; } } } } if (jadwalBerikutnyaKegiatan) { Serial.print("Bel berikutnya : "); Serial.print((__FlashStringHelper *)kegiatanText[jadwalBerikutnyaKegiatan]); Serial.print(" "); Serial.print(jadwalBerikutnya.jam); Serial.print(":"); Serial.println(jadwalBerikutnya.menit); lcd.setCursor(1, 1); sprintf(bufWaktu, "%02d:%02d", jadwalBerikutnya.jam, jadwalBerikutnya.menit); lcd.print(bufWaktu); } else { lcd.setCursor(1, 1); lcd.print("--:--"); } }
library arduino bel sekolah dengan bluetooth dan aplikasi android yang digunakan :
Suara mp3 bel sekolah arduino dengan bluetooth:
aplikasi apk android untuk bel sekolah arduino (evaluasi):
cara penggunaan :
- Buat rangkaian arduino seperti skema dan upload sketch yang diberikan.
- Masukkan file suara dalam kartu memori/SD card (file mp3 dan folder mp3).
- install aplikasi bel sekolah v1 evaluasi di android (evaluasi = 10 jadwal yang aktif).
MasyaAllah… pak…smga bermanfaat…
klo misalnya di tambahi pemberitahuan waktu sholat dan pemberitahuan masuk sholat dalam 15 menit gmana pak? treiaksih
Bisa,
Fitur pengingat waktu shalat dengan menambahkan data waktu2-waktu Shalat, pengingat-nya aktif saat 15 menit sebelum dan tepat pada waktu-waktu Shalat.
Min bisa minta file bel sekolah v1.apk yang belum di buildnya ? Tolong min!!
Maaf, belum direlease source code-nya
klo di tambah lcd 16×2 gmn kg asep?
Bisa dikembangkan pake LCD 1602, tinggal menambahkan fungsi-fungsi tampilan lcd nya (misalnya tanggal dan waktu, pengingat waktu masuk dll)
kira2 sketch yg ditambah untuk penambahan lcd 1602 yg mana pak?
1602 untuk memberikan pengingat waktu masuk dan sebagai kontrol bahwa perintah dari hp ke arduino sukses. mohon bimbingannya pak. terimakasih
kode tampilan lcd untuk pengingat waktu masuk bisa disisipkan dalam fungsi pengecekan data jadwal pelajaran ini :
if ((jadwalBelajar[i].waktu.jam == now.jam) &&
(jadwalBelajar[i].waktu.menit == now.menit) &&
(jadwalBelajar[i].hariAktif & (1 << (8 - now.hari))) && (jadwalBelajar[i].mingguAktif & (1 << (8 - SeninKe)))) { mp3_play (jadwalBelajar[i].kegiatan); Serial.println((__FlashStringHelper *)kegiatanText[jadwalBelajar[i].kegiatan]); }
warning: initializer-string for array of chars is too long [-fpermissive]
gan itu kok muncul error kayag gitu pas kompile kodenya?
terima kasih info bugnya, pada kompiler saya ide 1.8.5 kesalahan tersebut otomatis diperbaiki.
Postingan sketchnya sudah diperbaiki.
ma’af,bs share coding yg plus lcd 1602 nya kang?
Bel sekolah dilengkapi tampilan LCD,
https://www.project.semesin.com/2018/12/04/bel-sekolah-dengan-pengaturan-melalui-tombol/
tapi menggunakan struktur data yang berbeda dari bel sekolah di halaman ini
Gan mau nanya
Ko jadwal yang bisa di aktifkan adi aplikasi cuma bisa sampai no 5
Yang lain ga bisa di centang
iya, batasan apk evaluasi
Kira-kira solusinya gimana gan..
Mohon pencerahannya
saat ini statusnya masih berbayar
siang gan saya mau tanya klu skrip yang ini artinya apa ya gan
#define tokenEEPROM 0x83
sedangkan di bel sekolah yang menggunakan tombol tertulis
EEPROM.write(0, 0x48);
terutama pengertian nilai 0x83 dengan 0x48
token sebagai penanda EEPROM telah diisi dengan ‘setting awal/default’
nilainya bisa acak
if (EEPROM.read(sizeof(jadwalBelajar)) != tokenEEPROM)
{
nilaiAwal();
EEPROM.write(sizeof(jadwalBelajar), tokenEEPROM);
}
ketika nilai EEPROM dialamat -sizeof(jadwalBelajar)- sama dengan tokenEEPROM, maka nilaiAwal() tidak dieksekusi
OK gan mksi info dan bimbingannya
dan 1 satu lgi ada yang saya tanykan gan untuk jadwal belajarnya brpa maximal data yang bsa ke simpan di eeprom. di sini sya agak membingungkan
soalnya dri tutorial di internet gk ada yang sama gan
ada yang bilang almat addres dari atas ke bawah 0 – 1024 dan ada yang bilang dri 0 – 255
klu sya coba simulasikan di proteus maximal nya smpai 255, jadi data jadwal yang bisa trsmpan cuman 60
maunya spaya bisa trsmpan sampai 100 jadwal
apakah ada cara lain utntuk mengatasi maslah ini
terimakasih
EEPROM atmega328p = 1024 (address 0 – 1023)
I2CEEPROM RTC ds3231/ds1307 = 4096
mau bertanya pak….
untuk pnulisan script seperti dibawah ini, pada tulisan _hariAktif(1,1,1,1,0,0,0), ini menunjukan hari dimulai dari mana pak ?
jadwalBelajar[i++] = {Aktif, _waktu( 7, 30 ), _hariAktif(1, 1, 1, 1, 0, 0, 0), _mingguAktif(1, 1, 1, 1, 1), JamPelajaran2};
terimakasih
macro
#define _hariAktif(Sen,Sel,Rab,Kam,Jum,Sab,Mgu) (Mgu<<7)|(Sen<<6)|(Sel<<5)|(Rab<<4)|(Kam<<3)|(Jum<<2)|(Sab<<1)
pak ijin bertany, misal ini ditmpilin pake modul p10 1a to 2 panel bisa?
jd nnti panel 1 nampilin jam, panel 1 lg nampilin keterangan sedang berlangsung jam keberapa,
gitu
bisa
Semoga ilmunya bermanfaat pak …
Dan menjadi ladang amal dunia akhirat
Iseng2 browsing bel sekolah ketemu dg web ini
dan saya pikir sangat membantu sekali karena di bahas secara gamblang dan di lengkapi rangkaian dan coding nya…
Saya belum mencoba….
Tapi Insya Allah saya akan mencobanya buat belajar
Kalo menggunakan amplifier rangkaian dan programnya kayak gimana kang Asep…
modifikasi bagian pengecekan jadwal untuk mengaktifkan amplifier –misalnya– 1 menit sebelum suara bel
Arduino: 1.8.9 (Windows 7), Board: “Arduino/Genuino Uno”
sketch_apr07a:5:31: error: DFPlayer_Mini_Mp3.h: No such file or directory
compilation terminated.
exit status 1
DFPlayer_Mini_Mp3.h: No such file or directory
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
maaf kang,, ini ada peringatan seperti ini , kira-kira gimana?
install dulu library DFPlayer_Mini_Mp3.h
Terimakasih kang sy berhasil mepraktekan…ilmu yang sangu berharga..kerannn
assalamualaikum maaf kang saya mau nanya, bluetooth sudah terhubung tetapi ketika saya buka aplikasi ada tulisan “perangkat tidak di temukan” terus saya harus bagaimana kang? mohon jawabannya
cek bluetooh
perangkat di temukan, tapi kadang2 yang pengaturan waktunya ada tulisan blutooth tidak terhubung sedangkan di pengaturan jadwal blutooth terhubung. jika di pengaturan waktu blutooth terhubung saya stel waktu trs saya stel jadwal tetap saja tidak bekerja tidak ada outputnya. saya harus gimana kang? mohon jawabnnya
kemungkinan data jadwal tidak sempurna tersimpan di arduino
bisa jadi penyebabnya koneksi bluetooth tidak stabil
Kang kalo ini aplikasi nya pas di pengaturan jadwal yang bisa di centang √ cuman sampe 5 sisa nya gabisa do centang, ada solusinya?
ya, apk-nya versi evaluasi
kang maaf mau bertanya .. saat saya masukkan ksript tampilan LCD kenapa muncul notif (‘i’ was not declarated in this scope) mohon bantuannya kang..terimakasih kang
‘i’ hanya dalam scope
for (byte i = 0; i < sizeof(jadwalBelajar) / sizeof(TabelMataPelajaran) ; i++)
artinya penggunaan variabel 'i' hanya didalam bracket for loop diatas
Min. Bisa ga tampilannya pake panel p10 atau 7 segmen.
bisa, tambankan fitur lain sesuai kebutuhan
Maaf gan, q coba ktik ulang kok keluar ‘_DATE_’was not declared in this scope… mohon pencerahanya gan
__DATE__ bukan _DATE_
maaf gan setelah saya coba kok di lcd haya tertera Bel Sekolah 02.01.17 gan…. makasih
sketch-nya sudah di upgrade dengan penambahan lcd
Alhamdulillah Terima kasih banyak pak…. smoga tambah jos rejekinya.. Amin
master, ditambah kan relay bisa mas ?
coding bagian mana yang ditambahkan supaya 1 menit sebelum bell relay amplifier aktif master ?
bisa
Akang kenapa kalau power dimatikan harus setting jadwal dan waktu lagi ya?
maaf lupa ngehapus comment baris 271 dan 279 (saat test program), dan sudah sekarang sudah diperbaiki
Kenapa ya jadwal nya ga bisa si ubah tapi jam nya bisa di ubah
komunikasi data android-arduino dalam program ini menggunakan checksum untuk menghindari kesalahan data,
kemungkinan data jadwal (yang ukuran data-nya besar) tidak diterima dengan benar sehingga diabaikan,
pastikan jalur komunikasi bluetooth telah stabil
Maaf gan nanya lg
Itu kenapa ya setingan jadwal yg bisa ke pake cuma no 1 doang
Yg laen nya ga bisa, padahal udah di ceklis
Mas ko ganti jadwal awal di kodinga ga bisa ya ? Udah di ganti tapi tetep muncul jadwal yg lama
ganti nilai
#define tokenEEPROM 0x83
dengan nilai lainnya misal 0x84
Makasih mas udah bisa
izin buat pak .
maaf sya coba kopi paste koding nya .
di arduino nano gak bisa ya ..
done compile di arduino nano
Sketch uses 13280 bytes (43%) of program storage space. Maximum is 30720 bytes.
Global variables use 1355 bytes (66%) of dynamic memory, leaving 693 bytes for local variables. Maximum is 2048 bytes.
barangkali ada kendala lain, seperti library.
gan aplikasi androidnya, agan buat pakai androidstudio atau pakai aplikasi yg lain?
MIT App Inventor
Klo char kegiatannya di kurangi bisa ngak?
Gimana caranya….
pak untuk aplikasi android databasenya menggunakan yang apa?
tinyDB
mas ini saya udah buat dan atur pakek appnya tapi kok gak mau keluar ya suaranya padahal udah aktif semuanya
beberapa hal:
1. cek pengkabelan modul mp3
2. file suara .mp3 berada dalam folder ‘mp3\’
3. cek indikator mp3 aktif (led)
4. coba ganti kartu memory
Arduino: 1.8.9 (Windows 10), Board: “Arduino/Genuino Uno”
C:\Users\ASUS\Documents\Arduino\libraries\DFPlayer_Mini_Mp3\DFPlayer_Mini_Mp3.cpp: In function ‘mp3_send_cmd.constprop’:
C:\Users\ASUS\Documents\Arduino\libraries\DFPlayer_Mini_Mp3\DFPlayer_Mini_Mp3.cpp:177:1: internal compiler error: Segmentation fault
}
^
Please submit a full bug report,
with preprocessed source if appropriate.
See for instructions.
lto-wrapper.exe: fatal error: C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-gcc returned 1 exit status
compilation terminated.
c:/program files (x86)/arduino/hardware/tools/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/bin/ld.exe: error: lto-wrapper failed
collect2.exe: error: ld returned 1 exit status
exit status 1
Error compiling for board Arduino/Genuino Uno.
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
kenapa ini bang
nggak ngeh juga error seperti ini,
pernah ketemu juga error seperti ini di laptop lain, tapi setelah di restart hilang errornya.
Permisi gan, mau tanya setelah saya coba programnya muncul error “no matching function for call to ‘LiquidCrystal_I2C::begin()”
Cara mengatasinya bagaimana ya gan? Trma kasih sebelumnya.
Ganti library LiquidCrystal_I2C dengan yang ada di link halaman ini
izin gabung gan sy coba rangkaian ini sudah oke tapi df mp 3 nya ga nya waktu masuk jadwal yg diset mohon pencerahannya gan
langkah:
1. file suara .mp3 berada dalam folder ‘mp3’
2. cek fungsi modul dengan program example yang ada
3. jika belum mengeluarkan suara/indikator led, coba ganti kartu memory, dan cek lagi
Gan,, saya mau tanya sketch diatas apakah bisa menggunakan panel p10?
Terima kasih
ya, bisa dikembangkan salah satunya penambahan display P10
cara buat apknya om di sharing jg dong biar lebih paham
trims
bahasan app inventor ada pada topik lain
String yg dikirim via androidnya ke bluetoothnya gimana mas?
umumnya langsung kirim data berupa data string ascii, nanti di arduino dibaca dengan perintah
Serial.readString()
Sir please provide your projects AIA file . My Language Bangla / English
……Please provide The file ……..AIA
Sorry, the .aia file is not yet published
Sorry I do not understand the language of this app …i do not understand this app in my country Bangladesh
This application uses Indonesian
please help me…
problem ……
exit status 1
within this context
lcd.command (0x40 | (0 << 3)) ; ……………… error
for (byte i = 0; i < 8; i++)
lcd.write (karakterDetik1[i]);
lcd.command (0x40 | (1 << 3));
for (byte i = 0; i < 8; i++)
lcd.write (karakterDetik2[i]);
lcd.command (0x40 | (2 << 3));
for (byte i = 0; i < 8; i++)
lcd.write (karakterDetik3[i]);
lcd.command (0x40 | (3 << 3));
for (byte i = 0; i < 8; i++)
lcd.write (karakterDetik2[i]);
lcd.command (0x40 | (4 << 3));
for (byte i = 0; i < 8; i++)
lcd.write (karakterMusik[i]);
lcd.command (0x40 | (5 << 3));
for (byte i = 0; i < 8; i++)
lcd.write (karakterSetting[i]);
can not be analyzed, the message ‘exit status 1’ is a common mistake, just copy paste the error message here.
assalamualaikum, selamat malam pak, mau tanya, jika ingin relay dan dfplayer aktif secara bersamaan dan mati ketika lagu sudah habis, bagian mana yang harus diubah pak? program di atas saya coba relay aktif 1 menit sebelum bel. mohon petunjuk pak, ikut belajar. terimakasih…..
relay bisa dikontrol sesuai aktifnya suara MP3 dengan mendeteksi jalur pin Busy di modul MP3
Gan di aplikasi nya pas di pengaturan jadwal yang bisa di centang √ cuman sampe 10 sisa nya gabisa do centang, suadah ada versi full nya belum gan?terima kasih
ya, itu versi evaluasi-nya, versi fullnya masih berbayar
Kang bagian program yang khusus untuk terima settingan waktu RTC dari aplikasi androidnya yang mana ya?
baris 466-471
Permisi, mau tanya..
gan kalau suaranya gak bisa keluar itu gimana ya?
Untuk men-setting jadwal belnya harus sesuai “void nilaiAwal ()” kah?
Atau bisa bebas lewat aplikasi yang ada di handphone?
Bebas sesuai kebutuhan
terimakasih gan..
Permisi mas mau tanya perbedaan fungsi variabel di baris 35 dengan 75 apa mas sedangkan isinya hampir sama
const char kegiatanText[][17] PROGMEM ~~ teks
enum _kegiatan ~~ kode angka
Maaf pemula mau tanya gan
Ini kan programnya relay aktif 1 menit sebelum dan sesudah bel, jika saya mau mengaktifkan relay menjadi lebih lama misal 5 menit..koding mana yg harus di ubah?
bisa dengan menambahkan koding penjadwalan khusus aktif relay, misal dengan metode millis
karena belum diakomidir di sketch sekarang ini
Terimakasih mas tapi kalau langsung berupa char teks bisa di masukkan ke struck tabel mata pelajaran tidak mas
bisa saja kalo dibutuhkan
Terimakasih mas saya sudah dapet jawaban dari post yang lain dari web ini, sekali lagi terimakasih mas
Maaf gan mau nanya..
Saya udah coba dirakit sesuai dengan gambar codingnya udah di upload …. tapi di lcd nya ga tampil ada tulisan hanya lampunya aja yang nya.. mohon pencerahannya
periksa rangkaian lcd, cek kemungkinan kabel terbalik, kabel putus dll
cek juga alamat i2c lcd dengan program i2c scanner, kemudian sesuaikan alamatnya di sketch ini
gan mau tanya,ini ngrim jadwalnya kepramukaan tapi yg muncul di LCD pulang jam’at tapi suaranya udah bener kepramukaan
kasih pencerahan gan
Teima kasih infonya,
[sketch nya sudah di update/di perbaiki]
maaf pak mau tanya, untuk menampilkan perintah yang dari android biar bisa TAMPIL di terminal gimna ya …
perintah dalam bentuk byte array dengan struktur :
uint8_t tokenMulai;
uint8_t perintah;
uint8_t parameter;
uint8_t panjang1;
uint8_t panjang2;
uint8_t tokenSelesai;
Mohon solusi, saat kirim pengaturan muncul tulisan Perangkat tidak merespon
solusinya gimana ya?
periksa rangkaian bluetooth, kemungkinan belum terpasang dengan benar, cek juga settingan seperti baudrate
Cuma bisa sampe jam ke 40 doang bang?
iya, terbatas 40 jadwal max
Assalamu’alaikum wr wb, mohon pencerahan cara mengubah tampilan dari LCD ke P!0 bagaimana ? …maturnuwun Wassalamu’alaikum wr wb.
masih di mungkinkan, lumayan banyak modifikasi
ka ini kalou mau kirim jadwal ko perangkat tidak merespon,padahal kabel tidak ada yang putus,bluootoh juga sudah di ganti,tapi masih saja ga bisa kirim jdwal , gimana yaa kaa
coba uji dengan android lain
Kang mau tanya bentuk perintah yang di kirim dari hp ke arduino seperti apa ya?
struktur datanya:
kalau relaynya di buat untuk atur bel lonceng itu bagai mana printahnya mang ?
Inisialisasi pin relay di bagian setup(),
kemudian pada block (mulai baris 317) tambahkan kontrol relay misalnya : digitalWrite(pinRelay, LOW);delay(1000);digitalWrite(pinRelay, HIGH);
bang mau nanya itu bikin apk androidnya pake apa ya? kalo boleh share koding apk nya.
versi 2 pakai mit app inventor
versi selanjutnya kodular
koding .aia nya belum untuk di share
Pak, jika tidak mau menggunakan MP3 karena menggunakan Bel Kring, penyambungan Belnya ke mana ya?
Untuk penyambungannya bisa di serikan ke relay yang ada di design ini, tetapi harus mengganti koding bagian aktivasi mp3nya menjadi mode bel tet dengan delay
Terimakasih pak, kalar relay diganti Module RTC bisa gak?
“kalau delay diganti Module RTC bisa gak?”
aktivasi nya berdasarkan rtc dan settingan waktu yang di setting, ‘delay’ disini sebagai lama nyalanya/durasi bel kring/bel tet.
dalam sebuah program bel otomatis terdapat 3 buah waktu
1. waktu belajar normal
2. waktu untuk ujian semester atau uts
3. waktu di bulan puasa
bagaimana menambahkan program nya jika di sebuah mesin arduinonya sudah ada program waktu belajar normal
Setiap program mungkin punya teknik yang berbeda, namun pada prinsipnya punya tabel/database jadwal. Database jadwal yang ada bisa di kelompokkan dalam group jadwal.
Jika group jadwal yang ada hanya 1 (misalkan jadwal reguler) dan jika ingin menambahkan group lainnya (normal, ujian, puasa, dll) maka 1) perlu ditambahkan database-database group tersebut dan 2) menambahkan pengaturan untuk memilih group yang aktif.