如何用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和电脑之间的连接稳定,防止数据丢失。