- ADC0804 และ Raspberry Pi:
- LM35 เซ็นเซอร์อุณหภูมิ:
- ส่วนประกอบที่ต้องการ:
- คำอธิบายวงจรและการทำงาน:
- คำอธิบายการเขียนโปรแกรม:
ส่วนใหญ่เราได้กล่าวถึงส่วนประกอบพื้นฐานทั้งหมดที่เชื่อมต่อกับ Raspberry Pi ใน Raspberry Pi Tutorial Series ของเรา เราได้กล่าวถึงบทช่วยสอนทั้งหมดอย่างเรียบง่ายและมีรายละเอียดเพื่อให้ทุกคนไม่ว่าเขาจะเคยทำงานกับ Raspberry Pi หรือไม่ก็ตามสามารถเรียนรู้จากซีรี่ส์นี้ได้อย่างง่ายดาย และหลังจากผ่านบทเรียนทั้งหมดแล้วคุณจะสามารถสร้างโครงการระดับสูงโดยใช้ Raspberry Pi ได้
ดังนั้นที่นี่เรากำลังออกแบบแอปพลิเคชันแรกตามบทเรียนก่อนหน้านี้ แอพลิเคชันพื้นฐานแรกคือ อุณหภูมิห้องอ่านหนังสือโดย Raspberry Pi และคุณสามารถตรวจสอบการอ่านบนคอมพิวเตอร์ได้
ตามที่กล่าวไว้ในบทช่วยสอนก่อนหน้านี้ไม่มีช่อง ADC ที่ให้ไว้ภายใน Raspberry Pi ดังนั้นหากเราต้องการเชื่อมต่อเซ็นเซอร์อนาล็อกใด ๆ เราจำเป็นต้องมีหน่วยแปลง ADC และในบทช่วยสอนของเราเราได้เชื่อมต่อชิป ADC0804 ไปยัง Raspberry Pi เพื่ออ่านค่าอนาล็อก ดังนั้นควรทำก่อนสร้างเครื่องวัดอุณหภูมิห้องนี้
ADC0804 และ Raspberry Pi:
ADC0804 เป็นชิปที่ออกแบบมาเพื่อแปลงสัญญาณแอนะล็อกเป็นข้อมูลดิจิตอล 8 บิต ชิปนี้เป็นหนึ่งในซีรีส์ยอดนิยมของ ADC มันคือหน่วยการแปลง 8 บิตดังนั้นเราจึงมีค่าหรือ 0 ถึง 255 ค่า ความละเอียดของชิปนี้เปลี่ยนไปตามแรงดันอ้างอิงที่เราเลือกเราจะพูดถึงเพิ่มเติมในภายหลัง ด้านล่างนี้คือ Pinout ของ ADC0804:
ตอนนี้สิ่งที่สำคัญอีกอย่างคือ ADC0804 ทำงานที่ 5V และให้เอาต์พุตเป็นสัญญาณลอจิก 5V ในเอาต์พุต 8 พิน (แสดงถึง 8 บิต) ทุกพินจะให้เอาต์พุต + 5V เพื่อแสดงลอจิก '1' ดังนั้นปัญหาคือตรรกะ PI เป็น + 3.3v ดังนั้นคุณจึงไม่สามารถให้ตรรกะ + 5V กับพิน + 3.3V GPIO ของ PI ได้ หากคุณให้ + 5V กับพิน GPIO ของ PI บอร์ดจะเสียหาย
ดังนั้นในการลดระดับลอจิกจาก + 5V เราจะใช้วงจรแบ่งแรงดันไฟฟ้า เราได้กล่าวถึงวงจรแบ่งแรงดันก่อนหน้านี้เพื่อดูคำอธิบายเพิ่มเติม สิ่งที่เราจะทำคือเราใช้ตัวต้านทานสองตัวเพื่อแบ่งตรรกะ + 5V เป็น 2 * 2.5V ลอจิก ดังนั้นหลังจากหารเราจะให้ตรรกะ + 2.5v กับ PI ดังนั้นเมื่อใดก็ตามที่ลอจิก '1' ถูกนำเสนอโดย ADC0804 เราจะเห็น + 2.5V ที่พิน PI GPIO แทนที่จะเป็น + 5V
LM35 เซ็นเซอร์อุณหภูมิ:
ตอนนี้สำหรับการอ่านอุณหภูมิห้องเราจำเป็นต้องมีเซ็นเซอร์ ที่นี่เราจะใช้LM35 เซนเซอร์วัดอุณหภูมิ โดยปกติแล้วอุณหภูมิจะวัดเป็น "เซนติเกรด" หรือ "ฟาเรนไฮต์" เซ็นเซอร์“ LM35” ให้เอาต์พุตเป็นองศาเซนติเกรด
ดังแสดงในรูป LM35 เป็นทรานซิสเตอร์สามพินเช่นอุปกรณ์ หมุดมีหมายเลขเป็น
PIN1 = Vcc - กำลังไฟ (เชื่อมต่อกับ + 5V)
PIN2 = สัญญาณหรือเอาต์พุต (เชื่อมต่อกับชิป ADC)
PIN3 = กราวด์ (เชื่อมต่อกับกราวด์)
เซ็นเซอร์นี้ให้แรงดันไฟฟ้าแปรผันที่เอาต์พุตโดยอิงตามอุณหภูมิ สำหรับอุณหภูมิที่เพิ่มขึ้นทุกๆ +1 องศาเซลเซียสจะมีแรงดันไฟฟ้าสูงขึ้น + 10mV ที่ขาเอาต์พุต ดังนั้นหากอุณหภูมิอยู่ที่0◦องศาเซลเซียสเอาต์พุตของเซ็นเซอร์จะเป็น 0V ถ้าอุณหภูมิ10◦องศาเซลเซียสเอาต์พุตของเซ็นเซอร์จะเป็น + 100mV หากอุณหภูมิ25◦องศาเซลเซียสเอาต์พุตของเซ็นเซอร์จะเป็น + 250mV
ส่วนประกอบที่ต้องการ:
ที่นี่เราจะใช้ ราสเบอร์รี่ Pi 2 รุ่น B กับ Raspbian Jessie OS ข้อกำหนดฮาร์ดแวร์และซอฟต์แวร์พื้นฐานทั้งหมดได้กล่าวไว้ก่อนหน้านี้คุณสามารถค้นหาได้ในบทนำ Raspberry Pi นอกเหนือจากที่เราต้องการ:
- หมุดเชื่อมต่อ
- ตัวต้านทาน1KΩ (17 ชิ้น)
- หม้อ 10K
- ตัวเก็บประจุ 0.1µF
- ตัวเก็บประจุ 100µF
- ตัวเก็บประจุ 1,000µF
- ADC0804 IC
- LM35 เซ็นเซอร์อุณหภูมิ
- คณะกรรมการขนมปัง
คำอธิบายวงจรและการทำงาน:
การเชื่อมต่อที่ทำสำหรับการเชื่อมต่อ Raspberry กับ ADC0804 และ LM35แสดงในแผนภาพวงจรด้านล่าง
เอาต์พุต LM35 มีความผันผวนของแรงดันไฟฟ้ามาก ดังนั้นตัวเก็บประจุ 100uFจึงถูกใช้เพื่อทำให้เอาต์พุตเรียบดังแสดงในรูป
เอดีซีที่มักจะมีจำนวนมากของเสียง, เสียงนี้มากสามารถส่งผลกระทบต่อประสิทธิภาพการทำงานเพื่อให้เราใช้ 0.1uF ตัวเก็บประจุสำหรับเสียงรบกวนการกรอง หากไม่มีสิ่งนี้จะมีความผันผวนมากมายที่เอาต์พุต
ชิปทำงานบนนาฬิกาออสซิลเลเตอร์ RC (Resistor-Capacitor) ดังแสดงในแผนภาพวงจร, C2 และ R20 รูปแบบนาฬิกาสิ่งสำคัญที่ต้องจำไว้คือตัวเก็บประจุ C2 สามารถเปลี่ยนเป็นค่าที่ต่ำกว่าเพื่อให้อัตราการแปลง ADC สูงขึ้น อย่างไรก็ตามด้วยความเร็วที่สูงขึ้นความแม่นยำจะลดลง ดังนั้นหากแอปพลิเคชันต้องการความแม่นยำที่สูงขึ้นให้เลือกตัวเก็บประจุที่มีค่าสูงกว่าและสำหรับความเร็วที่สูงขึ้นให้เลือกตัวเก็บประจุที่มีค่าต่ำกว่า
อย่างที่บอกไปก่อนหน้านี้ LM35 ให้ + 10mV สำหรับทุกองศาเซนติเกรด อุณหภูมิสูงสุดที่ LM35 สามารถวัดได้คือ150ºองศาเซลเซียส ดังนั้นเราจะมีค่าสูงสุด 1.5V ที่ขั้วเอาต์พุต LM35 แต่แรงดันอ้างอิงเริ่มต้นของ ADC0804 คือ + 5V ดังนั้นหากเราใช้ค่าอ้างอิงนั้นความละเอียดของเอาต์พุตจะต่ำเพราะเราจะใช้ช่วงเอาต์พุตดิจิตอลสูงสุด (5 / 1.5) 34%
โชคดีที่ ADC0804 มีพิน Vref (PIN9) ที่ปรับได้ดังที่แสดงไว้ใน Pin Diagram ด้านบน ดังนั้นเราจะตั้ง VREF ของชิปถึง + ในการตั้งค่า Vref + 2V เราต้องให้แรงดันไฟฟ้า + 1V (VREF / 2) ที่ PIN9 ที่นี่เราใช้หม้อ 10K เพื่อปรับแรงดันไฟฟ้าที่ PIN9 ถึง + 1V ใช้โวลต์มิเตอร์เพื่อให้ได้แรงดันไฟฟ้าที่ถูกต้อง
ก่อนหน้านี้เราเคยใช้ LM35 Temperature Sensor เพื่ออ่านอุณหภูมิห้องด้วย Arduino และด้วย AVR Microcontroller ตรวจสอบการวัดความชื้นและอุณหภูมิโดยใช้ Arduino
คำอธิบายการเขียนโปรแกรม:
เมื่อทุกอย่างมีการเชื่อมต่อตามวงจรที่เราสามารถเปิด PI เพื่อเขียนโปรแกรมใน PYHTON
เราจะพูดถึงคำสั่งบางอย่างที่เราจะใช้ในโปรแกรม PYHTON
เรากำลังจะนำเข้าไฟล์ GPIO จากไลบรารีฟังก์ชันด้านล่างช่วยให้เราสามารถตั้งโปรแกรมพิน GPIO ของ PI ได้ นอกจากนี้เรายังเปลี่ยนชื่อ "GPIO" เป็น "IO" ดังนั้นในโปรแกรมเมื่อใดก็ตามที่เราต้องการอ้างถึงพิน GPIO เราจะใช้คำว่า 'IO'
นำเข้า RPi.GPIO เป็น IO
บางครั้งเมื่อพิน GPIO ที่เราพยายามใช้อยู่อาจจะทำหน้าที่อื่น ๆ ในกรณีนั้นเราจะได้รับคำเตือนขณะดำเนินการโปรแกรม คำสั่งด้านล่างบอกให้ PI เพิกเฉยต่อคำเตือนและดำเนินการกับโปรแกรม
IO.setwarnings (เท็จ)
เราสามารถอ้างอิงพิน GPIO ของ PI ไม่ว่าจะด้วยหมายเลขพินบนบอร์ดหรือตามหมายเลขฟังก์ชัน เช่นเดียวกับ 'PIN 29' บนกระดานคือ 'GPIO5' เราบอกตรงนี้ว่าเราจะแทนหมุดตรงนี้ด้วย '29' หรือ '5'
IO.setmode (IO.BCM)
เรากำลังตั้ง 8 พินเป็นพินอินพุต เราจะตรวจจับข้อมูล ADC 8 บิตโดยพินเหล่านี้
IO.setup (4, IO.IN) IO.setup (17, IO.IN) IO.setup (27, IO.IN) IO.setup (22, IO.IN) IO.setup (5, IO.IN) IO.setup (6, IO.IN) IO.setup (13, IO.IN) IO.setup (19, IO.IN)
ในกรณีที่เงื่อนไขในวงเล็บปีกกาเป็นจริงข้อความภายในลูปจะดำเนินการหนึ่งครั้ง ดังนั้นหาก GPIO พิน 19 สูงขึ้นข้อความภายในลูป IF จะถูกดำเนินการหนึ่งครั้ง หาก GPIO พิน 19 ไม่สูงไปข้อความภายในลูป IF จะไม่ถูกดำเนินการ
ถ้า (IO.input (19) == True):
คำสั่งด้านล่างนี้ใช้เป็นลูปตลอดไปโดยคำสั่งนี้คำสั่งภายในลูปนี้จะดำเนินการอย่างต่อเนื่อง
ในขณะที่ 1:
คำอธิบายเพิ่มเติมเกี่ยวกับรหัสมีให้ในส่วนรหัสด้านล่าง
หลังจากเขียนโปรแกรมแล้วก็ถึงเวลาดำเนินการ ก่อนดำเนินการโปรแกรมให้พูดถึงสิ่งที่เกิดขึ้นในวงจรเป็นสรุป เซ็นเซอร์ LM35 ตัวแรกตรวจจับอุณหภูมิห้องและให้แรงดันไฟฟ้าอนาล็อกที่เอาต์พุต แรงดันไฟฟ้าตัวแปรนี้แสดงอุณหภูมิเชิงเส้นด้วย + 10mV ต่อºC สัญญาณนี้ถูกป้อนให้กับชิป ADC0804 ชิปนี้จะแปลงค่าอนาล็อกเป็นค่าดิจิทัลโดยมี 255/200 = 1.275 นับต่อ 10mv หรือ 1.275 นับเป็นเวลา 1 องศา การนับนี้ถูกนำมาโดย PI GPIO โปรแกรมจะแปลงการนับเป็นค่าอุณหภูมิและแสดงบนหน้าจอ อุณหภูมิทั่วไปที่อ่านโดย PI แสดงไว้ด้านล่าง
ด้วยเหตุนี้เรานี้ตรวจสอบอุณหภูมิราสเบอร์รี่ Pi