Arduino Automatic School / College Bell System

Kokeile Instrumenttia Ongelmien Poistamiseksi





Tässä viestissä aiomme rakentaa automaattisen koulukellon / korkeakoulun kellojärjestelmän käyttämällä Arduino, 16 x 2 -näyttöä ja reaaliaikakellomoduulia. Voit ohjelmoida tämän projektin soittamaan kelloa jopa 16 kertaa päivässä haluamallasi tunnilla ja minuutilla. Soittokellon pituus voidaan ohjelmoida sekunteina.

Etsitkö yksinkertaisempaa versiota ilman koodausta? Hanki se TÄSSÄ



Yleiskatsaus

Menneet ovat päivät, jolloin pioni koulussa soitti soittokelloa ”tina tinaa” ja oppilaat juoksivat koulun sisäänkäynniltä leivinvärisinä. Jotkut saattavat tulla vielä onnellisemmiksi, kun pioni soi viimeisen kellon muutama minuutti aikaisemmin.

Tämä oli skenaario 15-20 vuotta sitten, mutta nyt kaikki koulut ja korkeakoulut ovat tiukasti ajallisesti sidottuja ja kellot ovat automatisoituja.



Kirjoittajan nopea lapsuuden / teini-ikäinen huppu muistaa:

Ala- ja yläasteessani digitaalinen kello, jota käytin, synkronoitiin koulun kellojärjestelmän kanssa yhden sekunnin tarkkuudella.

Huusin: 'soittokello soi 5 sekunnissa', kun soittokello soi, kaikki opiskelijat tuijottivat minua yllätyksellä, tämä tapahtuu melkein joka päivä. Jonakin päivänä minä ja läheiset ystäväni alkavat laskea 10, 9, 8, 7 ... ennen viimeistä kelloa.

Kaikki ystäväni sanovat, että se on taika-rannekello, mutta he eivät huomanneet yhtä yksinkertaista tosiasiaa, että koulukello oli automatisoitu. LOL!!

Aiomme tehdä yhden tällaisen koulukellon Arduinolla.

Näyttö Arduino-yhteyteen

Arduino-yhteyksien näyttö on hieman erilainen kuin mitä johdotamme yleensä, tässä käytettävät nastat 9, 8, 7, 6, 5 ja 4. Tappilukuja 2 ja 3 käytetään laitteiston keskeytyksenä painikkeet .

Käytä 10K potentiometri kuvan kontrastin säätämiseen näyttö .

Arduinon koulukello LCD

Automaattinen koulu- / oppilaitoskellojärjestelmä Arduinoa käyttämällä

Yksityiskohtaiset tiedot soitto- ja releyhteyksistä:

koulukellon ajastinpiiri Arduinon kanssa

PÄIVITYS: A5 - SCL ja A4 - SDA (ei A4 - SCK)

Reaaliaikainen kellomoduuli

Reaaliaikainen kello moduuli pitää ajan tasalla jopa pitkän virtakatkoksen jälkeen. Kellon kytkemiseksi päälle ja pois päältä on 9 V: n rele.

Liitä 1N4007-diodi päinvastaisessa esijännitteessä releen yli (jota ei ole esitetty kaaviossa), mikä absorboi haitallisen korkeajännitteisen takaisin EMF: n releestä.

Virta virtapiiriin a 9V / 500mA seinäadapteri .

Kolme painonappia on yksi kellon manuaaliseen käyttämiseen tilanteessa. Poistu-painikkeen painaminen lopettaa soittokellon soittamisen jälkeen manuaalisesti.

'Kellon poistopainike' poistaa kellon käytöstä ikuisesti. Ota kello uudelleen käyttöön painamalla “Exit” -painiketta.

Kuinka asettaa aika RTC-moduulille:

Lataa RTC-kirjasto:
Linkki: github.com/PaulStoffregen/DS1307RTC

-------------------------------------------------- ---------------
LatausaikaLib.h:
github.com/PaulStoffregen/Time
-------------------------------------------------- ----------------

Lataa ohjelma

Lataa alla oleva ohjelma, joka asettaa ajan RTC: lle

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

Kun olet ladannut koodin, avaa sarjamonitori, siinä sanotaan, että aika on asetettu.
Kun yllä oleva vaihe on suoritettu, siirry seuraavaan.
Lataa nyt alla oleva koodi Arduinoon.

Pääohjelmakoodi:

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

Kun olet ladannut yllä olevan koodin, sinun pitäisi nähdä aika tunteina näytöllä.

Se päättää ohjelmakoodin.

Kuinka käyttää tätä automaattista soittojärjestelmää:

Tee tämä laitteiston kokoonpanon valmistuttua.

1. Lataa ensin ”aika-asetuskoodi” ja avaa sarjavalvonta.
2. Aseta pääohjelmassa aika, jona rele on käynnistettävä.

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

• Aseta h1 tunteina 1 - 23 tunniksi ja m1 minuutteina 0 - 59.
• Sama h1 - h16 ja m1 - m16.
• Jos haluat poistaa käytöstä jonkin soittokellon jättöarvon h = 0 ja m = 0, esimerkiksi: h5 = 0 ja m5 = 0, nolla poistaa kyseisen kellon käytöstä.

3. Määritä kellon käynnistys- ja sammutusajan pituus tässä:

// --------------- soittokellon pituus sekunneissa ------- //
const int Pituus = 3 // sekunneissa

Oletuksena arvo asetetaan 3 sekunniksi. Kun asetettu aika on saapunut, rele kytketään päälle 3 sekunniksi ja sammuu. Muuta tätä tarvittaessa.

4. Lataa muokattu koodi Arduinoon.
5. Voit poistaa soittokellon käytöstä painamalla “soittokello pois päältä” -painiketta. Ota uudelleen käyttöön painamalla “Poistu” -painiketta.
6. Soittamaan kelloa manuaalisesti paina “manuaalista kellokytkintä” ja pysäytä kello painamalla “exit”.

Se päättää projektin, jos sinulla on kysyttävää tästä projektista, voit ilmaista sen kommenttiosassa.




Edellinen: Rakenna tämä hyttysseppu ilman akkua Seuraava: Kuinka tehdä RFID-pohjainen osallistumisjärjestelmä