Arduino Automatic School / College Bell System

Δοκιμάστε Το Όργανο Μας Για Την Εξάλειψη Των Προβλημάτων





Σε αυτήν την ανάρτηση πρόκειται να κατασκευάσουμε ένα αυτόματο σύστημα κουδουνιών σχολείου / καμπάνιας χρησιμοποιώντας το Arduino, οθόνη 16 x 2 και μονάδα ρολογιού πραγματικού χρόνου. Μπορείτε να προγραμματίσετε αυτό το έργο για να χτυπήσετε το κουδούνι έως και 16 φορές την ημέρα την ώρα και το λεπτό που προτιμάτε. Το μήκος του κουδουνιού μπορεί να προγραμματιστεί σε δευτερόλεπτα.

Ψάχνετε για μια απλούστερη έκδοση χωρίς κωδικοποίηση; Πάρτε το ΕΔΩ



ΣΦΑΙΡΙΚΗ ΕΙΚΟΝΑ

Πέρασαν οι μέρες, όταν ένας μαθητής σε ένα σχολείο χτύπησε το κουδούνι «κασσίτερος κασσίτερου» και οι μαθητές έτρεξαν έξω από την είσοδο του σχολείου με ιπτάμενα χρώματα. Μερικοί μπορεί να γίνουν ακόμη πιο ευτυχισμένοι όταν ο peon χτύπησε το τελευταίο κουδούνι λίγα λεπτά νωρίτερα.

Αυτό ήταν το σενάριο πριν από 15 έως 20 χρόνια, αλλά τώρα όλα τα σχολεία και τα κολέγια είναι αυστηρά χρονικά δεσμευμένα και οι καμπάνες είναι αυτοματοποιημένες.



Η γρήγορη παιδική / εφηβική κουκούλα του συγγραφέα θυμάται:

Κατά τη διάρκεια της πρωτοβάθμιας και δευτεροβάθμιας εκπαίδευσης, το ψηφιακό ρολόι που φορούσα συγχρονίστηκε με το σύστημα κουδουνιών του σχολείου με ακρίβεια 1 δευτερολέπτου.

Φώναζα «το κουδούνι θα χτυπήσει σε 5 δευτερόλεπτα» αφού χτύπησε το κουδούνι όλοι οι μαθητές με κοίταζαν με έκπληξη, αυτό συμβαίνει σχεδόν κάθε μέρα. Κάποια μέρα εγώ και οι στενοί μου φίλοι αρχίζω να μετράω 10, 9, 8, 7… .. πριν από το τελευταίο κουδούνι.

Όλοι οι φίλοι μου λένε ότι είναι ένα μαγικό ρολόι στον καρπό, αλλά δεν συνειδητοποίησαν ένα απλό γεγονός ότι το κουδούνι του σχολείου ήταν αυτοματοποιημένο. ΧΑΧΑΧΑ!!

Θα κάνουμε ένα τέτοιο κουδούνι σχολείου / κολεγίου χρησιμοποιώντας το Arduino.

Εμφάνιση σε σύνδεση Arduino

Η οθόνη στις συνδέσεις Arduino είναι ελαφρώς διαφορετική από αυτήν που συνήθως συνδέουμε, οι ακίδες 9, 8, 7, 6, 5 και 4 χρησιμοποιούνται εδώ. Οι αριθμοί ακίδων 2 και 3 χρησιμοποιούνται ως υλικό διακοπής μέσω μπουτόν .

Χρησιμοποιήστε το 10K ποτενσιόμετρο για ρύθμιση της αντίθεσης για το απεικόνιση .

LCD κουδούνι Arduino

Αυτόματο σύστημα κουδουνιών σχολείου / κολλεγίου με χρήση του Arduino

Λεπτομερείς πληροφορίες σχετικά με τις συνδέσεις κουδουνιών και ρελέ:

κύκλωμα χρονοδιακόπτη σχολικής καμπάνιας με Arduino

ΕΝΗΜΕΡΩΣΗ: A5 έως SCL και A4 έως SDA (Όχι A4 έως SCK)

Ενότητα ρολογιού σε πραγματικό χρόνο

ο Ρολόι πραγματικού χρόνου Η μονάδα διατηρεί την παρακολούθηση του χρόνου ακόμα και μετά από μεγάλη διακοπή ρεύματος. Παρέχεται ρελέ 9V για την ενεργοποίηση και απενεργοποίηση του κουδουνιού.

Συνδέστε μια δίοδο 1N4007 σε αντίστροφη μεροληψία στο ρελέ (που δεν φαίνεται στο σχηματικό) που θα απορροφήσει επιβλαβές EMF πίσω υψηλής τάσης από το ρελέ.

Τροφοδοτήστε το κύκλωμα χρησιμοποιώντας ένα Προσαρμογέας τοίχου 9V / 500mA .

Τρία κουμπιά παρέχονται ένα για χειροκίνητη λειτουργία του κουδουνιού σε κάποια κατάσταση. Πατώντας το κουμπί «έξοδος» θα σταματήσει το κουδούνι αφού χτυπήσει χειροκίνητα το κουδούνι.

Το 'κουμπί απενεργοποίησης κουδουνιού' θα απενεργοποιήσει το κουδούνι για πάντα. Για να ενεργοποιήσετε ξανά το κουδούνι πατήστε το κουμπί 'Έξοδος'.

Πώς να ρυθμίσετε το χρόνο στη μονάδα RTC:

Λήψη της βιβλιοθήκης RTC:
Σύνδεσμος: github.com/PaulStoffregen/DS1307RTC

-------------------------------------------------- ---------------
Λήψη timeLib.h:
github.com/PaulStoffregen/Χρόνος
-------------------------------------------------- ----------------

Ανεβάστε το πρόγραμμα

Ανεβάστε το παρακάτω πρόγραμμα που θα ορίσει την ώρα σε 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 Μήκος = 3 // σε δευτερόλεπτα

Από προεπιλογή, η τιμή ορίζεται για 3 δευτερόλεπτα. Όταν φτάσει ο καθορισμένος χρόνος το αναμετάδοση θα ενεργοποιηθεί για 3 δευτερόλεπτα και θα απενεργοποιηθεί. Αλλάξτε αυτό εάν χρειάζεστε.

4. Μεταφορτώστε τον τροποποιημένο κωδικό στο Arduino.
5. Για να απενεργοποιήσετε το κουδούνι, πατήστε 'κουμπί απενεργοποίησης κουδουνιού'. Για να ενεργοποιήσετε ξανά πατήστε το κουμπί 'Έξοδος'.
6. Για να χτυπήσετε το κουδούνι χειροκίνητα πιέστε το 'χειροκίνητο κουδούνι' και για να σταματήσετε το κουδούνι πατήστε 'έξοδος'.

Αυτό ολοκληρώνει το έργο, εάν έχετε οποιεσδήποτε ερωτήσεις σχετικά με αυτό το έργο μη διστάσετε να το εκφράσετε στην ενότητα σχολίων.




Προηγούμενο: Κατασκευάστε αυτό το ρόπαλο κουνουπιών χωρίς μπαταρία Επόμενο: Πώς να φτιάξετε ένα σύστημα παρακολούθησης με βάση το RFID