Raspberry Pi เป็นบอร์ดที่ใช้โปรเซสเซอร์สถาปัตยกรรม ARM ที่ออกแบบมาสำหรับวิศวกรอิเล็กทรอนิกส์และมือสมัครเล่น PI เป็นหนึ่งในแพลตฟอร์มการพัฒนาโครงการที่น่าเชื่อถือที่สุดในขณะนี้ ด้วยความเร็วโปรเซสเซอร์ที่สูงขึ้นและ RAM 1 GB PI สามารถใช้กับโปรเจ็กต์ที่มีรายละเอียดสูงมากมายเช่นการประมวลผลภาพและ Internet of Things
สำหรับการทำโครงการที่มีรายละเอียดสูงจำเป็นต้องเข้าใจฟังก์ชันพื้นฐานของ PI เราจะกล่าวถึงฟังก์ชันพื้นฐานทั้งหมด ของ Raspberry Pi ในบทช่วยสอนเหล่านี้ ในแต่ละบทช่วยสอนเราจะพูดถึงฟังก์ชันหนึ่งของ PI ในตอนท้ายของ ซีรีส์การสอน Raspberry Piนี้คุณจะสามารถทำโปรเจ็กต์ระดับสูงได้ด้วยตัวเอง ดูบทช่วยสอนด้านล่าง:
- เริ่มต้นกับ Raspberry Pi
- การกำหนดค่า Raspberry Pi
- ไฟ LED Blinky
- การเชื่อมต่อปุ่ม Raspberry Pi
- Raspberry Pi PWM generation
- การควบคุม DC Motor โดยใช้ Raspberry Pi
- Stepper Motor Control พร้อม Raspberry Pi
- การเชื่อมต่อ Shift Register กับ Raspberry Pi
ในการกวดวิชานี้เราจะติดต่อ ADC (อนาล็อกเพื่อการแปลงเป็นดิจิตอล) ชิปราสเบอร์รี่ Pi เรารู้พารามิเตอร์ทั้งหมดของอะนาล็อกหมายความว่ามีการเปลี่ยนแปลงอย่างต่อเนื่องตลอดเวลา สมมติว่าเป็นอุณหภูมิของห้องอุณหภูมิห้องจะแปรผันตามเวลาอย่างต่อเนื่อง อุณหภูมินี้ระบุด้วยตัวเลขทศนิยม แต่ในโลกดิจิตอลไม่มีตัวเลขทศนิยมดังนั้นเราจึงจำเป็นต้องแปลงค่าอนาล็อกเป็นดิจิตอลมูลค่าขั้นตอนการแปลงนี้จะกระทำโดยเทคนิค ADC เรียนรู้เพิ่มเติมเกี่ยวกับ ADC ที่นี่: ข้อมูลเบื้องต้นเกี่ยวกับ ADC0804
ADC0804 และ Raspberry Pi:
ตัวควบคุมปกติมีช่อง ADC แต่สำหรับ PI ไม่มีช่อง ADC ให้ภายใน ดังนั้นหากเราต้องการเชื่อมต่อเซ็นเซอร์อนาล็อกใด ๆ เราจำเป็นต้องมีหน่วยแปลง ADC ดังนั้นเพื่อวัตถุประสงค์ในการที่เราจะไปอินเตอร์เฟซ ADC0804 กับราสเบอร์รี่ Pi
ADC0804 เป็นชิปที่ออกแบบมาเพื่อแปลงสัญญาณแอนะล็อกเป็นข้อมูลดิจิตอล 8 บิต ชิปนี้เป็นหนึ่งในซีรีส์ยอดนิยมของ ADC มันคือหน่วยการแปลง 8 บิตดังนั้นเราจึงมีค่าหรือ 0 ถึง 255 ค่า ด้วยแรงดันไฟฟ้าที่วัดได้สูงสุด 5V เราจะมีการเปลี่ยนแปลงทุกๆ 19.5mV ด้านล่างนี้คือ 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
เรียนรู้เพิ่มเติมเกี่ยวกับ GPIO Pins ของ Raspberry Pi ที่นี่และอ่านบทช่วยสอนก่อนหน้าของเรา
ส่วนประกอบที่ต้องการ:
ที่นี่เราจะใช้ ราสเบอร์รี่ Pi 2 รุ่น B กับ Raspbian Jessie OS ข้อกำหนดฮาร์ดแวร์และซอฟต์แวร์พื้นฐานทั้งหมดได้กล่าวไว้ก่อนหน้านี้คุณสามารถค้นหาได้ในบทนำ Raspberry Pi นอกเหนือจากที่เราต้องการ:
- หมุดเชื่อมต่อ
- 220Ωหรือ1KΩตัวต้านทาน (17 ชิ้น)
- หม้อ 10K
- ตัวเก็บประจุ 0.1µF (2 ชิ้น)
- ADC0804 IC
- คณะกรรมการขนมปัง
คำอธิบายวงจร:
ทำงานกับแรงดันไฟฟ้า + 5v และสามารถวัดช่วงแรงดันไฟฟ้าแปรผันในช่วง 0-5V
การเชื่อมต่อสำหรับการเชื่อมต่อ ADC0804 กับ Raspberry PIแสดงในแผนภาพวงจรด้านบน
ADC มีเสียงรบกวนอยู่เสมอเสียงนี้อาจส่งผลต่อประสิทธิภาพอย่างมากดังนั้นเราจึงใช้ตัวเก็บประจุ 0.1uF สำหรับการกรองสัญญาณรบกวน หากไม่มีสิ่งนี้จะมีความผันผวนมากมายที่เอาต์พุต
ชิปทำงานบนนาฬิกาออสซิลเลเตอร์ RC (Resistor-Capacitor) ดังแสดงในแผนภาพวงจร, C2 และ R20 รูปแบบนาฬิกา สิ่งสำคัญที่ต้องจำไว้คือตัวเก็บประจุ C2 สามารถเปลี่ยนเป็นค่าที่ต่ำกว่าเพื่อให้อัตราการแปลง ADC สูงขึ้น อย่างไรก็ตามด้วยความเร็วที่สูงขึ้นความแม่นยำจะลดลง ดังนั้นหากแอปพลิเคชันต้องการความแม่นยำที่สูงขึ้นให้เลือกตัวเก็บประจุที่มีค่าสูงกว่าและสำหรับความเร็วที่สูงขึ้นให้เลือกตัวเก็บประจุที่มีค่าต่ำกว่า
คำอธิบายการเขียนโปรแกรม:
เมื่อทุกอย่างเชื่อมต่อตามแผนภาพวงจรแล้วเราสามารถเปิด 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:
คำอธิบายเพิ่มเติมเกี่ยวกับโปรแกรมมีให้ในส่วนรหัสด้านล่าง
การทำงาน:
หลังจากเขียนโปรแกรมและเรียกใช้งานแล้วคุณจะเห็น '0' บนหน้าจอ '0' หมายถึง 0 โวลต์ที่อินพุต
หากเราปรับหม้อ 10K ที่เชื่อมต่อกับชิปเราจะเห็นการเปลี่ยนแปลงของค่าบนหน้าจอ ค่าบนหน้าจอจะเลื่อนไปเรื่อย ๆ ซึ่งเป็นค่าดิจิทัลที่อ่านโดย PI
สมมติว่าถ้าเราเอาหม้อไปที่จุดกึ่งกลางเรามี + 2.5V ที่อินพุต ADC0804 เราจึงเห็น 128 บนหน้าจอดังที่แสดงด้านล่าง
สำหรับค่าอะนาล็อก + 5V เราจะมี 255
ดังนั้นโดยการเปลี่ยนหม้อเราจึงเปลี่ยนแรงดันไฟฟ้าจาก 0 ถึง + 5V ที่อินพุต ADC0804 ด้วย PI นี้อ่านค่าตั้งแต่ 0-255 ค่าจะถูกพิมพ์บนหน้าจอ
ดังนั้นเราจึงมีการเชื่อม ADC0804 เพื่อ Raspberry Pi