ในโครงการนี้เราจะเชื่อมต่อ LDR กับไมโครคอนโทรลเลอร์ ATMEGA8และด้วยสิ่งนี้เราสามารถวัดความเข้มของแสงในพื้นที่ได้ ใน ATMEGA8 เราจะใช้คุณสมบัติ 10bit ADC (Analog to Digital Conversion) เพื่อวัดความเข้มของแสง
Am LDR เป็นตัวแปลงสัญญาณที่เปลี่ยนความต้านทานเมื่อ LIGHT ตกลงบนพื้นผิวที่เปลี่ยนแปลง เซ็นเซอร์ LDR มีให้เลือกหลายขนาดและรูปร่าง
LDR ทำจากวัสดุเซมิคอนดักเตอร์เพื่อให้มีคุณสมบัติไวต่อแสง วัสดุที่ใช้มีหลายประเภท แต่ที่นิยมกันคือ CADMIUM SULPHIDE (CdS) LDRsหรือPHOTO REISTORSเหล่านี้ทำงานบนหลักการของ“ Photo Conductivity” สิ่งที่หลักการนี้กล่าวคือเมื่อใดก็ตามที่แสงตกลงบนพื้นผิวของ LDR (ในกรณีนี้) การนำไฟฟ้าขององค์ประกอบเพิ่มขึ้นหรือกล่าวอีกนัยหนึ่งคือความต้านทานของ LDR จะลดลงเมื่อแสงตกลงบนพื้นผิวของ LDR คุณสมบัติของการลดลงของความต้านทานสำหรับ LDR นี้ทำได้เนื่องจากเป็นคุณสมบัติของวัสดุเซมิคอนดักเตอร์ที่ใช้กับพื้นผิว LDR จะมีการใช้มากที่สุดเท่าที่จะตรวจสอบสถานะของแสงหรือสำหรับการวัดความเข้มของแสง
LDR มีหลายประเภทดังแสดงในรูปด้านบนและแต่ละประเภทมีคุณสมบัติที่แตกต่างกัน โดยทั่วไป LDR จะมี1MΩ-2MΩที่ความมืดทั้งหมด10-20KΩที่ 10 LUX, 2-5KΩที่ 100 LUX ความต้านทานทั่วไปต่อกราฟ LUX ของ LDR แสดงในรูป
ดังแสดงในรูปด้านบนความต้านทานระหว่างหน้าสัมผัสทั้งสองของเซ็นเซอร์จะลดลงเมื่อความเข้มของแสงหรือค่าการนำไฟฟ้าระหว่างสองหน้าสัมผัสของเซ็นเซอร์เพิ่มขึ้น
ตอนนี้สำหรับการแปลงการเปลี่ยนแปลงในความต้านทานต่อการเปลี่ยนแปลงในแรงดันไฟฟ้าที่เราจะใช้แรงดันไฟฟ้าวงจร divider ในเครือข่ายตัวต้านทานนี้เรามีความต้านทานคงที่หนึ่งตัวและความต้านทานตัวแปรอื่น ๆ ดังแสดงในรูป R1 ที่นี่คือความต้านทานคงที่และ R2 คือเซ็นเซอร์ FORCE ซึ่งทำหน้าที่เป็นตัวต้านทาน
จุดกึ่งกลางของสาขาถูกนำไปวัด เมื่อความต้านทาน R2 เปลี่ยนไป Vout จะเปลี่ยนไปตามแนวเส้นตรง ด้วยเหตุนี้เราจึงมีแรงดันไฟฟ้าที่เปลี่ยนแปลงตามน้ำหนัก
ตอนนี้สิ่งสำคัญที่ควรทราบก็คืออินพุตที่คอนโทรลเลอร์สำหรับการแปลง ADC นั้นต่ำถึง 50µAmp ผลการโหลดของตัวแบ่งแรงดันตามความต้านทานนี้มีความสำคัญเนื่องจากกระแสที่ดึงมาจาก Vout ของตัวแบ่งแรงดันจะเพิ่มเปอร์เซ็นต์ความผิดพลาดที่เพิ่มขึ้นในตอนนี้เราไม่จำเป็นต้องกังวลเกี่ยวกับผลการโหลด
สิ่งที่เราจะทำต่อไปนี้คือเราจะใช้ตัวต้านทานสองตัวและสร้างวงจรแบ่งเพื่อให้สำหรับ Vin 25Volts เราจะได้ 5Volt Vout ดังนั้นสิ่งที่เราต้องทำคือคูณค่า Vout ด้วย“ 5” ในโปรแกรมเพื่อให้ได้แรงดันไฟฟ้าเข้าจริง
ส่วนประกอบ
ฮาร์ดแวร์: ATMEGA8, แหล่งจ่ายไฟ (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16 * 2LCD), ตัวเก็บประจุ 100uF, ตัวเก็บประจุ 100nF (5 ชิ้น), ตัวต้านทาน10KΩ, LDR (ตัวต้านทานแบบพึ่งพาแสง)
Sofware: Atmel studio 6.1, progisp หรือ flash magic
แผนภาพวงจรและคำอธิบายการทำงาน
ในวงจร PORTD ของ ATMEGA8 เชื่อมต่อกับพอร์ตข้อมูล LCD ในจอ LCD 16 * 2 จะมี 16 พินทั้งหมดหากมีไฟด้านหลังหากไม่มีไฟด้านหลังจะมี 14 พิน หนึ่งสามารถจ่ายไฟหรือปล่อยหมุดไฟด้านหลัง ตอนนี้ใน 14 พินมีพินข้อมูล 8 พิน (7-14 หรือ D0-D7), พินแหล่งจ่ายไฟ 2 พิน (1 & 2 หรือ VSS & VDD หรือ gnd & + 5v), พิน3 rdสำหรับควบคุมคอนทราสต์ (VEE- ควบคุมความหนาของตัวอักษร แสดง) และ 3 พินควบคุม (RS & RW & E)
ในวงจรคุณสามารถสังเกตได้ว่าฉันใช้หมุดควบคุมเพียงสองตัว ไม่ได้ใช้บิตคอนทราสต์และ READ / WRITE บ่อยนักดังนั้นจึงสามารถย่อลงมาที่พื้นได้ ทำให้ LCD มีคอนทราสต์สูงสุดและโหมดอ่าน เราต้องควบคุมพิน ENABLE และ RS เพื่อส่งอักขระและข้อมูลตามนั้น
การเชื่อมต่อสำหรับ LCDมีดังต่อไปนี้:
PIN1 หรือ VSS ------------------ กราวด์
PIN2 หรือ VDD หรือ VCC ------------ + 5v
PIN3 หรือ VEE --------------- กราวด์ (ให้ความเปรียบต่างสูงสุดที่ดีที่สุดสำหรับผู้เริ่มต้น)
PIN4 หรือ RS (Register Selection) --------------- PB0 ของ uC
PIN5 หรือ RW (อ่าน / เขียน) ----------------- กราวด์ (ทำให้ LCD อยู่ในโหมดอ่านทำให้การสื่อสารสำหรับผู้ใช้ง่ายขึ้น)
PIN6 หรือ E (เปิดใช้งาน) ------------------- PB1 ของ uC
PIN7 หรือ D0 ----------------------------- PD0 ของ uC
PIN8 หรือ D1 ----------------------------- PD1 ของ uC
PIN9 หรือ D2 ----------------------------- PD2 ของ uC
PIN10 หรือ D3 ----------------------------- PD3 ของ uC
PIN11 หรือ D4 ----------------------------- PD4 ของ uC
PIN12 หรือ D5 ----------------------------- PD5 ของ uC
PIN13 หรือ D6 ----------------------------- PD6 ของ uC
PIN14 หรือ D7 ----------------------------- PD7 ของ uC
ในวงจรคุณจะเห็นว่าเราใช้การสื่อสาร 8 บิต (D0-D7) แต่นี่ไม่ใช่ภาคบังคับเราสามารถใช้การสื่อสาร 4 บิต (D4-D7) ได้ แต่ด้วยโปรแกรมการสื่อสาร 4 บิตจะซับซ้อนเล็กน้อย ดังนั้นจากการสังเกตจากตารางด้านบนเรากำลังเชื่อมต่อ 10 พินของ LCD เข้ากับคอนโทรลเลอร์ซึ่ง 8 พินเป็นพินข้อมูลและ 2 พินสำหรับควบคุม
แรงดันไฟฟ้าทั่ว R2 ไม่เป็นเส้นตรงอย่างสมบูรณ์ มันจะมีเสียงดัง ในการกรองตัวเก็บประจุสัญญาณรบกวนจะถูกวางไว้บนตัวต้านทานแต่ละตัวในวงจรแบ่งดังแสดงในรูป
ใน ATMEGA8 เราสามารถให้อินพุตแบบอะนาล็อกแก่ PORTC สี่ช่องทางใดก็ได้ไม่สำคัญว่าเราจะเลือกช่องใดเพราะทั้งหมดจะเหมือนกัน เราจะเลือกช่อง 0 หรือ PIN0 ของ PORTC ใน ATMEGA8 ADC มีความละเอียด 10 บิตดังนั้นคอนโทรลเลอร์จึงสามารถตรวจจับการเปลี่ยนแปลงขั้นต่ำของ Vref / 2 ^ 10 ได้ดังนั้นหากแรงดันอ้างอิงคือ 5V เราจะได้รับการเพิ่มเอาต์พุตดิจิตอลทุก ๆ 5/2 ^ 10 = 5mV ดังนั้นสำหรับทุกๆ 5mV ที่เพิ่มขึ้นในอินพุตเราจะเพิ่มขึ้นหนึ่งครั้งที่เอาต์พุตดิจิตอล
ตอนนี้เราต้อง ตั้งค่าการลงทะเบียนของ ADC ตามเงื่อนไขต่อไปนี้:
1. ก่อนอื่นเราต้องเปิดใช้งานคุณสมบัติ ADC ใน ADC
2. ที่นี่จะได้รับแรงดันไฟฟ้าอินพุตสูงสุดสำหรับการแปลง ADC คือ + 5V ดังนั้นเราจึงสามารถตั้งค่าสูงสุดหรือการอ้างอิงของ ADC เป็น 5V
3. คอนโทรลเลอร์มีคุณสมบัติการแปลงทริกเกอร์ซึ่งหมายความว่าการแปลง ADC จะเกิดขึ้นหลังจากทริกเกอร์ภายนอกเท่านั้นเนื่องจากเราไม่ต้องการให้เราต้องตั้งค่าการลงทะเบียนเพื่อให้ ADC ทำงานในโหมดการทำงานฟรีอย่างต่อเนื่อง
4. สำหรับ ADC ใด ๆ ความถี่ของการแปลง (ค่าอนาล็อกเป็นค่าดิจิตอล) และความแม่นยำของเอาต์พุตดิจิตอลจะแปรผกผัน ดังนั้นเพื่อความแม่นยำที่ดีขึ้นของเอาต์พุตดิจิตอลเราต้องเลือกความถี่ที่น้อยกว่า สำหรับนาฬิกา ADC ปกติเรากำลังตั้งค่าการขายล่วงหน้าของ ADC เป็นค่าสูงสุด (2) เนื่องจากเราใช้นาฬิกาภายใน 1MHZ นาฬิกาของ ADC จะเป็น (1000000/2)
นี่เป็นเพียงสี่สิ่งที่เราต้องรู้เพื่อเริ่มต้นใช้งาน ADC
คุณสมบัติทั้งสี่ประการข้างต้นถูกกำหนดโดยการลงทะเบียนสองรายการ
RED (ADEN): ต้องตั้งค่าบิตนี้เพื่อเปิดใช้งานคุณลักษณะ ADC ของ ATMEGA
BLUE (REFS1, REFS0): บิตทั้งสองนี้ใช้เพื่อกำหนดแรงดันอ้างอิง (หรือแรงดันไฟฟ้าขาเข้าสูงสุดที่เราจะให้) เนื่องจากเราต้องการมีแรงดันอ้างอิง 5V จึงควรกำหนด REFS0 ตามตาราง
สีเหลือง (ADFR): ต้องตั้งค่าบิตนี้เพื่อให้ ADC ทำงานอย่างต่อเนื่อง (โหมดการทำงานฟรี)
PINK (MUX0-MUX3): สี่บิตนี้ใช้สำหรับบอกช่องสัญญาณเข้า เนื่องจากเราจะใช้ ADC0 หรือ PIN0 เราจึงไม่จำเป็นต้องตั้งค่าบิตใด ๆ ตามตาราง
BROWN (ADPS0-ADPS2): บิตทั้งสามนี้ใช้สำหรับตั้งค่า prescalar สำหรับ ADC เนื่องจากเราใช้ prescalar เป็น 2 เราจึงต้องตั้งค่าหนึ่งบิต
DARK GREEN (ADSC): บิตนี้ตั้งค่าสำหรับ ADC เพื่อเริ่มการแปลง บิตนี้สามารถปิดใช้งานได้ในโปรแกรมเมื่อเราต้องการหยุดการแปลง
ดังนั้นด้วยความต้านทานของ LDR บนหน้าจอ LCD 16x2 เราสามารถจับคู่กับกราฟ LUX เพื่อรับความเข้มของแสงได้