DIY:带声音的光剑

图片

大家好! 从小就喜欢星际大战的宇宙。 当我7岁那年,我观看了第4-6集,因此我可以非常详细地讲述它们的内容。

无疑,电影中最生动的印象是光剑之战。 两年前,我在互联网上偶然发现了一篇有关选择光剑作为礼物的简短文章,对此产生了兴趣并进行了详细研究。

在今年年底,第8集问世,5月4日即将来临,在《星球大战》国际日的前夕,我决定写这篇文章。

在削减的范围内,我将分享有关光剑制造商的信息,并讨论基于Arduino的声音制作廉价剑。

现在,互联网上有许多光剑的商业制造商,我认为最值得注意的是:

●●●Genesis定制军刀 -非常优质的定制剑柄,带声音​​的精英定制剑的价格在1500-3000美元左右。

●Saber Forge是一个不错的选择,价格更实惠,但是剑不像Genesis CS那样真实。 带有声音的剑的价格约为300美元。

●●●就价格而言, Ultrasabers商店是最人性化的商店之一。 带有基本声音的剑的价格约为160美元。 您可以为项目订购单个组件。

●●●Custom Saber Shop-一个拥有商店和设计师来建造剑的网站。

还有其他光剑制造商,例如●●●Makoto Tsai ,他用自制的LED灯条制作最亮的剑。

但是,如果您不想花很多钱,但确实想要光剑怎么办? 只有一种出路-节省5,000卢布,自己做一把剑。

在我的项目开始之初,我几乎没有编程经验,完全没有电子学方面的知识。 也许我做的事情不是最好的,但我会继续学习,并很高兴为您提供建议。

在描述制作剑的过程中,我将尝试描述所有主要困难。

因此,让我们开始吧。 这是我使用过的所有物品的清单:

  1. 在Ali上使用Arduino Pro micro 5v〜250卢布
  2. 声音模块WT588D-U〜阿里250卢布
  3. 在阿里升压3-5V〜100卢布
  4. 扬声器Ø28mm,8ohm,2W〜40卢布,适用于Ali
  5. 加速度计ADXL335〜阿里200卢布
  6. N-MOSFET IRF530N x 2〜40卢布at Amperka
  7. LED Luxeon反叛者3W〜阿里70卢布
  8. LED透镜8°〜50卢布在阿里
  9. 电池CR123A x2 3.7V〜400卢布,适用于Ali
  10. Arduino电源的Krona 9v电池
  11. 电池座〜阿里15卢布
  12. 防破坏按钮〜阿里100卢布
  13. 拨动开关〜阿里50卢布
  14. 白色聚碳酸酯纤维管1英寸〜800卢布,位于莫斯科(有很多商店,它们在Google中)
  15. 手柄制造用PVC管

您还需要电线,用于将聚碳酸酯管固定在手柄中的螺钉以及用于带反射镜的聚碳酸酯管的盖子。

我在海关军刀商店订购了带反射镜的帽子,价格从7美元起,小件物品的运送费为14美元。

您还需要在某个地方获得剑的声音,通常是一组开/关声音,操作噪音(嗡嗡声),摇摆声音(摆动),碰撞声音(碰撞)。

我在Saberfont网站上以7美元的价格购买了一套声音,但我相信您可以找到免费的声音。

如果您购买声音,总分量约为5,000卢布,如果没有,则约为4,000卢布。

“叶片”的照明主要有两种类型:一种在聚碳酸酯灯管底部的大功率LED,其光由灯管末端的盖子反射,第二种是自制的分段LED灯带。 如电影中那样,需要分段来平稳地打开剑。

例如,诚诚在最亮的剑中使用了几段分割的丝带。

图片

我建议在首次构建时使用一个功能强大的LED,它更简单且相当明亮。

我想马上说,视频中的剑看起来比生活中的亮,因为 与我们的眼睛不同,相机的矩阵会积累光。 不要指望剑像电影一样发光。

我建议使用声音设置开始组装原型。

该项目中最困难的部分是处理声音,在我看来,WT588D模块是理想的选择,因为 它提供音频文件的连续播放,不需要闪存驱动器。

在将文件上传到WT之前,我必须对其进行一些编辑,为此,您可以使用免费程序Audacity

有必要依次打开每个文件,选择有声音的区域(每个文件的末尾我沉默了几秒钟),在屏幕的左下角,您需要将频率设置为16000至22000 Khz。 如果频率超过22000,则WT将不允许下载文件。 选择了下一个导出-16位。
要将文件下载到WT588D,您需要一个程序来从模块制造商处下载声音-Waytronic(仅在Windows下工作,我通过BootCamp在MAC上运行了声音)。

您需要运行该软件,然后在设置中选择英语。 WT588D有几种工作模式,我选择了单线模式,因为 它需要最少的焊接,模块通过一个引脚与Arduino通信。

工作字段分为3个部分,左侧是上传到模块的文件列表,中间是播放列表的列表,右侧是播放列表中的文件的列表。

要下载文件,请右键单击已下载文件的列表,然后选择加载-查找并选择在Audacity中处理的音频文件。 对所有文件重复此操作。

接下来,您需要制作播放列表,在包含声音和摇摆/碰撞声音之后添加许多重复的工作声音。 为了避免在打开/滑动后写代码以切换到噪音,这是必要的。

我们稍后将在草图中调用播放列表的数量。 下载声音并准备播放列表后,您需要将电源连接到WT,连接扬声器,并将WT的Data引脚连接到Arduino。 还要通过MOSFET将一个用于打开/关闭灯光/声音的按钮和一个LED连接到Arduino。

这是我的连接图:

图片

我通过MOSFET从另外的3.7V电池中给WT供电,最高可升至5v,在这种情况下,我获得了最大的输出音量。

首先,您需要注册将在草图中使用的所有内容:

#define WT588D_SDA 8 //      WT588D //          const int xpin = A0; const int ypin = A1; const int zpin = A2; int oldtime; int newtime; int ADXL = 3; int BUTTON_PIN = 7; //     int LED_PIN = 9; //MOSFET  int WT_MOSFET = 6; //MOSFET WT588D int i = 0; byte file_count = 1; bool saberon; bool swingsound; void setup() { Serial.begin(9600); pinMode(BUTTON_PIN, INPUT_PULLUP); pinMode(LED_PIN, OUTPUT); pinMode(ADXL, OUTPUT); pinMode(WT_MOSFET, OUTPUT); pinMode(WT588D_SDA, OUTPUT); digitalWrite(ADXL, LOW); digitalWrite(LED_PIN, LOW); digitalWrite(WT588D_SDA, HIGH); digitalWrite(WT_MOSFET, LOW); saberon = false; swingsound = false; oldtime = analogRead(xpin) + analogRead(ypin) + analogRead(zpin); //    } 

为了使WT工作,您需要在草图中声明WT_Send_Command(*)命令,为此,将以下代码添加到草图的末尾:

 void WT588D_Send_Command(byte addr) { digitalWrite(WT588D_SDA, LOW); delay(100); for (int i = 0; i < 9; i++) { digitalWrite(WT588D_SDA, HIGH); if (bitRead(addr, i)) { delayMicroseconds(600); digitalWrite(WT588D_SDA, LOW); delayMicroseconds(200); } else { delayMicroseconds(200); digitalWrite(WT588D_SDA, LOW); delayMicroseconds(600); } } digitalWrite(WT588D_SDA, HIGH); delay(50); } 

下一步是编写代码,以便在按下按钮时,LED亮起,并在声音打开的情况下播放播放列表。 再次按下该按钮时,LED熄灭,播放列表关闭。

如果您没有编程经验,为了更好地理解代码,建议您阅读以下材料:

Arduino If教程
Arduino布尔教程
Arduino Button教程

这是我的代码,用于识别按钮的状态并打开/关闭效果:

 if (digitalRead(BUTTON_PIN) == LOW) { if (saberon) { WT588D_Send_Command(*    ); delay(700); saberon = false; { analogWrite(LED_PIN, LOW); digitalWrite(WT_MOSFET, LOW); delay(1); } } else { digitalWrite(WT_MOSFET, HIGH); delay(100); WT588D_Send_Command(*    ); { analogWrite(LED_PIN, HIGH); delay(1); } saberon = true; } } 

如果一切操作正确,当您按下按钮时,您应该听到打开的声音和噪音,LED应该亮起。 再次按下时,声音将关闭,LED将会熄灭。

草图的主要部分已准备就绪,现在我们将连接加速度计,并使WT播放海浪声音。

ADXL335易于使用,不需要连接任何库。 这是连接图:

为了使加速度计正常工作,我们将进行两次测量,并在比较读数的基础上播放波浪声。

我建议将加速度计尽可能靠近手柄的一端。

 newtime = analogRead(xpin) + analogRead(ypin) + analogRead(zpin); delay (100); if (newtime - oldtime >= 75 || newtime - oldtime <= -75) { if (swingsound) { swingsound = false; delay (50); } else { swingsound = true; WT588D_Send_Command(*    ); delay (150); } } Serial.print(oldtime); Serial.print("\t"); Serial.print(newtime); Serial.print("\t"); Serial.print(newtime - oldtime); Serial.println(); oldtime = newtime; 

一切就绪,原型已准备就绪。 现在是时候创建一个手柄并将所有填充物放入其中了。

我用PVC管制成了一个手柄,这是一个直径28毫米的刀片插入物。

我的手柄有问题,结果是第一个版本太小,现在我正在做一个新版本。

在制造PVC手柄时,您只能受您的想象力的限制,我只能提一个建议-在涂漆之前,用细砂纸处理管道表面,否则涂料将不能很好地固定。

这是手柄的第一个版本,在盖子上钻了孔并放了一个扬声器,刀片用四颗螺钉固定在管道中:

图片

图片

图片

我的剑中没有包含碰撞效果,也许下次我会追赶。 但是,如果要启用碰撞,则将需要振动传感器或加速度计设置来识别短时的加速度。 如果有人可以配置加速度计,不要太懒散地共享代码,我将在一篇提到您为作者的文章中包含它。

这是晚上在街上进行的小剑测试:



更新:
我完成了处理并致力于声音的同步,在这里添加了碰撞声是更新的视频:


我相信Geektimes会阅读大量非常有才华和技术的人,我请您分享您的意见,提供建议。 通过合作,我们有可能进一步简化/优化流程。

一定要分享您的结果,看看您得到什么非常有趣!

谢谢大家的关注! 愿力量与您同在!

Source: https://habr.com/ru/post/zh-CN402681/


All Articles