ในโครงการนี้เราจะไปทำให้ระบบเตือนไฟโดยใช้ไมโครคอนโทรลเลอร์ ATMEGA8 และไฟเซ็นเซอร์ เซ็นเซอร์ไฟสามารถเป็นชนิดใด ๆ แต่เราจะใช้IR (Infrared) ตามเซนเซอร์ไฟ แม้ว่า IR ตามเซนเซอร์ไฟมีข้อเสียส่วนใหญ่ของความไม่ถูกต้องบางส่วนก็เป็นวิธีที่ถูกที่สุดและง่ายที่สุดในการตรวจสอบไฟไหม้
เซ็นเซอร์ไฟที่ใช้ IR มีวิสัยทัศน์ในการตรวจจับน้อยกว่าดังนั้นเราจะติดตั้งเซ็นเซอร์ไฟบนเซอร์โวมอเตอร์ Servo จะหมุนลูกตุ้ม 180 องศา เมื่อติดตั้งเซ็นเซอร์ไฟเราจะได้รับวิสัยทัศน์การตรวจจับไฟ 270 องศาขึ้นไป เซอร์โวจะหมุนอย่างต่อเนื่องจึงทำให้ระบบแจ้งเตือนไฟในห้องสมบูรณ์ เพื่อความแม่นยำยิ่งขึ้นเราสามารถเพิ่มเซนเซอร์ตรวจจับควันเข้าไปในระบบได้ ด้วยเหตุนี้เราจึงได้รับความแม่นยำที่สูงขึ้น
ส่วนประกอบของวงจร
ฮาร์ดแวร์:แหล่งจ่ายไฟ + 5v, เซอร์โวมอเตอร์ (sg90), ATMEGA8, BUZZER, ปุ่ม, ตัวต้านทาน10KΩ, ตัวต้านทาน1KΩ, ตัวต้านทาน220Ω, ตัวเก็บประจุ 100nF, AVR-ISP PROGRAMMER
ซอฟต์แวร์: Atmel studio 6.1, progisp หรือ flash magic
แผนภาพวงจรและการทำงาน
เพื่อให้เพลาเซอร์โวเคลื่อนที่ไปทางซ้ายเราจำเป็นต้องเปิดปันส่วน 1/18 และเพื่อให้เพลาหมุนไปทางซ้ายจนสุดเราต้องให้ PWM โดยมีค่าหน้าที่ 2/18 เราจะตั้งโปรแกรม ATMEGA8 เพื่อให้สัญญาณ PWM ซึ่งจะหมุนเพลาเซอร์โวไปที่ 180 และจากนั้นเป็น 0 หลังจากเกิดความล่าช้า
ในช่วงเวลาที่สมบูรณ์ Fire Sensor จะเปิดอยู่และตัวควบคุมจะแจ้งเตือนอย่างสมบูรณ์ หากเกิดเพลิงไหม้เซ็นเซอร์จะให้พัลส์สูงชีพจรนี้เมื่อตรวจพบโดยคอนโทรลเลอร์จะตั้งปลุก การปลุกจะปิดโดยการกดปุ่มรีเซ็ตที่เชื่อมต่ออยู่
ใน atmega8 สำหรับช่องสัญญาณ PWM สามช่องเราได้กำหนดหมุดสามตัว เราสามารถรับเอาต์พุต PWM ที่พินเหล่านี้เท่านั้น เนื่องจากเราใช้ PWM1 เราควรรับสัญญาณ PWM ที่ขา OC1A (PORTB 1 st PIN) ดังที่แสดงในแผนภาพวงจรเรากำลังเชื่อมต่อสัญญาณเซอร์โวกับขา OC1A อีกสิ่งหนึ่งคือมากกว่าช่องสัญญาณ PWM สามช่องสองช่องคือช่องสัญญาณ PWM 8 บิตและช่องสัญญาณ PWM 16 บิตหนึ่งช่อง เราจะใช้ช่องสัญญาณ PWM 16 บิตที่นี่
ใน ATMEGA มีสองวิธีในการสร้าง PWM ได้แก่
1. เฟสที่ถูกต้อง PWM
2. รวดเร็ว PWM
ที่นี่เราจะทำให้ทุกอย่างเรียบง่ายดังนั้นเราจะใช้วิธี FAST PWM เพื่อสร้างสัญญาณ PWM
ก่อนอื่นให้เลือกความถี่ของ PWM ซึ่งขึ้นอยู่กับการใช้งานโดยทั่วไปสำหรับ LED ที่ความถี่ใด ๆ ที่มากกว่า 50Hz จะทำ ด้วยเหตุนี้เราจึงเลือกนาฬิกานับ 1MHZ ดังนั้นเราจึงเลือกไม่ใช้ prescalar Prescalar คือตัวเลขที่ถูกเลือกเพื่อให้ได้นาฬิกาเคาน์เตอร์ที่น้อยกว่า ตัวอย่างเช่นถ้านาฬิกาออสซิลเลเตอร์เป็น 8Mhz เราสามารถเลือก Prescalar เป็น '8' เพื่อรับนาฬิกา 1MHz สำหรับตัวนับ Prescalar ถูกเลือกตามความถี่ หากเราต้องการพัลส์ช่วงเวลามากขึ้นเราต้องเลือก Prescalar ที่สูงขึ้น
ตอนนี้เพื่อให้ได้ FAST PWM ที่ 50Hz นาฬิกาจาก ATMEGA เราจำเป็นต้องเปิดใช้งานบิตที่เหมาะสมในรีจิสเตอร์“ TCCR1B ”
ที่นี่
CS10, CS11, CS12 (สีเหลือง) - เลือก prescalar สำหรับเลือกนาฬิกาเคาน์เตอร์ ตารางสำหรับ prescalar ที่เหมาะสมแสดงไว้ในตารางด้านล่าง ดังนั้นสำหรับ prescaling หนึ่ง (นาฬิกาออสซิลเลเตอร์ = นาฬิกาเคาน์เตอร์)
ดังนั้น CS10 = 1 อีกสองบิตเป็นศูนย์
RED (WGM10-WGM13): มีการเปลี่ยนแปลงเพื่อเลือกโหมดการสร้างรูปคลื่นตามตารางด้านล่างสำหรับ PWM ที่รวดเร็ว เรามี WGM11, WGM12 และ WGM12 ถูกตั้งค่าเป็น 1
ตอนนี้เรารู้แล้วว่า PWM เป็นสัญญาณที่มีการปันส่วนหน้าที่แตกต่างกันหรือเวลาเปิดปิดที่แตกต่างกัน จนถึงตอนนี้เราได้เลือกความถี่และประเภทของ PWM ธีมหลักของบทนี้อยู่ในส่วนนี้ สำหรับการปันส่วนหน้าที่ต่างกันเราจะเลือกค่าระหว่าง 0 ถึง 255 (2 ^ 8 เพราะ 8 บิต) สมมติว่าเราเลือกค่า 180 เนื่องจากตัวนับเริ่มนับจาก 0 และถึงค่า 180 การตอบสนองเอาต์พุตอาจถูกทริกเกอร์ ทริกเกอร์นี้อาจกลับด้านหรือไม่กลับด้าน นั่นคือผลลัพธ์ที่สามารถบอกให้ดึงขึ้นเมื่อถึงจำนวนหรือสามารถบอกให้ดึงลงเมื่อถึงจำนวน
สีเขียว (COM1A1, COM1A0): การเลือกการดึงขึ้นหรือลงนี้ถูกเลือกโดยบิต CM1A0 และ CM1A1
ดังแสดงในตารางเพื่อให้เอาต์พุตมีการเปรียบเทียบสูงและเอาต์พุตจะยังคงสูงจนถึงค่าสูงสุด เราต้องเลือกโหมดย้อนกลับเพื่อทำเช่นนั้นดังนั้น COM1A0 = 1; COM1A1 = 1.
ดังแสดงในรูปด้านล่าง OCR1A (Output Compare Register 1A) คือไบต์ที่เก็บค่าที่ผู้ใช้เลือก ดังนั้นถ้าเราเปลี่ยน OCR1A = 180 คอนโทรลเลอร์จะทริกเกอร์การเปลี่ยนแปลง (สูง) เมื่อตัวนับถึง 180 จาก 0
OCR1A ต้องเป็น 19999-600 สำหรับ 180 องศาและ 19999-2400 สำหรับ 0 องศา