หน้าแรก ดูโปรเจกต์ทั้งหมด
Intermediate

โปรเจกต์ ระบบ Automatic School Bell บนพื้นฐาน Arduino

โปรเจกต์บนพื้นฐาน Arduino นี้คือ Automatic School Bell ซึ่งจะทำงานตาม School Timetable ที่ป้อนข้อมูลเข้าไป

โปรเจกต์ ระบบ Automatic School Bell บนพื้นฐาน Arduino

วิดีโอสาธิต

Video

▶ กดเพื่อดูวิดีโอสาธิตโปรเจกต์

}

รายละเอียดและวิธีทำ

ในโรงเรียนทุกแห่ง คลาสเรียนจะถูกจัดแบ่งเป็นคาบเรียน (periods) โดยการเริ่มต้นคาบเรียนหรือช่วงเวลาพักจะมีการแจ้งเตือนให้นักเรียนและครูทราบด้วยการตีระฆังโรงเรียน โดยปกติแล้ว ระฆังโรงเรียนจะถูกตีโดยภารโรงหรือผู้ช่วยทำงานทั่วไป แต่จะดีกว่าไหมหากมีระฆังโรงเรียนอัตโนมัติที่ใช้ Microcontroller เป็นฐาน ซึ่งสามารถดังได้เองตามตารางเวลาที่ป้อนไว้ โปรเจกต์นี้คือการนำฟังก์ชันดังกล่าวมาใช้งานจริง

โปรเจกต์นี้คือ Arduino Mega based automatic bell system ซึ่งสามารถตั้งค่าสำหรับทุกชั้นเรียนในโรงเรียนได้ โดยสมมติว่าโรงเรียนมีการจัดคาบเรียนไว้ 5 คาบต่อวันสำหรับวิชาต่างๆ และมีช่วงเวลาพัก 2 ช่วงในระหว่างนั้น ช่วงพักแรกจะเกิดขึ้นหลังจากจบ 2 คาบเรียนแรก และช่วงพักถัดไปจะเกิดขึ้นหลังจากจบอีก 2 คาบเรียนถัดมา เมื่อจบคาบที่ 5 จะเป็นเวลาเลิกเรียน โปรเจกต์นี้อนุญาตให้ตั้งค่าระยะเวลาสำหรับแต่ละคาบเรียนและกำหนดวิชาจากรายการวิชาให้กับแต่ละคาบได้ ผู้ใช้สามารถตั้งค่าตารางเวลาสำหรับ 6 วันในหนึ่งสัปดาห์ตั้งแต่วันจันทร์ถึงวันเสาร์ และยังสามารถตั้งค่าระยะเวลาของทั้งสองช่วงพักได้ด้วย

อุปกรณ์ในโปรเจกต์นี้ควรได้รับการติดตั้งในแต่ละห้องเรียนและตั้งค่าตารางเวลาด้วยตนเอง โดยมีหน้าจอ 16X2 LCD ที่จะคอยแสดงวันปัจจุบันของสัปดาห์และวิชาเรียนของคาบปัจจุบันในแถวแรก ส่วนแถวที่สองจะแสดงวันที่และเวลาพร้อมกับวิชาในคาบถัดไป วงจรนี้มี Buzzer ที่จะเริ่มส่งเสียงเตือนเมื่อเริ่มต้นและสิ้นสุดในแต่ละคาบเรียนหรือช่วงเวลาพัก การกำหนดระยะเวลาของแต่ละคาบและการเลือกวิชาสามารถทำได้ผ่าน Keypad แบบ 4 สวิตช์บนวงจร โปรเจกต์นี้ใช้ RTC module เพื่อติดตามวันที่และเวลาปัจจุบัน ตัวอุปกรณ์ใช้พลังงานจากสายไฟบ้าน (line powered) ซึ่งควบคุมแรงดันโดย Transformer แบบ Step-down, Full-bridge Rectifier และ Voltage regulator ICs เบอร์ 7805 และ 7812

ฟังก์ชันต่างๆ เช่น การจัดเก็บตารางเวลาเรียนรายวัน ระยะเวลาและวิชาของแต่ละคาบ การดึงข้อมูลวันที่และเวลาจาก RTC module การแสดงผลวันที่-เวลา วิชา และข้อมูลวันบน LCD module และการสั่งงาน Buzzer ตามตารางเวลานั้น ทั้งหมดจะถูกจัดการโดย Arduino Sketch โปรแกรม Arduino ถูกเขียนขึ้นบน Arduino IDE และเบิร์นลงใน Board โดยใช้ AVR Dude

Components Required - 

 • Arduino Mega 2560 - 1 pc

• RTC module - DC1307 - 1pc

• 16X2 LCD - 1 pc

• 1K ohm resistors -3 pcs

• Push to ON switch - 4 pcs

• Voltage regulator -7805 and 7812

• 5V Buzzer

วงจรนี้มีหน้าจอ 16X2 LCD ที่เชื่อมต่อกับ Arduino Mega เพื่อใช้เป็นส่วนติดต่อสำหรับให้ผู้ใช้ป้อนข้อมูลตารางเวลา และมี Keypad สำหรับป้อนข้อมูลที่เกี่ยวข้อง นอกจากนี้ยังมี RTC ที่เชื่อมต่อกับ Arduino Board เพื่อดึงข้อมูลวันที่และเวลา และมี Buzzer สำหรับส่งเสียงระฆังโรงเรียน อุปกรณ์และ Module เหล่านี้เชื่อมต่อกับ Arduino Board ในลักษณะดังนี้ - 

Power Supply - อุปกรณ์ในโปรเจกต์นี้ใช้พลังงานจากสายไฟบ้าน โดยไฟ AC หลักจะถูกลดแรงดันลงด้วย Transformer ขนาด 18V 2A และผ่านการ Rectified ด้วย Full-bridge Rectifier สัญญาณ AC ที่ผ่านการ Rectified แล้วจะถูกควบคุมแรงดัน (regulated) ให้เป็น 5V และ 12V DC ด้วย Voltage regulator ICs เบอร์ 7805 และ 7812 ตามลำดับ โดย Pin 1 ของ Voltage regulator ICs ทั้งสองตัวจะเชื่อมต่อกับขั้ว Anode ของแบตเตอรี่ และ Pin 2 ของ IC ทั้งสองจะเชื่อมต่อกับ Ground ส่วนเอาต์พุตแรงดันที่ต้องการจะดึงมาจาก Pin 3 ของ Voltage regulator ICs แต่ละตัว

16X2 LCD: หน้าจอ 16X2 LCD ใช้สำหรับแสดงข้อความแจ้งเตือนเพื่อป้อนข้อมูลตารางเวลา โดยเชื่อมต่อกับ Arduino Board ผ่าน Data Pins เข้ากับ Pins 3 ถึง 6 ของ Arduino Board ส่วน Pin RS และ E ของ LCD จะเชื่อมต่อกับ Pins 13 และ 12 ของ Arduino Mega ตามลำดับ และ Pin RW ของ LCD จะต่อลง Ground

ในโปรเจกต์นี้ใช้ Standard open-source library สำหรับการเชื่อมต่อ LCD กับ Arduino ซึ่ง Library นี้ทำงานได้ตามที่คาดหวังและไม่จำเป็นต้องเปลี่ยนแปลงหรือแก้ไขใดๆ

Buzzer - Buzzer เชื่อมต่อกับ Pin 24 ของ Arduino Board โดยผ่าน Switching Transistor เบอร์ BC547 ขา Base ของ Transistor จะเชื่อมต่อกับ Pin ผ่าน Pull-up Resistor ขนาด 1K ohms และ Buzzer จะเชื่อมต่อที่ขา Collector ของ Transistor ส่วนขา Emitter ของ Transistor จะต่อลง Ground นอกจากนี้ยังมี LED พร้อม Pull-up Resistor ต่อขนานกับวงจร Transistor เพื่อเป็นสัญญาณไฟเมื่อระฆังโรงเรียนดัง

RTC DC1307 - RTC DS1307 มี Button cell ในตัวที่ช่วยให้สามารถติดตามเวลาปัจจุบันได้ตลอดเวลาโดยไม่ขึ้นกับแหล่งจ่ายไฟหลัก สำหรับการเชื่อมต่อกับ Arduino Board นั้น Pin SDA และ SCL ของ RTC จะเชื่อมต่อกับ Pin SDA (Pin 20) และ SCL (Pin 21) ของ Arduino Board

4-switch Keypad - Keypad ประกอบด้วย Push-to-on switches จำนวน 4 ตัว ซึ่งเชื่อมต่อกับ Pins A0, A1, A2 และ A3 ของ Arduino Mega ผ่าน Pull-up Resistors ขนาด 1K ohm โดยสวิตช์ที่เชื่อมต่อกับ Pins A0, A1, A2 และ A3 จะทำหน้าที่เป็นปุ่ม Up/Left, Right, Exit after Saving และ Save ตามลำดับ

How the circuit works – 

Arduino based Automatic School Bell System Circuit Working

เมื่อเปิดเครื่อง วงจรจะแจ้งเตือนให้ป้อนตารางเวลาเรียน ผู้ใช้สามารถเริ่มขั้นตอนการป้อนข้อมูลตารางเวลาได้โดยการกดปุ่ม Right โดยอันดับแรกจะมีการแจ้งเตือนให้ระบุเวลาเริ่มเรียนของวัน และตามด้วยระยะเวลาของแต่ละคาบเรียนในหน่วยชั่วโมง ระยะเวลาของคาบเรียนสามารถเพิ่มค่าได้โดยการกดปุ่ม Up/Left เมื่อป้อนข้อมูลเสร็จแล้ว ผู้ใช้ต้องกดปุ่ม Save เพื่อบันทึกข้อมูลลงในหน่วยความจำภายในของ Arduino Mega

ถัดไปผู้ใช้ต้องป้อนระยะเวลาของช่วงพักแรกในหน่วยนาทีในลักษณะเดียวกัน จากนั้นจึงป้อนระยะเวลาของช่วงพักที่สองในหน่วยนาที ตามด้วยการเลือกวิชาสำหรับทั้ง 5 คาบ ข้อมูลนี้จะเป็นของวันจันทร์ หากต้องการข้ามไปวันถัดไปให้กดปุ่ม Exit After Saving เมื่อป้อนตารางเวลาครบทั้ง 6 วันของสัปดาห์ลงในหน่วยความจำภายในของ Arduino Board แล้ว เมื่อกดปุ่ม Exit After Saving เป็นครั้งที่หก หน้าจอ LCD จะเริ่มแสดงวันปัจจุบันของสัปดาห์และวิชาเรียนปัจจุบันในแถวแรก ส่วนแถวที่สองจะแสดงวันที่และเวลาพร้อมกับวิชาในคาบถัดไป

Arduino Board จะเปรียบเทียบตารางเวลาที่ป้อนไว้กับข้อมูลวันที่และเวลาที่ดึงมาจาก RTC module ข้อมูลวันที่, วัน, เวลา, วิชาในคาบปัจจุบัน และวิชาในคาบถัดไปจะถูกแสดงบนหน้าจอ 16X2 LCD เมื่อใดก็ตามที่เวลาเริ่มต้นของคาบเรียนหรือช่วงเวลาพักตรงกับเวลาที่อ่านได้จาก RTC module โปรแกรม Arduino จะตั้งค่า Digital output ที่ Pin 24 เป็น HIGH ทำให้ Buzzer เริ่มส่งเสียง ข้อมูลเวลา วิชาปัจจุบัน และวิชาถัดไปจะถูกอัปเดตบนหน้าจอ LCD เมื่อสิ้นสุดในแต่ละคาบเรียนหรือช่วงพัก

สามารถตรวจสอบ Arduino sketch เพื่อเรียนรู้วิธีที่ Arduino แสดงผลหน้าจอการตั้งค่าตารางเวลา และการรับค่าจากสวิตช์ Keypad, การเก็บข้อมูลตารางเวลาในหน่วยความจำภายใน, การดึงเวลาจาก RTC และการเปรียบเทียบเวลาจาก RTC กับตารางเวลาเพื่อเริ่มทำงาน Buzzer และอัปเดตข้อมูลบนหน้าจอ LCD

Programming Guide - 

อันดับแรกจะมีการ Import library ที่จำเป็น เช่น wire.h สำหรับการสื่อสารแบบ Virtual Serial, EEPROM.h สำหรับการจัดการหน่วยความจำภายใน, RTClib.h สำหรับการจัดการ RTC module, LiquidCrystal.h สำหรับข้อความบน LCD, Keypad.h สำหรับการรับค่า Keypad และ SoftwareSerial.h สำหรับการสื่อสารแบบ Serial

มีการประกาศ Object ชื่อ lcd ประเภท LiquidCrystal และกำหนดค่า Pins ของ Arduino จากนั้นจึงสร้าง Object ของ RTC class มีการประกาศ Array สำหรับเก็บชื่อวิชาและชื่อวัน นอกจากนี้ยังมีการประกาศ Array สำหรับเก็บระยะเวลาของคาบวิชาเรียนและระยะเวลาช่วงพัก รวมถึงประกาศ Variable สำหรับแทนค่า Buzzer สวิตช์ที่ประกอบเป็น Keypad จะแทนด้วย Variables b1, b2, b3 และ b4 และมีการกำหนดค่า Logic LOW เริ่มต้นที่จะส่งไปยังสวิตช์โดยกำหนดค่า 0 ให้กับ Variables bs1, bs2, bs3 และ bs4 นอกจากนี้ยังมีการประกาศ Variables สำหรับเก็บเวลาเริ่มเรียน เวลาเลิกเรียน ระยะเวลาคาบเรียน ระยะเวลาช่วงพัก และ Counter variables อื่นๆ สุดท้ายมีการกำหนด Bitmaps เพื่อเก็บ Custom characters สำหรับแสดงผลบน LCD

ฟังก์ชัน Setup จะถูกเรียกใช้งาน โดยจะมีการเริ่มต้นการสื่อสารแบบ Virtual Serial และกำหนดค่าเริ่มต้นให้กับ RTC object ส่วน Baud rate สำหรับการส่งข้อมูลไปยัง LCD module ถูกตั้งไว้ที่ 9600 bits per second โดยใช้ฟังก์ชัน Serial.begin() ปุ่ม Keypad จะถูกตั้งค่าเป็น Digital input และ Pin ที่เชื่อมต่อกับ Buzzer จะถูกตั้งค่าเป็น Digital output โดยกำหนดเป็น LOW เป็นค่าเริ่มต้น ข้อความเริ่มต้นบางส่วนจะถูกแสดงบน LCD และจะมีการตรวจสอบว่า RTC ทำงานอยู่หรือไม่ ในตอนท้ายของฟังก์ชัน Setup จะมีการแสดงข้อความแจ้งเตือนให้ป้อนตารางเวลาบนหน้าจอ

ข้อมูล Input จากสวิตช์ Keypad ทั้ง 4 ตัวจะถูกอ่านโดยใช้ฟังก์ชัน digitalRead() และข้อความที่เกี่ยวข้องตามขั้นตอนการตั้งค่าตารางเวลาจะถูกแสดงบน LCD ในทุกๆ Input ข้อมูลที่ป้อนจะถูกอัปเดตหรือบันทึกลงใน Variables ที่เหมาะสม โดยสถานะความคืบหน้าของขั้นตอนต่างๆ จะถูกติดตามด้วย Variable ชื่อ pos ซึ่งจะถูกอัปเดตในแต่ละขั้นตอน

เมื่อผู้ใช้ป้อนตารางเวลาตั้งแต่วันจันทร์ถึงวันเสาร์ครบถ้วนแล้ว ข้อมูลจะถูกบันทึกลงใน EEPROM และนำไปเปรียบเทียบกับข้อมูลวันที่-เวลาปัจจุบันจาก RTC เพื่อเปิดใช้งาน Buzzer และอัปเดตข้อมูลวิชาบนหน้าจอ LCD

นี่คือส่วนประกอบทั้งหมดของ Arduino sketch สำหรับระบบระฆังโรงเรียนอัตโนมัติ (Automatic School Bell System)

.

Code

🔒 ปลดล็อก Code

สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้

รหัสอ้างอิงโปรเจกต์: arduino-based-automatic-school-bell-system-96b455
2450 บาท
PromptPay QR Code