亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

使用任何音频源制作比利巴斯嘴的动画

组件和用品

Arduino UNO
× 1
Adafruit Motor/Stepper/Servo Shield for Arduino v2 Kit - v2 .3
× 1
亚马逊 Alexa Echo Dot
× 1

关于这个项目

大约一个月前,一位名叫布赖恩·凯恩 (Brian Kane) 的艺术家发布了一段病毒式视频,展示了一条大嘴比利·巴斯 (Big Mouth Billy Bass) 新奇的唱歌鱼,似乎是由亚马逊的 Alexa 虚拟助手配音的。互联网为之疯狂,我也是——但主要是我只想知道它是如何工作的,以便我可以自己制作。

在看到许多使用 Alexa 的 Raspberry Pi 项目后,我最初假设 Brian 已经创建了一个由 Alexa 驱动的 Pi 项目,该项目兼作对现有 Billy Bass 硬件进行动画处理的一种手段——可能就是这种情况。我什至在每周 YouTube 节目 Maker Update 上提出了这个想法。

但经过深思熟虑后,我认为最简单的方法是简单地使用 49 美元 Amazon Echo 中的音频,然后通过 Arduino 处理它以驱动现有电机。

我已经手边有一个 Arduino 和一个电机防护罩(尽管这是我第一次使用防护罩)。

接下来,我以 15 美元左右的价格订购了在亚马逊上使用的 Billy Bass。我相信你可以在庭院销售或旧货店花更少的钱买到一个二手的,但我很快就想要一个。我还订购了新的 Echo Dot。

有了这些命令,我​​继续研究。两个教程给了我希望:sfool 的 2012 年使用 Arduino 使伺服移动到声音的指南和 Dotten 的 2013 年的关于理解比利巴斯玩具的电子动画的指南。

了解 Billy Bass(很像 Furby)本质上是由两个便宜的 5v 直流玩具电机驱动的——然后问题就变成了如何让这些电机响应声音而抽搐。经过一些试验和错误,我找到了一个可行的解决方案。代码远非完美,我还想内置很多其他功能,但我想把它弄出来,这样每个人都可以帮助改进。

所需材料

  • 大嘴比利巴斯唱歌鱼(一)
  • Arduino Uno (1)
  • Arduino Uno 电源(一)
  • Adafruit Motor Shield v2 (1)
  • 面板安装迷你插孔 (1)
  • 绞合连接线(多种颜色有帮助)
  • Amazon Echo Dot(尽管任何音频源都可以)(1)
  • 某种小型可充电扬声器 (1)
  • 迷你插孔 (⅛”) 音频线 (1)
  • Minijack 分线器电缆适配器 (1)

所需工具

  • 小螺丝刀
  • 烙铁和焊锡
  • 剥线钳
  • 剪辑
  • 钻头和钻头

第 1 步:准备鱼

不管是好是坏,用过的鱼在到达时就死了。至少我毫不犹豫地打开它并破解它。对于我的黑客,只需松开背面的螺丝,打开它,然后轻轻施加压力以松开线束,以便完全移除背面。

为了为我们将要添加的电子设备腾出更多空间,拧下并卸下 Billy Bass 电路板和压电蜂鸣器。

你剩下的是一条从鱼身上伸出的 4 线束。这包括两条使嘴巴动起来的电线(你可以看到它们拖到鱼里)和两条根据电机运行方向升高头部或尾部的电线。

准备鱼的最后一步是剪下四根相同长度的不同颜色的电线,露出尖端并镀锡,然后将末端插入线束的四个插座中。在下一步中,我们将这些连接到 Arduino 电机扩展板。

第 2 步:准备电机屏蔽

您只需要对电机屏蔽进行 4 个连接,并且其中只有两个是焊接的。如果您想试验尾部/头部电机,您还可以连接额外的两根电线。

让我们从焊接开始吧。要为您的鱼创建音频输入,请取两根相同长度的不同颜色电线,剥去末端,并将一根接地,一根焊接至模拟 0。剪掉穿过电路板的多余电线。

现在让我们将这些电线连接到我们的音频输入的面板安装迷你插孔。我拥有的插孔是那些具有三种可能连接的精美单声道开关插孔之一。重要的是您通过将模拟 0 的电线连接到与音频连接器尖端接触的插孔上的引线来创建单声道输入。然后将接地线连接到与音频连接器底座(或套管)接触的插孔上的引线。

接下来,要将鱼马达连接到屏蔽罩,将通向鱼嘴马达(黑色和橙色)的那对电线连接到马达 1 的接线端子中,然后将它们拧紧。或者,您可以将尾部/头部电机线(白色和红色)连接到电机 2 的端子,尽管代码尚未对这个电机执行任何操作(下一节将详细介绍)。对于我的鱼,接线端子上的电线颜色为嘴马达 (M1) 的黑色、橙色(在我的情况下为黄色)和可选的尾马达 (M2) 的白色、红色。

最后,检查电机护罩是否将跳线套连接到标有 VIN Jumper 的引脚上。我最初错过了这一点,并且正在挠头想知道为什么盾牌不会通电。您现在应该能够将屏蔽夹在 Arduino Uno 上,为 Arduino 通电,并且看到屏蔽上的电源指示灯 LED 也亮起。如果防护罩不亮,我会检查跳线。

第 3 步:加载代码

所以,代码是一个凌乱的黑客,将直流电机测试草图(本质上是电机屏蔽的演示)和 Cenk Özdemir(2012 年)的声音到伺服草图的元素汇集在一起​​,包含在我链接到的那个 Arduino 声音到伺服教程中多于。

当前状态下的代码还没有为头部/尾部电机设置动画。我有一个版本可以,但它减慢了嘴巴运动的响应速度。理想情况下,我希望嘴巴保持响应,而头部和尾部缓慢循环播放自己的动画,但这是我的 Arduino 编码能力的当前限制。一旦我弄清楚或得到你们的建议,我会发布更新的代码。

第 4 步:将它们放在一起

加载代码并将音频电缆连接到插孔后,您应该能够通过将音频源连接到电缆的自由端(我用我的手机播放播客)来使鱼嘴移动。如果它工作正常,在塑料鱼牌匾的某处钻一个小孔,将千斤顶推过去并将其拧紧到位。

为了让 Alexa(或任何你想要的东西)通过你的鱼说话,将音频线的自由端连接到 Y 型适配器,将可充电扬声器连接到适配器的另一个输入端,然后将适配器的公插头插入到Echo Dot的音频输出。

确保您的扬声器已打开,并且扬声器和 Alexa 的音量均已调高。然后,召唤 Alexa 并问她一个问题让她说话(天气、笑话、新闻)。您应该通过便携式扬声器听到她的声音,同时看到鱼的橡胶嘴唇及时摆动。扬声器离鱼头越近,效果就越诡异。

如果一切顺利,那么诀窍就是将扬声器和 Arduino 装入 Billy Bass 外壳并将其关闭。老实说,我还在琢磨这个问题。

第 5 步:下一步在哪里?

这里还有很多事情要做,我欢迎您提出所有改进建议。我很想在不久的将来为此发布 2.0 版。

1. 我想要头部和尾部动画。连接就在那里,我已经能够让它们工作,但不能不牺牲嘴巴的响应能力,这是至关重要的。

2. 我希望扬声器能够从 Arduino 充电。看起来很简单,但我还没做。

3. 我希望 Billy Bass 红色按钮(或替代品)在“语音”模式(更多关于嘴巴运动和整个“会说话的鱼”吸引力)和“音乐”模式之间切换,更多关于鱼在是时候听音乐了。

4. 更干净的代码。我确信我所做的 mashup 的代码中有很多剩余部分。我欢迎任何清理它的努力。

5. 使用较小的 Arduino。 Uno 和 Motor Shield 对于我们的用途来说完全是矫枉过正。我认为 Adafruit Feather 及其用于羽毛的 2 电机防护罩将是一个不错的选择。也许你可以让一个给嘴供电,一个单独的给尾头电机供电。

代码

  • SoundToDC
SoundToDCArduino
/* 使直流电机发出声音。此示例代码位于公共领域。由 Maker 项目实验室的 Donald Bell 创建(2016 年)。基于 Cenk zdemir (2012) 的 Sound to Servo 和 Adafruit 的 DCMotorTest*/// 包含 Adafruit 电机屏蔽库#include #include #include "utility/Adafruit_MS_PWMServoDriver.h"//使用默认的 I2C 地址创建电机屏蔽对象 Adafruit_MotorShield AFMS =Adafruit_MotorShield(); // 或者,使用不同的 I2C 地址创建它(比如堆栈)// Adafruit_MotorShield AFMS =Adafruit_MotorShield(0x61); // 选择哪个“端口”M1、M2、M3 或 M4。在这种情况下,M1 用于嘴,M2 用于tailAdafruit_DCMotor *myMotor =AFMS.getMotor(1);Adafruit_DCMotor *myOtherMotor =AFMS.getMotor(2);// 我们需要的一些其他变量int SoundInPin =A0;int LedPin =12; //如果你想让 LED 在嘴巴移动时激活 // 当你按下 reset 时,设置程序运行一次:void setup() { Serial.begin(9600); // 设置 9600 bps 的串行库 AFMS.begin(); // 以默认频率 1.6KHz 创建 //AFMS.begin(1000); // 或使用不同的频率,比如 1KHz // 设置启动速度,从 0(关闭)到 255(最大速度) myMotor->setSpeed(0); //嘴马达 myMotor->run(FORWARD); // 打开电机 myMotor->run(RELEASE); pinMode(SoundInPin, INPUT); pinMode(LEDPin,输出); myOtherMotor->setSpeed(0); //尾电机 myOtherMotor->run(FORWARD); // 打开电机 myOtherMotor->run(RELEASE); pinMode(SoundInPin, INPUT); }// 循环例程永远重复运行:void loop() { uint8_t i; // 读取模拟引脚 0 上的输入: int sensorValue =analogRead(SoundInPin);// 我们为 LED 映射另一个值,它可以是 0..255 之间的整数 int LEDValue =map(sensorValue,0,512,0,255); // 我们将其映射到可能的移动范围。 sensorValue =map(sensorValue,0,512,0,180); // 注意通常 512 是 1023 因为模拟读数应该到目前为止,但我改变了它以获得更好的读数。 int MoveDelayValue =map(sensorValue,0,255,0,sensorValue); // 将相同的读数稍微映射一下以计算电机得到的时间 (sensorValue> 10) { // 切断一些静态读数 delay(1); // 静态延迟以消除问题...// 现在移动电机 myMotor->run(FORWARD); for (i=140; i<255; i++) { myMotor->setSpeed(i); }//for (i=200; i!=0; i--) {// myMotor->setSpeed(i); // delay(10);// }analogWrite(LedPin, sensorValue); // 并在此延迟时间内执行此操作 myMotor->run(RELEASE); myOtherMotor->run(RELEASE); delay(1);} // 完成。 // 再次关闭 LED。模拟写入(LEDPin,0); // 这一直重复。}

制造工艺

  1. 使用 K30 传感器监测二氧化碳
  2. 聋盲通信与 1Sheeld/Arduino
  3. 使用 Arduino 控制硬币接收器
  4. 大嘴比利低音 + Alexa
  5. 音频检测器
  6. Arduino 带蓝牙控制 LED!
  7. 带有 Arduino 或 ESP8266 的电容式指纹传感器
  8. 玩 Nextion Display
  9. 在 Arduino 中播放音频
  10. Nunchuk 控制机械臂(使用 Arduino)
  11. 使用 Arduino 测量太阳辐射
  12. 带 Arduino 的迷你雷达