点击上方“蘑菇云创造”可以关注我们哦
在前面一个项目中,我们知道了如何让舵机动起来,这里将进一步的通过外部信号来让舵机随着输入的改变来相应改变角度,方便做一些可控的转动装置。我们这里通过一个可变电阻——电位器,来控制舵机。当然你也可以通过其他的模拟量或者数字量来控制舵机。模拟量的话,比如改造一下前面的感光灯,变成一个会动的感光灯。数字量的话,比如通过一个按钮,倾斜开关等等,一旦触发开关,就让舵机转动,可以有很多玩法。再给舵机加个外壳,让它更具生命力。
所需元件
■ 1× Micro Servo 9g
■ 1× 10K电位器
硬件连接
与前面一节不同处在于多了一个电位器,电位器相当于一个可变阻值的电阻,两个引脚的一边分别接5V与GND,而另一边只有单独一个引脚的接模拟口0,用于做输入信号。
图 11-1可控舵机连线图
代码编程
样例程序11-1
//项目十一 - 可控舵机
#include <DFRobot_Servo.h> //声明调用Servo.h库
Servo myservo; //创建一个舵机对象
int potpin = 0; //连接到模拟口0
int val; //变量val用来存储从模拟口0读到的值
void setup() {
myservo.attach(9); //将引脚9上的舵机与声明的舵机对象连接起来
}
void loop() {
val = analogRead(potpin); //从模拟口0读值,并通过val记录
val = map(val, 0, 1023, 0, 180); //通过map函数进行数值转换
myservo.angle(val); //给舵机写入角度
delay(15); //延时15ms让舵机转到指定位置
}
下载代码,成功后,旋转电位器,看看舵机是不是随着电位器转动。
代码学习
代码的开始部分还是需要调用<DFRobot_Servo.h>库,并创建相应的对象。同时,需要一个模拟口用来读取电位器的值,我们这里用变量potPin代表模拟口0。
这里主要讲下map函数。
函数格式如下:
map(value, fromLow, fromHigh, toLow, toHigh)
map函数的作用是将一个数从一个范围映射到另外一个范围。也就是说,会将 fromLow 到 fromHigh 之间的值映射到 toLow 在 toHigh 之间的值。在Mind+中对应指令:映射0从{0,1023}到{0,255}。输入代码时,如果不那么熟悉,可以通过拖动到指令区,进行查看。
map函数参数含义:
value:需要映射的值
fromLow:当前范围值的下限
fromHigh:当前范围值的上限
toLow:目标范围值的下限
toHigh:目标范围值的上限
map的神奇之处还在于,两个范围中的“下限”可以比“上限”更大或者更小,因此map()函数可以用来翻转数值的范围,可以这么写:
y = map(x, 1, 50, 50, 1);
这个函数同样可以处理负数,请看下面这个例子:
y = map(x, 1, 50, 50, -100);
val = map(val, 0, 1023, 0, 180); //通过map函数进行数值转换
所以,回到代码中,我们是想将模拟口读到的0~1023的值,转换为舵机的0~180°。
硬件回顾
电位器
电位器可以理解为个电阻,只是这个电阻阻值可变。我们这里可调节的范围是0~10KΩ。电阻两端接电源,通过中间引脚调节阻值,随着电阻值的改变而带动电压变化。我们用模拟口0读取到这个变化中的电压值,并转换为对应的舵机的角度值。这就是整个的控制过程。
电位器在电路上的表示的图标为下图,分别对应器件上的3个引脚。
简单的看下原理,不知道还记不记得在第九个项目中讲到的分压原理。电位器用的同样是分压原理。我们可以理解为,电位器被拆分为上下两个电阻R1和R2,随着转动电位器,上下阻值发生变化,从而对应的输出电压就不同。我们可以想象成切蛋糕,分到的蛋糕越多(电阻),吃下去的能量(电压Vout)也就越大。电压值大小的变化可以直接通过模拟口读到的值(0~1023)反应出来。
——————— 正文完 ———————
教育的目的是为了培养学生协作能力、沟通能力、批判思维以及创造力,其中最核心的是创造力,蘑菇云创客教育作为国内为数不多的一站式创客教育服务供应商旨在培养孩子的创造力。
为让学生们在课堂上学习到的知识更好地连接现实世界,蘑菇云将指导学校规划、建立、运营自己的创客空间。并根据学生年龄段的不同,在设计与布局上进行了区分
小学创客空间注重趣味性,
强调互动场景;
初中创客空间注重实用性,
强调学习场景;
高中创客空间注重技术性,
强调应用场景;
在内容上, 蘑菇云和国内一线创客名师联手,编纂了一系列适合国内创客教育的教材。并拥有一套完整的创客教育课程体系,包括课程内容及教具,课程培训,技术答疑。同样根据学生年龄段的不同,在课程分类与设计上也会有所区别。
小学通过游戏化和体验化的方式来开展,要以“玩中学”为主。
初中引导学生在实际动手过程中进行探究式学习,促进“做中学”。
高中基于问题和设计的学习,需要教师为学生创设相关的真实情境,使高中生在“思中学”。
推荐阅读:
【炫彩 RGB LED】基于Mind+Arduino入门教程05
【S.O.S求救信号】基于Mind+ Ardunio入门教程02
【初识Arduino & Mind+】基于mind+ Arduino入门教程00
我知道你在看呦

