速成 · 电子设计基础训练

这门课的现存材料主要是实验代码和综合实验报告,课件目录为空。所以最有用的学法不是背函数,而是看懂一条信号怎样从现实世界进入 Arduino,经过程序处理,再被输出。

一张图看完课程

现实量
  ↓
传感器 → 电压/数字信号 → Arduino 引脚
                                  ↓
                         采样、计算、滤波
                                  ↓
             LED / 数码管 / 串口 / Processing 画面

现存代码正好沿着这条链路递进:

  1. 用 13 号引脚让 LED 闪烁;
  2. 通过串口接收一个字节或一段字符串;
  3. 读取 DHT11 温湿度和 TCS34725 颜色传感器;
  4. 用超声波飞行时间计算距离,再滤波、报警和显示;
  5. 扩展为扫描角度与距离联动的“雷达”界面。

Arduino 程序只有两个入口

void setup() {
  // 上电或复位后只执行一次
}

void loop() {
  // 之后反复执行
}

setup() 适合配置引脚方向、串口波特率和传感器库;loop() 适合采样、判断和更新输出。每轮循环必须足够快,否则按键、串口数据或传感器变化可能被错过。

数字引脚的最小闭环

pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);

pinMode 规定引脚是输入还是输出,digitalWrite 设置高低电平。delay(1000) 会让整个程序暂停 1 秒;做单个 LED 没问题,但同时要读按键和传感器时,更好的做法是比较 millis() 计时,不阻塞主循环。

串口是调试和联机的主干

Arduino 与电脑必须约定相同波特率:

Serial.begin(9600);

Serial.available() 告诉缓冲区里有多少个字节,Serial.read() 每次只取一个字节。如果想收到完整消息,不能只靠“当下已经到了几个字节”,而要约定换行符或其他结束符。

雷达扩展就约定一条数据是:

角度,距离.

Processing 读到句点后,再按逗号拆成角度和距离。

超声波测距的一个公式

传感器测到的是超声波往返时间 TT。声波走了“去程 + 回程”,所以目标距离为

d=vT2.d=\frac{vT}{2}.

若声速取 340 m/s340\ \mathrm{m/s},TT 以微秒计,dd 以厘米计,则

d≈T58.8.d\approx\frac{T}{58.8}.

实验中的误差不只来自代码:温度会改变声速,障碍物的材质和角度会改变反射,近场盲区和远距离衰减也会影响结果。

平均数和中位数滤波怎么选

  • 平均数会利用所有样本,对小幅零均值噪声有效,但会被单个极端值拉动。
  • 中位数只看排序后中间的样本,更擅长去掉偶发的尖峰误差。

如果 9 个样本中有 1 个突然跳成 200 cm,中位数通常比平均数稳定;如果所有样本只在真值附近小幅摆动,平均数能更好地抑制噪声。

实验题的通用检查顺序

  1. 先看 VCC、GND 和共地;
  2. 对照代码检查引脚编号与输入/输出方向;
  3. 用串口打印原始量,先确认传感器真的有数据;
  4. 再验证单位换算和边界判断;
  5. 最后接入滤波、报警、显示和上位机界面。

这个顺序能把“什么都没显示”拆成电源、连线、采集、计算和输出五个可验证环节。

评论