1.通过简单案例认识舵机
案例1:自动吃食的小动物模型
难度:⭐
相关材料:舵机(MG90S)、木板或硬纸板、剪刀
程序:舵机范例程序
点击查看【bilibili】
案例2:自动转头的小动物模型
难度:⭐
相关元器件:相关材料:舵机(MG90S)、木板或硬纸板、剪刀
程序:舵机范例程序
点击查看【bilibili】
2.舵机的原理
这种电机内置电路可将电机输出轴的位置进行反馈,因此它的输出轴可以被Arduino等控制在某一个固定角度。它的主要应用为控制模型的运动方向(这就是”舵机“这一名称来历。),很多小型机械臂也会使用舵机驱动。舵机有些是可以旋转360度的,但有些只能旋转180度。
舵机的转动的角度是通过调节PWM(脉冲宽度调制)信号的占空比来实现的,标准PWM(脉冲宽度调制)信号的周期固定为20ms(50Hz),理论上脉宽分布应在1ms到2ms 之间,但是,事实上脉宽可由0.5ms 到2.5ms 之间,脉宽和舵机的转角0°~180°相对应。有一点值得注意的地方,由于舵机牌子不同,对于同一信号,不同牌子的舵机旋转的角度也会有所不同。
点击查看【bilibili】
舵机控制基本程序:
/**********************************************************************
舵机的直接控制
-----------------------------------------------------------------------
修订历史/Revision History
日期/Date 作者/Author 参考号/Ref 修订说明/Revision Description
2021/05/18 金陵中学 1.0 金陵中学Arduino选修课使用
-----------------------------------------------------------------------
*/
#include <Servo.h>
Servo myServo; //创建Servo对象myServo
int pos=90; // 创建变量pos存储舵机角度值
void setup() {
myServo.attach(9);
}
void loop() { // 检查串口缓存是否有数据等待传输
myServo.write(pos); // 使用pos变量数值设置伺服电机
delay(15);
}
}
舵机的往复控制:
/**********************************************************************
舵机的往复控制
-----------------------------------------------------------------------
修订历史/Revision History
日期/Date 作者/Author 参考号/Ref 修订说明/Revision Description
2021/05/18 金陵中学 1.0 金陵中学Arduino选修课使用
-----------------------------------------------------------------------
*/
#include <Servo.h>
Servo myservo; //创建Servo对象myservo
int pos = 0; // 创建变量pos存储舵机角度值
void setup()
{
myservo.attach(9);
}
void loop()
{
for(pos = 0; pos < 180; pos += 1) // 舵机从0到180度,间隔为1
{
myservo.write(pos); //告知舵机前往变量pos所对应的位置
delay(15); // 等待15ms
}
for(pos = 180; pos>=1; pos-=1) // 舵机从180到0度
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
串口控制示例程序:
/**********************************************************************
通过串口实现舵机的控制
-----------------------------------------------------------------------
修订历史/Revision History
日期/Date 作者/Author 参考号/Ref 修订说明/Revision Description
2021/05/18 金陵中学 1.0 金陵中学Arduino选修课使用
-----------------------------------------------------------------------
*/
#include <Servo.h>
Servo myservo; //创建Servo对象myservo
int dataIndex = 0; //创建整数型变量,存储输入数据序列号
void setup() {
myservo.attach(9);
Serial.begin(9600); //启动串口通讯,传输波特率9600
Serial.println("Please input serial data.");
}
void loop() { // 检查串口缓存是否有数据等待传输
if ( Serial.available()>0 ) {
dataIndex++; // 处理数据序列号并通过串口监视器显示
Serial.print("dataIndex = ");
Serial.print(dataIndex);
Serial.print(" , ");
int pos = Serial.parseInt(); // 解析串口数据中的整数信息并赋值给变量pos
Serial.print("Set servo position: ");
Serial.println(pos); // 通过串口监视器显示变量pos数值
myservo.write(pos); // 使用pos变量数值设置伺服电机
delay(15);
}
}