Automatski sustav zvona škole / fakulteta Arduino

Automatski sustav zvona škole / fakulteta Arduino

U ovom ćemo postu izraditi automatski sustav školskog zvona / zvona na fakultetu koristeći Arduino, zaslon 16 x 2 i modul sata u stvarnom vremenu. Ovaj program možete programirati da zvoni do 16 puta dnevno u željeni sat i minutu. Duljina zvona može se programirati u sekundama.



Tražite li jednostavniju verziju bez kodiranja? Shvati OVDJE

Pregled

Prošlo je vrijeme kada je čovjek u školi zazvonio 'limeni lim limeni lim', a učenici istrčali iz ulaza u školu letećim bojama. Neki će možda postati još sretniji kad je peon zazvonio posljednje zvono nekoliko minuta ranije.





To je bio scenarij prije 15 do 20 godina, ali sada su sve škole i fakulteti strogo vremenski ograničeni i zvona su automatizirana.

Autorova brza kapuljača iz djetinjstva / tinejdžera



Tijekom moje osnovne i srednje škole digitalni sat koji sam nosila bio je sinkroniziran sa školskim sustavom zvona s preciznošću od 1 sekunde.

Vikao bih 'zvono će zazvoniti za 5 sekundi' nakon što je zazvonilo svi studenti bulje u mene od iznenađenja, to se događa gotovo svaki dan. Neki dan ja i moji bliski prijatelji počnemo odbrojavati 10, 9, 8, 7 ... .. prije zadnjeg zvona.

Svi moji prijatelji kažu da je to čarobni ručni sat, ali nisu shvatili jednu jednostavnu činjenicu da je školsko zvono automatizirano. LOL!!

Napravit ćemo jedno takvo školsko / fakultetsko zvono koristeći Arduino.

Prikaz na Arduino Connection

Prikazi na Arduino vezama malo se razlikuju od onoga što ih obično povezujemo, ovdje korištene igle 9, 8, 7, 6, 5 i 4. Pin broj 2 i 3 koriste se kao hardverski prekid putem tipke .

Upotrijebite 10K potenciometar za podešavanje kontrasta za prikaz .

Arduino školsko zvono LCD

Automatski sustav zvona u školi / fakultetu pomoću Arduina

Detaljne informacije o vezama zvona i releja:

krug školskog zvona s Arduinom

AŽURIRANJE: A5 na SCL i A4 na SDA (ne A4 na SCK)

Modul sata u stvarnom vremenu

The Sat u stvarnom vremenu modul bilježi vrijeme čak i nakon dugog prekida napajanja. Za uključivanje i isključivanje zvona predviđen je relej od 9 V.

Priključite diodu 1N4007 u obrnutom smjeru preko releja (što nije prikazano u shemi) koja će apsorbirati štetni visokonaponski povratni EMF iz releja.

Napajajte krug pomoću a Zidni adapter od 9V / 500mA .

Tri tipke imaju jednu za ručno upravljanje zvonom u određenoj situaciji. Pritiskom na tipku 'izlaz' zaustavit ćete zvono nakon što ste ručno pozvonili.

'Gumb za onemogućavanje zvona' onemogućit će zvono zauvijek. Da biste ponovno omogućili zvono, pritisnite gumb 'Izlaz'.

Kako postaviti vrijeme na RTC modul:

Preuzmite RTC biblioteku:
Veza: github.com/PaulStoffregen/DS1307RTC

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

Učitajte program

Učitajte program u nastavku koji će postaviti vrijeme 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
}
//----------------------------------------------------//

Nakon učitavanja koda otvorite serijski monitor, on će reći da je vrijeme postavljeno.
Nakon što je gornji korak uspješno izveden, prijeđite na sljedeći.
Sada prenesite donji kod na Arduino.

Šifra glavnog 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------------//

Nakon prijenosa gornjeg koda na zaslonu biste trebali vidjeti vrijeme u satima.

Time je zaključen programski kod.

Kako se koristi ovaj automatski sustav zvona:

Učinite to s dovršenim postavljanjem hardvera.

1. Prvo prenesite kôd 'postavke vremena' i otvorite serijski monitor.
2. U glavnom programu postavite vrijeme u kojem se ovdje mora aktivirati relej.

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

• Postavite h1 u satima od 1 do 23 sata i m1 za minute od 0 do 59.
• Isto za h1 do h16 i m1 do m16.
• Ako želite onemogućiti neku vrijednost zvona, na primjer h = 0 i m = 0, na primjer: h5 = 0 i m5 = 0, nula će onemogućiti to posebno zvono.

3. Ovdje postavite vremensku dužinu zvona za uključivanje i isključivanje:

// --------------- duljina zvona u sekundama ------- //
const int Lenght = 3 // u sekundama

Prema zadanim postavkama vrijednost je postavljena na 3 sekunde. Kada stigne određeno vrijeme, relej bit će uključen na 3 sekunde i isključen. Promijenite ovo ako trebate.

4. Učitajte izmijenjeni kôd u Arduino.
5. Da biste onemogućili zvono, pritisnite 'gumb za onemogućavanje zvona'. Da biste ga ponovno omogućili, pritisnite tipku 'Exit'.
6. Za ručno zvonjenje pritisnite 'ručni prekidač za zvono', a za zaustavljanje pritisnite 'izlaz'.

Time je projekt završen, ako imate pitanja u vezi s ovim projektom, slobodno ih izrazite u odjeljku za komentare.




Prethodno: Izgradite ovog komarca bez baterije Dalje: Kako izraditi RFID sustav pohađanja