mBlock & Arduino(9)舵机(Servo motor)控制

舵机(Servo motor)英文常简称 Servo,中文也有人称伺服机,由控制电路、齿轮、直流马达等组成,可使用〈mBlock & Arduino(4)利用 PWM 模拟类比讯号〉中谈过的 PWM 技术来控制舵机转动角度,像Plotclock就应用了三个舵机,以手臂在白板上绘制出目前的时间。

舵机控制原理

舵机的基本原理是接受 PWM 讯号,经由内部电路计算出转动角度,根据我查到的资料来看,大多数舵机旋转角度是 0 到 180 度,PWM 讯号的频率必须是 50 Hz,控制舵机角度的脉冲持续时间约是 1.0 ms 到 2.0 ms,脉冲持续时间若为 1.0 ms 时角度为 0 度,1.2 ms 时角度为 45 度,1.5 ms 时角度为 90 度,2.0 ms 时角度为 180 度。

Plotclock 用的是Tower Pro 9g servos(SG90 digital servo),为三线式舵机,红线接电源,棕色的线接 GND,橘色线为信号线:

在 Fritzing 中,是以红色线接电源,黑色线接地,黄色为信号线作代表,你可以如下连接线路:

 

如果直接使用 Arduino 官方语言,可以使用delayMicroseconds函式来控制脉冲宽度。

根据

Servo library

的说明,除了 Arduino Mega 之外,如果使用了 Arduino 的 Servo 程式库,D9 与 D10 脚位的 PWM 功能就会被停用,因此,通常会把舵机的信号线接在 D9 或 D10 脚位,实际测试 mBlock 的“设置舵机脚位…”方块时,也是如此。

有指针的亮度感应器

在〈mBlock & Arduino(8)光敏电阻、亮度感应器与光线追踪器〉中,我们使用光敏电阻制作了简单的亮度感应器,你可以加上舵机,配合 SG90 的手臂,作个有指针的亮度感应器,你可以如下拉设电路:

实际测试我手中的光敏电阻,完全盖住它的话,类比输入脚位约可量得 400 左右的值,以手电筒直接照射下,约为 1000 出头的值,因此暂且定义全暗为 400,全亮为 1000,这个范围要转动舵机 0 到 180 度,因此,每个类比输入量得的值减去 400,再乘上 0.3,就是打算转动的角度:

因为我们读取指针的习惯,多半是顺时针方向是越来越大,这正好与舵机的角度计算方向相反,所以使用 180 减去算出来的角度,就可以改为顺时针指示亮度大小。

感谢CodeData用户:caterpillar的贡献 著作权归作者所有

caterpillar:目前为自由工作者,喜好研究程式语言、框架、社群,从中学习设计、典范及文化。闲暇之余 記錄所學,技术文件涵盖 C/C++JavaRuby/RailsPythonJavaScriptHaskell 等多个领域,出版电子书 Java SE 6 技術手冊Java Lambda TutorialJava TutorialPython TutorialEssential JavaScriptHaskell Tutorial

整理:宁波家电物联网云平台,中科极动云

 

 

 

 

posted @ 2024-05-14 22:01  FBshark  阅读(6)  评论(0编辑  收藏  举报