所有关于电路
项目

构建您自己的LED Sable固件,微控制器和测试

2016年10月20日经过杰里米·李

在第3部分中,我们将编译固件并在Saber的核心构建控制器,然后进行初始测试和诊断。

在第3部分中,我们将编译固件并在Saber的核心构建控制器,然后进行初始测试和诊断。

我在这个系列中的目标是教你如何建立最明亮的LED光剑迄今为止。请在继续之前查看该系列中的第一个文章:

在本文中,我们将过度固件以及如何安装微控制器。然后我们会做一些台阶测试。

军刀控制器

WS2812B LED是一个数字设备。除非通过串行连接命令,否则将电源施加到Neopixel Strip不够 - 它将保持黑暗。所以我们需要一个微控制器。一旦这是假设,我们也可以充满我们可以适应的所有软件功能的东西,因为软件没有重视并且基本上是免费的。

我非常喜欢Sparkfun的“Pro Micro”,这是一个萎缩的Arduino Leonardo。它也更快地冷却而不是等待对于IDE。

MPU-6050是众所周知的三轴加速度计和陀螺仪谈论我2C.来自许多来源的突破板上非常常见。如果我们希望SABER在移动时响应,我们需要像这样的传感器。

建议的旋转式数字音量的编码器/开关可以从Arduino套件中常见的电路板中提取。我将我的袋子里有一半一美元。

“水晶是刀片的心脏。”在这种情况下,它以16MHz运行并具有伴随传感器芯片。

准备的固件

首先,我们需要在开始构建之前将Arduino固件上传到“裸板”。希望您熟悉Arduinos并已经设置了IDE。你将需要错配图书馆安装了。你可能已经有了。如果不使用该链接,请单击“克隆或下载”,然后另存为.zip文件。

在Arduino IDE中,选择菜单“素描”>>“包含库”>>“添加zip库...”并给它刚下载的文件。这与用于安装任何GitHub托管库的步骤相同。

错配件是处理WS28XX LED阵列的De-Facto标准,并且具有比我有空间描述的更多功能。

下载LEDSaber固件:

2016-09-11_LEDSaber.zip.

更新:固件更新于2017年5月4日。可以找到带有bug修复和新特性的最新版本这里

解压缩.zip文件并使用Arduino IDE打开LEDSaber.ino草图。

在草图的顶部是最重要的参数。如果你按照描述的方式构建所有内容,那么你不需要改变任何内容。

最常见的MOD可能是刀片条带中的LED数量和连接的引脚:

//定义我们的LED刀片属性#define blade_leds_count 72 #define blade_leds_pin a2

请记住,我们将144个LED作为72的镜像。如果您有更少的LED,您可以将BLADE_LEDS_COUNT留下,但使用高于必需的值将咀嚼内存和处理时间,因此不要覆盖。如果您有超过72个LED,则数据流将停止刀片末端。

//默认颜色自定义#define blade_saturation 255 #define blade_hue 144 //请参阅预设列表的属性.H

这些设置了启动刀片颜色。我选择了Jedi Blue作为默认值。这种颜色由“色调”(在彩虹上)定义,并且“饱和度”(较高的饱和度意味着更丰富,纯色,并且较低的饱和表示更加沉闷或浅色)。

FastLED的HSV Rainbow就在这里

“properties.h”文件有一个更大的颜色/音频参数数组为8个预设。一旦你对军刀有了一点经验,你可能会想定制这些。

#define VOLTAGE_SENSOR_RATIO (2.10f / 12.60f) //传感器电压与真实电池电压之间的比值(默认为1:6)#define VOLTAGE_SENSOR_PIN A3 //电压传感器使用的pin

欠压停机设置是最重要的。如果你的分压器不是6:1或你正在使用不同的电池,你需要调整VOLTAGE_SENSOR_RATIO和/或VOLTAGE_SHUTDOWN基于电池和传感器电压的测量和电池的特性。

在组装之前经验微调电压_幕布阈值是个好主意。当使用万用表监控电池电压时,您可以通过打开刀架来完成此操作。如果欠压关闭过早踢,则降低阈值。如果它踢得太晚(即,如果您在没有关机的情况下达到10.5 v),则增加阈值。

请注意,我们使用PiLo Cell的欠压阈值为3.5V。在一些放电情况下,这个数字可以被认为是相当低的。然而,请记住,在负载下测量电池电压。一旦我们停止我们当前的抽签,电池电压将弹回0.1V或更高。

上传固件

确保Pro Micro不会碰到任何金属。将Pro Micro插入电脑的USB端口。应该会发出通常的哔哔声。

在Arduino IDE中,使用菜单“工具”>>“端口”,然后选择您插入的设备。

使用“工具”>>“董事会”并选择“Arduino Leonardo”告诉IDE是什么样的板。

点击“验证”按钮,确保所有内容都编译好了。(我真的希望库的作者不要#pragma。这是不整洁了。)

您应该看到以下输出:

单击“上载”箭头。代码将再次编译,并应将其发送到设备中的闪烁灯泡中的设备。

就是这样。

添加旋转开关

接下来,我们将旋转开关直接安装在Pro Micro上。它有三个插脚在一边为旋转编码器和两个插脚在另一边为开关。通过这样做,我们避免了5根跳线的需要,这反过来实现了三件事:我们消除了10个可能的故障点,我们可以安全地将控制器固定在机箱上,我们节省了空间、重量和时间。该开关提供的功能非常紧凑。

有3个插销的一侧插入16、14和15孔。两个球瓶(中间有空隙)进入第6和第8孔。

一些旋转开关具有会干扰的标签。用钳子掀起它们直到他们脱落。

该开关应熄灭电路板,而不是用其金属基部短路。

注意:将最后一个孔留空。引脚10是音频出现的地方。

如果你需要修剪开关的轴,在你把它连接到Pro Micro之前做!用虎钳夹住轴的末端,用铁锯或钢锯修整。不要把开关主体放在虎钳里——轴将无用地旋转,开关不可能在切削力的作用下存活。

在切割金属时,请尽快,远离电子产品,然后在回来之前洗手并换衣服。严重地。在错误的地方一个流浪金属备案将以最糟糕的方式破坏项目,有时几个月后。

通过将Arduino铺设在平坦的,硬质耐热表面上的arduino(可以在组件下方使用的一张纸,以便在需要的情况下使用额外的保护,将开关安装在Pro Micro的组件侧。然后将交换机的销钉设置在孔中,使一切都很好,水平。(不要挤压/短/微晶或其他部分!)现在您可以从上侧焊接。

对于那些不想麻烦于开关的人,我将指出它并不是刀片系统的一个严格的基本部分。然而,如果你选择不使用它,你将失去大量的功能——所有在使用过程中改变设置的能力,以及最基本的点燃和熄灭LED叶片的方法。但这并不是点燃刀刃的唯一方法;摇摆点火功能可以让你点燃它和不活动关机(或主电源开关)可以关闭它。

实际上,您可以拥有一个没有外部控件的刀柄,只要您可以安全地拔掉电池即可轻松地拔掉电池。

添加MPU-6050 IMU

MPU-6050以多种形状出现在电路板上。我们只关心GND、VCC、SDA和SCL的四个引脚。

因为arduino我2C数据/时钟线在引脚2和3上是紧挨着的(它们通常也一起在IMU上),我建议直接使用两个标准的0.1英寸头引脚将IMU安装在Pro Micro的“背面”,绝缘方便地起到间隔作用。

如果SDA / SCL引脚似乎是错误的顺序,请将IMU翻转过来。

如果您很幸运,则可能会将GND或VCC引脚展示很好。我没有,所以我在空间中跑到适当的电线(在我焊接销钉之前)。这产生了一个非常整洁的包装。

我的旋转编码器开关和IMU断路板太大,不能适合Pro Micro的同一侧(大约一毫升!),但您可能有更多的位置选择。我对IMU的暴露是如何暴露的,悬挂在后面的组件 - 方面并不满意,所以我以后用硅胶粘性涂抹,以防止弯曲的差距。

两个引脚连接I2C总线和物理安装板。电源线在两者之间运行。

添加伺服连接器

我们使用伺服插头从电源转换器和插座电源,以提供与刀片的数据连接。

从转换器的电压感测到Pro Micro上的引脚A3,导线到插座连接到引脚A2。(如果需要,这些可在固件中变化。)

在某种意义上,控制模块就像另一个“转换器”块,获取电压并将其转换为数据。或者是一个非常复杂的开关。

电压感转到A3,最接近GND /原销的模拟输入。控制数据在A2上出现隔壁,然后进入LED条带。

安全重新编程Arduino

您可能希望在Saber完成后修改固件。注意这个警告。

绝不当USB端口也连接时,连接LiPo电池;这样做本质上是在短路来自两个独立电源的输出,这是一个糟糕的主意,除非你想要20安培的USB线返回到另一端的任何东西。可能是你最喜欢的电脑。也许你的个人电脑制作精良,能够挺过这一劫,但同样有可能会有烟雾和悲伤。

请记住:不允许两个独立的电源轨道短路。在这个项目中,这意味着不要将DC / DC转换器的5V短到USB的5V。切勿越过溪流!

事实上,Pro Micro(目前的正版)有一个保护二极管和多元保险丝,应该使它完全安全。否则,我会设计得不一样。(永远不要构建自毁机制!)但是有一些变种和仿冒品可以很容易地忽略这些部分——在任何情况下,你真的想把你的电脑的生命押在别人所谓的保护电路上吗?最好避免这种情况。

我知道为了方便调试,我们很想把它插在一起,但不要这样做。只是不喜欢。尝试构建刀柄,以便在物理上拔下/删除可笑的强大电池即可到达USB插座。

如果您计划做很多软件开发(就像我做的那样),我建议构建一个少于40个led的“刀片”来进行测试。在2安培的最大,这将勉强工作的“充电”USB端口,你可以写所有糟糕的代码,你想。请注意,您的计算机无法提供足够的电流以运行完整的1米条,并且Pro Micro上的Polyfuse应该如果您尝试,请跳闸和中断电流。

我用来开发的40 led“光刀”可以通过一个大电流“充电”USB接口提供足够的动力。

连接音频模块

从第2部分完成音频模块。

我们需要良好的5V电源为音频放大器(高达2W!),因此将其电源线连接到GND和Pro Micro上的RAW。您可以通过将电线从电源线束和从音频模块的电线推入GND和原始孔(然后像往常一样焊接)来完成此操作。在这些连接上放置一个热胶或硅胶以进行应变消除和保护。在这里小心;这是最接近的20个放大器触摸的轨道。

将音频电源连接到Pro Micro的VCC引脚 - 从受管制的“数字”电源窃取。VCC应该电力只有Pro Micro和MPU-6050。

我选择将音频/扬声器模块直接连接到Pro Micro,因为我没有足够的空间,但如果您喜欢,可以在这里随意添加另一个伺服连接器(或者迷你jst连接器,如果您有的话)。

音频模块连接到控制器。

最初的长椅上测试

一旦组装了控制和音频模块,将它们插入小型USB电源/银行(以防出现问题,以防出现问题,您应该听到可怕的令人震惊的令人震惊的噪音。这是欠压报警;在这种情况下,它只是提醒您没有Lipo插入。

如果有效,可以使用电源转换器和电池进行初始测试。从USB中拔下插头,连接我们在适当的链中完成的四个模块(控制器,电源转换器,线束和电池),注意短裤,并执行第一个'点火'测试。

打开电源开关。扬声器应该有“单击”,但没有像USB的欠压报警。如果警报声(即使肯定是完整的电池),您可能需要调整固件设置。

顺时针转动控制旋钮以点燃刀片或“凹凸”控制器(我通常抬起一个角落并再次掉落),以使其足够的旋转来激活“摆动以点燃”。

从扬声器中突然,响亮,半不愉快的撕裂噪音,达到熟悉的嗡嗡声。您可以(轻轻地)移动控制器模块,以便巧妙地听到嗡嗡声。这将证明IMU正在运作。

如果Saber在大约90秒后不断关闭,声音没有响应运动,那么IMU可能不会与Arduino通信。检查它是否有权力和我2C线是正确的。

对于音频测试,将扬声器面朝下静置在PVC端盖内(或在管的切断段的末端),因此您知道在刀柄内部时会听起来像什么。当前脸和背面之间有“挡板”时,扬声器工作最佳;否则,声压波只夹在扬声器锥的边缘并抵消。

调整扬声器模块上的音量控制,以便嗡嗡声和点火声音处于最响亮但不扭曲。

六个模块中的五个连接并准备好替补测试。igor,扔ze开关!

If you do have persistent crackly static, a high-pitched whine, or other audio issues at this stage (basically, if you can hear anything coming from the speaker while the blade isn’t active), you may need to add a 330μF or 470μF electrolytic capacitor across the audio amp's power supply. This may be the case especially if you picked an SBEC other than the YEP-20.

WS2812b led内部使用脉冲宽度调制,100个led一起可以产生合唱“歌唱”的声音,通过电源线进入音频信号。如果你突然听到这种噪音,一旦我们增加刀片,你肯定需要额外的平滑电容器。

下次...

第四部分,我们将连接刀片,做一个完整的台架测试所有的组件在一起,并组装刀柄。

您是否失望了您最喜欢的微控制器/ IMU或未使用组合?建议您希望在下面的评论中看到未来的固件的其他平台。

14评论
  • C
    cpnbc. 2016年12月13日

    我想问几个关于他的项目的问题。

    首先,代码需要如何改变RGB LED星形而不是
    字符串叶片。
    如果IM使用锂离子PCB,则关闭电压会是必不可少的
    保护电池(7.4v锂离子1400mAh 18500电池组)
    您如何修改代码以包含允许的adafruits ble模块
    通过手机应用程序进行颜色混合
    并且代码需要非常不同的adafruit pro饰品5v
    模块?

    我是一个与Arduinos的完整菜鸟,目前的语言完全是完全的
    外国对我。

    通过对此代码的线条解释,找到一条线真的很高兴我
    可以开始了解它的所有作品和目的。

    我很欣赏我可以得到的任何信息。

    喜欢的。 回复
    • 杰里米·李 2017年2月15日
      我不确定你的意思是“RGB LED明星”,但基于Neopixel的模块仍然被作为灯的单个“字符串”,无论它们是如何放置的。如果您使用的是具有内置保护电路的较低电流LIION包,则是,可以禁用电压警报的一个情况。对不起,但专业饰品似乎有一个Atmega328p,它缺乏我在32u4上用于音频合成的高速计时器4。老实说,如果你不熟悉Arduino那么你会在改变代码的时候有很多问题。我正在做其他人会告诉你的事情(实时动态合成和混合三个音频信号。我在CPU容量超过90%的情况下运行芯片。)并记录所有细节将采取另一个系列关于电子网站的文章并不是那么实用。我试图评论代码,尽我所能是最好的,但我知道这还不够。
      喜欢的。 回复
      • F
        弗朗索瓦·吉尔德 2019年9月18日,
        嘿,杰里米,你知道为什么我第一次连接电池的时候led条只闪了一下吗?我转动旋钮却没有回答,我只是少了一个开关和音频模块,但我怀疑这些东西不会让我接触到光线……希望这不是一个太老的帖子得到一个答案…弗兰克
        喜欢的。 回复