1. Arduino与传感器入门:从零开始掌握硬件交互
第一次接触Arduino和传感器时,我被它们简单直接的交互方式所震撼。作为一个电子爱好者,我发现这套系统最迷人的地方在于:用几行代码就能让硬件"活"起来。Arduino Uno开发板上有14个数字I/O引脚(其中6个可做PWM输出)和6个模拟输入引脚,这为连接各类传感器提供了充分的可能性。
传感器本质上是一种将物理量转换为电信号的装置。在Arduino项目中,我们常用的传感器大致可分为三类:
- 数字传感器:输出高低电平信号(如按钮、红外避障传感器)
- 模拟传感器:输出连续变化的电压值(如光敏电阻、温度传感器)
- 数字通信传感器:通过特定协议传输数据(如I2C、SPI接口的传感器)
提示:新手建议从数字传感器开始上手,这类传感器接线简单,编程逻辑直观,能快速建立信心。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 传感器接线实战:从原理到实操
2.1 数字传感器接线方法
以最常见的按钮开关为例,接线步骤如下:
- 将按钮一端连接Arduino的任意数字引脚(如D2)
- 另一端通过10kΩ电阻接地(下拉电阻)
- 在代码中使用digitalRead()函数读取引脚状态
arduino复制const int buttonPin = 2;
void setup() {
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}
void loop() {
int buttonState = digitalRead(buttonPin);
Serial.println(buttonState);
delay(100);
}
2.2 模拟传感器接线要点
以光敏电阻为例,典型接线方式:
- 将光敏电阻与10kΩ电阻串联
- 中间节点连接模拟引脚A0
- 两端分别接5V和GND
arduino复制const int lightSensor = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(lightSensor);
Serial.println(sensorValue);
delay(500);
}
注意:模拟传感器的读数范围是0-1023,对应0-5V电压。实际应用中需要将这个值转换为具体的物理量。
2.3 通信协议类传感器连接
以I2C接口的BMP280气压传感器为例:
- SDA接A4,SCL接A5(Arduino Uno的标准I2C引脚)
- 安装Adafruit_BMP280库
- 使用Wire库进行通信
arduino复制#include <Wire.h>
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp;
void setup() {
Serial.begin(9600);
if (!bmp.begin(0x76)) {
Serial.println("传感器未找到");
while (1);
}
}
void loop() {
Serial.print("温度 = ");
Serial.print(bmp.readTemperature());
Serial.println(" *C");
delay(2000);
}
3. 传感器数据处理技巧
3.1 模拟信号处理四步法
- 原始数据采集:使用analogRead()获取0-1023的原始值
- 电压转换:将读数转换为电压值(value * 5.0 / 1023.0)
- 物理量转换:根据传感器特性转换为温度、光照等物理量
- 数据滤波:采用移动平均或中值滤波提高稳定性
arduino复制// 温度传感器LM35数据处理示例
const int tempPin = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int rawValue = analogRead(tempPin);
float voltage = rawValue * (5.0 / 1023.0);
float temperature = voltage * 100; // LM35每mV对应0.1°C
Serial.print("温度: ");
Serial.print(temperature);
Serial.println(" °C");
delay(1000);
}
3.2 数字信号处理要点
- **消
