نظام اردوينو التلقائي للمدرسة / الكلية

جرب أداة القضاء على المشاكل





في هذا المنشور ، سنقوم ببناء نظام جرس المدرسة / جرس الكلية التلقائي باستخدام Arduino وشاشة 16 × 2 ووحدة ساعة في الوقت الفعلي. يمكنك برمجة هذا المشروع لدق الجرس حتى 16 مرة في اليوم في الساعة والدقيقة المفضلة لديك. يمكن برمجة طول الجرس في ثوان.

هل تبحث عن نسخة أبسط بدون تشفير؟ احصل عليه هنا



ملخص

لقد ولت الأيام ، عندما قرع أحد العمال في إحدى المدارس جرس 'القصدير' وكان الطلاب يخرجون من مدخل المدرسة بألوان متطايرة. قد يصبح البعض أكثر سعادة عندما رن الجرس الأخير قبل دقائق قليلة.

كان هذا هو السيناريو قبل 15 إلى 20 عامًا ، ولكن الآن جميع المدارس والكليات مقيدة بزمن صارم وأجراسها آلية.



الطفولة السريعة للمؤلف / المراهق يتذكر:

خلال مدرستي الابتدائية والثانوية ، تمت مزامنة الساعة الرقمية التي ارتديتها مع نظام جرس المدرسة بدقة ثانية واحدة.

أود أن أصرخ 'سوف يرن الجرس خلال 5 ثوان' بعد أن يدق الجرس كل الطلاب يحدقون بي بمفاجأة ، وهذا يحدث كل يوم تقريبًا. في يوم ما ، أبدأ أنا وأصدقائي المقربين بالعد التنازلي 10 ، 9 ، 8 ، 7 ... قبل الجرس الأخير.

يقول جميع أصدقائي إنها ساعة يد سحرية ، لكنهم لم يدركوا حقيقة واحدة بسيطة وهي أن جرس المدرسة كان آليًا. الضحك بصوت مرتفع!!

سنقوم بعمل جرس مدرسة / كلية باستخدام Arduino.

عرض لاتصال Arduino

تختلف شاشة توصيلات Arduino قليلاً عما نقوم بتوصيلها عادةً ، المسامير 9 و 8 و 7 و 6 و 5 و 4 المستخدمة هنا. يتم استخدام رقم التعريف الشخصي 2 و 3 كمقاطعة للأجهزة عبر أزرار الضغط .

استخدم 10K مقياس فرق الجهد لضبط التباين لـ عرض .

اردوينو جرس المدرسة LCD

نظام جرس المدرسة / الكلية التلقائي باستخدام Arduino

معلومات مفصلة عن توصيلات الجرس والمرحل:

دائرة توقيت جرس المدرسة مع Arduino

التحديث: A5 إلى SCL و A4 إلى SDA (وليس A4 إلى SCK)

وحدة ساعة الوقت الحقيقي

ال ساعة الوقت الحقيقي وحدة تحافظ على مسار الوقت حتى بعد انقطاع التيار الكهربائي لفترة طويلة. يتم توفير مرحل 9 فولت لتشغيل الجرس وإيقافه.

يرجى توصيل الصمام الثنائي 1N4007 في انحياز عكسي عبر المرحل (الذي لا يظهر في التخطيطي) والذي سوف يمتص الجهد الكهرومغناطيسي الضار الخلفي من المرحل.

قم بتشغيل الدائرة باستخدام أ 9V / 500mA محول جدار .

يتم توفير ثلاثة أزرار ضغط واحدة لتشغيل الجرس يدويًا أثناء بعض المواقف. الضغط على زر 'خروج' سوف يوقف الجرس بعد رنين الجرس يدويًا.

سيقوم 'زر تعطيل الجرس' بتعطيل الجرس إلى الأبد. لإعادة تفعيل الجرس اضغط على زر 'خروج'.

كيفية ضبط الوقت على وحدة RTC:

قم بتنزيل مكتبة RTC:
الرابط: github.com/PaulStoffregen/DS1307RTC

-------------------------------------------------- ---------------
وقت التحميل
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