- วัสดุที่ต้องการ:
- ADC0804 โมดูล ADC 8 บิตช่องเดียว:
- แผนภาพวงจรและคำอธิบาย:
- การเขียนโปรแกรม Raspberry Pi:
- แสดงค่า Flex Sensor บน LCD โดยใช้ Raspberry Pi:
Raspberry Pi เป็นบอร์ดที่ใช้โปรเซสเซอร์สถาปัตยกรรม ARM ที่ออกแบบมาสำหรับวิศวกรอิเล็กทรอนิกส์และมือสมัครเล่น PI เป็นหนึ่งในแพลตฟอร์มการพัฒนาโครงการที่น่าเชื่อถือที่สุดในขณะนี้ ด้วยความเร็วโปรเซสเซอร์ที่สูงขึ้นและ RAM 1 GB PI สามารถใช้กับโปรเจ็กต์ที่มีรายละเอียดสูงมากมายเช่นการประมวลผลภาพและ Internet of Things มีสิ่งดีๆมากมายที่สามารถทำได้ด้วย PI แต่คุณสมบัติที่น่าเศร้าอย่างหนึ่งก็คือมันไม่มีโมดูล ADC ในตัว
เฉพาะในกรณีที่ Raspberry Pi สามารถเชื่อมต่อกับเซ็นเซอร์ได้ก็จะสามารถรับรู้เกี่ยวกับพารามิเตอร์ในโลกแห่งความจริงและโต้ตอบกับมันได้ เซ็นเซอร์ส่วนใหญ่มีเซ็นเซอร์อนาล็อกดังนั้นเราควรเรียนรู้ที่จะใช้ IC โมดูล ADC ภายนอกกับ Raspberry Pi เพื่อเชื่อมต่อเซ็นเซอร์เหล่านี้ ในโครงการนี้เราจะเรียนรู้ว่าเราสามารถเชื่อมต่อ Flex Sensor กับ Raspberry Pi และแสดงค่าบนหน้าจอ LCDได้อย่างไร
วัสดุที่ต้องการ:
- Raspberry Pi (รุ่นใดก็ได้)
- ADC0804 IC
- จอ LCD 16 * 2
- เซนเซอร์ Flex
- ตัวต้านทานและตัวเก็บประจุ
- Breadboard หรือ perf board
ADC0804 โมดูล ADC 8 บิตช่องเดียว:
ก่อนที่เราจะดำเนินการใด ๆ ต่อไปให้เราได้เรียนรู้เกี่ยวกับเรื่องนี้ADC0804 IC และวิธีการใช้นี้กับราสเบอร์รี่ปี่ADC0804 เป็น IC 8 บิตช่องเดียวซึ่งหมายความว่าสามารถอ่านค่า ADC เดียวและแมปกับข้อมูลดิจิทัล 8 บิต Raspberry Pi สามารถอ่านข้อมูลดิจิทัล 8 บิตเหล่านี้ได้ดังนั้นค่าจะเป็น 0-255 เนื่องจาก 2 ^ 8 คือ 256 ดังที่แสดงในพินของ IC ด้านล่างหมุด DB0 ถึง DB7 ใช้เพื่ออ่านดิจิตอลเหล่านี้ ค่า
สิ่งสำคัญอีกอย่างที่นี่คือ 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 กับ Raspberry Pi ดังนั้นเมื่อใดก็ตามที่ลอจิก '1' ถูกนำเสนอโดย ADC0804 เราจะเห็น + 2.5V ที่พิน PI GPIO แทนที่จะเป็น + 5V เรียนรู้เพิ่มเติมเกี่ยวกับ ADC ที่นี่: ข้อมูลเบื้องต้นเกี่ยวกับ ADC0804
ด้านล่างนี้คือภาพของโมดูล ADC โดยใช้ ADC0804 ที่เราสร้างขึ้นบน Perf Board:
แผนภาพวงจรและคำอธิบาย:
แผนภาพวงจรที่สมบูรณ์สำหรับการเชื่อมต่อ Flex Sensor กับ Raspberry Piแสดงอยู่ด้านล่าง คำอธิบายเดียวกันมีดังนี้
นี้ราสเบอร์รี่ปี่เซ็นเซอร์ดิ้น วงจรอาจดูเหมือนจะเป็นบิตซับซ้อนที่มีจำนวนมากของสาย แต่ถ้าคุณใช้เวลามองใกล้ที่สุดของสายจะเชื่อมต่อโดยตรงจากแอลซีดีและ 8 บิตพิข้อมูลไปยังปี่ราสเบอร์รี่ ตารางต่อไปนี้จะช่วยคุณในการสร้างและยืนยันการเชื่อมต่อ
ชื่อพิน |
หมายเลข Raspberry Pin |
ชื่อ Raspberry Pi GPIO |
LCD Vss |
พิน 4 |
พื้น |
LCD Vdd |
พิน 6 |
Vcc (+ 5V) |
LCD Vee |
พิน 4 |
พื้น |
LCD อาร์เอส |
พิน 38 |
GPIO 20 |
LCD RW |
ขา 39 |
พื้น |
LCD E. |
ขา 40 |
GPIO 21 |
LCD D4 |
พิน 3 |
GPIO 2 |
LCD D5 |
พิน 5 |
GPIO 3 |
LCD D6 |
พิน 7 |
GPIO 4 |
LCD D7 |
พิน 11 |
GPIO 17 |
ADC0804 Vcc |
พิน 2 |
Vcc (+ 5V) |
ADC0804 B0 |
Pin 19 (ถึง 5.1K) |
GPIO 10 |
ADC0804 B1 |
Pin 21 (ถึง 5.1K) |
GPIO 9 |
ADC0804 B2 |
Pin 23 (ถึง 5.1K) |
GPIO 11 |
ADC0804 B3 |
Pin 29 (ถึง 5.1K) |
GPIO 5 |
ADC0804 B4 |
Pin 31 (ถึง 5.1K) |
GPIO 6 |
ADC0804 B5 |
Pin 33 (ถึง 5.1K) |
GPIO 13 |
ADC0804 B6 |
Pin 35 (ถึง 5.1K) |
GPIO 19 |
ADC0804 B7 |
Pin 37 (ถึง 5.1K) |
GPIO 26 |
ADC0804 WR / INTR |
พิน 15 |
GPIO 22 |
คุณสามารถใช้รูปภาพต่อไปนี้เพื่อกำหนดหมายเลขพินบน Raspberry ตั้งแต่
เช่นเดียวกับโมดูล ADC ทั้งหมดADC0804 IC ยังต้องการสัญญาณนาฬิกาในการทำงานโชคดีที่ IC นี้มีแหล่งสัญญาณนาฬิกาภายในดังนั้นเราจึงต้องเพิ่มวงจร RC ให้กับหมุด CLK ในและ CLK R ดังที่แสดงในวงจร เราใช้ค่า 10K และ 105pf แต่เราสามารถใช้ค่าใดก็ได้เช่น 1uf, 0.1uf, 0.01uf ก็ควรใช้งานได้เช่นกัน
จากนั้นในการเชื่อมต่อเซ็นเซอร์ Flexเราได้ใช้วงจรแบ่งที่มีศักยภาพโดยใช้ตัวต้านทาน 100K เนื่องจากเซ็นเซอร์ Flex งอความต้านทานจะแตกต่างกันไปและศักยภาพจะลดลงทั่วทั้งตัวต้านทาน การลดลงนี้วัดโดย ADC0804 IC และข้อมูล 8 บิตจะถูกสร้างขึ้นตามนั้น
ตรวจสอบโครงการอื่น ๆที่เกี่ยวข้องกับ Flex Sensor:
- Flex Sensor การเชื่อมต่อกับไมโครคอนโทรลเลอร์ AVR
- ตัวควบคุมเกม Angry Bird ที่ใช้ Arduino โดยใช้ Flex Sensor
- การควบคุมเซอร์โวมอเตอร์โดย Flex Sensor
- การสร้างโทนเสียงโดยการแตะนิ้วโดยใช้ Arduino
การเขียนโปรแกรม Raspberry Pi:
เมื่อเราเชื่อมต่อเสร็จแล้วเราควรอ่านสถานะของ 8 บิตเหล่านี้โดยใช้ Raspberry Pi และแปลงเป็นทศนิยมเพื่อให้เราสามารถใช้ประโยชน์ได้ โปรแกรมสำหรับทำเช่นเดียวกันและแสดงค่าผลลัพธ์บนหน้าจอ LCD มีให้ที่ท้ายหน้านี้ รหัสเพิ่มเติมจะอธิบายไว้ในเรือสำเภาขนาดเล็กด้านล่าง
เราจำเป็นต้องมีจอแอลซีดีห้องสมุดเพื่อติดต่อกับพี่จอแอลซีดีสำหรับสิ่งนี้เราใช้ไลบรารีที่พัฒนาโดย shubham ซึ่งจะช่วยให้เราเชื่อมต่อกับจอ LCD 16 * 2 กับ Pi ในโหมดสี่สาย นอกจากนี้เรายังต้องการไลบรารีเพื่อใช้ประโยชน์จากเวลาและพิน Pi GPIO
หมายเหตุ : ควรดาวน์โหลด lcd.py จากที่นี่และวางไว้ในไดเร็กทอรีเดียวกับที่บันทึกโปรแกรมนี้ จากนั้นโค้ดจะคอมไพล์
นำเข้า lcd # นำเข้าไลบรารี LCD โดย [email protected] เวลานำเข้า #Import time import RPi.GPIO เป็น GPIO #GPIO จะแสดงเป็น GPIO เท่านั้น
คำจำกัดความขาจอแอลซีดีได้รับมอบหมายให้ตัวแปรที่แสดงด้านล่าง โปรดทราบว่าตัวเลขเหล่านี้เป็นหมายเลขพิน GPIO ไม่ใช่หมายเลขพินจริง คุณสามารถใช้ตารางด้านบนเพื่อเปรียบเทียบหมายเลข GPIO กับหมายเลขพิน ไบนารีอาร์เรย์จะรวมหมายเลขพินข้อมูลทั้งหมดและบิตอาร์เรย์จะเก็บค่าผลลัพธ์ของพิน GPIO ทั้งหมด
#LCD นิยามพิน D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 ไบนารี = (10,9,11,5,6,13,19,26) # อาร์เรย์ของหมายเลขพินเชื่อมต่อกับ DB0- DB7 bits = #resulting ค่าของข้อมูล 8 บิต
ตอนนี้เราจะต้องกำหนด input และ output หมุด พินข้อมูลทั้งเจ็ดจะเป็นพินอินพุตและพินทริกเกอร์ (RST และ INTR) จะเป็นพินเอาต์พุต เราสามารถอ่านค่าข้อมูล 8 บิตจากพินอินพุตได้ก็ต่อเมื่อเราทริกเกอร์พินเอาต์พุตให้สูงในช่วงเวลาหนึ่งตามแผ่นข้อมูล เนื่องจากเราได้ประกาศพินไบนารีในอาร์เรย์ไบนารีเราสามารถใช้ สำหรับ ลูปสำหรับการประกาศดังที่แสดงด้านล่าง
สำหรับไบนารีในไบนารี: GPIO.setup (binary, GPIO.IN) # พินไบนารีทั้งหมดเป็นพินอินพุต #Trigger พิน GPIO.setup (22, GPIO.OUT) #WR และ INTR พิน
ขณะนี้ใช้คำสั่งไลบรารี LCD เราสามารถเริ่มต้นโมดูล LCDและแสดงข้อความแนะนำเล็ก ๆ ดังที่แสดงด้านล่าง
mylcd = lcd.lcd () mylcd.begin (D4, D5, D6, D7, RS, EN) #Intro Message mylcd.Print ("Flex Sensor with") mylcd.setCursor (2,1) mylcd.Print ("Raspberry Pi ") time.sleep (2) mylcd.clear ()
ภายในลูป ในขณะที่ ไม่มีที่สิ้นสุดเราจะเริ่มอ่านค่าไบนารีแปลงเป็นทศนิยมและอัปเดตผลลัพธ์บน LCD ที่กล่าวก่อนหน้าก่อนที่เราจะอ่านค่าเอดีซีที่เราควรจะทำให้พิทริกเกอร์ที่จะสูงเป็นเวลาโดยเฉพาะอย่างยิ่งเพื่อเปิดใช้งานการแปลงเอดีซีซึ่งทำได้โดยใช้บรรทัดต่อไปนี้
GPIO.output (22, 1) # เปิด Trigger time.sleep (0.1) GPIO.output (22, 0) # ปิดทริกเกอร์
ตอนนี้เราควรจะอ่านหมุด 8 ข้อมูลและการปรับปรุงผลในบิตอาร์เรย์ ในการทำเช่นนี้เราใช้ for loop เพื่อเปรียบเทียบพินอินพุตแต่ละอันกับ True และ False ถ้าเป็นจริงอาร์เรย์บิตตามลำดับจะถูกสร้างเป็น 1 อย่างอื่นมันจะถูกทำให้เป็น 0 นี่คือข้อมูล 8 บิตทั้งหมดจะทำให้เป็น 0 และ 1 ตามลำดับของค่าที่อ่าน
# อ่านพินอินพุตและอัปเดตผลลัพธ์ในบิตอาร์เรย์สำหรับ i ในช่วง (8): if (GPIO.input (binarys) == True): bits = 1 if (GPIO.input (binarys) == False): bits = 0
เมื่อเรามีการปรับปรุงบิตอาร์เรย์เราควรแปลงอาร์เรย์นี้เป็นค่าทศนิยมนี่ไม่ใช่อะไรนอกจากการแปลงไบนารีเป็นทศนิยม สำหรับข้อมูลไบนารี 8 บิต 2 ^ 8 คือ 256 ดังนั้นเราจะได้ข้อมูลทศนิยมจาก 0 ถึง 255 ใน python ตัวดำเนินการ“ **” จะใช้เพื่อค้นหาพลังของค่าใด ๆ เนื่องจาก บิต เริ่มต้นด้วย MSB เราจึงคูณด้วย 2 ^ (7 ตำแหน่ง) วิธีนี้เราสามารถแปลงค่าไบนารีทั้งหมดเป็นข้อมูลทศนิยมจากนั้นแสดงบนจอ LCD
# คำนวณค่าทศนิยมโดยใช้บิตอาร์เรย์สำหรับ i ในช่วง (8): decimal = decimal + (bits * (2 ** (7-i)))
เมื่อเราทราบค่าทศนิยมแล้วก็สามารถคำนวณค่าแรงดันไฟฟ้าได้อย่างง่ายดาย เราต้องคูณมันด้วย 19.63 เนื่องจากสำหรับ 5VADC 8 บิตแต่ละบิตจะมีการเปรียบเทียบกันที่ 19.3 มิลลิโวลต์ ค่าแรงดันไฟฟ้าที่ได้คือค่าของแรงดันไฟฟ้าที่ปรากฏบนพิน Vin + และ Vin- ของ ADC0804 IC
# คำนวณค่าแรงดันค่าแรงดัน = ทศนิยม * 19.63 * 0.001 # หนึ่งหน่วยคือ 19.3mV
การใช้ค่าของแรงดันไฟฟ้าเราสามารถระบุได้ว่าเซ็นเซอร์เฟล็กซ์งออย่างไรและงอไปในทิศทางใด ในบรรทัดด้านล่างฉันเพิ่งเปรียบเทียบค่าแรงดันไฟฟ้าที่อ่านได้กับค่าแรงดันไฟฟ้าที่กำหนดไว้ล่วงหน้าเพื่อระบุตำแหน่งของเซ็นเซอร์ Flexบนหน้าจอ LCD
#compare แรงดันไฟฟ้าและสถานะการแสดงผลของเซ็นเซอร์ mylcd.setCursor (1,1) if (Voltage> 3.8): mylcd.Print ("Bent Forward") elif (Voltage <3.5): mylcd.Print ("Bent Backward") else: mylcd.Print ("เสถียร")
ในทำนองเดียวกันคุณสามารถใช้ค่าแรงดันไฟฟ้าเพื่อทำงานใด ๆ ที่คุณต้องการให้ Raspberry Pi ดำเนินการได้
แสดงค่า Flex Sensor บน LCD โดยใช้ Raspberry Pi:
การทำงานของโครงการนั้นง่ายมาก แต่อย่าลืมดาวน์โหลดไฟล์ส่วนหัวlcd.pyและวางไว้ในไดเร็กทอรีเดียวกับที่มีโปรแกรมปัจจุบันของคุณอยู่ จากนั้นทำการเชื่อมต่อที่แสดงในแผนภาพวงจรโดยใช้เขียงหั่นขนมหรือบอร์ด perf และเรียกใช้โปรแกรมด้านล่างบน Pi ของคุณและคุณควรจะทำงานได้ คุณตั้งค่าควรมีลักษณะดังนี้ด้านล่าง
ในฐานะที่เป็นแสดงให้เห็นถึงจอ LCD จะแสดงค่าทศนิยม, ค่าไฟฟ้าและเซ็นเซอร์ตำแหน่ง เพียงแค่งอเซ็นเซอร์ไปข้างหน้าหรือข้างหลังคุณก็จะสามารถเห็นแรงดันไฟฟ้าและค่าทศนิยมที่แปรผันได้และข้อความสถานะจะปรากฏ คุณสามารถเชื่อมต่อเซ็นเซอร์ใดก็ได้และสังเกตเห็นแรงดันไฟฟ้าที่แตกต่างกันไป
การทำงานที่สมบูรณ์ของการกวดวิชาที่สามารถพบได้ในวิดีโอได้รับด้านล่างหวังว่าคุณจะเข้าใจโครงการและสนุกกับการสร้างสิ่งที่คล้ายกัน หากคุณมีข้อสงสัยโปรดทิ้งไว้ในส่วนความคิดเห็นหรือในฟอรัมและเราจะพยายามอย่างเต็มที่ในการตอบคำถาม