0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用Arduino控制伺服电机来演奏乐器!

话多显蠢 2023-02-20 10:15 次阅读

第1篇:用Arduino控制曲别针电动机
第2篇:非接触式开关的制作与控制
第3篇:自制电磁执行器的制作方法
第4篇:享受控制RGB LED灯的乐趣

pYYBAGPyzJGAeYawAAHQ4kDhDdw318.jpg

我们推出了一项新计划,即通过使用了Arduino的简单制作来学习电子制作的原理和基础知识。此次为我们分享的嘉宾是伊藤尚未先生,他活跃于媒体艺术领域,并且在书籍领域以讲解“更深层次的原理”而闻名。在第5篇,也就是最后一篇,我们将用Arduino来控制伺服电机

目录

前言

什么是伺服电机?

与Arduino连接

通过Arduino控制来演奏乐器!

1. 前言

大家好!我是伊藤尚未。

在这个连载系列中,我们尝试通过Arduino控制让各种作品动起来,考虑到还有我没有试过的部件,所以我决定借此机会尝试一下,那就是“伺服电机”。

说起“微控制器+动作”,就会让人想起机器人,但就我而言,我用过一些比较原始的东西(比如田宫齿轮和万宝至电机)来实现。当然,对于现代的机器人而言,使用的运动部件就是伺服电机。在我的孩提时代,曾经有一阵电动遥控车热,我记得我经常和朋友们一起玩。

当然,当时也是超级跑车热潮的时代,品牌包括兰博基尼、蓝旗亚、保时捷等豪车。我记得当时由于无线电控制器的手柄和加速器使用了伺服电机,遥控车会根据控制器操纵杆的移动而移动,让我觉得很不可思议,从那时起我对伺服电机的表现就佩服得很。

那时,我只能按照“它之所以那样动作,是因为它就是那样的机制”来理解,但现在我深刻意识到在不可思议中思考“那种机制”是很重要的。

近年来,机器人中所用的伺服电机通常是方形外壳,带有圆盘或矩形联轴器(舵机),与以前的样子相比几乎没什么变化,因此能一眼就看出来。不过考虑到可能有人对它的内部并不是非常了解,所以我想借此机会再重新研究一下。

2. 什么是伺服电机?

从广义上讲,伺服电机具有轴旋转检测机构,并具有旋转角度、旋转位置和速度等的控制功能,因此也用于重型机械和工厂生产线等应用领域。

不过对于我们来说,各种伺服电机中,无线电遥控设备和模型机器人等设备中使用的电机类型是我们在电子制作过程中最为熟悉的。当然,在用Arduino等微控制器来使运动部件像机器人一样动起来的应用中,也会使用常用的伺服电机。

那么,检测电机旋转的机构到底是怎样的呢?

从结构图看,多为下述结构,看起来并不陌生的样子。

poYBAGPyzJOAZE34AABMhA5PEnk736.png

不管怎样,我想看看它的真面貌,所以把它拆解开了。样品为大小正合适的GWS公司生产的S03T/2BBMG/FUTABA。

pYYBAGPyzJSAEnAwAAE0RHG3qW0994.jpg

首先,我拆下舵机和四个角的螺丝,并将外壳拆下来。外壳分三部分,拆下顶盖后会露出齿轮组。

齿轮是金属的,用轴承连接,结构上很牢固。看起来是4档减速齿轮,涂了很多润滑脂,可以想像力矩还是蛮大的。

poYBAGPyzJeAYyFWAAF2hhoNBKs227.jpg

拆下中间的外壳后,就可以看到电机了。照片右侧的圆柱体金属部分是电机,左侧是控制器部分。左侧有舵机轴,因此可以推断通过这里来检测旋转情况。

poYBAGPyzJmAbbKwAAEow6PjaaQ960.jpg

当拆掉舵机轴后,可以看到轴本身就是一个旋转传感器。用手指转动这个轴,从旋转角度和触感上可以判断出,这是一个通过物理旋转的滑动接触点来获得电阻值变化的可调电阻器电位器。通过它可以检测舵机的旋转位置。果真和结构图是一致的。

pYYBAGPyzJuAK8s2AAFJ8hh5qbU723.jpg

在这个电位器的底部有电路,通过读取其电阻值,并将电阻值与输入信号进行比较,然后将其停在平衡点上,应该可以使其按所需角度旋转。

所以,一共有三个引脚,一个是GND,一个是正电源,一个是信号线,可以根据GND和正电源之间的电压差(比值)来控制。使用这种机制,即使由于电池状态等因素造成一些电压波动,也可以毫无问题地控制旋转角度。

要从Arduino端控制伺服电机的话,已经有一个库可以用,我会直接使用这个库,其输出信号是PWM。PWM是在一个周期内改变脉冲的宽度,最终以电压变化体现出来。

poYBAGPyzJ2AWpkKAAAsKR_GNoM525.png

在这里,让我想起了我的童年回忆。当时的无线电控制器是否装有微控制器?那时候市场上出现的是单板微控制器等较大型的产品。我记得当时我想知道控制器里面都有什么而把它拆开了,但不记得里面是否有微控制器了。可能是因为它是模拟的。

如果使用的是PWM,那么应该是通过硬件进行处理的吧。如果这样想的话,伺服电机不仅可以用通过PWM进行控制,应该也可以通过模拟进行控制。如果按照前面提到的控制信号是GND和正电源之间的电压比来考虑的话,当然模拟也应该没有问题,也就是说,伺服电机本身和以前的模拟输入时几乎没有什么变化。

没有变化的东西属于“老物件”,但这里的“老物件”不等于“坏东西”,而是“稳定的东西”,所以伺服电机在技术方面的评价是很高的。

不过,由于IC也在日益小型化,所以伺服电机的控制电路部分也已经改进,应该可以更适当地处理PWM了。

3. 与Arduino连接

现在,我们尝试将伺服电机与Arduino连接起来。GND、电源、信号的引脚排列会因伺服电机而异,所以让我们来确认一下。

这次我用的是GWS的S03T/2BBMG/FUTABA,也就是前面拆卸用的那种。引脚排列如下所示:

poYBAGPyzJ6AdLA5AACOIJB6ubk316.jpg

从照片左侧开始,引线依次是黑色、红色和白色,它们分别连接到GND、5V(正电源)和信号线。

与Arduino的连接方法如下:

pYYBAGPyzKCAC8SKAABGAYemVkE790.png

我使用现有的库尝试编写了如下草图:

读取伺服电机的库程序并输出到引脚9。myServe.write的括号里面表示角度,所以我将其设置为90度是中间位置,并以此为基准向左右摆动45度。从伺服电机的功能上来看,可以以中间位置为基准向左右摆动90度,但如果改变数值时像“0”、“180”那样的角度太多,电机就会颤抖。我不知道具体原因,可能是由于旋转传感器是模拟的,所以数值上有些问题。鉴于此,我决定在不受影响的范围内使用。

如果在舵机上安装一个摇臂,那么摆动幅度也会变大,所以我在这个摇臂顶端安装了之前自制的执行器。这种执行器的机制是将漆包线缠绕在吸管上,做成线圈,将钉子插入吸管中,当有电流流过时,钉子就会弹上去。也就是一种自制的螺线管。

为了驱动这个执行器,我使用了之前用过的ROHM生产的“2SD1866”。通过20kΩ电阻器连接到底座并通过Arduino来控制ON和OFF。执行器驱动用的外接电源由两节干电池分别提供3V电。

现在,可以在一些特定部位上轻轻敲击了。

poYBAGPyzKKAC0-nAAFvsticcVI722.jpg

poYBAGPyzKWAPq9aAABG2pE6Rdw855.png

整体电路图如上图所示。通过引脚13驱动自制执行器,通过引脚9驱动伺服电机。

外部电路只有用来驱动自制执行器的晶体管和电阻器,所以我把它们组装在一个小面包板上了。

pYYBAGPyzKaAWGEJAAHVl3bwpYk255.jpg

我将草图添加到之前的草图中,并添加了执行器的工作部分。我让钉子在伺服电机移动到特定角度时弹上去。

#include 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日元商店找到了这样的一把钟琴,我决定把它改造一下。

poYBAGPyzKuAJ7T8AAFJBP8GqjM298.jpg

首先,取下铁片并将它们安装在另一个框架上。

pYYBAGPyzK2AIEUvAAGSdpC-K8E462.jpg

poYBAGPyzK6AQwXXAAHHa9tTtEQ985.jpg

我用橡胶皮筋将这些铁片固定在框架上,这样在敲击后振动就不会停止。在框架的下方安装了前面做的带摇臂的执行器。通过Arduino同时控制伺服电机和执行器。

pYYBAGPyzLGAUk9wAAHQkA4APUI197.jpg

在这个框架中,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控制伺服电机来演奏乐器!(本章)

poYBAGPyzLKAGv1yAAAV18XocdQ862.jpg

伊藤 尚未

日本电子制作普及推进委员会代表、媒体艺术家。作为科普作家、假扮动物园管理员的电工、理科实验课堂讲师、工作坊讲师、教材开发人员等,积极参与各种活动。 在月刊《儿童科学(诚文堂新光社)》连载电子制作项目长达19年,代表著书有《电子制作大图鉴》、《电子制作完美指南》。

审核编辑黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电源
    +关注

    关注

    184

    文章

    17484

    浏览量

    249116
  • 伺服电机
    +关注

    关注

    85

    文章

    2020

    浏览量

    57623
  • Arduino
    +关注

    关注

    187

    文章

    6456

    浏览量

    186490
收藏 人收藏

    评论

    相关推荐

    如何使用Arduino的蓝牙控制伺服电机

    使用伺服电机在机器人技术中很常见,以实现精确控制。在这里,在本教程中,我们将向您展示如何通过蓝牙连接将伺服电机
    发表于 11-16 16:19 3378次阅读
    如何使用<b class='flag-5'>Arduino</b>的蓝牙<b class='flag-5'>控制</b><b class='flag-5'>伺服</b><b class='flag-5'>电机</b>

    如何使用Arduino控制多个伺服电机

    在这里,我们将向您展示如何使用Arduino控制多个伺服电机。将多个伺服电机
    的头像 发表于 11-16 17:19 6171次阅读
    如何使用<b class='flag-5'>Arduino</b><b class='flag-5'>控制</b>多个<b class='flag-5'>伺服</b><b class='flag-5'>电机</b>

    伺服电机控制Arduino平台

    什么是伺服电机?它们是如何起作用的?(基本驾驶方法和技术)如何选择伺服电机应用Arduino平台工作
    发表于 05-02 15:37 23次下载

    怎样Arduino蓝牙控制伺服电机

    我在DIY Arduino&amp; amp;蓝牙机器人手臂,使用ESP8266的网络控制伺服Arduino操纵杆界面等等。实际上,伺服
    的头像 发表于 07-29 09:55 7148次阅读

    基于Arduino UNO和HC-05蓝牙模块控制伺服电机

    了解如何在移动设备,Arduino UNO和HC-05蓝牙模块中使用Android应用程序控制伺服电机
    的头像 发表于 04-28 15:25 4965次阅读
    基于<b class='flag-5'>Arduino</b> UNO和HC-05蓝牙模块<b class='flag-5'>控制</b><b class='flag-5'>伺服</b><b class='flag-5'>电机</b>

    使用Arduino Uno和POT控制伺服电机

    电子发烧友网站提供《使用Arduino Uno和POT控制伺服电机.zip》资料免费下载
    发表于 11-10 14:19 0次下载
    使用<b class='flag-5'>Arduino</b> Uno和POT<b class='flag-5'>控制</b><b class='flag-5'>伺服</b><b class='flag-5'>电机</b>

    基于Arduino UNO的手势控制伺服电机

    本方案能够使你做出手势时将伺服旋转一个角度。我们将在 Python 和 Arduino 的帮助下使用手势旋转伺服电机。使用计算机视觉跟踪我
    发表于 12-21 11:26 0次下载

    Arduino和电位器控制伺服电机的位置

    电子发烧友网站提供《Arduino和电位器控制伺服电机的位置.zip》资料免费下载
    发表于 02-06 11:10 1次下载
    <b class='flag-5'>用</b><b class='flag-5'>Arduino</b>和电位器<b class='flag-5'>控制</b><b class='flag-5'>伺服</b><b class='flag-5'>电机</b>的位置

    Arduino/Android蓝牙多伺服电机控制

    电子发烧友网站提供《Arduino/Android蓝牙多伺服电机控制.zip》资料免费下载
    发表于 02-08 15:14 0次下载
    <b class='flag-5'>Arduino</b>/Android蓝牙多<b class='flag-5'>伺服</b><b class='flag-5'>电机</b><b class='flag-5'>控制</b>

    使用Arduino开发板控制伺服电机

    到达信号指定的位置,它将保 持其位置,并抵抗试图将其从该位置移动的任何外力。该电阻称为伺服的转矩额定值,可在数据表中找到。 脉冲宽度调制PWM: 参考:PWM占空比控制电机转速 当我们使用
    发表于 05-06 10:15 0次下载
    使用<b class='flag-5'>Arduino</b>开发板<b class='flag-5'>控制</b><b class='flag-5'>伺服</b><b class='flag-5'>电机</b>

    使用Arduino控制伺服电机

    伺服电机是一个闭环系统,它使用位置反馈控制其运动和最终位置。伺服电机有多种类型,其主要特点是能
    发表于 05-06 10:08 2次下载
    使用<b class='flag-5'>Arduino</b><b class='flag-5'>控制</b><b class='flag-5'>伺服</b><b class='flag-5'>电机</b>

    Arduino控制伺服电机的超级简单方法

    电子发烧友网站提供《Arduino控制伺服电机的超级简单方法.zip》资料免费下载
    发表于 06-28 09:51 0次下载
    <b class='flag-5'>用</b><b class='flag-5'>Arduino</b><b class='flag-5'>控制</b><b class='flag-5'>伺服</b><b class='flag-5'>电机</b>的超级简单方法

    Arduino和MPU6050控制伺服电机

    电子发烧友网站提供《Arduino和MPU6050控制伺服电机.zip》资料免费下载
    发表于 07-03 10:59 1次下载
    <b class='flag-5'>用</b><b class='flag-5'>Arduino</b>和MPU6050<b class='flag-5'>控制</b><b class='flag-5'>伺服</b><b class='flag-5'>电机</b>

    如何使用操纵杆和Arduino控制伺服电机

    在这篇文章中,我们将学习如何使用操纵杆和Arduino控制伺服电机。我们将看到有关操纵杆,其销,其结构和工作的概述。我们将从操纵杆中提取有用的数据,这些数据将成为
    的头像 发表于 07-27 11:47 1704次阅读
    如何使用操纵杆和<b class='flag-5'>Arduino</b><b class='flag-5'>控制</b><b class='flag-5'>伺服</b><b class='flag-5'>电机</b>

    如何使用Arduino UNO板和电位器控制伺服电机

    在本Arduino伺服电机教程中,您将学习如何使用Arduino UNO板和电位器控制伺服
    的头像 发表于 02-11 10:11 2435次阅读
    如何使用<b class='flag-5'>Arduino</b> UNO板和电位器<b class='flag-5'>控制</b><b class='flag-5'>伺服</b><b class='flag-5'>电机</b>