- UID
- 373967
- 帖子
- 9020
- 主題
- 2609
- 精華
- 0
- 積分
- 1004
- 楓幣
- 34
- 威望
- 981
- 存款
- 35926
- 贊助金額
- 0
- 推廣
- 0
- GP
- 1205
- 閱讀權限
- 70
- 在線時間
- 460 小時
- 註冊時間
- 2023-1-12
- 最後登入
- 2024-12-24
|
製作 Raspberry Pi Zero 多通道示波器
需要以下零件:
Raspberry Pi Zero
GPIO 擴展板
10K 歐姆電阻器
100nF 陶瓷電容
220uF 電解電容
1N4148 二極管
10M 歐姆電阻器
0.1uF 陶瓷電容
2.2K 歐姆電阻器
1K 歐姆電阻器
電位計(可變電阻)
4.7K 歐姆電阻器
3.5mm 音頻插孔
杜邦線
以下是連結腳位的圖表:
Raspberry Pi Zero GPIO 擴展板
3.3V VCC
GND GND
GPIO2 CH1
GPIO3 CH2
GPIO4 CH3
GPIO14 CLK
GPIO15 DAT
以下是示波器的程式碼:
python
import RPi.GPIO as GPIO
import spidev
import time
import numpy as np
import matplotlib.pyplot as plt
# Set up GPIO pins
GPIO.setmode(GPIO.BCM)
GPIO.setup(2, GPIO.IN)
GPIO.setup(3, GPIO.IN)
GPIO.setup(4, GPIO.IN)
# Set up SPI
spi = spidev.SpiDev()
spi.open(0, 0)
spi.max_speed_hz = 500000
# Set up variables
samples = 1000
interval = 0.001
times = np.arange(0, samples * interval, interval)
# Read data from SPI
def read_spi(channel):
adc = spi.xfer2([1, (8 + channel) << 4, 0])
data = ((adc[1] & 3) << 8) + adc[2]
return data
# Read data from channels
def read_channel(channel):
values = []
for i in range(samples):
value = read_spi(channel)
values.append(value)
time.sleep(interval)
return values
# Plot data from channels
def plot_channels():
ch1_values = read_channel(0)
ch2_values = read_channel(1)
ch3_values = read_channel(2)
plt.plot(times, ch1_values, 'r')
plt.plot(times, ch2_values, 'g')
plt.plot(times, ch3_values, 'b')
plt.title('Multi-Channel Oscilloscope')
plt.xlabel('Time (s)')
plt.ylabel('Voltage (mV)')
plt.legend(['CH1', 'CH2', 'CH3'])
plt.show()
# Main loop
while True:
plot_channels()
這個程式碼會讀取 GPIO 引腳上的模擬數據,並使用 SPI 通訊協議將其傳輸到 Raspberry Pi Zero 上。
然後,它將數據繪製成三個通道的波形圖。
|
|