第1篇:用Arduino控制曲别针电动机
第2篇:非接触式开关的制作与控制
第3篇:自制电磁执行器的制作方法
第4篇:享受控制RGB LED灯的乐趣
我们推出了一项新计划,即通过使用了Arduino的简单制作来学习电子制作的原理和基础知识。此次为我们分享的嘉宾是伊藤尚未先生,他活跃于媒体艺术领域,并且在书籍领域以讲解“更深层次的原理”而闻名。在第5篇,也就是最后一篇,我们将用Arduino来控制伺服电机。
目录
1. 前言
大家好!我是伊藤尚未。
在这个连载系列中,我们尝试通过Arduino控制让各种作品动起来,考虑到还有我没有试过的部件,所以我决定借此机会尝试一下,那就是“伺服电机”。
说起“微控制器+动作”,就会让人想起机器人,但就我而言,我用过一些比较原始的东西(比如田宫齿轮和万宝至电机)来实现。当然,对于现代的机器人而言,使用的运动部件就是伺服电机。在我的孩提时代,曾经有一阵电动遥控车热,我记得我经常和朋友们一起玩。
当然,当时也是超级跑车热潮的时代,品牌包括兰博基尼、蓝旗亚、保时捷等豪车。我记得当时由于无线电控制器的手柄和加速器使用了伺服电机,遥控车会根据控制器操纵杆的移动而移动,让我觉得很不可思议,从那时起我对伺服电机的表现就佩服得很。
那时,我只能按照“它之所以那样动作,是因为它就是那样的机制”来理解,但现在我深刻意识到在不可思议中思考“那种机制”是很重要的。
近年来,机器人中所用的伺服电机通常是方形外壳,带有圆盘或矩形联轴器(舵机),与以前的样子相比几乎没什么变化,因此能一眼就看出来。不过考虑到可能有人对它的内部并不是非常了解,所以我想借此机会再重新研究一下。
2. 什么是伺服电机?
从广义上讲,伺服电机具有轴旋转检测机构,并具有旋转角度、旋转位置和速度等的控制功能,因此也用于重型机械和工厂生产线等应用领域。
不过对于我们来说,各种伺服电机中,无线电遥控设备和模型机器人等设备中使用的电机类型是我们在电子制作过程中最为熟悉的。当然,在用Arduino等微控制器来使运动部件像机器人一样动起来的应用中,也会使用常用的伺服电机。
那么,检测电机旋转的机构到底是怎样的呢?
从结构图看,多为下述结构,看起来并不陌生的样子。
不管怎样,我想看看它的真面貌,所以把它拆解开了。样品为大小正合适的GWS公司生产的S03T/2BBMG/FUTABA。
首先,我拆下舵机和四个角的螺丝,并将外壳拆下来。外壳分三部分,拆下顶盖后会露出齿轮组。
齿轮是金属的,用轴承连接,结构上很牢固。看起来是4档减速齿轮,涂了很多润滑脂,可以想像力矩还是蛮大的。
拆下中间的外壳后,就可以看到电机了。照片右侧的圆柱体金属部分是电机,左侧是控制器部分。左侧有舵机轴,因此可以推断通过这里来检测旋转情况。
当拆掉舵机轴后,可以看到轴本身就是一个旋转传感器。用手指转动这个轴,从旋转角度和触感上可以判断出,这是一个通过物理旋转的滑动接触点来获得电阻值变化的可调电阻器、电位器。通过它可以检测舵机的旋转位置。果真和结构图是一致的。
在这个电位器的底部有电路,通过读取其电阻值,并将电阻值与输入信号进行比较,然后将其停在平衡点上,应该可以使其按所需角度旋转。
所以,一共有三个引脚,一个是GND,一个是正电源,一个是信号线,可以根据GND和正电源之间的电压差(比值)来控制。使用这种机制,即使由于电池状态等因素造成一些电压波动,也可以毫无问题地控制旋转角度。
要从Arduino端控制伺服电机的话,已经有一个库可以用,我会直接使用这个库,其输出信号是PWM。PWM是在一个周期内改变脉冲的宽度,最终以电压变化体现出来。
在这里,让我想起了我的童年回忆。当时的无线电控制器是否装有微控制器?那时候市场上出现的是单板微控制器等较大型的产品。我记得当时我想知道控制器里面都有什么而把它拆开了,但不记得里面是否有微控制器了。可能是因为它是模拟的。
如果使用的是PWM,那么应该是通过硬件进行处理的吧。如果这样想的话,伺服电机不仅可以用通过PWM进行控制,应该也可以通过模拟进行控制。如果按照前面提到的控制信号是GND和正电源之间的电压比来考虑的话,当然模拟也应该没有问题,也就是说,伺服电机本身和以前的模拟输入时几乎没有什么变化。
没有变化的东西属于“老物件”,但这里的“老物件”不等于“坏东西”,而是“稳定的东西”,所以伺服电机在技术方面的评价是很高的。
不过,由于IC也在日益小型化,所以伺服电机的控制电路部分也已经改进,应该可以更适当地处理PWM了。
3. 与Arduino连接
现在,我们尝试将伺服电机与Arduino连接起来。GND、电源、信号的引脚排列会因伺服电机而异,所以让我们来确认一下。
这次我用的是GWS的S03T/2BBMG/FUTABA,也就是前面拆卸用的那种。引脚排列如下所示:
从照片左侧开始,引线依次是黑色、红色和白色,它们分别连接到GND、5V(正电源)和信号线。
与Arduino的连接方法如下:
我使用现有的库尝试编写了如下草图:
#include<Servo.h> Servo myServo; void setup() { myServo.attach(9); } void loop() { myServo.write(90); delay(1000); myServo.write(45); delay(1000); myServo.write(135); delay(1000); }
读取伺服电机的库程序并输出到引脚9。myServe.write的括号里面表示角度,所以我将其设置为90度是中间位置,并以此为基准向左右摆动45度。从伺服电机的功能上来看,可以以中间位置为基准向左右摆动90度,但如果改变数值时像“0”、“180”那样的角度太多,电机就会颤抖。我不知道具体原因,可能是由于旋转传感器是模拟的,所以数值上有些问题。鉴于此,我决定在不受影响的范围内使用。
如果在舵机上安装一个摇臂,那么摆动幅度也会变大,所以我在这个摇臂顶端安装了之前自制的执行器。这种执行器的机制是将漆包线缠绕在吸管上,做成线圈,将钉子插入吸管中,当有电流流过时,钉子就会弹上去。也就是一种自制的螺线管。
为了驱动这个执行器,我使用了之前用过的ROHM生产的“2SD1866”。通过20kΩ电阻器连接到底座并通过Arduino来控制ON和OFF。执行器驱动用的外接电源由两节干电池分别提供3V电。
现在,可以在一些特定部位上轻轻敲击了。
整体电路图如上图所示。通过引脚13驱动自制执行器,通过引脚9驱动伺服电机。
外部电路只有用来驱动自制执行器的晶体管和电阻器,所以我把它们组装在一个小面包板上了。
我将草图添加到之前的草图中,并添加了执行器的工作部分。我让钉子在伺服电机移动到特定角度时弹上去。
#include<Servo.h> Servo myServo; void setup() { myServo.attach(9); pinMode(13, OUTPUT); } void loop() { myServo.write(90); delay(500); digitalWrite(13, HIGH); delay(100); digitalWrite(13, LOW); delay(1000); myServo.write(45); delay(500); digitalWrite(13, HIGH); delay(100); digitalWrite(13, LOW); delay(1000); myServo.write(135); delay(500); digitalWrite(13, HIGH); delay(100); digitalWrite(13, LOW); delay(1000); }
在实际操作时,必须考虑到摇臂的移动时间,所以角度越大时间点越难把握。
4. 通过Arduino控制来演奏乐器!
现在,我想用它来演奏乐器。我在100日元商店找到了这样的一把钟琴,我决定把它改造一下。
首先,取下铁片并将它们安装在另一个框架上。
我用橡胶皮筋将这些铁片固定在框架上,这样在敲击后振动就不会停止。在框架的下方安装了前面做的带摇臂的执行器。通过Arduino同时控制伺服电机和执行器。
在这个框架中,do、re、mi、 fa、sol、la、si、do的位置分别对应122、112、102、95、85、77、67、57的角度,我让伺服电机根据这些角度旋转并敲击铁片。
这些角度值是我通过实际调整得出的。接下来,怎么演奏呢……我暂时调整了位置,尝试让它演奏出do、re、mi、 fa、sol、la、si、do的声音。
这样一来,使我有了让它演奏一首歌的兴致。
哎呀,好像弹出曲调了,只是有点像我,没有节奏感(笑)。只要能享受声音就好了,知足了!
这一次,我用Arduino控制伺服电机尝试了演奏乐器。在这个连载系列中,我们介绍了使用Arduino来控制各种设备的一些方法。怎么样?有收获吗?
我想您已经了解到了,即使是身边熟悉的设备,也可以用Arduino进行控制,也可以制作出更有趣的电子作品!盼望大家也想出各种创意,享受电子制作的乐趣!
第1篇:用Arduino控制曲别针电动机
第2篇:非接触式开关的制作与控制
第3篇:自制电磁执行器的制作方法
第4篇:享受控制RGB LED灯的乐趣
第5篇:用Arduino控制伺服电机来演奏乐器!(本章)