Hệ thống chuông trường học / đại học tự động Arduino

Hãy Thử Công Cụ CủA Chúng Tôi Để LoạI Bỏ Các VấN Đề





Trong bài đăng này, chúng tôi sẽ xây dựng một hệ thống chuông trường học / chuông đại học tự động sử dụng Arduino, màn hình 16 x 2 và mô-đun đồng hồ thời gian thực. Bạn có thể lập trình dự án này để rung chuông tối đa 16 lần một ngày vào giờ và phút bạn muốn. Độ dài của tiếng chuông có thể được lập trình trong vài giây.

Tìm kiếm một phiên bản đơn giản hơn mà không cần mã hóa? Hiểu rồi ĐÂY



Tổng quat

Đã qua rồi cái thời, khi một peon trong trường vang lên tiếng chuông 'thiếc thiếc' và học sinh chạy ra khỏi cổng trường với màu sắc bay. Một số có thể còn hạnh phúc hơn khi con chim kêu hồi chuông cuối cùng trước đó vài phút.

Đây là kịch bản cách đây 15 đến 20 năm, nhưng bây giờ tất cả các trường học và cao đẳng đều bị ràng buộc về thời gian và chuông tự động.



Hãy nhớ lại thời thơ ấu nhanh chóng của tác giả / tuổi teen:

Trong thời gian học tiểu học và trung học, chiếc đồng hồ kỹ thuật số mà tôi đeo đã được đồng bộ hóa với hệ thống chuông của trường với độ chính xác 1 giây.

Tôi sẽ hét lên “chuông sẽ reo trong 5 giây nữa” sau khi tiếng chuông vang lên, tất cả học sinh đều nhìn tôi ngạc nhiên, điều này xảy ra hầu như hàng ngày. Vào một ngày nào đó, tôi và những người bạn thân của tôi bắt đầu đếm ngược 10, 9, 8, 7… .. trước khi có tiếng chuông cuối cùng.

Tất cả bạn bè của tôi đều nói rằng đó là một chiếc đồng hồ đeo tay ma thuật, nhưng họ không nhận ra một sự thật đơn giản rằng chuông trường đã được tự động hóa. CƯỜI LỚN!!

Chúng tôi sẽ tạo ra một tiếng chuông trường học / đại học như vậy bằng cách sử dụng Arduino.

Hiển thị với Kết nối Arduino

Màn hình hiển thị với các kết nối Arduino hơi khác so với những gì chúng tôi đấu dây chúng thường, các chân 9, 8, 7, 6, 5 và 4 được sử dụng ở đây. Chân số 2 và 3 được sử dụng làm ngắt phần cứng thông qua nút ấn .

Sử dụng 10K chiết áp để điều chỉnh độ tương phản cho trưng bày .

Màn hình LCD chuông trường Arduino

Hệ thống chuông trường học / đại học tự động sử dụng Arduino

Thông tin chi tiết về kết nối chuông và rơ le:

mạch hẹn giờ chuông trường học với Arduino

CẬP NHẬT: A5 sang SCL và A4 sang SDA (Không phải A4 sang SCK)

Mô-đun đồng hồ thời gian thực

Các Đồng hồ thời gian thực mô-đun theo dõi thời gian ngay cả sau khi cắt điện lâu. Một rơ le 9V được cung cấp để bật và tắt chuông.

Vui lòng kết nối một diode 1N4007 phân cực ngược qua rơ le (không được hiển thị trong sơ đồ) sẽ hấp thụ EMF điện áp cao có hại trở lại từ rơ le.

Cấp nguồn cho mạch bằng cách sử dụng Bộ chuyển đổi tường 9V / 500mA .

Ba nút ấn được cung cấp một để vận hành chuông theo cách thủ công trong một số tình huống. Nhấn nút “thoát” sẽ dừng chuông sau khi rung chuông theo cách thủ công.

“Nút tắt chuông” sẽ tắt chuông vĩnh viễn. Để bật lại chuông, hãy nhấn nút “Thoát”.

Cách đặt thời gian cho mô-đun RTC:

Tải xuống thư viện RTC:
Liên kết: github.com/PaulStoffregen/DS1307RTC

-------------------------------------------------- ---------------
Tải xuống timeLib.h:
github.com/PaulStoffregen/Time
-------------------------------------------------- ----------------

Tải lên chương trình

Tải lên chương trình bên dưới sẽ đặt thời gian thành 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
}
//----------------------------------------------------//

Sau khi tải lên mã, hãy mở màn hình nối tiếp, nó sẽ thông báo rằng thời gian đã được đặt.
Khi bước trên được thực hiện thành công, hãy chuyển sang bước tiếp theo.
Bây giờ tải đoạn mã dưới đây lên Arduino.

Chương trình chính Mã:

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

Sau khi tải lên đoạn mã trên, bạn sẽ thấy thời gian tính bằng giờ trên màn hình.

Điều đó kết thúc mã chương trình.

Cách sử dụng hệ thống chuông tự động này:

Làm điều này với thiết lập phần cứng hoàn thành.

1. Tải lên mã “cài đặt thời gian” trước và mở màn hình nối tiếp.
2. Trong chương trình chính, đặt thời gian mà rơ le cần được kích hoạt ở đây.

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

• Đặt h1 theo giờ từ 1 đến 23 giờ và m1 theo phút từ 0 đến 59.
• Tương tự đối với h1 đến h16 và m1 đến m16.
• Nếu bạn muốn tắt một số chuông để lại giá trị h = 0 và m = 0, ví dụ: h5 = 0 và m5 = 0, số không sẽ tắt chuông cụ thể đó.

3. Đặt khoảng thời gian cho khoảng thời gian bật và tắt chuông, tại đây:

// --------------- chuông đổ dài trong vài giây ------- //
const int Lenght = 3 // tính bằng giây

Theo mặc định, giá trị được đặt trong 3 giây. Khi đến thời gian đã định, tiếp sức sẽ được bật trong 3 giây và tắt. Thay đổi điều này nếu bạn cần.

4. Tải mã đã sửa đổi lên Arduino.
5. Để tắt chuông bấm “nút tắt chuông”. Để bật lại, nhấn nút “Thoát”.
6. Để rung chuông theo cách thủ công, hãy nhấn “công tắc chuông thủ công” và để dừng chuông, hãy nhấn “thoát”.

Điều đó kết thúc dự án, nếu bạn có bất kỳ câu hỏi nào liên quan đến dự án này, vui lòng bày tỏ trong phần bình luận.




Trước: Chế tạo Dơi muỗi này mà không cần pin Tiếp theo: Cách tạo hệ thống chấm công dựa trên RFID