Ардуино аутоматски систем звона за школу / факултет

Испробајте Наш Инструмент За Елиминисање Проблема





У овом посту ћемо конструисати аутоматски систем школског звона / звона за факултете користећи Ардуино, дисплеј 16 к 2 и модул сата сата у реалном времену. Овај пројекат можете програмирати да звони до 16 пута дневно у жељени сат и минут. Дужина звона може се програмирати у секундама.

Тражите једноставнију верзију без кодирања? Схвати ОВДЕ



Преглед

Прошло је време када је један човек у школи зазвонио „лимени лим лимени лим“ и ученици су истрчали са улаза у школу у летећим бојама. Неки ће можда бити још срећнији када је пеон зазвонио последње звоно неколико минута раније.

Ово је био сценарио пре 15 до 20 година, али сада су све школе и факултети строго временски ограничени и звона су аутоматизована.



Ауторска брза капуљача из детињства / тинејџера памти:

Током моје основне и средње школе дигитални сат који сам носила био је синхронизован са школским системом звона са прецизношћу од 1 секунде.

Викао бих „звоно ће зазвонити за 5 секунди“, након што је зазвонило сви студенти су ме изненађено буљили, то се догађа скоро сваки дан. Једног дана ја и моји блиски пријатељи почињемо одбројавати 10, 9, 8, 7 ... .. пре последњег звона.

Сви моји пријатељи кажу да је то магични ручни сат, али нису схватили ни једну једноставну чињеницу да је школско звоно аутоматизовано. ЛОЛ!!

Направићемо једно такво школско / факултетско звоно користећи Ардуино.

Прикажите Ардуино везу

Прикази на Ардуино везама се мало разликују од онога што их обично повезујемо, пинови 9, 8, 7, 6, 5 и 4 који се овде користе. Пин број 2 и 3 се користе као хардверски прекид путем тастери .

Користите 10К потенциометар за подешавање контраста за приказ .

ЛЦД Ардуино школско звоно

Аутоматски систем звона у школи / факултету помоћу Ардуина

Детаљне информације у вези са звоном и релејним везама:

школско коло тајмера са Ардуином

АЖУРИРАЊЕ: А5 на СЦЛ и А4 на СДА (не А4 на СЦК)

Модул сата у реалном времену

Тхе Сат у реалном времену модул бележи време чак и након дугог прекида напајања. За укључивање и искључивање звона предвиђен је релеј од 9 В.

Прикључите диоду 1Н4007 у обрнутом положају преко релеја (што није приказано на шеми) која ће апсорбовати штетни високонапонски повратни ЕМФ из релеја.

Напајајте коло помоћу а 9В / 500мА зидни адаптер .

Три тастера су обезбеђена једним за ручно управљање звоном у одређеној ситуацији. Притиском на дугме „излаз“ зауставиће се звоно након ручног звона.

„Дугме за онемогућавање звона“ ће заувек онемогућити звоно. Да бисте поново омогућили звоно, притисните дугме „Излаз“.

Како подесити време за РТЦ модул:

Преузмите РТЦ библиотеку:
Веза: гитхуб.цом/ПаулСтоффреген/ДС1307РТЦ

-------------------------------------------------- ---------------
Преузмите тимеЛиб.х:
гитхуб.цом/ПаулСтоффреген/Тиме
-------------------------------------------------- ----------------

Отпремите програм

Отпремите програм испод који ће поставити време на РТЦ

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

Након отпремања кода, отворите серијски монитор, писаће да је време постављено.
Када се горенаведени корак успешно заврши, пређите на следећи.
Сада отпремите доњи код у Ардуино.

Шифра главног програма:

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

Након отпремања горњег кода, на екрану треба да видите време у сатима.

Тиме је закључен програмски код.

Како се користи овај аутоматски систем звона:

Урадите то са завршеним подешавањем хардвера.

1. Прво отпремите код за подешавање времена и отворите серијски монитор.
2. У главном програму подесите време у којем се релеј овде мора активирати.

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

• Поставите х1 у сатима од 1 до 23 сата и м1 за неколико минута од 0 до 59.
• Исто за х1 до х16 и м1 до м16.
• Ако желите да онемогућите неку вредност звона која оставља х = 0 и м = 0, на пример: х5 = 0 и м5 = 0, нула ће онемогућити то посебно звоно.

3. Овде подесите временску дужину звона за укључивање и искључивање:

// --------------- дужина звона у секундама ------- //
цонст инт Ленгхт = 3 // у секундама

Подразумевано је вредност подешена на 3 секунде. Када стигне одређено време, релеј биће укључено на 3 секунде и искључено. Промените ово ако вам треба.

4. Пошаљите измењени код на Ардуино.
5. Да бисте онемогућили звоно, притисните „дугме за онемогућавање звона“. Да бисте је поново омогућили, притисните дугме „Екит“ (Излаз).
6. Да бисте ручно позвонили, притисните „ручни прекидач“, а да бисте зауставили звоно притисните „екит“.

Тиме је пројекат завршен, ако имате питања у вези са овим пројектом, слободно их изразите у одељку за коментаре.




Претходно: Направите овог комарца без батерије Следеће: Како направити РФИД систем присуства