如何用aduino实时采集一个脉冲信号,并把数据通过串口发到电脑上,在电脑上用python写一个软件,实时画出脉冲波形
首先,你要把Arduino和信号源连接好,然后上传以下代码:
const int SIGNAL_PIN = A0; // 信号输入引脚const int BAUD_RATE = 115200; // 串口通信波特率void setup() {
Serial.begin(BAUD_RATE); // 初始化串口通信
pinMode(SIGNAL_PIN, INPUT); // 设置信号引脚为输入模式}void loop() {
int value = analogRead(SIGNAL_PIN); // 读取模拟值
Serial.println(value); // 通过串口发送数据
delay(1); // 短暂延时,稳定采样}接着,你需要安装必要的库,再运行下面的Python代码:
import serial
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import numpy as np
# 配置串口
ser = serial.Serial(
port='COM3', # 根据实际情况修改串口号
baudrate=115200,
timeout=1)# 创建图形fig, ax = plt.subplots()x_data, y_data = [], []line, = ax.plot([], [], lw=2)# 初始化图形def init():
ax.set_xlim(0, 500)
ax.set_ylim(0, 1023)
return line,# 更新函数def update(frame):
while ser.in_waiting:
try:
data = ser.readline().decode('utf-8').strip()
y = int(data)
x_data.append(len(x_data))
y_data.append(y)
# 保持数据点数量限制
if len(x_data) > 500:
x_data.pop(0)
y_data.pop(0)
line.set_data(x_data, y_data)
ax.set_xlim(max(0, len(x_data) - 500), len(x_data))
except:
pass
return line,
# 启动动画
ani = FuncAnimation(fig, update, init_func=init, interval=10, blit=True)
plt.title('Arduino 脉冲信号实时波形')
plt.xlabel('采样点')
plt.ylabel('信号强度')
plt.grid(True)
plt.show()
# 关闭串口ser.close()1. 要根据实际情况修改Python代码里的串口号。
2. 可以对采样频率和显示点数进行调整,以满足不同的需求。
3. 若信号是数字信号,需要把Arduino代码中的`analogRead`替换成`digitalRead`。
4. 要保证Arduino和电脑之间的连接稳定,防止数据丢失。