Avtomatski sistem zvonjenja Arduino School / College Bell

Preizkusite Naš Instrument Za Odpravo Težav





V tem prispevku bomo zgradili avtomatski sistem šolskega zvona / univerzitetnega zvona z uporabo Arduina, 16 x 2 zaslona in modula ure v realnem času. Ta projekt lahko programirate, da pozvoni do 16-krat na dan ob želeni uri in minuti. Dolžino zvonca lahko programirate v sekundah.

Iščete preprostejšo različico brez kodiranja? Razumeš TUKAJ



Pregled

Časi so minili, ko je peon v šoli pozvonil 'kositer kositer kositer' in so učenci z različnimi barvami zbežali pred vhodom v šolo. Nekateri bodo morda še bolj veseli, ko bo peon pozvonil zadnji zvonec nekaj minut prej.

To je bil scenarij pred 15 do 20 leti, zdaj pa so vse šole in fakultete strogo časovno omejene in zvonovi so avtomatizirani.



Avtorjeva hitra otroška / najstniška kapuca se spomni:

V času osnovne in srednje šole je bila digitalna ura, ki sem jo nosil, sinhronizirana s šolskim zvoncem z natančnostjo 1 sekundo.

Zakričal bi 'zvonec bo zazvonil čez 5 sekund', potem ko je zazvonil, vsi študentje presenečeno strmijo vame, to se dogaja skoraj vsak dan. Nekega dne začnem jaz in moji bližnji prijatelji odštevati 10, 9, 8, 7 ... .. pred zadnjim zvonom.

Vsi moji prijatelji pravijo, da gre za čarobno zapestno uro, vendar niso spoznali niti enega preprostega dejstva, da je šolski zvonec avtomatiziran. LOL !!

Naredili bomo en tak šolski / fakultetni zvonec z uporabo Arduina.

Prikaži povezavo Arduino

Povezave zaslona do Arduina se nekoliko razlikujejo od tistih, ki jih običajno povežemo, tu so uporabljeni zatiči 9, 8, 7, 6, 5 in 4. Številki 2 in 3 se uporabljata kot strojna prekinitev prek tipke .

Uporabite 10K potenciometer za nastavitev kontrasta za zaslon .

Šolski zvonec Arduino LCD

Samodejni sistem šolskih / univerzitetnih zvoncev z uporabo Arduina

Podrobne informacije o zvočniških in relejnih povezavah:

šolski zvonec z Arduino

POSODOBITEV: A5 na SCL in A4 na SDA (ne A4 na SCK)

Modul ure v realnem času

The Ura v realnem času modul beleži čas tudi po daljšem izpadu električne energije. Za vklop in izklop zvona je na voljo 9V rele.

Priključite diodo 1N4007 z vzvratno pristranskostjo preko releja (kar ni prikazano v shemi), ki bo absorbirala škodljivi visokonapetostni EMF iz releja.

Napajajte vezje z uporabo a 9V / 500mA stenski adapter .

Na voljo so trije gumbi, eden za ročno upravljanje zvona v nekaterih okoliščinah. Če pritisnete gumb za izhod, se zvonec po ročnem zvonjenju ustavi.

»Gumb za onemogočanje zvonca« bo zvonec za vedno onemogočil. Če želite zvonec znova omogočiti, pritisnite gumb »Izhod«.

Kako nastaviti čas za modul RTC:

Prenesite knjižnico RTC:
Povezava: github.com/PaulStoffregen/DS1307RTC

-------------------------------------------------- ---------------
Prenesite timeLib.h:
github.com/PaulStoffregen/Time
-------------------------------------------------- ----------------

Naložite program

Naložite spodnji program, ki bo določil čas na 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
}
//----------------------------------------------------//

Po nalaganju kode odprite serijski monitor, napisal bo, da je čas nastavljen.
Ko je zgornji korak uspešno izveden, nadaljujte z naslednjim.
Zdaj naložite spodnjo kodo v Arduino.

Koda glavnega programa:

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

Po nalaganju zgornje kode bi morali na zaslonu videti čas v urah.

S tem je zaključena programska koda.

Kako uporabljati ta sistem samodejnega zvona:

Naredite to s končano namestitvijo strojne opreme.

1. Najprej naložite kodo za nastavitev časa in odprite serijski monitor.
2. V glavnem programu nastavite čas, v katerem mora biti rele sprožen tukaj.

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

• Nastavite h1 v urah od 1 do 23 ur in m1 v minutah od 0 do 59.
• Enako za h1 do h16 in m1 do m16.
• Če želite onemogočiti nekaj vrednosti zvonjenja, na primer h = 0 in m = 0, na primer: h5 = 0 in m5 = 0, bo nič onemogočil ta zvonec.

3. Tu nastavite časovno dolžino vklopa in izklopa zvona:

// --------------- dolžina zvonca v sekundah ------- //
const int Lenght = 3 // v sekundah

Privzeto je vrednost nastavljena za 3 sekunde. Ko prispe določeni čas, rele se vklopi za 3 sekunde in izklopi. Po potrebi spremenite to.

4. Naložite spremenjeno kodo v Arduino.
5. Če želite zvonec onemogočiti, pritisnite »gumb za onemogočanje zvonca«. Če želite znova omogočiti, pritisnite gumb »Izhod«.
6. Če želite ročno pozvoniti, pritisnite 'ročno stikalo za zvonec' in za zaustavitev pritisnite 'izhod'.

S tem je projekt zaključen, če imate kakršna koli vprašanja v zvezi s tem projektom, vas prosimo, da to izrazite v komentarju.




Prejšnji: Zgradite tega komarnika brez baterije Naprej: Kako narediti sistem za spremljanje na osnovi RFID