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

美国国歌与灯光

组件和用品

Arduino Nano R3
请注意,我使用 328P(旧引导加载程序)有 4 个不同的处理器
× 1
蜂鸣器
任何旧蜂鸣器都可以,我用的是 16 欧姆蜂鸣器。
× 1
SparkFun 按钮开关 12mm
我用的不是很准确,但我的是 6x6x6mm
× 2
翘板开关 250V 3A
任何电源开关都可以。我使用了一个带开关的 9Volt 外壳,但它隐藏在我的外壳中,所以我在外面添加了一个开关。只需寻找任何翘板开关即可。
× 1
电阻 330 ohm
任何电阻器都可以工作,但要进行 LED 计算并确保不要超过 LED 输出或Nano 上每个引脚最大 40 mA。 330 欧姆几乎是任何 Arduino 入门包的标准配置。
× 3
LED(通用)
6 个 LED 或任意数量的 LED。 2个红色,2个白色和2个蓝色。我使用的红色 LED 为 2.2V,其他每个 LED 为 3.2V。使用 330 欧姆的结果为 9.7mA 和 6.7mA。 (请记住,我每个输出使用 2 个,所以 ~13 mA 和 ~20mA,这是引脚输出电流最大值的一半)
× 6
SparkFun 可焊面包板 - 迷你
任何面包板都可以工作,无论是焊接还是无焊,您都可以选择它的外观。或者你也可以不用,只需要钻孔和木头,然后用热胶将部件固定到位。
× 1
9V 电池(通用)
大量的供电选项。我使用了带有外壳和开关的 9 伏电池。只要您满足 Nano 输入要求,您就可以只使用 USB 电缆甚至 4 节 AA 电池组。由于我使用了一个单独的开关,我很遗憾为一个有开/关的开关多付了钱。
× 1

必要的工具和机器

烙铁(通用)
如果你想焊接

关于这个项目

在过去的一年里,我开始为最终的圣诞灯饰和音乐项目编程。这是一个有人让我做的副项目,并认为它会很有趣。最初这只是一首带灯的歌曲,但这只是蹩脚的。

这是一个链接,以防您对视频有疑问:

https://youtu.be/C2jyn80Mjus

该项目使用 Arduino Nano。在这个项目中,我使用两个不同的按钮使用 Tone() 函数来做两首不同的歌曲。一种是“冲锋”声,另一种是“美国国歌”。在按下按钮之前,它会做一些随机的照明效果。

在这个草图中,我大量使用函数来简化我的函数编写过程,但保持对灯光/声音过程的完全控制,所以如果我不喜欢我听到/看到的东西,我可以毫不费力地做一些小的调整.

我发布这个项目的目标是分享我在设计/编码中学到的一些东西,这样如果你正在做类似的事情,这会有所帮助。

这是我在测试系统和代码时在试验板上的初始设计。

这是电源系统设置。我选择 9 伏电池的大小,不依赖于 USB 墙壁或计算机电源。

这就是从内部焊接所有东西后的样子。强烈建议只焊接顶盖,然后再添加侧面

代码

  • USA_ANTHEM_Updated.ino
USA_ANTHEM_Updated.inoArduino
带有 LED、充电、音调和所有功能的星条旗。只需复制和粘贴。频率(Hz)的整数,&持续时间(n中的时间)-LED在编写函数时由我自己半随机选择-函数被构建为随着每次播放而增加音调(在启动/硬件重置时重置为正常音调)-音调计算为整体的 1/12 或 0.06 按钮设计/接线-每个通道上的 3 个红色、蓝色和绿色 LED 组,包括 2 个并联。-外部复位按钮-用于歌曲中断歌曲充电的开始按钮* ///**************************************************** *************** 声明的整数 const int ChargeButton=3; //(Nano D3) uno pin 2 应该是interupt pin const int StartButton=5; //(Nano D5) uno pin 4 const int BuzzerPin=9; //(Nano D9) uno pin 9 const int RedLED=6; //(Nano D6) uno pin 6 const int WhiteLED=7; //(Nano D7) uno pin 7 const int BlueLED=8; //(Nano D8) uno pin 8 int n=1000; //声明这个值将随着每首歌曲而改变的整数 int DurationOn=n; //后面的声明整数将用于stacatto计算 int DurationRest=n; //稍后声明整数将用于 stacatto 计算 //x &y 的总和应该是 1 我稍后在 float x=.66 上对此有更多说明; //在浮动 y=.34 上声明浮动时间; //声明浮动时间关闭 //等待按钮输入时灯随机闪烁的速率 int Twinkle_Rate=250; //请注意,如果大幅增加按钮可能不会在 100% 的时间内响应 //较低的闪烁率可提高按钮按下响应 //为按钮状态设置整数 int StartButtonState; int ChargeButtonState; //注意中间C是4C(降B和降E) int Note1=233; //3Bb 233Hz int Note2=294; //4D 294Hz int Note3=330; //4E 330Hz int Note4=349; //4F 349Hz int Note5=392; //4G 392Hz int Note6=440; //4A 440Hz int Note7=466; //4Bb 466Hz int Note8=523; //5C 523Hz int Note9=587; //5D 587Hz int Note10=622; //5Eb 622Hz int Note11=698; //5F 698Hz //******************************************** ******************充电功能/Songvoid Charge(){ n=600; //歌曲进展的速率 //格式:写入引脚,特定频率的音调(这种方式不受国歌结束时的变化,稍后会详细介绍),延迟与相同的时间音调同步音乐,//写针(s)关闭并延迟休息digitalWrite(RedLED,HIGH);音调(BuzzerPin,392,n/3);延迟(n/3);数字写入(红色LED,低);延迟(70);数字写入(WhiteLED,高);音调(BuzzerPin,523,n/3);延迟(n/3);数字写入(WhiteLED,低);延迟(70);数字写入(BlueLED,高);音调(BuzzerPin,659,n/3);延迟(n/3);数字写入(BlueLED,低);延迟(70);数字写入(红色LED,高);数字写入(WhiteLED,高);数字写入(BlueLED,高);音调(BuzzerPin,784,n*3/4);延迟(n*3/4);数字写入(BlueLED,低);数字写入(红色LED,低);数字写入(WhiteLED,低);延迟(70);数字写入(BlueLED,高);音调(BuzzerPin,659,n/4);延迟(n/4);数字写入(BlueLED,低);延迟(70);数字写入(红色LED,高);数字写入(WhiteLED,高);数字写入(BlueLED,高);音调(蜂鸣器引脚,784,n*2);延迟(n*2);数字写入(BlueLED,低);数字写入(红色LED,低);数字写入(WhiteLED,低);延迟(70);}//********************************************** ********************SingleDW functionvoid SingleDWwithNote(int HZ, int TurnOn, int Duration, int Staccato){ //音符所在的赫兹 (参考 Note#) / /turn on=pin (red/white/blue LED) that will betuned on //duration is a long // Staccato 1=yes, 0=no 导致音符稍微缩短,或者高 int x 值只是一个短暂停顿 if (Staccato==1){DurationOn=Duration*x;} //音调和灯光亮多久是 DurationShort else if (Staccato==0){DurationOn=Duration;} digitalWrite(TurnOn, HIGH);音调(BuzzerPin,HZ,DurationOn);延迟(持续时间);数字写入(开启,低); if (Staccato==1) { DurationRest=Duration*y;延迟(DurationRest); }}//**************************************************** ****************美国国歌功能/Songvoid USNationalAnthem(){ n=577; //声音播放的速率计算自:60,000 (ms/BPM factor) / 104 BPM =577 ms /* 四分音符值为 n*2 个八分音符中的 n 个半音符值 n/2 个八分音符为 n*3 /4 */ //x &y 整数用于断奏/在音符后添加休止符 //注意 x+y 必须 =1 或 int。 n rate 将被抛弃 // 减少 x 并增加 y 虽然使音符更加发音和跳跃/乐观 x=.92; //真正的断奏大约是 1/2 或 2/3 的值,所以对于真正的断奏 y=.08,x 值大约在 0.5 到 0.7 之间; //1.00-.92(x value) =.08 //第 1-5 条,第 1 行 SingleDWwithNote(Note4, RedLED, n*3/4, 1); SingleDWwithNote(Note2, WhiteLED, n/4, 1); SingleDWwithNote(Note1, RedLED, n, 1); SingleDWwithNote(Note2, WhiteLED, n, 1); SingleDWwithNote(Note4, RedLED, n, 1); SingleDWwithNote(Note7, WhiteLED, n*2, 1); SingleDWwithNote(Note9, BlueLED, n*3/4, 1); SingleDWwithNote(Note8, WhiteLED, n/4, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note2, WhiteLED, n, 1); SingleDWwithNote(Note3, BlueLED, n, 1); SingleDWwithNote(Note4, RedLED, n*2, 1); SingleDWwithNote(Note4, RedLED, n/2, 1); SingleDWwithNote(Note4, RedLED, n/2, 1); //bar6-9 line 2 SingleDWwithNote(Note9, BlueLED, n*3/2, 1); SingleDWwithNote(Note8, WhiteLED, n/2, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note6, BlueLED, n*2, 1); SingleDWwithNote(Note5, WhiteLED, n/2, 1); SingleDWwithNote(Note6, BlueLED, n/2, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note4, BlueLED, n, 1); SingleDWwithNote(Note2, WhiteLED, n, 1); SingleDWwithNote(Note1, BlueLED, n, 1); SingleDWwithNote(Note4, RedLED, n*3/4, 1); SingleDWwithNote(Note2, WhiteLED, n/4, 1); //bars 10-13 line 3 SingleDWwithNote(Note1, RedLED, n, 1); SingleDWwithNote(Note2, WhiteLED, n, 1); SingleDWwithNote(Note4, RedLED, n, 1); SingleDWwithNote(Note7, WhiteLED, n*2, 1); SingleDWwithNote(Note9, BlueLED, n*3/4, 1); SingleDWwithNote(Note8, WhiteLED, n/4, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note2, WhiteLED, n, 1); SingleDWwithNote(Note3, BlueLED, n, 1); SingleDWwithNote(Note4, RedLED, n*2, 1); SingleDWwithNote(Note4, RedLED, n/2, 1); SingleDWwithNote(Note4, RedLED, n/2, 1); //第 14-17 栏,第 4 行,第 1 页结束 SingleDWwithNote(Note9, BlueLED, n*3/2, 1); SingleDWwithNote(Note8, WhiteLED, n/2, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note6, BlueLED, n*2, 1); SingleDWwithNote(Note5, WhiteLED, n/2, 1); SingleDWwithNote(Note6, BlueLED, n/2, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note4, BlueLED, n, 1); SingleDWwithNote(Note2, WhiteLED, n, 1); SingleDWwithNote(Note1, RedLED, n, 1); SingleDWwithNote(Note9, BlueLED, n/2, 1); SingleDWwithNote(Note9, BlueLED, n/2, 1); //第 18-21 栏,第 5 行,第 2 页的开始 SingleDWwithNote(Note9, BlueLED, n, 1); SingleDWwithNote(Note10, RedLED, n, 1); SingleDWwithNote(Note11, WhiteLED, n, 1); SingleDWwithNote(Note11, WhiteLED, n*2, 1); SingleDWwithNote(Note10, RedLED, n/2, 1); SingleDWwithNote(Note9, BlueLED, n/2, 1); SingleDWwithNote(Note8, WhiteLED, n, 1); SingleDWwithNote(Note9, BlueLED, n, 1); SingleDWwithNote(Note10, RedLED, n, 1); SingleDWwithNote(Note10, RedLED, n*2, 1); SingleDWwithNote(Note10, RedLED, n, 1); //第 22-25 条,第 6 行 SingleDWwithNote(Note9, WhiteLED, n*3/2, 1); SingleDWwithNote(Note8, BlueLED, n/2, 1); SingleDWwithNote(Note7, WhiteLED, n, 1); SingleDWwithNote(Note6, RedLED, n*2, 1); SingleDWwithNote(Note5, BlueLED, n/2, 1); SingleDWwithNote(Note6, RedLED, n/2, 1); SingleDWwithNote(Note7, WhiteLED, n, 1); SingleDWwithNote(Note2, BlueLED, n, 1); SingleDWwithNote(Note3, RedLED, n, 1); SingleDWwithNote(Note4, WhiteLED, n*2, 1); SingleDWwithNote(Note4, RedLED, n, 1); n=n*1.08; //60,000 / 96 bpm =625 毫秒;只是稍微延迟//第 26-28 条,第 7 行 SingleDWwithNote(Note7, WhiteLED, n, 1); SingleDWwithNote(Note7, WhiteLED, n, 1); SingleDWwithNote(Note7, WhiteLED, n/2, 1); SingleDWwithNote(Note6, BlueLED, n/2, 1); SingleDWwithNote(Note5, RedLED, n, 1); SingleDWwithNote(Note5, RedLED, n, 1); SingleDWwithNote(Note5, RedLED, n, 1); SingleDWwithNote(Note8, WhiteLED, n, 1); SingleDWwithNote(Note10, RedLED, n/2, 1); SingleDWwithNote(Note9, BlueLED, n/2, 1); SingleDWwithNote(Note8, WhiteLED, n/2, 1); SingleDWwithNote(Note7, RedLED, n/2, 1); //bars 29-30 SingleDWwithNote(Note7, RedLED, n, 1); SingleDWwithNote(Note6, BlueLED, n*2, 1); //2x 用于持有 SingleDWwithNote(Note4, RedLED, n/2, 1); SingleDWwithNote(Note4, RedLED, n/2, 1); SingleDWwithNote(Note7, BlueLED, n*3/2, 1); SingleDWwithNote(Note8, WhiteLED, n/2, 1); SingleDWwithNote(Note9, BlueLED, n/2, 1); SingleDWwithNote(Note10, RedLED, n/2, 1); n=n*1.2; //大延迟//小节31-34首歌曲结尾SingleDWwithNote(Note11, WhiteLED, n*2, 1); //额外保留免费的SingleDWwithNote(Note7, RedLED, n/2, 1); SingleDWwithNote(Note8, WhiteLED, n/2, 1); SingleDWwithNote(Note9, BlueLED, n*3/2, 1); SingleDWwithNote(Note10, RedLED, n/2, 1); SingleDWwithNote(Note8, WhiteLED, n, 1); SingleDWwithNote(Note7, RedLED, n*3, 1); //仅保留 3 个值 //将所有音符按 3 个步骤调整 //1.06 源自音乐理论。以赫兹为单位记笔记,然后除以 // 它下面的音符(升和降都算作一个音符)整整为 1.06 //您可以删除下一段以避免频率变化,或者如果您想要 Note1=Note1 则将其更改*1.06*1.06*1.06;注2=注2*1.06*1.06*1.06;注3=注3*1.06*1.06*1.06;注4=注4*1.06*1.06*1.06;注5=注5*1.06*1.06*1.06;注6=注6*1.06*1.06*1.06; Note7=Note7*1.06*1.06*1.06;注8=注8*1.06*1.06*1.06;注9=注9*1.06*1.06*1.06; Note10=Note10*1.06*1.06*1.06; Note11=Note11*1.06*1.06*1.06;}/***************************************** *************************Twinkle void Twinkle(int Twinkle_Time) //在()中放置一个数字显示闪烁发生的时间{ //built这个函数用于另一个用途,所以它有一个奇怪的开始不必要的计算//将时间和速率更改为一个较小的整数,注意它前端舍入了 Twinkle_Time=Twinkle_Time/Twinkle_Rate; // 在这种情况下 Tiwkle Time is =to Twinkle Rate 所以值是 1 for(Twinkle_Time;Twinkle_Time>0;Twinkle_Time--) //因为值是 1 只处理一次 { int B=random(1,4); // 1、2 或 3 的随机整数 int C=random(1,4); // 1、2 或 3 的随机整数 //如果两个整数相同则没有问题,只有一个 LED 亮起,增加了随机性 //评估每个整数以在特定颜色的 LED 上运行 if(B==1){ digitalWrite(RedLED, HIGH);} if(B==2){digitalWrite(WhiteLED, HIGH);} if(B==3){digitalWrite(BlueLED, HIGH);} if(C==1){digitalWrite( RedLED, HIGH);} if(C==2){digitalWrite(WhiteLED, HIGH);} if(C==3){digitalWrite(BlueLED, HIGH);} delay(Twinkle_Rate);// 保持 LED 点亮一段时间设置一段时间 //然后我们将相应的 LED 写为低电平。冷可能简化并且只写所有 3 个低可能会加快计时 if(B==1){digitalWrite(RedLED, LOW);} if(B==2){digitalWrite(WhiteLED, LOW);} if(B==3){digitalWrite(BlueLED, LOW);} if(C==1){digitalWrite(RedLED, LOW);} if(C==2){digitalWrite(WhiteLED, LOW);} if(C==3) {digitalWrite(BlueLED, LOW);} }}/***************************************** *************************Setupvoid setup(){ pinMode(ChargeButton, INPUT_PULLUP); //作为输入并启用按钮 pinMode(StartButton, INPUT_PULLUP) 的内部上拉电阻; //作为输入并启用按钮 pinMode(RedLED, OUTPUT) 的内部上拉电阻; //LED 配置为输出 pinMode(WhiteLED, OUTPUT); //LED 配置为输出 pinMode(BlueLED, OUTPUT); //LED 配置为输出 pinMode(BuzzerPin, OUTPUT); //蜂鸣器配置为输出 //digitalWrite(ChargeButton, HIGH);没有必要,因为它作为上拉启用,它只是多余的 //digitalWrite(StartButton, HIGH);没有必要,因为它作为上拉启用,它只是多余的 // 将所有 LED 设置为低电平以避免任何错误。对于我的设计 HIGH=ON, LOW=OFF digitalWrite(RedLED, LOW);数字写入(WhiteLED,低);数字写入(BlueLED,低); } //**************************************************** ***************Main Loopvoid loop(){ // 读取按钮状态,引脚连接到配置为高电平的内部电阻 // 按下时引脚将处于低电平 StartButtonState =digitalRead(StartButton); //low=pressed ChargeButtonState =digitalRead(ChargeButton); //low=pressed //针对整数进行评估以执行第一个被抵抗为低的功能引脚 //读取按钮的采样率是int twinkle_rate(.25秒) if (StartButtonState==LOW){USNationalAnthem();} else if (ChargeButtonState==LOW){Charge();} else{Twinkle(Twinkle_Rate);} // 如果没有按下引脚,则闪烁!再...再...再...再... }

示意图

使用面包板显示电气连接 无需焊接即可显示接线 跟着线路走! 显示每件商品的成本、总成本和购买地点。

制造工艺

  1. 带开关的电路
  2. 假日灯光
  3. 带乳液的纸巾
  4. 加入:具有 4 个 SFP 端口的 12 端口千兆交换机
  5. 使用 Raspberry Pi 监测温度
  6. 用于 FS2020 的带有 Arduino 的开关/LED 面板
  7. 带有示例的 C++ Switch Case 语句
  8. switch…case in C (Switch Statement in C) with Examples
  9. 带有示例的 Java Switch-Case 语句
  10. MEP National Network™ 与少数拥有的制造商联系起来
  11. 使用按钮通过 PWM 调光灯光
  12. 用紫外线灯给机器人消毒