Автоматична система за звънене в училище / колеж Arduino

Опитайте Нашия Инструмент За Премахване На Проблемите





В тази публикация ще изградим автоматична система за звънец / звънец за колеж, използвайки Arduino, 16 x 2 дисплей и часовник в реално време. Можете да програмирате този проект да звъни до 16 пъти на ден в предпочитаните от вас час и минута. Дължината на камбаната може да бъде програмирана за секунди.

Търсите по-проста версия без кодиране? Вземи го ТУК



Общ преглед

Отминаха дните, когато човек в училище звънна на камбаната „калай калай калай“ и учениците избягаха от входа на училище с разцветки. Някои може да станат още по-щастливи, когато пеонът удари последния звънец няколко минути по-рано.

Това беше сценарият преди 15 до 20 години, но сега всички училища и колежи са строго обвързани и камбаните са автоматизирани.



Авторска бърза детска / тийнейджърска качулка помни:

По време на основното и средното ми училище дигиталният часовник, който носех, беше синхронизиран със звънчевата система на училище с точност 1 секунда.

Бих извикал „камбаната ще звъни след 5 секунди“, след като звънецът иззвъня, всички ученици ме зяпат с изненада, това се случва почти всеки ден. Някой ден аз и моите близки приятели започваме да броим 10, 9, 8, 7 ... ..преди последната камбана.

Всички мои приятели казват, че това е магически ръчен часовник, но те не осъзнаха един прост факт, че училищната камбана е автоматизирана. LOL !!

Ще направим една такава камбана в училище / колеж, използвайки Arduino.

Показване на Arduino Connection

Дисплеят към връзките на Arduino са малко по-различни от това, което обикновено ги свързваме, използваните тук пинове 9, 8, 7, 6, 5 и 4. ПИН номер 2 и 3 се използват като хардуерно прекъсване чрез бутони .

Използвайте 10K потенциометър за регулиране на контраста за дисплей .

Arduino училищен звънец LCD

Автоматична система за звънец в училище / колеж, използваща Arduino

Подробна информация относно връзките между звънец и реле:

верига на училищния звънец с Arduino

АКТУАЛИЗАЦИЯ: A5 към SCL и A4 към SDA (не A4 към SCK)

Часовник в реално време

The Часовник в реално време модул следи времето дори след дълго спиране на тока. За включване и изключване на камбаната е предвидено 9V реле.

Моля, свържете диод 1N4007 в обратен отклонение през релето (което не е показано в схемата), който ще абсорбира вредните ЕРП с високо напрежение от релето.

Захранвайте веригата с помощта на a 9V / 500mA адаптер за стена .

Предвидени са три бутона за ръчно управление на звънеца по време на някаква ситуация. Натискането на бутона „изход“ ще спре звънеца след ръчно позвъняване.

„Бутонът за деактивиране на камбаната“ ще деактивира камбаната завинаги. За да активирате отново камбаната, натиснете бутона „Изход“.

Как да настроите времето за RTC модул:

Изтеглете RTC библиотеката:
Връзка: github.com/PaulStoffregen/DS1307RTC

-------------------------------------------------- ---------------
Изтеглете timeLib.h:
github.com/PaulStoffregen/Time
-------------------------------------------------- ----------------

Качете програмата

Качете програмата по-долу, която ще зададе времето за 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
}
//----------------------------------------------------//

След като качите кода, отворете серийния монитор, той ще каже, че времето е зададено.
След като горната стъпка бъде изпълнена успешно, преминете към следващата.
Сега качете кода по-долу в Arduino.

Основен код на програмата:

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

• Задайте h1 за часове от 1 до 23 часа и m1 за минути от 0 до 59.
• Същото за h1 до h16 и m1 до m16.
• Ако искате да деактивирате някаква стойност на звънеца h = 0 и m = 0, например: h5 = 0 и m5 = 0, нулата ще деактивира конкретната камбана.

3. Задайте продължителността на времето за включване и изключване на камбаната тук:

// --------------- дължина на звънеца за секунди ------- //
const int Lenght = 3 // за секунди

По подразбиране стойността е зададена за 3 секунди. Когато пристигне зададеното време, реле ще се включи за 3 секунди и се изключи. Променете това, ако имате нужда.

4. Качете модифицирания код в Arduino.
5. За да деактивирате камбаната, натиснете „бутон за деактивиране на камбаната“. За да активирате отново, натиснете бутона „Изход“.
6. За да позвъните ръчно на звънеца, натиснете „превключвателя за ръчен звънец“ и за спиране на звънеца натиснете „изход“.

С това проектът приключва, ако имате въпроси по този проект, не се колебайте да изразите в раздела за коментари.




Предишна: Изградете тази комарна бухалка без батерия Напред: Как да направя RFID базирана система за присъствие