Arduino automatikus iskolai / főiskolai harangrendszer

Próbálja Ki A Műszerünket A Problémák Kiküszöbölésére





Ebben a bejegyzésben felépítünk egy automatikus iskolai csengő / főiskolai csengőrendszert Arduino, 16 x 2 kijelző és valós idejű óra modul használatával. Programozhatja ezt a projektet, hogy naponta akár 16-szor is csengessen a kívánt órában és percben. A harangszó hossza másodpercekben programozható.

Egyszerűbb verziót keres kódolás nélkül? Szerezd meg ITT



Áttekintés

Elmúltak azok a napok, amikor az iskolában egy pünkösdi rózsa csengetett „ón ón bádog ón” néven, és a diákok repülő színekkel szaladtak ki az iskola bejáratától. Néhányan még boldogabbá válhatnak, amikor a bazsarózsa néhány perccel korábban az utolsó csengőt csengette meg.

Ez volt a forgatókönyv 15-20 évvel ezelőtt, de most az összes iskola és főiskola szigorúan időhöz kötött és a harangok automatizáltak.



A szerző gyors gyermekkori / tizenéves kapucnivalja:

Általános és középiskolámban a digitális órát, amelyet viseltem, 1 másodperc pontossággal szinkronizáltuk az iskola harangrendszerével.

Azt kiáltanám, hogy „5 másodperc múlva megszólal a csengő”, miután megszólalt a csengő, minden diák meglepetten bámul rám, ez szinte minden nap előfordul. Egy napon én és közeli barátaim elkezdünk visszaszámolni 10, 9, 8, 7 ... .. az utolsó csengő előtt.

Minden barátom azt mondja, hogy ez egy varázslatos karóra, de egyetlen egyszerű tényt sem vettek észre, hogy az iskolai csengő automatizált. LOL !!

Egy ilyen iskolai / főiskolai csengőt fogunk készíteni az Arduino segítségével.

Megjelenítés az Arduino csatlakozáshoz

Az Arduino kapcsolatok megjelenítése kissé eltér attól, amit általában bekötünk, az itt használt 9, 8, 7, 6, 5 és 4 csapok. A 2-es és 3-as tűt hardveres megszakításként használják nyomógombok .

Használja a 10K-t potenciométer a kontraszt beállításához kijelző .

Arduino iskolai csengő LCD

Automatikus iskolai / főiskolai harangrendszer az Arduino használatával

Részletes információk a csengő és a relé csatlakozásáról:

iskolai harang időzítő áramkör Arduinóval

FRISSÍTÉS: A5 - SCL és A4 - SDA (nem A4 - SCK)

Valós idejű óra modul

Az Valós idejű óra modul hosszú áramkimaradás után is nyomon követi az időt. A csengő be- és kikapcsolásához 9 V-os relé található.

Csatlakoztasson egy 1N4007 diódát fordított előfeszítéssel a relére (amely a vázlaton nem látható), amely elnyeli a káros nagyfeszültségű vissza EMF-et a reléből.

Tápellátás az áramkörön a 9V / 500mA fali adapter .

Három nyomógomb található, az egyik a csengő kézi működtetéséhez bizonyos esetekben. A „kilépés” gomb megnyomásával a csengő leáll, miután a csengőt kézzel csengette meg.

A „harang letiltása” gomb örökre letiltja a csengőt. A csengő újbóli engedélyezéséhez nyomja meg az “Exit” gombot.

Az idő beállítása az RTC modulra:

Töltse le az RTC könyvtárat:
Link: github.com/PaulStoffregen/DS1307RTC

-------------------------------------------------- ---------------
Letöltés timeLib.h:
github.com/PaulStoffregen/Time
-------------------------------------------------- ----------------

Töltse fel a programot

Töltse fel az alábbi programot, amely beállítja az időt az RTC-re

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

A kód feltöltése után nyissa meg a soros monitort, amely azt mondja, hogy az idő be van állítva.
A fenti lépés sikeres végrehajtása után lépjen a következőre.
Most töltse fel az alábbi kódot az Arduino-ra.

Fő programkód:

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

A fenti kód feltöltése után a kijelzőn órákban látható időt kell látnia.

Ezzel befejeződik a programkód.

Az automatikus harangrendszer használata:

Ezt a hardver befejezésével végezze el.

1. Töltse fel először az „időbeállítás” kódot, és nyissa meg a soros monitort.
2. A fő programban itt állítsa be azt az időpontot, amikor a relét be kell kapcsolni.

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

• Állítsa be a h1 órákban 1 és 23 óra között, az m1 pedig perc alatt 0 és 59 között.
• Ugyanaz a h1-h16 és m1-m16 esetén.
• Ha ki akarja tiltani néhány harang hagyási értéket, például h = 0 és m = 0: h5 = 0 és m5 = 0, akkor a nulla letiltja az adott csengőt.

3. Itt állítsa be a csengő be- és kikapcsolásának időtartamát:

// --------------- harangszó másodpercek alatt ------- //
const int Hossz = 3 // másodpercben

Alapértelmezés szerint az érték 3 másodpercre van beállítva. A beállított idő elérésekor a relé 3 másodpercre bekapcsol és kikapcsol. Ha szükséges, változtassa meg ezt.

4. Töltse fel a módosított kódot az Arduino-ra.
5. A csengő kikapcsolásához nyomja meg a „csengő letiltása gombot”. Az újbóli engedélyezéshez nyomja meg az “Exit” gombot.
6. A csengő kézi megnyomásához nyomja meg a „kézi csengő kapcsolót”, a csengő leállításához nyomja meg a „kilépés” gombot.

Ezzel befejeződik a projekt, ha bármilyen kérdése van a projekttel kapcsolatban, nyugodtan fejtse ki a megjegyzés részben.




Előző: Építsd meg ezt a szúnyogütőt akkumulátor nélkül Következő: Hogyan készítsünk RFID alapú jelenléti rendszert