- ผังโครงการ:
- ข้อกำหนดโครงการ
- แผนภูมิวงจรรวม:
- ติดตั้งการอ้างอิงสำหรับ Raspberry Pi Oscilloscope:
- รหัส Python สำหรับ Raspberry Pi Oscilloscope:
- Raspberry Pi Oscilloscope ในการดำเนินการ:
สวัสดีทุกคนยินดีต้อนรับสู่โพสต์ของวันนี้ สิ่งที่น่าสนใจที่สุดอย่างหนึ่งในการเป็นผู้ผลิตคือการรู้วิธีพัฒนาเครื่องมือชั่วคราวคุณจะไม่ติดขัดในการทำงานในโครงการใด ๆ เมื่อคุณมีความเก่งกาจแบบนั้น ดังนั้นวันนี้ผมจะมาแบ่งปันวิธีการสร้างRaspberry Piตามรุ่นชั่วคราวซึ่งเป็นหนึ่งในเครื่องมือที่สำคัญที่สุดในวิศวกรรมไฟฟ้า / อิเล็กทรอนิกส์ สโคป
ออสซิลโลสโคปเป็นเครื่องมือทดสอบอิเล็กทรอนิกส์ที่ช่วยให้มองเห็นภาพและการสังเกตแรงดันไฟฟ้าของสัญญาณที่แตกต่างกันโดยปกติจะเป็นพล็อตสองมิติที่มีสัญญาณอย่างน้อยหนึ่งสัญญาณที่พล็อตตามเวลา โครงการในวันนี้จะพยายามจำลองความสามารถในการแสดงภาพสัญญาณของออสซิลโลสโคปโดยใช้ Raspberry Pi และโมดูลตัวแปลงอนาล็อกเป็นดิจิตอล
ผังโครงการ:
การจำลองภาพสัญญาณของออสซิลโลสโคปโดยใช้ Raspberry Pi จะต้องมีขั้นตอนต่อไปนี้
1. ทำการแปลงสัญญาณอินพุตแบบดิจิตอลเป็นอนาล็อก
2. เตรียมข้อมูลผลลัพธ์เพื่อเป็นตัวแทน
3. พล็อตข้อมูลบนกราฟเวลาสด
แผนภาพบล็อกที่เรียบง่ายสำหรับโครงการนี้จะมีลักษณะเหมือนแผนภาพด้านล่าง
ข้อกำหนดโครงการ
ข้อกำหนดสำหรับโครงการนี้สามารถแบ่งออกเป็นสอง:
- ข้อกำหนดฮาร์ดแวร์
- ข้อกำหนดของซอฟต์แวร์
ข้อกำหนดฮาร์ดแวร์
ในการสร้างโครงการนี้จำเป็นต้องมีส่วนประกอบ / ส่วนต่อไปนี้
- Raspberry pi 2 (หรือรุ่นอื่น ๆ)
- การ์ด SD 8 หรือ 16GB
- สาย LAN / Ethernet
- แหล่งจ่ายไฟหรือสาย USB
- ADS1115 ADC
- LDR (เป็นทางเลือกสำหรับการทดสอบ)
- ตัวต้านทาน 10k หรือ 1k
- สายจัมเปอร์
- เขียงหั่นขนม
- ตรวจสอบหรือวิธีอื่น ๆ ในการดูเดสก์ท็อปของ pi (รวม VNC)
ข้อกำหนดของซอฟต์แวร์
ข้อกำหนดของซอฟต์แวร์สำหรับโครงการนี้โดยพื้นฐานแล้วคือโมดูล python ( matplotlib และ drawnow ) ที่จะใช้สำหรับการแสดงข้อมูลและโมดูล Adafruit สำหรับการเชื่อมต่อกับชิป ADS1115 ADC ฉันจะแสดงวิธีการติดตั้งโมดูลเหล่านี้บน Raspberry Pi ในขณะที่เราดำเนินการต่อ
แม้ว่าบทช่วยสอนนี้จะใช้งานได้โดยไม่คำนึงถึง raspberry pi OS ที่ใช้ แต่ฉันจะใช้ Raspberry Pi stretch OS และฉันจะถือว่าคุณคุ้นเคยกับการตั้งค่า Raspberry Pi ด้วยระบบปฏิบัติการแบบยืด Raspbian และคุณรู้วิธี SSH ลงในราสเบอร์รี่ pi โดยใช้ซอฟต์แวร์เทอร์มินัลเช่นผงสำหรับอุดรู หากคุณมีปัญหาเกี่ยวกับสิ่งนี้มีบทเรียน Raspberry Pi มากมายในเว็บไซต์นี้ที่สามารถช่วยได้
ด้วยส่วนประกอบฮาร์ดแวร์ทั้งหมดมาสร้างแผนผังและเชื่อมต่อส่วนประกอบเข้าด้วยกัน
แผนภูมิวงจรรวม:
การแปลงสัญญาณอนาล็อกให้เป็นสัญญาณดิจิตอลซึ่งสามารถมองเห็นด้วยราสเบอร์รี่ Pi เราจะใช้ชิป ADC ADS1115 ชิปนี้มีความสำคัญเนื่องจาก Raspberry Pi ซึ่งแตกต่างจาก Arduino และไมโครคอนโทรลเลอร์ส่วนใหญ่ไม่มีตัวแปลงอนาล็อกเป็นดิจิตอล (ADC) ในตัว ในขณะที่เราสามารถใช้ชิป ADC ที่เข้ากันได้กับราสเบอร์รี่ pi แต่ฉันชอบชิปนี้เนื่องจากมีความละเอียดสูง (16 บิต) และเอกสารข้อมูลที่มีการบันทึกไว้อย่างดีและคำแนะนำการใช้งานโดย Adafruit คุณยังสามารถตรวจสอบการสอน Raspberry Pi ADC ของเราเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้
ADC เป็นอุปกรณ์ที่ใช้ I2C และควรเชื่อมต่อกับ Raspberry Pi ตามที่แสดงในแผนผังด้านล่าง
เพื่อความชัดเจนการเชื่อมต่อพินระหว่างส่วนประกอบทั้งสองมีอธิบายไว้ด้านล่าง
ADS1115 และการเชื่อมต่อ Raspberry Pi:
VDD - 3.3v
GND - GND
SDA - SDA
SCL - SCL
เมื่อการเชื่อมต่อเสร็จสิ้นให้เปิดเครื่อง pi ของคุณและดำเนินการติดตั้งการอ้างอิงที่ระบุไว้ด้านล่าง
ติดตั้งการอ้างอิงสำหรับ Raspberry Pi Oscilloscope:
ก่อนที่เราจะเริ่มเขียนสคริปต์ python เพื่อดึงข้อมูลจาก ADC และลงจุดบนกราฟสดเราจำเป็นต้องเปิดใช้งานอินเทอร์เฟซการสื่อสาร I2Cของ raspberry pi และติดตั้งข้อกำหนดซอฟต์แวร์ที่กล่าวถึงก่อนหน้านี้ ซึ่งจะทำตามขั้นตอนด้านล่างเพื่อให้ง่ายต่อการปฏิบัติตาม:
ขั้นตอนที่ 1: เปิดใช้งานอินเทอร์เฟซ Raspberry Pi I2C
ในการเปิดใช้งาน I2C จากเทอร์มินัลให้รัน;
sudo raspi-config
เมื่อแผงการกำหนดค่าเปิดขึ้นให้เลือกตัวเลือกอินเทอร์เฟซเลือก I2C และคลิกเปิดใช้งาน
ขั้นตอนที่ 2: อัปเดต Raspberry pi
สิ่งแรกที่ฉันทำก่อนเริ่มโปรเจ็กต์คือการอัปเดต Pi ด้วยวิธีนี้ฉันมั่นใจว่าทุกสิ่งในระบบปฏิบัติการเป็นปัจจุบันและฉันจะไม่พบปัญหาความเข้ากันได้กับซอฟต์แวร์ล่าสุดที่ฉันเลือกติดตั้งบน Pi ในการดำเนินการนี้ให้เรียกใช้คำสั่งด้านล่างสองคำสั่ง:
sudo apt-get update sudo apt-get upgrade
ขั้นตอนที่ 3: ติดตั้งไลบรารี Adafruit ADS1115 สำหรับ ADC
เมื่ออัปเดตเสร็จแล้วเราก็พร้อมที่จะติดตั้งการอ้างอิงโดยเริ่มจากโมดูล Adafruit python สำหรับชิป ADS115 ตรวจสอบให้แน่ใจว่าคุณอยู่ในโฮมไดเร็กทอรี Raspberry Pi โดยเรียกใช้
ซีดี ~
จากนั้นติดตั้ง build-essentials โดยรัน;
sudo apt-get install build-essential python-dev python-smbus git
จากนั้นโคลนโฟลเดอร์คอมไพล์ Adafruit สำหรับไลบรารีโดยเรียกใช้
git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
เปลี่ยนเป็นไดเร็กทอรีของไฟล์โคลนและเรียกใช้ไฟล์ติดตั้ง
cd Adafruit_Python_ADS1x1z sudo python setup.py ติดตั้ง
หลังการติดตั้งหน้าจอของคุณควรมีลักษณะดังภาพด้านล่าง
ขั้นตอนที่ 4: ทดสอบไลบรารีและการสื่อสาร 12C
ก่อนที่เราจะดำเนินการกับส่วนที่เหลือของโครงการสิ่งสำคัญคือต้องทดสอบไลบรารีและตรวจสอบให้แน่ใจว่า ADC สามารถสื่อสารกับราสเบอร์รี่ไพผ่าน I2C ในการดำเนินการนี้เราจะใช้สคริปต์ตัวอย่างที่มาพร้อมกับไลบรารี
ในขณะที่ยังอยู่ในโฟลเดอร์ Adafruit_Python_ADS1x15 ให้เปลี่ยนไดเร็กทอรีเป็นไดเร็กทอรีตัวอย่างโดยเรียกใช้
ตัวอย่างซีดี
จากนั้นเรียกใช้ตัวอย่าง sampletest.py ซึ่งแสดงค่าของสี่ช่องทางบน ADC ในรูปแบบตาราง
เรียกใช้ตัวอย่างโดยใช้:
python simpletest.py
หากเปิดใช้งานโมดูล I2C และเชื่อมต่อได้ดีคุณจะเห็นข้อมูลดังแสดงในภาพด้านล่าง
หากเกิดข้อผิดพลาดให้ตรวจสอบว่า ADC เชื่อมต่อกับการสื่อสาร PI และ I2C บน Pi ได้ดี
ขั้นตอนที่ 5: ติดตั้ง Matplotlib
เพื่อให้เห็นภาพข้อมูลเราจำเป็นต้องติดตั้งโมดูล matplotlib ซึ่งใช้ในการพล็อตกราฟทุกประเภทใน python ซึ่งสามารถทำได้โดยการเรียกใช้;
sudo apt-get ติดตั้ง python-matplotlib
คุณจะเห็นผลลัพธ์ดังภาพด้านล่าง
ขั้นตอนที่ 6: ติดตั้งโมดูล Drawnow python
สุดท้ายเราต้องติดตั้งโมดูลหลามที่ ดึง ออกมา โมดูลนี้ช่วยให้เราสามารถอัปเดตแบบสดสำหรับพล็อตข้อมูล
เราจะทำการติดตั้ง Drawow ผ่านโปรแกรมติดตั้งแพ็คเกจ python pip ดังนั้นเราต้องตรวจสอบให้แน่ใจว่าได้ติดตั้งแล้ว ซึ่งสามารถทำได้โดยการเรียกใช้;
sudo apt-get ติดตั้ง python-pip
จากนั้นเราสามารถใช้ pip เพื่อติดตั้งแพ็คเกจ drawow โดยเรียกใช้:
sudo pip ติดตั้ง Drawow
คุณควรได้รับผลลัพธ์เช่นภาพด้านล่างหลังจากเรียกใช้
เมื่อติดตั้งการอ้างอิงทั้งหมดแล้วเราก็พร้อมที่จะเขียนโค้ด
รหัส Python สำหรับ Raspberry Pi Oscilloscope:
รหัส python สำหรับPi Oscilloscopeนี้ค่อนข้างง่ายโดยเฉพาะถ้าคุณคุ้นเคยกับโมดูลpython matplotlib ก่อนที่จะแสดงรหัสทั้งหมดให้เราเห็นฉันจะพยายามแยกมันออกเป็นส่วน ๆ และอธิบายว่าแต่ละส่วนของโค้ดทำอะไรเพื่อให้คุณมีความรู้เพียงพอที่จะขยายโค้ดเพื่อทำสิ่งต่างๆได้มากขึ้น
ในขั้นตอนนี้สิ่งสำคัญคือต้องเปลี่ยนไปใช้จอภาพหรือใช้ VNC viewer อะไรก็ได้ที่คุณสามารถดูเดสก์ท็อป Raspberry Pi ของคุณได้เนื่องจากกราฟที่กำลังพล็อตจะไม่แสดงบนเทอร์มินัล
ด้วยจอแสดงผลเป็นอินเตอร์เฟซเปิดแฟ้มหลามใหม่คุณจะเรียกมันว่าชื่ออะไรก็ได้ แต่ฉันจะเรียกมันว่า scope.py
sudo nano scope.py
เมื่อสร้างไฟล์ขึ้นสิ่งแรกที่เราทำคือนำเข้าโมดูลที่เราจะใช้
เวลา นำเข้า matplotlib.pyplot เป็น plt จากการนำเข้า Drawow * นำเข้า Adafruit_ADS1x15
ต่อไปเราจะสร้างอินสแตนซ์ของไลบรารี ADS1x15 ที่ระบุ ADS1115 ADC
adc = Adafruit_ADS1x15.ADS1115 ()
ต่อไปเราจะตั้งค่าอัตราขยายของ ADC มีช่วงของอัตราขยายที่แตกต่างกันและควรเลือกตามแรงดันไฟฟ้าที่คุณคาดหวังที่อินพุตของ ADC สำหรับบทช่วยสอนนี้เรากำลังประมาณค่า 0 - 4.09v ดังนั้นเราจะใช้อัตราขยาย 1 สำหรับข้อมูลเพิ่มเติมเกี่ยวกับกำไรคุณสามารถตรวจสอบแผ่นข้อมูล ADS1015 / ADS1115
กำไร = 1
ต่อไปเราต้องสร้างตัวแปรอาร์เรย์ที่จะใช้ในการจัดเก็บข้อมูลที่จะพล็อตและอีกตัวหนึ่งเพื่อใช้เป็นจำนวนนับ
วาล = cnt = 0
ต่อไปเราจะทำให้ทราบถึงความตั้งใจของเราในการทำให้พล็อตอินเทอร์แอกทีฟเป็นที่รู้จักเพื่อให้เราสามารถพล็อตข้อมูลได้
plt.ion ()
ต่อไปเราจะเริ่มการแปลง ADC อย่างต่อเนื่องโดยระบุช่อง ADCในกรณีนี้คือช่อง 0 และเรายังระบุอัตราขยาย
ควรสังเกตว่าช่อง ADC ทั้งสี่ช่องบน ADS1115 สามารถอ่านได้ในเวลาเดียวกัน แต่ 1 ช่องสัญญาณก็เพียงพอสำหรับการสาธิตนี้
adc.start_adc (0, gain = GAIN)
ต่อไปเราจะสร้างฟังก์ชัน def makeFig เพื่อสร้างและตั้งค่าคุณสมบัติของกราฟซึ่งจะถือพล็อตสดของเรา ก่อนอื่นเราตั้งค่าขีด จำกัด ของแกน y โดยใช้ ylim หลังจากนั้นเราป้อนชื่อของพล็อตและชื่อป้ายกำกับก่อนที่เราจะระบุข้อมูลที่จะพล็อตและรูปแบบและสีของพล็อตโดยใช้ plt.plot (). นอกจากนี้เรายังสามารถระบุช่องสัญญาณ (ตามที่ระบุช่อง 0) เพื่อให้เราสามารถระบุสัญญาณแต่ละรายการเมื่อมีการใช้ ADC ทั้งสี่ช่อง plt.legend ใช้เพื่อระบุตำแหน่งที่เราต้องการข้อมูลเกี่ยวกับสัญญาณนั้น (เช่นช่อง 0) ที่แสดงบนรูป
plt.ylim (-5000,5000) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC outputs') plt.plot (val, 'ro-', label = 'lux') plt.legend (loc = 'ขวาล่าง')
ต่อไปเราจะเขียน while loop ซึ่งจะใช้อ่านข้อมูลจาก ADC อย่างต่อเนื่องและอัปเดตพล็อตตามนั้น
สิ่งแรกที่เราต้องทำคืออ่านมูลค่า Conversion ADC
ค่า = adc.get_last_result ()
ต่อไปเราจะพิมพ์ค่าบนเทอร์มินัลเพื่อให้เรายืนยันข้อมูลที่ลงจุดอีกวิธีหนึ่ง เรารอสองสามวินาทีหลังจากการพิมพ์จากนั้นเราจะผนวกข้อมูลเข้ากับรายการ (val) ที่สร้างขึ้นเพื่อจัดเก็บข้อมูลสำหรับช่องนั้น
พิมพ์ ('Channel 0: {0}'. format (value)) time.sleep (0.5) val.append (int (value))
จากนั้นเราจะเรียก drawow เพื่ออัปเดตพล็อต
Drawow (makeFig)
เพื่อให้แน่ใจว่าข้อมูลล่าสุดคือสิ่งที่มีอยู่ในพล็อตเราจะลบข้อมูลที่ดัชนี 0 หลังจากทุกๆ 50 ข้อมูลนับ
cnt = cnt + 1 ถ้า (cnt> 50): val.pop (0)
นั่นคือทั้งหมด!
รหัสหลามสมบูรณ์จะได้รับในตอนท้ายของการกวดวิชานี้
Raspberry Pi Oscilloscope ในการดำเนินการ:
คัดลอกรหัส python ที่สมบูรณ์และวางในไฟล์ python ที่เราสร้างไว้ก่อนหน้านี้จำไว้ว่าเราจะต้องมีจอภาพเพื่อดูพล็อตดังนั้นสิ่งนี้ควรทำโดย VNC หรือด้วยจอภาพหรือหน้าจอที่เชื่อมต่อ
บันทึกรหัสและเรียกใช้โดยใช้;
sudo python scope.py
หากคุณใช้ชื่ออื่นนอกเหนือจาก scope.py อย่าลืมเปลี่ยนชื่อนี้ให้ตรงกัน
หลังจากนั้นไม่กี่นาทีคุณจะเห็นข้อมูล ADC ถูกพิมพ์บนเทอร์มินัล ในบางครั้งคุณอาจได้รับคำเตือนจาก matplotlib (ดังแสดงในภาพด้านล่าง) ซึ่งควรถูกระงับ แต่จะไม่ส่งผลต่อข้อมูลที่แสดงหรือพล็อต อย่างไรก็ตามหากต้องการระงับคำเตือนคุณสามารถเพิ่มบรรทัดของโค้ดต่อไปนี้หลังจากบรรทัดการนำเข้าในโค้ดของเรา
คำเตือน การนำเข้านำเข้า matplotlib.cbook warnings.filterwarnings (“ ละเว้น” หมวดหมู่ = matplotlib.cbook.mplDeprecation)
สำหรับผู้ฝึกสอนคนนี้ในการทดสอบออสซิลโลสโคปของคุณอย่างสมบูรณ์คุณสามารถเชื่อมต่ออุปกรณ์อะนาล็อกเช่นโพเทนชิออมิเตอร์กับช่องบน ADC และคุณจะเห็นการเปลี่ยนแปลงข้อมูลเมื่อเปิดโพเทนชิออมิเตอร์ หรือคุณสามารถป้อนคลื่นไซน์หรือคลื่นสี่เหลี่ยมเพื่อทดสอบเอาต์พุต
ขอบคุณที่อ่านหากคุณมีคำถามหรือสิ่งที่คุณต้องการให้ฉันเพิ่มเพียงแค่แสดงความคิดเห็น
ไว้คราวหน้าทำต่อไป!