71073| 25
|
[入门教程] DFR0100 Arduino教程 12-- 可控舵机 |
【本篇课程内容于 2024年11月14日更新】 >本系教程配套硬件套件:【新版】Arduino入门套件 DFR0100 在前面一个项目中,我们知道了如何让舵机动起来,这里将进一步的通过外部信号来让舵机随着输入的改变来相应改变角度,方便做一些可控的转动装置。我们这里通过一个可变电阻——电位器,来控制舵机。当然你也可以通过其他的模拟量或者数字量来控制舵机。模拟量的话,比如改造一下前面的感光灯,变成一个会动的感光灯。数字量的话,比如通过一个按钮,倾斜开关等等,一旦触发开关,就让舵机转动,可以有很多玩儿法。再给舵机加个外壳,让它更具生命力。 元件清单 硬件连接 与项目【舵机初动】不同处在于多了一个电位器,电位器相当于一个可变阻值的电阻,两个引脚的一边分别接5V与GND,而另一边只有单独一个引脚的接模拟口0,用于做输入信号。 图 1 可控舵机连线图 代码示例
下载代码,成功后,旋转电位器,看看舵机是不是随着电位器转动。 代码回顾 代码的开始部分还是需要调用<Servo.h>库,并创建相应的对象。同时,需要一个模拟口用来读取电位器的值,我们这里用变量potPin代表模拟口0。这里主要讲下map函数。 函数格式如下: map(value, fromLow, fromHigh, toLow, toHigh) map函数的作用是将一个数从一个范围映射到另外一个范围。也就是说,会将 fromLow到fromHigh之间的值映射到toLow在toHigh之间的值。 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, 179); 所以,回到代码中,我们是想将模拟口读到的0~1023的值,转换为舵机的0~180°。 示例代码Interact_with_Servo_Chinese.rar 下一篇教程:Arduino教程 Lesson 13-- 彩灯调光台 |
#include <Servo.h> Servo myservo; int potpin = 0; int val; int ledPin = 5; void setup() { myservo.attach(9); pinMode(ledPin, OUTPUT); } void loop() { val = analogRead(potpin); val = map(val, 0, 1023, 0, 179); myservo.write(val); delay(15); digitalWrite(ledPin,HIGH); delay(500); digitalWrite(ledPin,LOW); delay(200); } 为撒 加了个闪灯程序 舵机就疯了 ? |
本帖最后由 juju大叔 于 2023-2-15 22:41 编辑 Jane 发表于 2014-7-17 14:02 正好看到,不知道这个10位的来源。看了一下文档,在此标注一下。 https://wiki.dfrobot.com.cn/_SKU_DFR0216_DFRduino_UNO_R3#target_8 [输入输出/2.6路模拟输入A0到A5]有讲到 file:///Users/fai/Desktop/%E6%88%AA%E5%B1%8F2023-02-15%2022.37.32.png |
我用电位器和一个LED做了个可调节亮度的LED,但是我发现LED的亮度是瞬变的,没有渐变的过程(就是类似于呼吸灯那种渐变),我打开串口监视器看了看数值,发现没问题,但我搞不懂为什么LED不会渐变。 这是我的代码:
|
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed