Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Amerikaanse volkslied met licht en toon

Componenten en benodigdheden

Arduino Nano R3
Let op:dit heeft 4 verschillende processors Ik gebruik de 328P (oude bootloader)
× 1
Zoemer
Elke oude zoemer is voldoende. Ik heb een zoemer van 16 Ohm gebruikt.
× 1
SparkFun Drukknopschakelaar 12 mm
Niet de exacte die ik heb gebruikt, maar de mijne was 6x6x6 mm
× 2
tuimelschakelaar 250V 3A
Elke aan/uit-schakelaar is voldoende. Ik gebruikte een 9Volt-behuizing met een schakelaar, maar deze is verborgen in mijn koffer, dus ik heb een schakelaar aan de buitenkant toegevoegd. Zoek gewoon naar een tuimelschakelaar.
× 1
Weerstand 330 ohm
Elke weerstand zal werken, maar voer een LED-berekening uit en zorg ervoor dat u niet over de LED-output of 40 mA max per pin op de Nano. 330 ohm is vrijwel standaard in elk Arduino-startpakket.
× 3
LED (generiek)
6 LED's of hoeveel je maar wilt. 2 rode, 2 witte en 2 blauwe. Rode LED die ik gebruikte was 2,2V en de andere 3,2V elke LED. Resultaten in 9,7 mA en 6,7 mA bij gebruik van 330 ohm. (onthoud dat ik er 2 per uitgang gebruik, dus ~13 mA &~20mA, wat de helft is van de maximale uitgangsstroom van de pin)
× 6
SparkFun Soldeerbaar Breadboard - Mini
Elk breadboard werkt, soldeer of soldeerloos je vraag hoe het eruit zal zien. Of je kunt het zonder doen en gewoon gaten en hout boren en de onderdelen op hun plaats lijmen.
× 1
9V-batterij (algemeen)
veel stroomopties. Ik gebruikte een 9 volt batterij met een behuizing en schakelaar. U kunt alleen een USB-kabel of zelfs een 4x AA-batterijpakket gebruiken, op voorwaarde dat u voldoet aan de Nano-invoervereisten. Ik heb spijt dat ik extra geld heb betaald voor een exemplaar met een aan/uit-schakelaar, aangezien ik een aparte schakelaar heb gebruikt.
× 1

Benodigde gereedschappen en machines

Soldeerbout (algemeen)
Aan jou of je wilt solderen

Over dit project

Ik ben het afgelopen jaar begonnen met programmeren voor een eventueel kerstverlichting- en muziekproject. Dit is een zijproject dat iemand me vroeg te doen en dacht dat het leuk zou zijn. Aanvankelijk zou dit gewoon een nummer met licht zijn, maar dat is gewoon flauwekul.

Hier is een link voor het geval je problemen had met de video:

https://youtu.be/C2jyn80Mjus

Dit project maakt gebruik van een Arduino Nano. In dit project gebruik ik twee verschillende drukknoppen om twee verschillende nummers te doen met behulp van de Tone()-functie. De ene is het 'charge'-geluid en de andere is het 'US National Anthem'. Totdat de knoppen worden ingedrukt, doet het wat willekeurige verlichting voor effecten.

In deze schets maak ik intensief gebruik van functies om mijn schrijfproces van de functies te vereenvoudigen, maar houd ik de volledige controle over het verlichtings-/geluidsproces, zodat ik kleine aanpassingen kan maken als ik het niet leuk vind wat ik hoor/zie met heel weinig moeite .

Mijn doel met het plaatsen van dit project is om enkele dingen te delen die ik heb geleerd in ontwerpen/coderen, zodat dit kan helpen als je iets soortgelijks doet.

Dit is hoe het oorspronkelijke ontwerp eruit zag op het breadboard terwijl ik het systeem en de code aan het testen was.

Dit is wat de opstelling van het stroomsysteem is. Ik kies een batterij van 9 volt vanwege het formaat en ben niet afhankelijk van een USB-muur of computervoeding.

Zo ziet het eruit als alles van binnenuit is gesoldeerd. Beveel ten zeerste aan om te solderen met alleen de bovenklep en later de zijkanten toe te voegen

Code

  • VS_ANTHEM_Updated.ino
USA_ANTHEM_Updated.inoArduino
De Star Spangled Banner met LED's, Charge, tone, alle functies. Kopieer en plak.
/*Star Spangled Banner met LED's Gemaakt door Ryan Aebi Juni 2018 Codestructuur - Basislus om naar andere functies te verwijzen - Drukknoppen doen ofwel Star Spangled Banner of Laad geluiden op met lichten Star Spangled Banner Notes - Functie heeft een notitie toegewezen door geheel getal voor frequentie (Hz), en duur (tijd in n) - LED wordt semi-willekeurig door mezelf gekozen bij het schrijven van functie - Functie is gebouwd om de toonhoogte bij elk spel te verhogen (wordt teruggezet naar normale toonhoogte bij opstarten/hardware-reset) - Toonhoogte berekend is 1/12 van een geheel of 0,06 Knopontwerp/bedrading-3 LED-sets van rood, blauw en groen op elk kanaal, inclusief 2 van elk parallel. Externe resetknop-startknop voor nummer onderbreken nummer voor opladen* ///************************************************** ***************Gedeclareerde gehele getallen const int ChargeButton=3; //(Nano D3) uno pin 2 zou een interrupt pin const int StartButton=5 moeten zijn; //(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; // door het gehele getal te declareren, verandert deze waarde met elk nummer int DurationOn=n; //het declareren van een geheel getal voor later zal worden gebruikt in stacatto-berekeningen int DurationRest=n; //het declareren van een geheel getal voor later zal worden gebruikt in stacatto-berekeningen //som van x &y zou 1 moeten zijn Ik heb hier later meer opmerkingen over float x=.66; // float verklaren voor tijd op float y=.34; // verklaren float voor vrije tijd // snelheid waarmee lichten willekeurig knipperen tijdens het wachten knopinvoer int Twinkle_Rate =250; //merk op dat als de knoppen drastisch worden verhoogd, mogelijk niet 100% van de tijd reageren //lagere fonkelingssnelheid verbetert de respons op de knopdruk // stelt gehele getallen in voor knopstatussen int StartButtonState; int ChargeButtonState; // noot middelste C is 4C (Bes &Es) int Note1=233; //3Bb 233Hz int Note2=294; //4D 294Hz int Note3=330; //4E 330Hz int Opmerking4=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 //********************************************* **************** Oplaadfunctie/Songvoid Charge(){ n=600; //snelheid waarmee het nummer vordert //Formaat:schrijf pin(s) op, toon op specifieke frequentie (op deze manier is het niet onderhevig aan // veranderingen aan het einde van het volkslied, hierover later meer), uitstel voor dezelfde tijd als toon om muziek te synchroniseren, // schrijf pin(s) uit die aan waren en vertraging voor een rust digitalWrite (RedLED, HIGH); toon (BuzzerPin, 392, n/3); vertraging (n/3); digitalWrite (Rood LED, LAAG); vertraging (70); digitalWrite (Witte LED, HOOG); toon (BuzzerPin, 523, n/3); vertraging (n/3); digitalWrite (Witte LED, LAAG); vertraging (70); digitalWrite (BlueLED, HOOG); toon (BuzzerPin, 659, n/3); vertraging (n/3); digitalWrite (BlueLED, LAAG); vertraging (70); digitalWrite (Rood LED, HOOG); digitalWrite (Witte LED, HOOG); digitalWrite (BlueLED, HOOG); toon (BuzzerPin, 784, n*3/4); vertraging (n*3/4); digitalWrite (BlueLED, LAAG); digitalWrite (Rood LED, LAAG); digitalWrite (Witte LED, LAAG); vertraging (70); digitalWrite (BlueLED, HOOG); toon (BuzzerPin, 659, n/4); vertraging (n/4); digitalWrite (BlueLED, LAAG); vertraging (70); digitalWrite (Rood LED, HOOG); digitalWrite (Witte LED, HOOG); digitalWrite (BlueLED, HOOG); toon (BuzzerPin, 784, n*2); vertraging (n*2); digitalWrite (BlueLED, LAAG); digitalWrite (Rood LED, LAAG); digitalWrite (Witte LED, LAAG); vertraging(70);}//********************************************* ******************** SingleDW functionvoid SingleDWwithNote (int HZ, int TurnOn, int Duration, int Staccato) {//Hertz waarop noot is (referenties Note#) / /turn on=pin (rood/wit/blauwe LED) die zal worden afgestemd //duur is voor hoe lang //Staccato 1=ja, 0=nee resulteert in een iets verkorte noot, of een hoge int x-waarde als slechts een korte pauze if (Staccato==1){DurationOn=Duur*x;} //hoe lang de toon en lichten aan zijn DurationShort else if (Staccato==0){DurationOn=Duur;} digitalWrite (TurnOn, HIGH); toon (BuzzerPin, HZ, Duur Aan); vertraging (Duur Aan); digitalWrite (Inschakelen, LAAG); if (Staccato==1) { DurationRest=Duur*y; vertraging (DuurRest); }}//************************************************** ****************USA National Anthem Function/Songvoid USNationalAnthem(){ n=577; //snelheid waarmee geluid wordt afgespeeld, berekend vanaf:60.000 (ms/BPM-factor) / 104 BPM =577 ms /* kwartnootwaarde is n halve nootwaarde in n*2 achtste noten is n/2 gestippelde achtste noot is n*3 /4 */ //x &y gehele getallen zijn voor staccato/rust toevoegen na een noot //merk op dat x+y moet =1 of de int. n-snelheid zal worden weggegooid //verlaag x en verhoog y echter om de noten meer uitgesproken en springerig/opzwepend te maken x=.92; //true stacatio is ongeveer 1/2 of 2/3 waarde dus x-waarde rond .5 tot .7 voor een echte staccato y=.08; //1.00-.92(x waarde) =.08 //bars 1-5, regels 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 lijn 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); // balken 10-13 lijn 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); //bar 14-17, regel 4, einde van pagina 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); //balken 18-21, regel 5, begin van pagina 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); // balken 22-25, regel 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 ms; slechts een lichte vertraging //bars 26-28, regel 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); //balken 29-30 SingleDWwithNote (Note7, RedLED, n, 1); SingleDWwithNote (Note6, BlueLED, n*2, 1); //2x voor het vasthouden van 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; //grote vertraging //balken 31-34 einde van nummer SingleDWwithNote (Note11, WhiteLED, n*2, 1); // extra wachtstand op gratis 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); //alleen vasthouden voor 3 waarden //rasie alle noten met 3 stappen //1.06 afgeleid van muziektheorie. Maak een notitie in hertz en deel deze vervolgens door de // noot eronder (scherpe punten en platte vlakken tellen als een noot) in het algemeen tot 1,06 //U kunt deze volgende alinea verwijderen om frequentieveranderingen te voorkomen of deze wijzigen als u wilt Note1=Note1 *1,06*1,06*1,06; Note2=Note2*1,06*1,06*1,06; Note3=Note3*1,06*1,06*1,06; Note4=Note4*1,06*1,06*1,06; Note5=Note5*1,06*1,06*1,06; Note6=Note6*1,06*1,06*1,06; Note7=Note7*1,06*1,06*1,06; Note8=Note8*1,06*1,06*1,06; Note9=Note9*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) //Plaats een getal in () laat zien hoe lang de twinkeling optreedt{ //gebouwd deze functie voor een ander gebruik, dus het heeft een bizarre beginnende onnodige berekening // verandert tijd &tarief in een kleiner geheel getal, merk op dat het front-end rondt Twinkle_Time=Twinkle_Time/Twinkle_Rate; // in dit geval is Tiwkle Time =to Twinkle Rate, dus waarde is 1 for (Twinkle_Time;Twinkle_Time>0;Twinkle_Time--) // aangezien waarde 1 is, wordt slechts één keer verwerkt {int B=random(1,4); // willekeurig geheel getal van 1, 2 of 3 int C=willekeurig (1,4); // willekeurig geheel getal van 1, 2 of 3 // geen problemen als beide gehele getallen hetzelfde zijn, slechts één LED gaat branden, draagt ​​bij aan de willekeur // evalueert elk geheel getal om op een specifieke kleuren-LED te werken 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);// houdt LED een tijdje aan stel de tijdsduur in // en dan schrijven we de bijbehorende LED's laag. koud mogelijk vereenvoudigen en gewoon alle 3 schrijven laag kan de timing versnellen 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); // zet als invoer en maakt interne pull-up-weerstand mogelijk voor knop pinMode (StartButton, INPUT_PULLUP); // zet als invoer en maakt interne pull-up-weerstand mogelijk voor knop pinMode (RedLED, OUTPUT); // LED geconfigureerd als output pinMode (WhiteLED, OUTPUT); // LED geconfigureerd als output pinMode (BlueLED, OUTPUT); // LED geconfigureerd als output pinMode (BuzzerPin, OUTPUT); // Zoemer geconfigureerd als uitvoer //digitalWrite (ChargeButton, HIGH); niet nodig omdat het is ingeschakeld als pullup, het is gewoon overbodig //digitalWrite(StartButton, HIGH); niet nodig omdat het is ingeschakeld als pullup, het is gewoon redundant // zet alle LED's op LAAG om fouten te voorkomen. Voor mijn ontwerp HIGH=ON, LOW=OFF digitalWrite (RedLED, LOW); digitalWrite (Witte LED, LAAG); digitalWrite (BlueLED, LAAG); } //************************************************** *************** Main Loopvoid loop () {// leest knopstatussen, pinnen waren aangesloten op interne weerstand geconfigureerd als hoog // pinnen zullen laag zijn wanneer op StartButtonState =digitalRead (StartButton); // laag =ingedrukt ChargeButtonState =digitalRead (ChargeButton); //low=pressed //evalueert tegen gehele getallen om de eerste functiepin uit te voeren die als laag werd verzet //sampling rate voor het lezen van knoppen is de int twinkle_rate (0,25 seconden) if (StartButtonState==LOW){USNationalAnthem();} else if (ChargeButtonState==LOW){Charge();} else{Twinkle(Twinkle_Rate);} // als er geen spelden zijn ingedrukt, fonkel dan verder! opnieuw... en opnieuw... en opnieuw... }

Schema's

Toont elektrische aansluitingen met behulp van breadboard Toont bedradingsverbindingen zonder te solderen Volg de draden! Toont de kosten van elk item, de totale kosten en waar gekocht.

Productieproces

  1. Circuit met een schakelaar
  2. Vakantieverlichting
  3. Weefsel met lotion
  4. Toegang tot:12-poorts gigabit-switch met 4 SFP-poorten
  5. Temperatuur bewaken met Raspberry Pi
  6. Schakel/LED-paneel met Arduino voor FS2020
  7. C++ Switch Case Statement met VOORBEELD
  8. switch ... case in C (Switch Statement in C) met voorbeelden
  9. Java Switch-Case-verklaring met voorbeeld
  10. Het MEP National Network™ verbindt met minderheidsfabrikanten
  11. Licht dimmen met PWM met drukknop