如何用aduino实时采集一个脉冲信号,并把数据通过串口发到电脑上

作者:cambrain     发布时间:2025-06-30     点击数:1    

如何用aduino实时采集一个脉冲信号,并把数据通过串口发到电脑上,在电脑上用python写一个软件,实时画出脉冲波形

Arduino部分

首先,你要把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部分

接着,你需要安装必要的库,再运行下面的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和电脑之间的连接稳定,防止数据丢失。