克舵机实验
实验现象
通过调整电位器来改变舵机的旋转的角度
理论学习
标配9g舵机,黄色为信号线,红色为电源,棕色为地线。
舵机控制模块是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。舵机控制模块可以接收数字信号或模拟信号,分别对应了swing模式和turn模式,然后产生舵机的PPM控制信号,使得舵机来回摆动或者旋转到设定角度静止。在swing模式下,电位器可以调节舵机摆动的频率。
舵机控制模块中预设了2种不同的控制机制,可以通过开关进行切换,在非编程模式下自由玩转各种进阶功能。
常用的应用场景:即支持无编程,也支持编程,可搭配mcirobit、Arduino;在无编程中能够快速的切换不同运动模式。目前,舵机控制模块在高档遥控玩具,如飞行器、机械手臂、潜艇模型、遥控机器人等场景中已经得到了普遍应用。
舵机模块既可以接收数字信号,也可以接收模拟信号,主要用于输出设定角度的摆动,摆动范围0~180°。
在非编程条件下,舵机模块需要结合舵机控制模块使用。舵机控制模块既可以接收数字信号,也可以接收模拟信号,分别对应swing模式和turn模式:
swing:在设定角度和初始角度来回摆动
turn:转到设定角度静止 ;
原理图
代码编写
#include<Arduino.h>
#define pwm_pin 9
int pulsewidth = 0;
void setup() {
pinMode(pwm_pin, OUTPUT);
}
void loop() {
pulse(90);
}
void pulse(int angle) {
pulsewidth = int((angle * 11) + 500);
digitalWrite(pwm_pin, HIGH);
delayMicroseconds(pulsewidth);
digitalWrite(pwm_pin, LOW);
delay(20 - pulsewidth / 1000);
}
//引入lib
#include<Servo.h>
//创建一个伺服电机对象
Servo myservo;
//设定连接可变电阻的模拟引脚
#define pot_pin A5
int val;
//创建变量,存储从模拟端口读取的值(0-1023)
void setup() {
myservo.attach(9);//9号引脚输出电机控制信号,只可以使用9、10引脚
}
void loop() {
val = analogRead(pot_pin);//读取来自可变电阻的模拟值(0-1023之间)
val = map(val, 0, 1023, 0, 179);
myservo.write(val);//设定伺服电机的位置
delay(15);//等待电机旋转到目标角度
}