Arduino 开发入门:电路搭建与 C++ 编程

FreeGuideOnline 最新 2026-06-15

引言

Arduino 是一款开源电子原型平台,由简易的硬件(各类开发板)和软件(Arduino IDE)组成。它让没有电子背景的创作者也能快速搭建互动装置。本教程从零开始,带你完成环境搭建、基础电路连接,并逐步学习 Arduino 风格的 C++ 编程,让你在动手实践中掌握控制 LED、读取传感器、驱动舵机等核心技能。

准备工作:硬件与软件

所需硬件

  • 一块 Arduino 开发板(推荐 Arduino Uno R3,或兼容板)
  • USB 数据线(A 口转 B 口,用于连接电脑与 Uno)
  • 面包板(830 孔或 400 孔均可)
  • 跳线(公对公、公对母若干)
  • LED(5mm,任意颜色)x 3
  • 220Ω 电阻 x 3
  • 10kΩ 电阻 x 1
  • 轻触按钮 x 1
  • 电位器(10kΩ)x 1
  • 小型舵机(如 SG90)x 1
  • 可选:万用表(用于检测电路)

软件安装

  1. 访问 Arduino 官网 下载对应操作系统的 IDE(集成开发环境)。
  2. 安装后打开 IDE,用 USB 线连接 Arduino 板。
  3. 在「工具」菜单中选择正确的开发板(如“Arduino Uno”)和对应的端口(Windows 下为 COMxx,Mac 下为 /dev/cu.usbmodemxxx)。
  4. 可打开「文件」→「示例」→「01.Basics」→「Blink」测试连接是否正常。

基础电路知识

面包板结构

面包板两侧有横向电源轨(通常标有红色+和蓝色-),中间为垂直连接的插孔列,每列内部 5 个孔互通。元件引脚插入同一列即实现电气连接。

数字信号与模拟信号

  • 数字 I/O:只能输出高电平(5V/3.3V)或低电平(0V),或读取这两种状态。
  • 模拟输入:可读取 0~5V 范围内的连续电压值,通过板载 ADC 转换为 0~1023 的数字。
  • PWM 输出:部分数字引脚(标有“~”)可输出模拟电压效果,用于调光或控制舵机。

限流电阻的必要性

LED 正常工作电压约为 2V,电流通常为 20mA。直接连接 5V 会因电流过大烧毁 LED。使用 220Ω 电阻可将电流限制在约 (5V-2V)/220Ω ≈ 13.6mA,安全且明亮。任何时候都不要省略 LED 的限流电阻。

第一个程序:闪烁的 LED

电路搭建

  1. 将 LED 长脚(正极,阳极)插入面包板,并通过 220Ω 电阻连接到 Arduino 的 13 号数字引脚。
  2. 将 LED 短脚(负极,阴极)直接连接到 GND。 或者直接使用 Arduino 板上自带连接在 13 号引脚的 LED(部分开发板已内置),无需外接电路即可测试。

代码编写

// Blink - 经典入门程序
void setup() {
  pinMode(13, OUTPUT);    // 设置13号引脚为输出模式
}

void loop() {
  digitalWrite(13, HIGH); // 点亮LED
  delay(1000);            // 等待1秒
  digitalWrite(13, LOW);  // 熄灭LED
  delay(1000);            // 等待1秒
}
  • setup():程序开始时运行一次,用于初始化设置。
  • loop():反复循环执行,实现持续交互。
  • pinMode(pin, mode):配置引脚模式,OUTPUT 为输出。
  • digitalWrite(pin, val):设置数字引脚电平,HIGH = 5V,LOW = 0V。
  • delay(ms):暂停程序指定毫秒。

点击上传按钮,观察 LED 以 1 秒间隔闪烁。

数字输入:按钮控制 LED

电路

  • 按钮跨接在面包板中间凹槽,同一侧的两个引脚分别连接 Arduino 的 2 号引脚和 GND。
  • 将 2 号引脚通过 10kΩ 电阻连接到 5V(上拉电阻),确保未按下按钮时引脚读到高电平。
  • 按下按钮时引脚直接接地,读到低电平。

也可启用 Arduino 内部上拉电阻:

pinMode(2, INPUT_PULLUP);   // 内部上拉,无需外接电阻

此时按钮只需连接 2 号引脚和 GND,未按下时读到 HIGH,按下时读到 LOW。

代码

const int buttonPin = 2;
const int ledPin = 13;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
  int buttonState = digitalRead(buttonPin);
  if (buttonState == LOW) {   // 按下(低电平)
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }
}

digitalRead() 返回引脚状态(HIGH 或 LOW)。使用条件判断即可实现按下点灯、松开熄灯。

模拟输入:电位器控制 LED 亮度

电路

  • 电位器左右两脚分别接 5V 和 GND,中间引脚接到 Arduino 的 A0(模拟输入)。
  • 将 LED 通过 220Ω 电阻接在 9 号引脚(标记有“~”,支持 PWM 输出)。

代码

const int potPin = A0;
const int ledPin = 9;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);   // 启动串口通信,用于调试
}

void loop() {
  int sensorValue = analogRead(potPin);           // 0~1023
  int brightness = map(sensorValue, 0, 1023, 0, 255); // 映射到PWM范围
  analogWrite(ledPin, brightness);
  Serial.print("传感器值:");
  Serial.println(sensorValue);
  delay(100);
}
  • analogRead(pin) 返回 0~1023 的整数值。
  • map(value, fromLow, fromHigh, toLow, toHigh) 将数值按比例映射,非常适合将 ADC 值转换为 PWM 值(0~255)。
  • analogWrite(pin, value) 对 PWM 引脚输出占空比可调的方波,实现亮度控制。

打开串口监视器(右上角放大镜图标,设置波特率 9600)可观察电位器旋转时对应数值变化。

传感器拓展:光控灯

电路

使用光敏电阻(LDR)和 10kΩ 固定电阻构成分压电路,测量环境光强度。将分压点接模拟引脚 A1,LDR 一端接 5V,另一端接 A1 和 10kΩ 电阻到 GND。LED 接 11 号 PWM 引脚。

代码

const int ldrPin = A1;
const int ledPin = 11;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int lightLevel = analogRead(ldrPin);
  Serial.println(lightLevel);
  // 环境越暗,光敏电阻阻值越大,分压值越低,LED 越亮
  int brightness = map(lightLevel, 30, 900, 255, 0); // 根据实际范围调整
  brightness = constrain(brightness, 0, 255);
  analogWrite(ledPin, brightness);
  delay(50);
}

constrain(x, a, b) 将数值限制在 a 和 b 之间,防止越界。

执行器控制:舵机

电路

舵机一般有三根线:棕色/黑色为 GND,红色为 5V,橙色/白色为信号线。将信号线接到 9 号引脚(PWM 引脚)。电源可直接取自 Arduino 5V(小功率舵机),若需大扭力建议外接电源共地。

使用 Servo 库

Arduino 内置 Servo 库方便控制。点击「项目」→「加载库」→「管理库」,搜索 Servo 并安装(通常已内置)。

#include <Servo.h>

Servo myservo;
int pos = 0;

void setup() {
  myservo.attach(9);   // 信号线接9号引脚
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) {
    myservo.write(pos);
    delay(15);
  }
  for (pos = 180; pos >= 0; pos -= 1) {
    myservo.write(pos);
    delay(15);
  }
}
  • Servo.attach(pin) 将舵机对象绑定到引脚。
  • write(angle) 设置目标角度(0~180°),库会自动生成所需 PWM 信号。

串行通信基础

发送与接收

  • Serial.begin(baud) 初始化串口,常用 9600。
  • Serial.print()Serial.println() 发送数据到电脑。
  • Arduino 板载 USB 转串口芯片,与 IDE 的串口监视器通信。

示例:串口控制 LED

void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}

void loop() {
  if (Serial.available() > 0) {
    char command = Serial.read();
    if (command == '1') {
      digitalWrite(13, HIGH);
      Serial.println("LED ON");
    } else if (command == '0') {
      digitalWrite(13, LOW);
      Serial.println("LED OFF");
    }
  }
}

在串口监视器输入 10 并发送,控制 LED 亮灭。

避免常见错误

  1. 忘记限流电阻:LED 必须串联电阻,否则烧坏引脚或 LED。
  2. 未设置引脚模式:使用 pinMode() 前读写可能导致异常。
  3. 短路:5V 与 GND 直接连接会造成短路,损坏开发板。搭建电路前先断开 USB。
  4. 变量类型错误analogRead 返回 0~1023,若存入 byte 类型会溢出。
  5. 延迟阻塞delay() 期间 Arduino 无法响应其他事件,后期可学习使用 millis() 实现非阻塞。

延伸学习建议

  • 尝试组合多个传感器与执行器,制作温控风扇、自动浇花系统。
  • 学习使用 ifwhilefor 等控制语句增强程序逻辑。
  • 阅读 Arduino 官方文档和示例,探索 EEPROM、中断、定时器。
  • 逐步过渡到纯 C++ 面向对象编程,将功能封装为类。

通过动手搭建和编程,你已掌握 Arduino 开发的核心框架。继续实践,把创意变成现实!