Arduino 作为一款开源电子原型平台,凭借其简单易用的硬件接口和丰富的软件资源,成为创客、工程师和电子爱好者的首选工具,本文将从硬件基础、开发环境、常用模块及实战项目四个方面,详细解析 Arduino 的技术要点,帮助读者快速掌握这一强大工具。

Arduino 硬件基础与核心原理
Arduino 的硬件核心是一块微控制器(MCU),常见的型号包括 Arduino Uno(ATmega328P)、Arduino Mega(ATmega2560)和 Arduino Nano(ATmega328P)等,这些板载 MCU 负责处理输入信号(如传感器数据)并控制输出设备(如 LED、电机),其核心组成部分包括:
- 数字 I/O 引脚:可配置为输入(读取高/低电平)或输出(输出高/低电平),Uno 板提供 14 个数字 I/O 引脚(6 支持 PWM 输出)。
- 模拟输入引脚:用于读取模拟信号(如传感器电压值),Uno 板有 6 个 10 位 ADC(模数转换器),分辨率达 1024(0-1023 对应 0-5V)。
- 通信接口:包括 UART(串口,用于与电脑或其他设备通信)、I2C(两线式同步总线,可连接多个设备)和 SPI(高速全双工总线,适合高速数据传输)。
- 电源模块:支持 USB 供电(5V)或外部电源(7-12V),板载稳压芯片为系统提供稳定电压。
以 Arduino Uno 为例,其 ATmega328P 芯片工作频率为 16MHz,Flash 存储器 32KB(0.5KB 用于引导程序),SRAM 2KB,EEPROM 1KB(用于掉电保存数据),这些参数决定了项目的复杂度和数据处理能力。
开发环境与编程基础
Arduino 的官方开发环境(IDE)基于 Java 开发,支持 Windows、macOS 和 Linux 系统,集成了代码编辑器、编译器和串口监视器,极大降低了编程门槛。
环境搭建
- 安装 IDE:从 Arduino 官网下载对应系统版本的 IDE,安装时勾选“安装驱动”(Windows 系统)。
- 配置板型:打开 IDE,通过“工具”→“板”→“板管理器”安装支持包(如 Arduino Uno)。
- 选择端口:通过“工具”→“端口”选择连接的 COM 口(Windows)或/dev/tty.usbmodem(macOS/Linux)。
代码结构与核心函数
Arduino 程序基于 C/C++ 语言,由两个核心函数构成:

void setup():初始化函数,在程序开始时执行一次,用于配置引脚模式、串口波特率等。void loop():主循环函数,在setup()执行后无限循环,用于持续执行任务(如读取传感器、控制设备)。
常用语法与示例
- 数字 I/O 控制:
pinMode(13, OUTPUT); // 设置 13 号引脚为输出模式 digitalWrite(13, HIGH); // 输出高电平(点亮 LED) delay(1000); // 延时 1 秒 digitalWrite(13, LOW); // 输出低电平(熄灭 LED)
- 模拟输入读取:
int sensorValue = analogRead(A0); // 读取 A0 引脚模拟值(0-1023) Serial.println(sensorValue); // 通过串口打印结果
- PWM 输出(需支持 PWM 的引脚,如 Uno 的 3、5、6、9、10、11):
analogWrite(9, 128); // 在 9 号引脚输出 50% 占空比 PWM 信号(0-255 对应 0-100%)
常用模块与驱动方法
Arduino 生态中,各类传感器、执行器模块通过标准接口(杜邦线)与主板连接,以下列举几种常用模块的驱动方法:
传感器模块
| 模块名称 | 接口方式 | 核心功能 | 示例代码片段 |
|---|---|---|---|
| DHT11 温湿度传感器 | 数字 I/O | 读取温度(℃)和湿度(%) | #include <DHT.h>DHT dht(2, DHT11);float temp = dht.readTemperature(); |
| HC-SR04 超声波测距模块 | 数字 I/O | 测量距离(2cm-400cm) | trigPin = 9; echoPin = 10;digitalWrite(trigPin, LOW); delayMicroseconds(2);digitalWrite(trigPin, HIGH); delayMicroseconds(10);digitalWrite(trigPin, LOW);duration = pulseIn(echoPin, HIGH);distance = duration * 0.034 / 2; |
| 光敏传感器 | 模拟输入 | 检测环境光强度 | int lightValue = analogRead(A0);Serial.print("Light: "); Serial.println(lightValue); |
执行器模块
| 模块名称 | 接口方式 | 核心功能 | 驱动要点 |
|---|---|---|---|
| LED 灯 | 数字 I/O | 发光指示 | 串联 220Ω 电阻限流,通过 digitalWrite() 控制 |
| 舵机(SG90) | 数字 I/O(PWM) | 精确角度控制(0°-180°) | 使用 Servo 库,servo.write(angle) 设置角度 |
| 直流电机 | 数字 I/O + L298N 驱动板 | 旋转控制 | 通过 PWM 调速,方向控制需接 H 桥驱动 |
实战项目:智能环境监测系统
本项目结合 DHT11 温湿度传感器、光敏传感器和 OLED 屏幕(I2C 接口),实现环境数据的实时采集与显示。
硬件连接
- DHT11 数据引脚 → Arduino D2
- 光敏传感器 → Arduino A0
- OLED SCL → Arduino A5,SDA → Arduino A4
代码实现
#include <DHT.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#define DHTPIN 2
#define DHTTYPE DHT11
#define OLED_RESET -1
Adafruit_SSD1306 display(OLED_RESET);
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
}
void loop() {
float temp = dht.readTemperature();
float humidity = dht.readHumidity();
int light = analogRead(A0);
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
display.print("Temp: "); display.print(temp); display.println(" C");
display.print("Humidity: "); display.print(humidity); display.println(" %");
display.print("Light: "); display.print(light); display.println(" lux");
display.display();
delay(2000);
}
功能扩展
- 添加阈值报警:当温度超过 30℃ 时,通过蜂鸣器报警。
- 数据上传:通过 ESP8266 模块将数据上传至 Thingspeak 平台,实现远程监控。
相关问答 FAQs
Q1:Arduino 与 Raspberry Pi 有什么区别?
A:Arduino 是微控制器(MCU)平台,实时性强、功耗低,适合直接控制硬件(如传感器、电机);Raspberry Pi 是微型计算机(CPU),基于 Linux 系统,适合运行复杂应用(如图像处理、网络通信),但需外接驱动模块控制硬件,Arduino 侧重“硬件控制”,Raspberry Pi 侧重“数据处理”。
Q2:如何解决 Arduino 程序上传失败的问题?
A:常见原因及解决方法:① 检查板型和端口选择是否正确(“工具”菜单);② 按住复位按钮,点击上传,松开复位按钮(部分板需手动进入 Bootloader 模式);③ 更换 USB 线或接口,排除硬件连接问题;④ 安装或更新 CH340 驱动(Windows 系统)。

