Arduino Automatic School / College Bell System

Prøv Instrumentet Vårt For Å Eliminere Problemer





I dette innlegget skal vi konstruere et automatisk skoleklokke- / høyskoleklokke-system ved hjelp av Arduino, 16 x 2-skjerm og sanntidsklokke-modul. Du kan programmere dette prosjektet til å ringe klokken opptil 16 ganger om dagen på ønsket time og minutt. Lengden på ringesignalet kan programmeres på få sekunder.

Leter du etter en enklere versjon uten koding? Skjønner HER



Oversikt

Borte er dagene da en peon på en skole ringte på 'tin tin' og elevene løp ut av skolens inngang med glans. Noen kan bli enda lykkeligere da peonen ringte den siste bjellen noen minutter tidligere.

Dette var scenariet for 15 til 20 år siden, men nå er alle skolene og høyskolene strengt tidsbundet, og klokkene blir automatisert.



Husk:

I løpet av barneskolen og ungdomsskolen ble den digitale klokken jeg hadde på, synkronisert med skolens klokkesystem med 1 sekunders presisjon.

Jeg vil rope 'klokken kommer til å ringe om 5 sekunder' etter at klokken ringte, stirret alle studenter på meg med overraskelse, dette skjer nesten hver dag. En dag begynner jeg og mine nære venner å telle ned 10, 9, 8, 7 ... før den siste klokka.

Alle vennene mine sier at det er et magisk armbåndsur, men de skjønte ikke ett enkelt faktum at skoleklokken var automatisert. LOL !!

Vi skal lage en slik skole / høyskoleklokke ved hjelp av Arduino.

Skjerm til Arduino-tilkobling

Skjermen til Arduino-tilkoblinger er litt forskjellige fra det vi kabler dem vanligvis, pinnene 9, 8, 7, 6, 5 og 4 som brukes her. Pin nummer 2 og 3 brukes som maskinvareavbrudd via trykke knapper .

Bruk 10K potensiometer for å justere kontrasten for vise .

Arduino skoleklokke LCD

Automatisk skole / høyskoleklokkesystem ved hjelp av Arduino

Detaljert informasjon om bjelle- og reléforbindelser:

skoleklokke-timer krets med Arduino

OPPDATERING: A5 til SCL og A4 til SDA (ikke A4 til SCK)

Modul for sanntidsklokke

De Sanntidsklokke modulen holder styr på tiden selv etter lang strømavbrudd. Et 9V-relé er gitt for å slå av og på klokken.

Vennligst koble en 1N4007-diode i omvendt forspenning over reléet (som ikke er vist i skjemaet) som vil absorbere skadelig høyspennings-EMF fra reléet.

Strøm kretsen med en 9V / 500mA veggadapter .

Tre trykknapper er gitt en for manuell betjening av klokken under en situasjon. Ved å trykke på “exit” -knappen stoppes bjellen etter at man har ringt på bjellen manuelt.

'Bell disable button' vil deaktivere klokken for alltid. For å aktivere klokken på nytt, trykk på “Avslutt” -knappen.

Hvordan stille inn tid til RTC-modul:

Last ned RTC-biblioteket:
Lenke: github.com/PaulStoffregen/DS1307RTC

-------------------------------------------------- ---------------
Last ned timeLib.h:
github.com/PaulStoffregen/Time
-------------------------------------------------- ----------------

Last opp programmet

Last opp programmet nedenfor som vil sette tiden til 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
}
//----------------------------------------------------//

Etter at du har lastet opp koden, åpner du den serielle skjermen, den vil si at tiden er satt.
Når trinnet ovenfor er fullført, går du videre til neste.
Last nå opp koden nedenfor til Arduino.

Hovedprogram Kode:

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

Etter at du har lastet opp koden ovenfor, bør du se tiden i timer på skjermen.

Det avslutter programkoden.

Slik bruker du dette automatiske bjellsystemet:

Gjør dette med fullført maskinvareoppsett.

1. Last opp 'tidsinnstilling' -koden først og åpne den serielle skjermen.
2. I hovedprogrammet angir du tidspunktet da reléet må utløses her.

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

• Still h1 i timer fra 1 til 23 timer og m1 i minutter fra 0 til 59.
• Samme for h1 til h16 og m1 til m16.
• Hvis du for eksempel vil deaktivere noen bell-verdier h = 0 og m = 0, for eksempel: h5 = 0 og m5 = 0, vil null deaktivere den aktuelle bjellen.

3. Still inn tidslengden for klokken som skal slås på og av, her:

// --------------- ringeklokke lengde i sekunder ------- //
const int Lengde = 3 // i sekunder

Som standard er verdien satt i 3 sekunder. Når den angitte tiden er ankommet, stafett slås på i 3 sekunder og slås av. Endre dette hvis du trenger det.

4. Last opp den modifiserte koden til Arduino.
5. For å deaktivere klokken, trykk på “bell disable button”. For å aktivere på nytt, trykk “Avslutt” -knappen.
6. For å ringe ringeklokken manuelt, trykk på “manuell klokkebryter” og for å stoppe klokken trykk “exit”.

Det avslutter prosjektet, hvis du har spørsmål angående dette prosjektet, er du velkommen til å uttrykke det i kommentarseksjonen.




Forrige: Bygg denne myggbatten uten batteri Neste: Hvordan lage et RFID-basert fremmøtesystem