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

Arduinoflake!

组件和用品

Arduino Nano R3
× 1

关于这个项目

雪花由 30 个 LED 组成,分为 17 个独立的部分,可以由 Arduino Nano 微控制器单独控制。每个 LED 组都可以通过 PWM 进行调光以创建一些可爱的动画。

工具

你只需要烙铁、焊锡和钳子。

施工

首先选择一些模式。我选择了一个漂亮而简单的雪花晶体,并将其打印到适合 Arduino Nano 内部六边形 - 晶体核心的大小。

也用作布线的支撑结构是由 0.8 毫米黄铜棒与锡焊接在一起形成的。我总共使用了 2m 的杆。为什么是自由形式?因为我一直想尝试一下,这很考验你的耐心和技巧。

首先,我通过弯曲一根杆并将末端焊接在一起来创建一个核心六边形。通过在六边形顶部添加另外 6 根棒,接地线就完成了,现在需要将 LED 的所有阴极引线焊接到它上面以形成雪花图案。棘手的部分是添加 SMD LED,但我用纸板和双面胶带制作了一个夹具。

接下来是在核心结构下添加 Arduino Nano 微控制器的时候了,在它们之间留出足够的空间来安装 3 层黄铜棒接线,这些接线将微控制器引脚连接到所有 LED 阳极引线。这需要极大的耐心。不仅要避免导线之间短路,还要加一个限流电阻,让它好看。

Leaf LED 分别连接到最近的 Arduino 输出引脚。分支 LED 由两个分组并连接到 PWM 引脚。核心 LED 也分为两个组并连接到其余的引脚。 Arduino NANO 只有 18 个输出引脚(A6 和 A7 仅作为输入引脚),我需要一个用于触摸传感器的引脚,这让我只有 17 个引脚,因此两对核心 LED 连接在一起以创建一组 4 个。我我使用 220Ω 电阻器将流过每个引脚的电流限制在 8mA 左右。这意味着总共 240mA,这对于 ATmega328 芯片来说有点高,但它可以工作 - 据说安全最大值为 200mA。

触摸传感器

为了能够与雪花互动,我添加了另一个黄铜棒来创建电容式触摸传感器。我找到了一个很棒的图书馆和 Paul Stoffregen 的教程。触摸传感器用于与 arduinoflake 交互 - 更改动画,打开/关闭,触摸时闪烁,您可以命名...

最后说明

焊接前不要忘记检查所有二极管,如果损坏或极性接反,将很难更换。

代码

最初我以为我只能调暗连接到硬件 PWM 引脚的分支 LED。但幸运的是,有一个很棒的软件 PWM 库,它允许我像使用硬件 PWM 一样使用所有引脚。这种设置为动画创造了无限的可能性!查看下面附带的代码以及一些最初的动画。

代码

  • snowflake.ino
snowflake.inoArduino
源代码
#include "SoftPWM.h"#include byte edgeLedPins[] ={13, A4, A5, 2, 8, 12};byte middleLedPins[] ={10, 6, 3, 5, 9, 11};byteinnerLedPins[] ={A2, A3, A1, 4, 7, A1};ADCTouchSensor touchSensor =ADCTouchSensor(A0, 1);无效设置(){ Serial.begin(115200); SoftPWMBegin();}byte animation =0;long touchAt =0;void loop() { switch (animation) { case 0:_fill(100);休息;情况 1:shinyAnimation(); //淡入淡出动画();休息;情况 2:circleAnimation();休息;情况 3:loopAnimation();休息;案例4:烟花动画();烟花动画();烟花动画();烟花动画();烟花动画();烟花动画();动画++;休息;案例 5:smileAnimation();休息;默认值:动画 =0;休息; } int touchValue =touchSensor.read(); if (touchAt + 2000  1000) { touchAt =millis(); // 触地,冷落超时为 2s 动画 ++; _填充(0); }}void fireworkAnimation() { for (int i =0; i <4; i++) { SoftPWMSet(innerLedPins[i], 100);延迟(100); } SoftPWMSet(innerLedPins[4], 100); for (int i =0; i <6; i++) { SoftPWMSet(middleLedPins[i], 255); } 延迟(50); for (int i =0; i <6; i++) { SoftPWMSet(innerLedPins[i], 0); SoftPWMSet(edgeLedPins[i],255); } 延迟(50); for (int i =0; i <6; i++) { SoftPWMSet(middleLedPins[i], 0); } 延迟(50); _fill(0);}void smileAnimation() { SoftPWMSet(innerLedPins[1], 100); SoftPWMSet(innerLedPins[3], 100); SoftPWMSet(middleLedPins[0], 255); SoftPWMSet(middleLedPins[5], 255); SoftPWMSet(edgeLedPins[2], 255); SoftPWMSet(edgeLedPins[3],255);延迟(2000); SoftPWMSet(innerLedPins[1], 0); SoftPWMSet(innerLedPins[3], 0);延迟(100); SoftPWMSet(innerLedPins[1], 100); SoftPWMSet(innerLedPins[3], 100);延迟(100); SoftPWMSet(innerLedPins[1], 0); SoftPWMSet(innerLedPins[3], 0); delay(100);}byte circleState[] ={100, 55, 10};byte circleStateAnimation[] ={1, 1, 1};void circleAnimation() { for (int i =0; i <3; i++) { if (circleState[i]>=100) { circleStateAnimation[i] =-1; // 变暗 } else if (circleState[i] <=10) { circleStateAnimation[i] =1; // 明亮 } circleState[i] +=circleStateAnimation[i]; } for (int i =0; i <6; i++) { SoftPWMSet(innerLedPins[i], circleState[0]); SoftPWMSet(middleLedPins[i], circleState[1]); SoftPWMSet(edgeLedPins[i], circleState[2]); } delay(5);}byte waveState[] ={100, 55, 10, 10, 55, 100};byte waveStateAnimation[] ={1, 1, 1, -1, -1, -1};void waveAnimation () { for (int i =0; i <6; i++) { if (waveState[i]>=100) { waveStateAnimation[i] =-1; // 变暗 } else if (waveState[i] <=10) { waveStateAnimation[i] =1; // 明亮 } waveState[i] +=waveStateAnimation[i]; } for (int i =0; i <6; i+=2) { SoftPWMSet(innerLedPins[i], waveState[0]); SoftPWMSet(middleLedPins[i],waveState[1]); SoftPWMSet(edgeLedPins[i],waveState[2]); SoftPWMSet(innerLedPins[i + 1], waveState[3]); SoftPWMSet(middleLedPins[i + 1], waveState[4]); SoftPWMSet(edgeLedPins[i + 1], waveState[5]); } delay(10);}byte loopCounter =0;byte loopState =150;void loopAnimation() { SoftPWMSet(innerLedPins[loopCounter], loopState); SoftPWMSet(middleLedPins[loopCounter],loopState); SoftPWMSet(edgeLedPins[loopCounter], loopState); loopCounter =_nextIndex(loopCounter, 1); if (loopCounter ==0) { loopState =(loopState ==150 ? 0 :150); } delay(100);}byte slowOnCounter =0;byte slowOnState =150;void slowOnAnimation() { byte randomLed =random(0, 18); if (randomLed <6) { SoftPWMSet(innerLedPins[randomLed],slowOnState); } else if (randomLed <12) { SoftPWMSet(middleLedPins[randomLed - 6], slowOnState); } else { SoftPWMSet(edgeLedPins[randomLed - 12], slowOnState);慢计数器++;如果(slowOnCounter>=50){slowOnCounter =0; slowOnState =(slowOnState ==150 ? 0 :150); } delay(50);}字节闪亮状态[] ={0, 100, 0, 100, 0, 100};字节闪亮状态动画[] ={1, 1, 1, 1, 1, 1};字节闪亮计数器=0; void ShinyAnimation() { for (int i =0; i <6; i++) { if (shinyState[i]>=100) { ShinyStateAnimation[i] =-1; // 变暗 } else if (shinyState[i] <=0) { ShinyStateAnimation[i] =1; // 明亮 } ShinyState[i] +=ShinyStateAnimation[i]; SoftPWMSet(edgeLedPins[i],shinyState[i]); } 闪亮计数器++;如果(闪亮计数器> 10){闪亮计数器 =0; for (byte r =random(1, 3); r> 0; r--) { byte randomLed =random(0, 12); if (randomLed <6) { SoftPWMSet(innerLedPins[random(0, 6)], 255); } else { SoftPWMSet(middleLedPins[random(0, 6)], 255); } } } else { for (int i =0; i <6; i++) { SoftPWMSet(innerLedPins[i], 20); SoftPWMSet(middleLedPins[i], 20); } } delay(30);}byte fadingState[] ={0, 100, 0, 100, 0, 100};byte fadingStateAnimation[] ={1, 1, 1, 1, 1, 1};void fadingAnimation() { for (int i =0; i <6; i++) { if (fadingState[i]>=100) { fadingStateAnimation[i] =-1; // 变暗 } else if (fadingState[i] <=0) { fadingStateAnimation[i] =1; // 明亮 } fadingState[i] +=fadingStateAnimation[i]; SoftPWMSet(edgeLedPins[i],fadingState[i]); SoftPWMSet(middleLedPins[_nextIndex(i, 1)],fadingState[i]); SoftPWMSet(innerLedPins[i], 50); } delay(20);}void _fill(byte value) { for (int i =0; i <6; i++) { SoftPWMSet(edgeLedPins[i], value); SoftPWMSet(middleLedPins[i], value); SoftPWMSet(innerLedPins[i], value); }}byte _prevIndex(short index, byte step) { index -=step; while (index <0) { index +=6; } return index;}byte _nextIndex(short index, byte step) { index +=step; while (index> 5) { index -=6; } 返回索引;}

示意图


制造工艺

  1. 定位销有什么用途?
  2. 定位销是由什么制成的?
  3. 选择定位销时要考虑的 5 件事
  4. 擀面杖
  5. 保龄球瓶
  6. 安全别针
  7. 超低功耗系统将 AI 的希望寄托在 TinyML
  8. Raspberry PI I/O 分线电缆和插板适配器
  9. 动态三角形艺术
  10. 带 LED 和压电扬声器的 DHT11 传感器
  11. Arduino + LEDs + MIDI 键盘 + MuseScore =Piano Tutor
  12. BGA – 它们是什么?