伺服马达(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函式来控制脉冲宽度,不过 mBlock 中只有“等待”方块,没办法达到这么短的时间控制,然而,mBlock 中有个“设置伺服马达脚位…”的方块,可以直接指定马达转动角度,例如,以下的程式,可以一秒为间隔,不断转动马达为 0、45、90、135 与 180 度:
虽然使用了 PWM 讯号来控制马达转动,不过,这不表示要使用 Arduino 的 PWM 脚位,只不过根据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的贡献 著作权归作者所有
整理:宁波家电物联网云平台,中科极动云