Sistem Bell Sekolah / Kolej Automatik Arduino

Cuba Instrumen Kami Untuk Menghapuskan Masalah





Dalam posting ini kita akan membina sistem loceng sekolah / loceng kolej automatik menggunakan Arduino, paparan 16 x 2 dan modul jam masa nyata. Anda boleh memprogramkan projek ini untuk membunyikan loceng hingga 16 kali sehari pada jam dan minit pilihan anda. Panjang loceng loceng dapat diprogramkan dalam beberapa saat.

Mencari versi yang lebih mudah tanpa pengekodan? Dapatkannya SINI



Gambaran keseluruhan

Sudah berlalu, ketika seorang peon di sekolah membunyikan loceng 'timah timah timah' dan para pelajar berlari keluar dari pintu masuk sekolah dengan warna terbang. Sebilangan mungkin menjadi lebih gembira apabila peon membunyikan loceng terakhir beberapa minit sebelumnya.

Ini adalah senario 15 hingga 20 tahun yang lalu, tetapi sekarang semua sekolah dan maktab terikat dengan masa dan loceng automatik.



Tudung kanak-kanak / remaja cepat penulis ingat:

Semasa sekolah rendah dan menengah saya jam digital yang saya pakai diselaraskan dengan sistem loceng sekolah dengan ketepatan 1 saat.

Saya akan berteriak 'loceng akan berdering dalam 5 saat' setelah loceng berbunyi semua pelajar menatap saya dengan terkejut, ini berlaku hampir setiap hari. Pada suatu hari saya dan rakan-rakan rapat saya mula mengira 10, 9, 8, 7… .. sebelum loceng terakhir.

Semua rakan saya mengatakan bahawa ini adalah jam tangan ajaib, tetapi mereka tidak menyedari satu fakta sederhana bahawa loceng sekolah adalah automatik. LOL !!

Kami akan membuat loceng sekolah / kolej seperti menggunakan Arduino.

Paparan ke Arduino Connection

Paparan ke sambungan Arduino sedikit berbeza dari yang biasa kami pasangkan, pin 9, 8, 7, 6, 5 dan 4 digunakan di sini. Nombor pin 2 dan 3 digunakan sebagai perkakasan mengganggu melalui tekan butang .

Gunakan 10K potensiometer untuk menyesuaikan kontras untuk paparan .

LCD loceng sekolah Arduino

Sistem Loceng Sekolah / Kolej Automatik Menggunakan Arduino

Maklumat terperinci Mengenai Sambungan Bell dan Relay:

litar pemasa loceng sekolah dengan Arduino

KEMASKINI: A5 ke SCL dan A4 ke SDA (Bukan A4 hingga SCK)

Modul Jam Masa Sebenar

The Jam masa nyata modul mengikuti jejak masa walaupun selepas pemadaman elektrik yang lama. Relay 9V disediakan untuk menghidupkan dan mematikan loceng.

Sila sambungkan diod 1N4007 secara bias terbalik merentas geganti (yang tidak ditunjukkan dalam skema) yang akan menyerap EMF voltan tinggi yang berbahaya dari geganti.

Kuasa litar menggunakan a Penyesuai dinding 9V / 500mA .

Tiga butang tekan disediakan satu untuk mengendalikan loceng secara manual dalam beberapa keadaan. Menekan butang 'keluar' akan menghentikan loceng setelah membunyikan loceng secara manual.

'Butang lumpuhkan loceng' akan mematikan loceng untuk selama-lamanya. Untuk mengaktifkan semula loceng tekan butang 'Keluar'.

Cara menetapkan masa ke modul RTC:

Muat turun perpustakaan RTC:
Pautan: github.com/PaulStoffregen/DS1307RTC

-------------------------------------------------- ---------------
Masa muat turunLib.h:
github.com/PaulStoffregen/Time
-------------------------------------------------- ----------------

Muat naik Program

Muat naik program di bawah yang akan menetapkan masa ke RTC

//----------------------------------------------------//
#include
#include
#include
int P=A3 //Assign power pins for RTC
int N=A2
const char *monthName[12] = {
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
}
tmElements_t tm
void setup() {
pinMode(P,OUTPUT)
pinMode(N,OUTPUT)
digitalWrite(P,HIGH)
digitalWrite(N,LOW)
bool parse=false
bool config=false
// get the date and time the compiler was run
if (getDate(__DATE__) && getTime(__TIME__)) {
parse = true
// and configure the RTC with this info
if (RTC.write(tm)) {
config = true
}
}
Serial.begin(9600)
while (!Serial) // wait for Arduino Serial Monitor
delay(200)
if (parse && config) {
Serial.print('DS1307 configured Time=')
Serial.print(__TIME__)
Serial.print(', Date=')
Serial.println(__DATE__)
} else if (parse) {
Serial.println('DS1307 Communication Error :-{')
Serial.println('Please check your circuitry')
} else {
Serial.print('Could not parse info from the compiler, Time='')
Serial.print(__TIME__)
Serial.print('', Date='')
Serial.print(__DATE__)
Serial.println(''')
}
}
void loop() {
}
bool getTime(const char *str)
{
int Hour, Min, Sec
if (sscanf(str, '%d:%d:%d', &Hour, &Min, &Sec) != 3) return false
tm.Hour = Hour
tm.Minute = Min
tm.Second = Sec
return true
}
bool getDate(const char *str)
{
char Month[12]
int Day, Year
uint8_t monthIndex
if (sscanf(str, '%s %d %d', Month, &Day, &Year) != 3) return false
for (monthIndex = 0 monthIndex <12 monthIndex++) {
if (strcmp(Month, monthName[monthIndex]) == 0) break
}
if (monthIndex >= 12) return false
tm.Day = Day
tm.Month = monthIndex + 1
tm.Year = CalendarYrToTm(Year)
return true
}
//----------------------------------------------------//

Setelah memuat naik kod, buka monitor bersiri, ia akan mengatakan bahawa waktunya telah ditetapkan.
Setelah langkah di atas berjaya dilanjutkan ke seterusnya.
Sekarang muat naik kod di bawah ke Arduino.

Kod program utama:

//------------Program developed by R.GIRISH------------//
#include
#include
#include
#include
#include
LiquidCrystal lcd(9, 8, 7, 6, 5, 4)
int i = 0
int H = 0
int M = 0
int S = 0
int setting_value
const int bell = 10
const int P = A3
const int N = A2
const int setting_address = 0
const int over_ride_off = 11
boolean bell_status = true
boolean Over_ride = true
//------------------- Set Bell Timings from hours 1 to 23 hrs -------------------//
//---- 1st bell ------//
const int h1 = 0 //hours
const int m1 = 0 //Minutes
//---- 2nd bell ------//
const int h2 = 0
const int m2 = 0
//---- 3rd bell ------//
const int h3 = 0
const int m3 = 0
//---- 4th bell ------//
const int h4 = 0
const int m4 = 0
//---- 5th bell ------//
const int h5 = 0
const int m5 = 0
//---- 6th bell ------//
const int h6 = 0
const int m6 = 0
//---- 7th bell ------//
const int h7 = 0
const int m7 = 0
//---- 8th bell ------//
const int h8 = 0
const int m8 = 0
//---- 9th bell ------//
const int h9 = 0
const int m9 = 0
//---- 10th bell ------//
const int h10 = 0
const int m10 = 0
//---- 11th bell ------//
const int h11 = 0
const int m11 = 0
//---- 12th bell ------//
const int h12 = 0
const int m12 = 0
//---- 13th bell ------//
const int h13 = 0
const int m13 = 0
//---- 14th bell ------//
const int h14 = 0
const int m14 = 0
//---- 15th bell ------//
const int h15 = 0
const int m15 = 0
//---- 16th bell ------//
const int h16 = 0
const int m16 = 0
//--------------- bell ring lenght in seconds -------//
const int Lenght = 3 //in seconds
//-------------------------- -------------------------//
void setup()
{
lcd.begin(16, 2)
pinMode(P, OUTPUT)
pinMode(N, OUTPUT)
pinMode(bell, OUTPUT)
pinMode(over_ride_off, INPUT)
digitalWrite(P, HIGH)
digitalWrite(N, LOW)
digitalWrite(over_ride_off, HIGH)
attachInterrupt(0, over_ride, RISING)
attachInterrupt(1, bell_setting, RISING)
if (EEPROM.read(setting_address) != 1)
{
bell_setting()
}
}
void loop()
{
tmElements_t tm
lcd.clear()
if (RTC.read(tm))
{
H = tm.Hour
M = tm.Minute
S = tm.Second
lcd.setCursor(0, 0)
lcd.print('TIME:')
lcd.print(tm.Hour)
lcd.print(':')
lcd.print(tm.Minute)
lcd.print(':')
lcd.print(tm.Second)
lcd.setCursor(0, 1)
lcd.print('DATE:')
lcd.print(tm.Day)
lcd.print('/')
lcd.print(tm.Month)
lcd.print('/')
lcd.print(tmYearToCalendar(tm.Year))
} else {
if (RTC.chipPresent())
{
lcd.setCursor(0, 0)
lcd.print('RTC stopped!!!')
lcd.setCursor(0, 1)
lcd.print('Run SetTime code')
} else {
lcd.clear()
lcd.setCursor(0, 0)
lcd.print('Read error!')
lcd.setCursor(0, 1)
lcd.print('Check circuitry!')
}
}
if (EEPROM.read(setting_address) == 1)
{
if (H == 0 && M == 0 && S == 0)
{
digitalWrite(bell, LOW)
}
if (H == h1 && M == m1 && S == 0)
{
for (i = 0 i {
digitalWrite(bell, HIGH)
delay(1000)
}
digitalWrite(bell, LOW)
i = 0
}
if (H == h2 && M == m2 && S == 0)
{
for (i = 0 i {
digitalWrite(bell, HIGH)
delay(1000)
}
digitalWrite(bell, LOW)
i = 0
}
if (H == h3 && M == m3 && S == 0)
{
for (i = 0 i {
digitalWrite(bell, HIGH)
delay(1000)
}
digitalWrite(bell, LOW)
i = 0
}
if (H == h4 && M == m4 && S == 0)
{
for (i = 0 i {
digitalWrite(bell, HIGH)
delay(1000)
}
digitalWrite(bell, LOW)
i = 0
}
if (H == h5 && M == m5 && S == 0)
{
for (i = 0 i {
digitalWrite(bell, HIGH)
delay(1000)
}
digitalWrite(bell, LOW)
i = 0
}
if (H == h6 && M == m6 && S == 0)
{
for (i = 0 i {
digitalWrite(bell, HIGH)
delay(1000)
}
digitalWrite(bell, LOW)
i = 0
}
if (H == h7 && M == m7 && S == 0)
{
for (i = 0 i {
digitalWrite(bell, HIGH)
delay(1000)
}
digitalWrite(bell, LOW)
i = 0
}
if (H == h8 && M == m8 && S == 0)
{
for (i = 0 i {
digitalWrite(bell, HIGH)
delay(1000)
}
digitalWrite(bell, LOW)
i = 0
}
if (H == h9 && M == m9 && S == 0)
{
for (i = 0 i {
digitalWrite(bell, HIGH)
delay(1000)
}
digitalWrite(bell, LOW)
i = 0
}
if (H == h10 && M == m10 && S == 0)
{
for (i = 0 i {
digitalWrite(bell, HIGH)
delay(1000)
}
digitalWrite(bell, LOW)
i = 0
}
if (H == h11 && M == m11 && S == 0)
{
for (i = 0 i {
digitalWrite(bell, HIGH)
delay(1000)
}
digitalWrite(bell, LOW)
i = 0
}
if (H == h12 && M == m12 && S == 0)
{
for (i = 0 i {
digitalWrite(bell, HIGH)
delay(1000)
}
digitalWrite(bell, LOW)
i = 0
}
if (H == h13 && M == m13 && S == 0)
{
for (i = 0 i {
digitalWrite(bell, HIGH)
delay(1000)
}
digitalWrite(bell, LOW)
i = 0
}
if (H == h14 && M == m14 && S == 0)
{
for (i = 0 i {
digitalWrite(bell, HIGH)
delay(1000)
}
digitalWrite(bell, LOW)
i = 0
}
if (H == h15 && M == m15 && S == 0)
{
for (i = 0 i {
digitalWrite(bell, HIGH)
delay(1000)
}
digitalWrite(bell, LOW)
i = 0
}
if (H == h16 && M == m16 && S == 0)
{
for (i = 0 i {
digitalWrite(bell, HIGH)
delay(1000)
}
digitalWrite(bell, LOW)
i = 0
}
}
delay(1000)
}
void over_ride()
{
lcd.clear()
while (Over_ride)
{
digitalWrite(bell, HIGH)
lcd.setCursor(0, 0)
lcd.print('Press Exit to')
lcd.setCursor(0, 1)
lcd.print('Stop the bell!!!')
if (digitalRead(over_ride_off) == LOW)
{
Over_ride = false
digitalWrite(bell, LOW)
}
}
Over_ride = true
}
void bell_setting()
{
setting_value = 0
EEPROM.write(setting_address, setting_value)
lcd.clear()
while (bell_status)
{
lcd.setCursor(0, 0)
lcd.print('Bell is Disabled')
lcd.setCursor(0, 1)
lcd.print('Press Exit.')
if (digitalRead(over_ride_off) == LOW)
{
bell_status = false
}
}
bell_status = true
setting_value = 1
EEPROM.write(setting_address, setting_value)
}
//------------Program developed by R.GIRISH------------//

Selepas memuat naik kod di atas, anda akan melihat jam dalam paparan.

Itu menyimpulkan kod program.

Cara menggunakan sistem loceng automatik ini:

Lakukan ini dengan persediaan perkakasan yang telah selesai.

1. Muat naik kod 'pengaturan masa' terlebih dahulu dan buka monitor bersiri.
2. Dalam program utama tetapkan masa di mana relay perlu dicetuskan di sini.

//---- 1st bell ------//
const int h1 = 0 //hours
const int m1 = 0 //Minutes
//---- 2nd bell ------//
const int h2 = 0
const int m2 = 0
//---- 3rd bell ------//
const int h3 = 0
const int m3 = 0
//---- 4th bell ------//
const int h4 = 0
const int m4 = 0

• Tetapkan h1 dalam jam dari 1 hingga 23 jam dan m1 dalam beberapa minit dari 0 hingga 59.
• Sama untuk h1 hingga h16 dan m1 hingga m16.
• Sekiranya anda ingin melumpuhkan beberapa nilai cuti loceng h = 0 dan m = 0 misalnya: h5 = 0 dan m5 = 0, sifar akan mematikan loceng tertentu.

3. Tetapkan jangka masa untuk loceng dihidupkan dan dimatikan, di sini:

// --------------- panjang loceng loceng dalam beberapa saat ------- //
const int Lenght = 3 // dalam saat

Secara lalai nilainya ditetapkan selama 3 saat. Apabila masa yang ditetapkan tiba geganti akan dihidupkan selama 3 saat dan dimatikan. Tukar ini jika anda memerlukan.

4. Muat naik kod yang diubah suai ke Arduino.
5. Untuk mematikan loceng tekan 'butang lumpuhkan loceng'. Untuk mengaktifkan semula tekan butang 'Keluar'.
6. Untuk membunyikan loceng secara manual tekan 'loceng manual switch' dan untuk menghentikan loceng tekan 'exit'.

Ini menyimpulkan projek ini, jika anda mempunyai pertanyaan mengenai projek ini, sila nyatakan di bahagian komen.




Sebelumnya: Bangun Kelawar Nyamuk ini tanpa Bateri Seterusnya: Cara Membuat Sistem Kehadiran berdasarkan RFID