בית הספר האוטומטי של ארדואינו / מכללת פעמונים

נסה את הכלי שלנו לביטול בעיות





בפוסט זה אנו הולכים לבנות מערכת פעמוני בית ספר אוטומטית / פעמוני מכללה באמצעות ארדואינו, תצוגה 16x2 ומודול שעון בזמן אמת. אתה יכול לתכנת פרויקט זה כך שיצלצל בפעמון עד 16 פעמים ביום בשעה ובדקה המועדפים עליך. ניתן לתכנת את אורך צלצול הפעמון בשניות.

מחפש גרסה פשוטה יותר ללא קידוד? תשיג את זה כאן



סקירה כללית

הימים חלפו, כאשר פין בבית ספר צלצל בפעמון 'פח פח' והתלמידים יצאו מהכניסה לבית הספר בצבעים מעולים. חלקם עשויים להיות מאושרים עוד יותר כשהפיפון צלצל בפעמון האחרון כמה דקות קודם.

זה היה התרחיש לפני 15 עד 20 שנה, אך כעת כל בתי הספר והמכללות מוגבלים בזמן והפעמונים אוטומטיים.



זכר ילדותו / מכסה המנוע המהיר של הסופר זכור:

במהלך בית הספר היסודי והתיכון שלי השעון הדיגיטלי שלבשתי היה מסונכרן עם מערכת הפעמונים של בית הספר בדיוק של שנייה.

הייתי צועק 'הפעמון יצלצל בעוד 5 שניות' אחרי שהפעמון צלצל כל התלמידים בוהים בי בהפתעה, זה קורה כמעט כל יום. באיזשהו יום אני וחברי הקרובים מתחילים לספור 10, 9, 8, 7 ... לפני הפעמון האחרון.

כל החברים שלי אומרים שזה שעון יד קסם, אבל הם לא הבינו עובדה אחת פשוטה שפעמון בית הספר היה אוטומטי. חחח!!

אנחנו הולכים להכין פעמון אחד כזה של בית ספר / מכללה באמצעות Arduino.

תצוגה לחיבור Arduino

התצוגה לחיבורי ארדואינו שונה במקצת ממה שאנחנו מחברים אותם בדרך כלל, הפינים 9, 8, 7, 6, 5 ו -4 המשמשים כאן. הסיכה מספר 2 ו -3 משמשים כהפרעה לחומרה באמצעות ללחוץ על כפתורים .

השתמש ב- 10K פוטנציומטר להתאמת הניגודיות עבור לְהַצִיג .

LCD פעמון בית הספר Arduino

מערכת פעמוני בית ספר / מכללה אוטומטית באמצעות ארדואינו

מידע מפורט אודות חיבורי פעמון וממסר:

מעגל טיימר פעמוני בית ספר עם ארדואינו

עדכון: A5 ל- SCL ו- A4 ל- SDA (לא A4 ל- SCK)

מודול שעון זמן אמת

ה שעון זמן אמת מודול עוקב אחר מסלול הזמן גם לאחר הפסקת חשמל ארוכה. ממסר 9V מסופק להפעלת וכיבוי הפעמון.

אנא חבר דיודה 1N4007 בהטיה הפוכה על פני הממסר (שאינו מוצג בתרשים) שתספוג EMF חזרה מתח גבוה מממסר.

הפעל את המעגל באמצעות 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
}
//----------------------------------------------------//

לאחר העלאת הקוד, פתח את המסך הטורי, הוא יגיד שהזמן נקבע.
לאחר שהשלב שלעיל הושלם עבר בהמשך לשלב הבא.
כעת העלה את הקוד שלמטה לארדואינו.

קוד התוכנית הראשי:

//------------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. העלה את הקוד שהשתנה לארדואינו.
5. כדי להשבית את הפעמון לחץ על 'כפתור השבתת הפעמון'. כדי להפעיל מחדש לחץ על כפתור 'יציאה'.
6. כדי לצלצל בפעמון באופן ידני לחץ על 'מתג הפעמון הידני' וכדי לעצור את הפעמון לחץ על 'יציאה'.

זה מסיים את הפרויקט, אם יש לך שאלות בנוגע לפרויקט זה אל תהסס לבטא בסעיף ההערות.




קודם: בנה את עטלף היתושים הזה ללא סוללה הבא: כיצד ליצור מערכת נוכחות מבוססת RFID