Arduino Awtomatikong Paaralan / College Bell System

Subukan Ang Aming Instrumento Para Sa Pagtanggal Ng Mga Problema





Sa post na ito ay magtatayo kami ng isang awtomatikong sistema ng kampanilya / kampana kampanilya gamit ang Arduino, 16 x 2 display at module ng real time na orasan. Maaari mong i-program ang proyektong ito upang mag-ring ng bell hanggang sa 16 beses sa isang araw sa iyong ginustong oras at minuto. Ang haba ng ring ng kampanilya ay maaaring mai-program sa ilang segundo.

Naghahanap para sa isang mas simpleng bersyon nang walang pag-coding? Kunin mo DITO



Pangkalahatang-ideya

Nawala ang mga araw, nang ang isang peon sa isang paaralan ay tumunog ng kampanilya na 'lata ng lata' at ang mga estudyante ay tumakbo palabas ng pasukan ng paaralan na may mga kulay na lumilipad. Ang ilan ay maaaring maging mas masaya kapag ang peon ay tumunog sa huling kampanilya ilang minuto mas maaga.

Ito ang senaryo 15 hanggang 20 taon na ang nakalilipas, ngunit ngayon lahat ng mga paaralan at kolehiyo ay mahigpit na nakagapos ng oras at ang mga kampanilya ay awtomatiko.



Naaalala ng mabilis na pagkabata / teenage hood ng may-akda:

Sa panahon ng aking pang-elementarya at sekondarya na paaralan ang digital na relo na isinusuot ko ay na-synchronize sa system ng kampanilya na may 1 segundo na katumpakan.

Sisigaw ako 'ang kampana ay tatunog sa loob ng 5 segundo' pagkatapos ng tunog ng kampana lahat ng mga mag-aaral ay nakatitig sa akin na may sorpresa, nangyayari ito halos araw-araw. Sa ilang araw ako at ang aking mga malapit na kaibigan ay nagsisimulang magbilang ng 10, 9, 8, 7… .. bago ang huling kampana.

Sinasabi ng lahat ng aking mga kaibigan na ito ay isang relo ng mahiwagang pulso, ngunit hindi nila napagtanto ang isang simpleng katotohanan na ang kampanilya ng paaralan ay awtomatiko. LOL!!

Gagawa kami ng isang tulad ng kampana sa paaralan / kolehiyo gamit ang Arduino.

Ipakita sa Arduino Connection

Ang display sa mga koneksyon sa Arduino ay bahagyang naiiba mula sa kung ano ang kawad natin sa kanila dati, ang mga pin na 9, 8, 7, 6, 5 at 4 na ginamit dito. Ang pin number 2 at 3 ay ginagamit bilang hardware makagambala sa pamamagitan ng pindutan ng push .

Gamitin ang 10K potensyomiter para sa pag-aayos ng kaibahan para sa ipakita .

LCD ng paaralan sa Arduino

Awtomatikong School / College Bell System Paggamit ng Arduino

Detalyadong Impormasyon Tungkol sa Mga Koneksyon sa Bell at Relay:

bell ng circuit ng paaralan kasama ang Arduino

I-UPDATE: A5 hanggang SCL at A4 sa SDA (Hindi A4 hanggang SCK)

Modyul ng Orihinal na Oras

Ang Oras ng totoong oras Sinusubaybayan ng module ang track ng oras kahit na matapos ang mahabang pagputol ng kuryente. Ibinibigay ang isang 9V relay para sa paglipat at pag-off ng kampanilya.

Mangyaring ikonekta ang isang 1N4007 diode sa reverse bias sa kabuuan ng relay (na hindi ipinakita sa eskematiko) na sumisipsip ng mapanganib na mataas na boltahe pabalik na EMF mula sa relay.

Paganahin ang circuit gamit ang a 9V / 500mA wall adapter .

Tatlong mga pindutan ng push ang ibinigay ng isa para sa manu-manong pagpapatakbo ng kampanilya sa ilang sitwasyon. Ang pagpindot sa pindutang 'exit' ay titigil sa kampanilya pagkatapos ng manu-manong pag-ring ng kampanilya.

Ang 'bell disable button' ay hindi magpapagana ng bell magpakailanman. Upang muling paganahin ang kampanilya pindutin ang pindutang 'Exit'.

Paano magtakda ng oras sa module ng RTC:

I-download ang RTC library:
Link: github.com/PaulStoffregen/DS1307RTC

---- ------------
Mag-download ng timeLib.h:
github.com/PaulStoffregen/Time
---- ----------------

I-upload ang Program

I-upload ang programa sa ibaba na magtatakda ng oras sa 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
}
//----------------------------------------------------//

Matapos i-upload ang code, buksan ang serial monitor, sasabihin nito na ang oras ay itinakda.
Kapag ang hakbang sa itaas ay nagawa matagumpay na magpatuloy sa susunod.
Ngayon i-upload ang code sa ibaba sa Arduino.

Pangunahing Code ng programa:

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

Matapos ang pag-upload ng code sa itaas dapat mong makita ang oras sa mga oras sa display.

Tinatapos nito ang code ng programa.

Paano magagamit ang sistemang Awtomatikong kampanilya na ito:

Gawin ito sa kumpletong pag-setup ng hardware.

1. I-upload muna ang code na 'setting ng oras' at buksan ang serial monitor.
2. Sa pangunahing programa itakda ang oras kung saan ang relay ay kailangang ma-trigger dito.

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

• Itakda ang h1 sa oras mula 1 hanggang 23 oras at m1 sa minuto mula 0 hanggang 59.
• Pareho para sa h1 hanggang h16 at m1 hanggang m16.
• Kung nais mong huwag paganahin ang ilang halaga ng pag-iwan ng kampanilya h = 0 at m = 0 halimbawa: h5 = 0 at m5 = 0, zero ang hindi magpapagana ng partikular na kampanilya.

3. Itakda ang haba ng oras para ma-on at i-off ang tagal ng bell, dito:

// ----------------- bell bell haba ng ilang segundo ------- //
Const int Lenght = 3 // sa mga segundo

Bilang default ang halaga ay itinakda sa loob ng 3 segundo. Pagdating ng itinakdang oras ang relay bubuksan sa loob ng 3 segundo at papatayin. Baguhin ito kung kailangan mo.

4. I-upload ang binagong code sa Arduino.
5. Upang hindi paganahin ang kampanilya pindutin ang 'bell huwag paganahin ang pindutan'. Upang muling paganahin ang pindutang 'Exit'.
6. Upang manu-manong mag-ring ang kampanilya pindutin ang 'manu-manong paglipat ng kampanilya' at upang itigil ang pindutin ang kampanilya 'exit'.

Tinapos nito ang proyekto, kung mayroon kang anumang mga katanungan tungkol sa proyektong ito huwag mag-atubiling ipahayag sa seksyon ng komento.




Nakaraan: Buuin ang Mosquito Bat na ito nang walang baterya Susunod: Paano Gumawa ng isang RFID batay sa Attendance System