程序书写
Ardunio程序安装
在 Arduino的官方网站上可以下载这款官方设计的软件及源码、教程和文档。Arduino IDE的官方下载地址 为:http://arduino.cc/en/Main/Software。登录官网,下载软件并安装。
安装成功后,页面如下所示:

根据已有零件,请deepseek写代码。
Servo舵机控制库是Arduino官方提供的一个库,用于简化舵机的控制。它封装了舵机控制的底层逻辑,使得用户可以通过简单的函数调用月来控制舵机的角度、速度和位置,而无需手动生成PWM信号。这个库支持多种舵机类型(如标准舵机连续旋转舵机),是开发舵机相关项目的理想工具。
-
角度控制
- 控制舵机旋转到指定角度(通常为0°~180°)。
-
速度控制
- 控制连续旋转舵机的转速和方向。
-
多舵机支持
- 支持同时控制多个舵机(最多12个,具体数量取决于硬件)。
-
兼容性强
- 支持标准舵机、数字舵机和连续旋转舵机。
安装包
在 Arduino IDE 中遇到 "Missing FQBN (Fully Qualified Board Name)" 错误时,通常是因为没有正确选择开发板型号或缺少对应的开发板支持包。
然后在Ardunio中安装Ardunio IDE 中安装Adafruit PWM servo Driver

然后统一连接电器件之后,可以将代码导入到开发板中。

Ardunio 程序语言
给Arduino编程需要用到IDE(集成开发环境),这是一款免费的软件。在这款软件上编程需要使用
Arduino的语言,这是一种解释型语言,写好的程序被称为sketch,编译通过后就可以下载到开发板中。
运行Ardunio
如果还是没有操作成功,是因为需要选择板子的型号。如下所示:

然后点击勾号,即可输出。

即可完成。
元件构成
单片机
单片机(Microcontroller Unit, MCU)是一种集成度很高的微型计算机系统,通常包含处理器核心(CPU)、存储器(RAM和ROM/Flash)、输入/输出接口(I/O)以及其他外围设备(如定时器、串行通信接口等)于单一芯片上。单片机广泛应用于嵌入式系统中,用于控制和执行特定任务。
主要组成部分:
- 中央处理器(CPU):负责执行指令和处理数据。
- 存储器 :
- ROM/Flash:用于存储程序代码和常量数据。
- RAM:用于存储运行时的临时数据。
- 输入/输出接口(I/O):用于与外部设备进行数据交换,如传感器、执行器等。
- 定时器/计数器:用于精确控制时间相关操作。
- 串行通信接口:如UART、SPI、I2C等,用于与其他设备进行通信。
应用领域:
- 家用电器:如洗衣机、微波炉、空调等。
- 工业控制:如PLC(可编程逻辑控制器)、机器人控制等。
- 汽车电子:如发动机控制、车载娱乐系统等。
- 消费电子:如智能手机、智能手表等。
- 医疗设备:如血糖仪、心电图机等。
优点:
- 集成度高:所有功能集成在一个芯片上,减少了外部元件的数量。
- 成本低:由于集成度高,生产成本较低。
- 功耗低:适合电池供电的设备。
- 体积小:适合空间受限的应用场景。
常见品牌:
- Intel 、Microchip 、Texas Instruments 、STMicroelectronics 、NXP等。
单片机是现代电子设备中不可或缺的组成部分,其灵活性和高效性使其在众多领域中得到广泛应用。
舵机和电机
-
舵机和电机虽然都是将电能转换为机械运动的装置,但它们在结构、功能和应用上有显著区别。以下是两者的详细对比:
1. 核心功能
特性 舵机(Servo Motor) 普通电机(Motor) 主要用途 精确控制角度或位置(如机器人关节、航模舵面) 提供连续旋转动力(如风扇、车轮驱动) 运动形式 有限角度旋转(通常0°~180°)或闭环控制位置 连续单向/双向旋转,或直线运动(如步进电机) 控制信号 PWM脉冲信号(占空比决定角度) 电压/电流大小(调节转速)或方向信号
2. 结构与工作原理
特性 舵机 普通电机 内部组成 电机 + 减速齿轮 + 控制电路 + 位置反馈传感器 通常只有电机(无反馈或需外接编码器) 反馈系统 闭环控制(通过电位器或编码器实时校正位置) 开环控制(除非外接传感器) 输出轴 只能旋转有限角度(标准舵机) 可无限旋转
3. 控制方式
特性 舵机 普通电机 信号类型 PWM脉冲(如1ms=0°,1.5ms=90°,2ms=180°) 直流电压(如5V/12V)或PWM调速 控制精度 高(直接定位到特定角度) 依赖外部传感器才能精确定位 典型接口 三线(电源、地、信号) 两线(正负极)或四线(如步进电机)
4. 典型应用场景
舵机 普通电机 - 机器人关节(机械臂、人形机器人) - 电动车轮驱动 - 航模舵面控制(方向舵、升降舵) - 家用电器(风扇、洗衣机) - 摄像头云台 - 工业设备(传送带、泵) - 自动门锁 - 无人机螺旋桨
5. 关键区别总结
- 反馈机制:舵机自带闭环控制,电机通常需额外传感器实现闭环。
- 运动范围:舵机限位旋转,电机可连续旋转。
- 控制目标:舵机重位置精度,电机重转速/扭矩。
- 复杂度:舵机集成度高(含控制电路),电机通常需外接驱动板。
如何选择?
- 需要精确角度控制 (如机械臂)→ 选舵机。
- 需要连续旋转动力 (如车轮)→ 选直流/步进电机。
- 需要高速旋转+位置反馈 → 选伺服电机(高级舵机)或编码器电机。
两者在项目中常配合使用,例如:用电机驱动小车底盘,用舵机控制摄像头方向。
外部电源
用电池的电力驱动机器运行。
元件组装
电路连接图(描述性) ,以下是详细的文字描述和连接关系:
1.Arduino与PCA9685连接(12c通信和逻辑供电):
·Arduino5V 引脚->PCA9685vcC引I脚(为 PCA9685芯片提供逻辑电源) ·ArduinoGND引脚->PCA9685GND引|脚(逻辑地线) ·Arduino SDA 引脚(Uno上E通常是A4)->PCA9685SDA弓脚 ·ArduinoSCL引脚(UnoE通常是A5)->PCA9685SCL弓引脚
2.外部电源与PCA9685连接(舵机供电):
·5v-6v外部电源正极(+)->PCA9685V+螺丝端子(或标有V+/ServoPowerIn 的接 口) ·5V-6V外部电源负极(-)-> PCA9685GND螺丝端子(或标有GND/servoPower Ground的接口)
3.舵机与PcA9685连接:
·舵机信号线(通常是橙色、黄色或白色)->PCA9685的PWM输出引脚(你可以选择o 到15中的任意一个) ·舵机电源线(V+)(通常是红色)->PCA9685V+输出排针(对应通道O旁边标记V+的排排 针) o搜索
Arduino UNO 开发板
电脑------Arduino UNO开发板------集成电路板PCA9685
UNO Digital PWM 通常指的是基于 Arduino UNO 开发板的 数字PWM(脉宽调制) 功能。Arduino UNO 是一款广泛使用的开源微控制器开发板,其数字引脚中有一部分支持PWM输出,可用于控制舵机、LED亮度、电机速度等设备。
-
控制舵机, 通过PWM信号控制舵机的旋转角度(典型频率为50Hz)。
-
调节LED亮度, 通过改变占空比实现LED的亮度渐变。
-
控制电机速度, 通过PWM信号调节直流电机的转速

Arduino UNO可以通过以下三种方式供电,能自动选择供电方式:
外部直流电源通过电源插座供电;
电池连接电源连接器的GND和VIN引脚;
USB接口直接供电,图1-4所示的稳压器可以把输入的7V~12V电压稳定到5V。
(韩广义、宋楠:《Arduino开发从零开始学 学电子的都玩这个》,北京:清华大学出版社2014年版)
在电源接口上方,一个右侧引出3个引脚,左侧一个比较大的引脚细看会发现上面有AMST1117的字样, 其实这个芯片是个三端5V稳压器,电源口的电源经过它稳压之后才给板子输入,其实电源适配器内已经有 稳压器,但是电池没有。可以理解为它是一个安检员,一切从电源口经过的电源都必须过它这一关,这 个"安检员"对不同的电源会进行区别对待。
首先,AMS1117的片上微调把基准电压调整到1.5%的误差以内,而且电流限制也得到了调整,以尽量减 少因稳压器和电源电路超载而造成的压力。再者根据输入电压的不同而输出不同的电压,可提供1.8V、 2.5V、2.85V、3.3V、5V稳定输出,电流最大可达800mA,内部的工作原理这里不必去探究,读者只需要知 道,当输入5V的时候输出为3.3V,输入9V的时候输出才为5V,所以用9V(9V~12V均可,但是过高的电源会 烧坏板子)电源供电的原因就在这,如使用5V的适配器与Arduino连接,之后连接外设做实验,会发现一些 传感器没有反应,这就是某些传感器需要5V的信号源,可是板子最高输出只能达到3.3V,必然有问题。
(韩广义、宋楠:《Arduino开发从零开始学 学电子的都玩这个》,北京:清华大学出版社2014年版)
ArduinoUNO开发板上的1到13的孔是数字引脚(Digital Pins),月用于输入或输出数字信号(高电平或低电平)。这些引脚是UNO与外部设备(如传感器、执行器、LED等)交互的主要接口,每个引脚都有特定的功能利使用场景。以下是它们的详细说明和区别:
1、数字输入/输出
可读取或输出数字信号(高电平:5V,低电平:0V)。
通过 pinMode(pin, INPUT/OUTPUT) 设置引脚模式。
2、PWM输出
部分引脚(3、5、6、9、10、11)支持PWM(脉宽调制)输出,用于模拟模拟信号(如调 节 LED亮度、控制舵机角度)。
使用 analogWrite(pin, value) 输出PWM信号(value范围:0~255)。
3、外部中断
部分引脚(2、3)支持外部中断,用于快速响应外部事件(如按钮按下)。
使用 attachInterrupt(digitalPinToInterrupt(pin), ISR, mode) 设置中断。
ICSP 针头(In-Circuit Serial Programming)
Arduino UNO 开发板上的 ICSP 针头(In-Circuit Serial Programming)是一种用于编程和调试的接口,主要用于直接对微控制器(如ATmega328P)进行烧录或更新固件。它通过SPI(串行外设接口)协议与外部编程器通信,是开发板的重要功能扩展接口。
ICSP 针头通常为6针(2x3排列),引脚定义如下:
引脚 | 功能 | 说明 |
---|---|---|
1 | MISO (Master In Slave Out) | 主设备接收数据,从设备发送数据。 |
2 | VCC | 电源正极(5V)。 |
3 | SCK (Serial Clock) | SPI时钟信号,由主设备生成。 |
4 | MOSI (Master Out Slave In) | 主设备发送数据,从设备接收数据。 |
5 | RESET | 复位信号,用于重启微控制器。 |
6 | GND | 电源地。 |
-
烧录引导程序(Bootloader), 当UNO的引导程序损坏时,可通过ICSP接口重新烧录。
-
批量生产, 在生产环境中,通过ICSP接口快速烧录程序到多个微控制器。
-
调试与开发, 使用外部编程器进行实时调试和固件更新。
-
SPI设备扩展, 连接SPI设备(如EEPROM、SD卡模块)进行数据通信。
【摘录】

(邵玮副、张鹏、王斯卉、祝宁华、方蕊:《智能机器人设计与创新实践》,西安:西北工业大学出版社2023年版,第6页。)
电池
外部电源与转换器连接,转换器将电压转换为元件能够承载的范围。
外部电源------
转换器 HW-319-V6.0
外部电源------转换器
舵机与PcA9685连接:
·舵机信号线(通常是橙色、黄色或白色)->PCA9685的PWM输出引脚(你可以选择o 到15中的任意一个) ·舵机电源线(V+)(通常是红色)->PCA9685V+输出排针(对应通道O旁边标记V+的排针)
HW-319-V6.0 是 转换器,一端连接电池,其屏幕板,显示了将电池电压转换为更小的电压,会在屏幕板上显示。
Ardunio板子作为小电脑,然后有电源,第三个是舵机和电机,连接到主控芯片上。
电机可以正常地转动。
驱动电机,实现车轮子的转动。
集成电路板 PCA9685 PWM Driver
外部电源------转换器------集成电路版(PCA96785)
电脑------Arduino UNO开发板------集成电路板PCA9685
外部电源与PCA9685连接(舵机供电):
·5v-6v外部电源正极(+)->PCA9685V+螺丝端子(或标有V+/ServoPowerIn 的接 口) ·5V-6V外部电源负极(-)-> PCA9685GND螺丝端子(或标有GND/servoPower Ground的接口)
PCA9685 16-channel PWM Driver 是一种集成电路模块 ,专门用于生成脉宽调制(PWM)信号,可同时控制多达16个设备(如舵机、LED灯等)。它通过I²C接口与微控制器(如Arduino、Raspberry Pi)通信,简化了多路PWM信号的控制。
主要作用:
-
控制舵机
- 驱动多路舵机(如机器人关节、机械臂),每路独立控制角度。
- 典型应用:机器人、航模、自动化设备。
-
LED调光
- 控制多路LED亮度,实现渐变、闪烁等效果。
- 典型应用:灯光装饰、舞台效果。
-
简化电路设计
- 减少主控设备的引脚占用,降低硬件复杂度。
- 提供外部供电接口(V+、GND),支持大电流设备。
cpp
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
void setup() {
pwm.begin();
pwm.setPWMFreq(50); // 设置PWM频率为50Hz(舵机标准)
}
void loop() {
pwm.setPWM(0, 0, 300); // 控制第0路舵机到90°位置
delay(1000);
pwm.setPWM(0, 0, 150); // 控制第0路舵机到0°位置
delay(1000);
}
舵机
外部电源------转换器------集成电路版(PCA96785)------舵机
【心得】
Github的开源项目,
淘宝相关的工具。
可以直接询问deepseek,输入自己已有的工具,请deepseek 看如何连接。
案例
轴机转动
代码如下
cpp
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x40); // 默认I²C地址
// 舵机参数(需根据实际舵机校准)
#define SERVO_MIN 150 // 0度对应脉冲值(0.5ms)
#define SERVO_MAX 600 // 180度对应脉冲值(2.5ms)
#define SERVO_MID (SERVO_MIN + (SERVO_MAX - SERVO_MIN)/2) // 90度中间值
void setup() {
Serial.begin(9600);
pwm.begin();
pwm.setPWMFreq(50); // 设置PWM频率为50Hz(舵机标准)
Serial.println("输入'w'旋转90度,'s'旋转30度...");
}
void loop() {
if (Serial.available() > 0) {
char cmd = Serial.read();
if (cmd == 'w') {
pwm.setPWM(0, 0, SERVO_MID); // 通道0旋转90度
Serial.println("旋转至90度");
} else if (cmd == 's') {
pwm.setPWM(0, 0, SERVO_MIN + (SERVO_MAX - SERVO_MIN)*30/180); // 旋转30度
Serial.println("旋转至30度");
}
}
}
如图所示,根据代码,需要输入W,才可以运行。

注意事项
遇到问题,优先拔掉电源,防止烧坏板子。板子烧坏,比较难发现问题所在。
注意正负极连接。正极线连接正极线,负极线连接负极线。
一诗一画
代码如下:
python
import turtle
import colorsys
turtle.tracer(False)
t = turtle.Turtle()
t.speed(0)
turtle.bgcolor("black")
t.pensize(2)
# 绘制彩色圆形螺旋
for i in range(180):
hue = i / 360.0 # 色相值(0~1)
color = colorsys.hsv_to_rgb(hue, 1.0, 1.0) # HSV转RGB
t.pencolor(color)
t.circle(i) # 画圆,半径逐渐增大
t.left(10) # 每次左转10度
turtle.done()
生成图如下:
