Hi٩(๑ ^ o ^ ๑)۶, 各位深海王国的同志们,早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦
(o゜▽゜)o☆ 今天大都督为大家带来单片机的新番外系列——小学生都能玩的单片机!番外2:Arduino控制其他元器件,带你学习如何使用Arduino控制如继电器、舵机、传感器等简单电元件。
(2)Arduino控制舵机
舵机简介:
舵机是一种集成了驱动电机、位置传感器和控制系统的小型伺服装置,可以精准地控制角度、位置和速度。通常,它由三部分组成:直流电机、减速齿轮和控制电路。舵机的最大特点是能够在接收到控制信号后,通过反馈系统准确定位到指定的位置,并保持稳定。
简单来说,可以实现精确的角度或位置控制的电机就是舵机。再简单点,你想让一个电机转到指定角度,比如从水平方向转到竖直方向,就用舵机。
既然是角度控制,我们可以选择的控制角度也有很多,其中最常用的就是180°舵机:
舵机类型 | 转动范围 | 应用领域 |
---|---|---|
180度舵机 | 0度到180度 | 机器人、模型飞机、机械臂等 |
90度舵机 | 0度到90度 | 特定较小转动范围的应用,但使用范围较窄 |
270度舵机 | 0度到270度 | 需要更大旋转范围的应用 |
360度舵机 (Continuous Rotation Servo) | 连续旋转 | 这种舵机实际上是一种连续旋转舵机,可以不停地旋转。主要用于轮式机器人等需要连续旋转的场合 |
特定角度舵机 | 根据需求定制,如120度、300度 | 一般都是定制的,通常用于特殊应用 |
舵机选购:
在进行舵机选购前,我们先对常用的电机进行一个价格科普,价格由低到高分别如下:
- 普通直流电机 (DC Motor): 普通直流电机通常最便宜,尤其是小型低功率的直流电机,这些电机相对简单,没有复杂的控制或反馈机制。
- 直流减速电机 (DC Gear Motor):直流减速电机是在普通直流电机的基础上增加了一个齿轮箱,用来降低速度并增加扭矩。由于齿轮箱的存在,这种电机通常比普通直流电机贵一些,但具体价格也会依赖于齿轮箱的质量和复杂度。
- 舵机 (Servo Motor):舵机能够精确控制角度、速度和位置,通常内置了反馈系统。小型标准的舵机普遍用于模型和机器人项目中,相对价格中等。但是,用于工业或专业用途的大功率高精度舵机则会贵很多。
- 步进电机 (Stepper Motor):步进电机能够精确定位,在需要精密控制的应用中非常常见。由于设计和控制的复杂性,一般来说,步进电机的价格要高于普通直流电机和大多数舵机。
正如上面提到的,在大型工业设备中,舵机又叫伺服电机,价格反而会比步进电机贵很多。
主要就是因为大功率、高转矩的伺服电机比同级别的步进电机需要更高等级的材料和制造工艺。
而且伺服电机的控制系统通常更复杂,包括闭环控制、实时监测和调整,这需要高性能的控制器和软件支持。
步进电机的控制系统相对简单,主要是开环控制,成本较低。
关于什么是开环、闭环,之后我们也会讲到,这里大都督先卖个关子。
好啦,叭叭叭了怎么多,总之,我们电子爱好者买舵机还是很划算的,价格也不贵,像9克经典舵机这种小型舵机,几块钱就能拿下。
顺便说一下,大家购买舵机上面会标注多少多少克,多少千克,除了9克经典舵机的9克指的是舵机重量,剩下的舵机标注的多少kg是指其扭矩是多少kg/cm。
并且舵机的扭矩也跟其所受电压呈正相关,就是电压越大,扭矩越大。随着所需扭矩的上升,舵机的价格也会几何倍增长,价格对应表如下:
舵机重量/型号 | 舵机扭矩(kg/cm) | 供电电压(V) | 价格 (人民币) | 图片 |
---|---|---|---|---|
9克经典舵机 | 1.6 | 3.0~7.2 | 5.5~6 | |
便宜的20kg舵机 | 13 | 3.0~7.2 | 13~15 | |
贵的20kg舵机 | 20.5~22.8 | 4.8~7.2 | 35~70(看买的哪家的) | |
贵的30kg舵机 | 27~32 | 4.8~6.8 | 115 | |
贵的35kg舵机 | 29~35 | 6~8.4(5V也行) | 150左右 | |
便宜的60kg舵机 | 58.5~70 | 6~8.4 | 100多 | |
贵的60kg舵机 | 58~70 | 6~8.4 | 200左右 |
舵机这玩意真的是一分价钱一分货,所以大家要提前对自己所需力矩有个预期,按需购买。
而且舵机还很容易烧坏,像便宜的20kg舵机大都督至少干坏了5、6个,都是money啊,/(ㄒoㄒ)/~~
还是老规矩,各个型号的舵机我都买过,我把我用过的舵机链接分享给大家,没有广子,大家仅供参考,在咱们的公众号「深海大都督」里了,回复「舵机购买」就可以啦。
最后总结,大家购买舵机前,要先预估扭矩多少kg,再根据扭矩选择供电电源是5v还是7.4V。
舵机接线:
舵机的接线也非常简单,有三根线引出,分别接VCC、GNG和信号线。主要引出线的格式就是棕、红、橙(棕色连接GND、红色连接VCC、橙色连接信号)。
至于为什么要把电源线放中间,之前大都督的这篇文章也解释过【深海王国】初中生也能画的电路板?番外1(2)Pro Mini拓展板原理图与PCB绘制,
其实就是为了防止5V和GND接反了,尤其是舵机这东西,一定一定不要把电源线接反了,要不肯定会被烧坏。
如果使用小舵机,我们可以直接用Arduino供电,就这样接线:
Arduino引脚 | 舵机 | 功能 |
---|---|---|
5V | 正极 | 红色 |
GND | 棕色 | 负极 |
D9(PWM) | 橙色 | PWM信号输入 |
如果使用大舵机,我们就需要一个独立的电源,用来专门供电:
Arduino引脚 | 接线 | 功能 |
---|---|---|
GND | 舵机棕色地线、电源负极 | 负极 |
D9(PWM) | 舵机橙色信号线 | PWM信号输入 |
电源 | 接线 | 功能 |
---|---|---|
负极 | 舵机棕色地线、Arduino的GND引脚 | 供电负极 |
正极 | 舵机红色电源线 | 供电正级 |
为什么要使用单独电源呢?之前我们也提到过,嵌入式相当于我们房子的管家,你不能让管家去干重体力活对不对,干体力活就要找专门的师傅干,所以我们需要专门的电源来供电。(详见(1)单片机的介绍与嵌入式基本知识)
然后关于什么是PWM和Arduino的PWM引脚有哪些,可以看这篇文章:(2)初识Arduino与基本单片机电路知识
大家可以先把PWM简单理解为模拟输出。
控制代码:
#include <Servo.h> //加载舵机文件库
int pos = 0; //舵机当前角度
Servo myservo; //定义舵机类
void setup(){
myservo.attach(9, 500, 2500); //修正脉冲宽度,相当于初始化舵机,比如180°舵机,就是将0~180°拆分为500~2500
}
void loop(){
for (pos = 0; pos <= 180; pos += 1) { //pos+=1等价于pos=pos+1
myservo.write(pos);
delay(20);
}
for (pos = 180; pos >= 0; pos -= 1) {
myservo.write(pos);
delay(20);
}
}
上面这段代码的最后实现效果,就是让我们的舵机从0~180°来回转动。
仿真的话给大家推荐一个在线仿真平台:wokwi
将代码复制上去,再添加一下Servo库就可以跑啦:
代码解析:
函数 | 用法示例 | 描述 |
---|---|---|
Servo myservo; | Servo myservo; | 创建一个Servo类的对象myservo 。myservo 是对象的名称,这个名称可以自由指定。 |
myservo.attach(pin) | myservo.attach(9); | 将舵机对象与Arduino板上的具体引脚关联起来。在这个例子中,9号引脚被用于控制舵机。 |
myservo.write(angle) | myservo.write(45); | 控制舵机旋转到指定的角度。这里的45表示让舵机转到45度的位置。请注意,这里指定的是目标位置的绝对角度,而不是相对于当前位置旋转的角度。 |
常用的就这三个,还有一些不常用的:
函数 | 用法示例 | 描述 |
---|---|---|
myservo.writeMicroseconds(us) | myservo.writeMicroseconds(1500); | 控制舵机旋转到特定的微秒信号下。us 是信号的微秒数,这个信号直接控制舵机的行为,适用于需要更细粒度控制的场景。 |
myservo.read() | int position = myservo.read(); | 获取舵机目前的位置(以角度计)。返回舵机当前所在的角度,返回的值为最近一次write() 或writeMicroseconds() 命令设置的位置。 |
myservo.attached() | if(myservo.attached()) {...} | 检查舵机是否与某个引脚关联。如果舵机已经与一个引脚成功关联,则返回true 。 |
myservo.detach() | myservo.detach(); | 将舵机从当前关联的引脚上解除关联。执行这个命令后,舵机会停止接收控制信号,从而可以自由旋转。 |
最后,大家记得在给舵机下达转动指令后,一定要用delay()
函数,预留够舵机转动的执行时间。
说简单点,给人家点转动时间,再下达下一个指令!
记得用delay()
函数!
记得用delay()
函数!
记得用delay()
函数!
说三遍,哈哈。
今天的学习到这里就差不多啦。下节我们会继续进行Arduino其他元器件的学习和使用,看到这里的你今天也辛苦啦٩(ˊᗜˋ)و✧。
需要的相关材料链接我都放在公众号「深海大都督」里了,回复「舵机购买」就能获得啦~
哈哈,让焦虑不再蔓延,信息不再高壁,如果你觉得这篇文章对你有帮助,就来个免费的点赞吧!
(◍˃̶ᗜ˂̶◍)✩我深海大都督正式授予你深海王国公民的身份~
(・ω< )★ 加入深海大家庭,快乐摆烂每一天!