Arduino Otomatik Okul / Kolej Çan Sistemi

Sorunları Ortadan Kaldırmak Için Enstrümanımızı Deneyin





Bu yazıda Arduino, 16 x 2 ekran ve gerçek zamanlı saat modülünü kullanarak otomatik bir okul zili / kolej zili sistemi inşa edeceğiz. Bu projeyi zili günde 16 defaya kadar tercih ettiğiniz saat ve dakikada çalacak şekilde programlayabilirsiniz. Zilin uzunluğu saniyeler içinde programlanabilir.

Kodlamadan daha basit bir sürüm mü arıyorsunuz? Anla İŞTE



Genel Bakış

Okuldaki bir zalimin “teneke kutu” zili çaldığı ve öğrencilerin okul girişinden uçan renklerle çıktığı günler geride kaldı. Zili birkaç dakika önce son zili çaldığında bazıları daha da mutlu olabilir.

Bu, 15 ila 20 yıl önceki senaryo idi, ancak şimdi tüm okullar ve kolejler kesinlikle zamana bağlı ve çanlar otomatikleştirildi.



Yazarın hızlı çocukluk / ergenlik çemberi hatırlayın:

İlkokul ve ortaokul yıllarında taktığım dijital saat, okulun zil sistemi ile 1 saniye hassasiyetle senkronize edildi.

Zil çaldıktan sonra “zil 5 saniye içinde çalacak” diye bağırırdım, tüm öğrenciler şaşkınlıkla bana bakıyor, bu neredeyse her gün oluyor. Bir gün ben ve yakın arkadaşlarım son zilden önce 10, 9, 8, 7… .. geri saymaya başlıyoruz.

Bütün arkadaşlarım bunun sihirli bir kol saati olduğunu söylüyor, ancak okul zilinin otomatikleştirildiğine dair basit bir gerçeği fark etmemişlerdi. LOL !!

Arduino kullanarak böyle bir okul / kolej zili yapacağız.

Arduino Bağlantısına Ekran

Arduino bağlantılarının ekranı, genellikle onları bağladığımızdan, burada kullanılan 9, 8, 7, 6, 5 ve 4 pinlerinden biraz farklıdır. 2 ve 3 numaralı pinler, üzerinden donanım kesintisi olarak kullanılır. butonlar .

10K kullanın potansiyometre kontrastı ayarlamak için Görüntüle .

Arduino okul zili LCD

Arduino Kullanan Otomatik Okul / Kolej Çan Sistemi

Zil ve Röle Bağlantılarıyla İlgili Ayrıntılı Bilgi:

Arduino ile okul zili zamanlayıcı devresi

GÜNCELLEME: A5'ten SCL'ye ve A4'ten SDA'ya (A4'ten SCK'ya değil)

Gerçek Zamanlı Saat Modülü

Gerçek zaman saati modül uzun süreli elektrik kesintisinden sonra bile zamanı takip eder. Zili açmak ve kapatmak için 9V'luk bir röle sağlanmıştır.

Lütfen röleye (şemada gösterilmemiştir) ters önyargılı bir 1N4007 diyot bağlayın, bu, röleden gelen zararlı yüksek voltaj geri EMF'yi emer.

Devreye bir 9V / 500mA duvar adaptörü .

Bazı durumlarda zili manuel olarak çalıştırmak için üç basma düğmesi sağlanmıştır. 'Çıkış' düğmesine basmak, zili manuel olarak çaldıktan sonra zili durduracaktır.

'Zil devre dışı bırakma düğmesi' zili sonsuza kadar devre dışı bırakacaktır. Zili yeniden etkinleştirmek için 'Çıkış' düğmesine basın.

RTC modülüne zaman nasıl ayarlanır:

RTC kitaplığını indirin:
Bağlantı: github.com/PaulStoffregen/DS1307RTC

-------------------------------------------------- ---------------
TimeLib.h dosyasını indirin:
github.com/PaulStoffregen/Time
-------------------------------------------------- ----------------

Programı Yükleyin

Saati RTC'ye ayarlayacak programı aşağıdan yükleyin

//----------------------------------------------------//
#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
}
//----------------------------------------------------//

Kodu yükledikten sonra seri monitörü açın, zamanın ayarlandığını söyleyecektir.
Yukarıdaki adım başarıyla tamamlandıktan sonra bir sonrakine geçin.
Şimdi aşağıdaki kodu Arduino'ya yükleyin.

Ana program Kodu:

//------------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------------//

Yukarıdaki kodu yükledikten sonra ekranda saati saat olarak görmelisiniz.

Bu program kodunu tamamlıyor.

Bu Otomatik zil sistemi nasıl kullanılır:

Bunu tamamlanmış donanım kurulumuyla yapın.

1. Önce 'zaman ayarı' kodunu yükleyin ve seri monitörü açın.
2. Ana programda, rölenin tetiklenmesi gereken zamanı buradan ayarlayın.

//---- 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

• h1'i 1 ile 23 saat arasında ve m1'i dakika olarak 0 ile 59 arasında ayarlayın.
• h1 - h16 ve m1 - m16 için aynı.
• Bazı zili devre dışı bırakmak istiyorsanız, h = 0 ve m = 0 değerini bırakın, örneğin: h5 = 0 ve m5 = 0, sıfır o belirli zili devre dışı bırakacaktır.

3. Zilin açılıp kapanacağı süreyi buradan ayarlayın:

// --------------- zil uzunluğu saniye cinsinden ------- //
const int Lenght = 3 // saniye olarak

Varsayılan olarak değer 3 saniyeye ayarlanmıştır. Ayarlanan zaman geldiğinde röle 3 saniye boyunca açılacak ve kapanacaktır. İhtiyacınız olursa bunu değiştirin.

4. Değiştirilen kodu Arduino ya yükleyin.
5. Zili devre dışı bırakmak için 'zil devre dışı bırakma düğmesine' basın. Yeniden etkinleştirmek için “Çıkış” düğmesine basın.
6. Zili elle çalmak için 'manuel zil düğmesine' basın ve zili durdurmak için 'çıkış' düğmesine basın.

Bu, projeyi bitirir, bu projeyle ilgili herhangi bir sorunuz varsa, yorum bölümünde ifade etmekten çekinmeyin.




Önceki: Bu Sivrisinek Yarasasını Pilsiz Yapın Sonraki: RFID tabanlı Seyirci Sistemi Nasıl Yapılır