Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Arduino Audio Reactive Desk Light

Komponenten und Verbrauchsmaterialien

Arduino Nano R3
× 1
Soundmodul
× 1
Breadboard (generisch)
× 1
Jumper (generisch)
× 1
Adressierbare LED
× 1
Ikea DROPPAR Glas
× 1
Ein kleines Stück PVC-Rohr
× 1

Notwendige Werkzeuge und Maschinen

Lötkolben (generisch)

Apps und Onlinedienste

Arduino-IDE

Über dieses Projekt

HALLO WELT!!

Hallo! In diesem Build machen wir ein gut aussehendes Licht, das zu allen Klängen und Musik tanzt, mit einfachen Komponenten und einigen grundlegenden Arduino Programmierung. Es macht einen fantastischen Effekt, wenn man auf dem Schreibtisch steht, wenn man spielt, Musik spielt und alles andere, was wirklich Sound macht. Los geht's!

Dies ist ein Projekt, das ich basierend auf dem "Natural Nerd" des Youtubers verfolge, den sie gemacht haben. Dies ist meine Version des Projekts. Alle Ehre gebührt ihnen und ein großes Dankeschön an sie, dass sie mir die Details zur Durchführung des Projekts zur Verfügung stellen.

Youtube-Link

SCHRITT 1:HAUPTVERSORGUNGEN

Das Wichtigste zuerst:Welche Materialien benötigen wir und was kosten sie? Nun, sie sind weitgehend optional und können mit viel Improvisation erstellt werden. Trotzdem sind einige Schlüsselelemente erforderlich, wenn Sie dieser Anleitung folgen möchten:

  • Arduino Nano (oder ein ähnlich kleiner Arduino-Typ) (RM 12.50 Kauflink)
  • Sound-Detektor-Modul (RM 5.90 Kauflink)
  • 5 Volt Netzteil (oder 12 Volt mit Stepdown-Modul)
  • Individuell Adressierbare LED Streifen 60 LEDs pro. Zähler (Kauflink)

Je nach gewünschtem Look möchten Sie die Streifen vielleicht anders anordnen oder das Licht auf andere Weise streuen. Hier können Sie kreativ sein. Wenn Ihnen mein Ansatz gefällt, habe ich die folgenden Elemente verwendet:

  • Das höchste IKEA Droppar-Glas (IKEA-Link)
  • Ein kleines StückPVC-Rohr.
  • Schaumstoffplatte
  • Heißklebepistole

Alles in allem habe ich etwa 83,30 RM ausgegeben, je nachdem, in welchem ​​Geschäft Sie die Artikel kaufen, wobei die LED-Streifen mit Abstand das teuerste Teil waren, das mich 40 RM für nur 1 Meter kostete.

SCHRITT 2:STROMVERSORGUNG DER KOMPONENTEN

Die Stromversorgung der Komponente ist eine unkomplizierte Methode. Ich verwende nur das USB-Kabel des Arduino Nano und schließe es direkt an den PC an. Wenn Sie eine externe Stromversorgung wie eine Wechselstrom-zu-Gleichstromquelle verwenden, benötigen Sie ein Abwärtsmodul, um den Stromfluss zu Ihrem Stromkreis zu reduzieren. Andernfalls, wenn Sie es nicht verwenden, besteht möglicherweise eine sehr hohe Chance, das Arduino einschließlich der angeschlossenen Komponenten zu verbrennen.

Der Star der Show ist das Sound-Detektor-Modul. Dadurch wird dem Arduino ein analoges Signal zur Verfügung gestellt, mit dem wir (hoffentlich) die RGB-Lichter geschickt beleuchten können. Dazu müssen wir beide Geräte mit Strom versorgen. Zum Glück benötigen beide einen 5-Volt-Eingang. Ich verwende ein Step-Down-Modul, um von 12 Volt auf 5 Volt zu reduzieren, aber es wäre einfacher, eine 5-Volt-Stromquelle direkt zu verwenden. Verdrahten Sie die VIN auf dem Arduino und auf der Sounddetektorplatine mit dem positiven Eingang. Dann verdrahten Sie den GND am Arduino und den Detektor zum Minus. Schauen Sie sich die schwarzen und roten Drähte im beigefügten Schaltplan an. Wir müssen auch den positiven und negativen Eingang des LED-Streifens an die Stromquelle anschließen.

SCHRITT 3:DETEKTOR &STREIFEN

Nachdem wir alle drei Teile an das Stromnetz angeschlossen haben, müssen wir sie miteinander verbinden.

Das Sounddetektormodul kommuniziert mit dem Arduino über die analogen Eingangspins. Ich werde in diesem Fall Pin Nummer 0 verwenden.

Die LED-Streifen benötigen einen digitalen Impuls, um zu verstehen, welche LED wir ansprechen wollen. Daher müssen wir einen digitalen Ausgangspin mit dem Arduino nano verbinden. Ich werde Pin Nummer 6 verwenden.

Verwenden Sie den Schrumpfschlauch an der ausgewählten Stelle, damit die Kabel später nicht auf engstem Raum miteinander kollidieren.

Folgen Sie einfach dem Schaltplan, den ich hier bereitgestellt habe, und es wird Ihnen gut gehen!

Genial, jetzt sind wir größtenteils mit der Elektronik fertig!

SCHRITT 4:DEN CODE HOCHLADEN

Der wichtigste Teil dieses Builds wird wohl der Code sein. Es kann diesen Build von ziemlich cool zu wahnsinnig großartig machen. Sie können den Code verwenden, den ich zusammen mit diesem Projekt bereitgestellt habe. Das Hauptprinzip besteht darin, den Analogwert, den wir vom Sensor erhalten, auf eine Anzahl von anzuzeigenden LEDs abzubilden.

SCHRITT 5:VORBEREITEN DES GEHÄUSES

Zuerst dachte ich, der Deckel sei aus Acryl, nachdem ich die Dose gekauft habe und festgestellt habe, dass es sich nicht um Acryl, sondern um ein Glas handelt. Also muss ich meinen Plan neu anpassen, indem ich eine Abdeckung mache, die einfach zu stecken und das Arduino und die LED zu montieren. Also wähle ich die Schaumstoffplatte.

Erster Schritt , ich muss die Schaumstoffplatte genau kreisförmig schneiden und den gleichen Durchmesser wie die Glasabdeckung des Glases haben. Ich habe nicht die richtigen Werkzeuge zum Messen des Durchmessers, also improvisiere ich die Methode, indem ich einen nassen Marker verwende und den Durchmesser des Glases markiere und auf ein Stück Papier stempele. Danach klebe ich das Papier auf die Schaumstoffplatte und die Platte, indem ich der Kante des Kreises auf dem Papier folge. Es ist nicht perfekt, aber es sollte gut genug sein, um alle Arduino- und LED-Komponenten aufzunehmen.

Zweiter Schritt , ich muss das Glas auf dem Glasdeckel zerbrechen. ACHTUNG! Bitte bedecke das Glas mit einer dicken Plastiktüte um zu verhindern, dass das Glas im Raum verstreut wird, und tun Sie dies auf der offenen Fläche. Bewusst mit deiner Umgebung. Stellen Sie nach dem Zerbrechen des Glases sicher, dass das gesamte Glas, das am seitlichen Riss des Glasdeckels haftet, entfernt wird. Dies soll verhindern, dass Sie oder andere sich verletzen, wenn sie sich selbst in das festsitzende Glas schneiden.

Dritter Schritt , legen Sie die kreisförmige Schaumstoffplatte in die Mitte des Glasdeckels. Stellen Sie sicher, dass der Schaum fest und nicht zu locker ist, damit er gut in das Glas passt.

Vierter Schritt Mir ist nur klar, dass ich das Layout dieses Projekts ändern muss. Ich möchte, dass der Benutzer im Fehlerfall leicht auf die Arduino-Komponenten zugreifen kann. Also entschied ich mich für das Mini-Steckbrett und platzierte es in der Mitte des Deckels. Nicht nur das, ich schneide zwei Löcher für das Kabel vom Soundmodul, das ich unten am Glasdeckel platziere, um in das Glas und auf das Steckbrett zu gehen, und ein weiteres Loch für das Arduino, um es mit dem USB-Kabel zu verbinden als Stromversorgung für die Schaltung.

Fünfter Schritt , markiere ich das PVC-Rohr mit Kreppband und zeichne die Linie in der Mitte des Bandes. Dann klebe ich es auf das PVC-Rohr. Die Markierungen sind der Indikator für mich, das PVC-Rohr gleichmäßig zu schneiden und einen sauberen Schnitt zu erzielen.

Nachdem ich die Länge des PVCs gemessen habe, das ich verwenden muss, schneide ich es sorgfältig, indem ich der Markierung folge, die ich bereitgestellt habe. Die Länge des PVC-Rohrs hängt von Ihrer Glashöhe ab. Sie können jede gewünschte Länge verwenden.

Sechster Schritt , ich verwinde das PVC-Rohr, das ich mit dem LED-Streifen herum geschnitten habe, und mache es leicht schräg und gehe spiralförmig zur Oberseite des PVCs. Ich stelle sicher, dass ich ein kleines Loch für die überschüssige Kabellänge schaffe, um sie für das Kabelmanagement im PVC-Glas zu verstecken. Ich muss dann einen Weg finden, das PVC auf das Steckbrett zu stellen. Mit der Heißklebepistole oder dem doppelseitigen Klebeband kann ich das PVC-Rohr auf die zusätzliche Schaumstoffplatte kleben und dann auf die ungenutzte Fläche am Steckbrett kleben. Während dieses Schritts kann ich einen Teil der Komponente mit dem Steckbrett verbinden.

Verwenden Sie das mitgelieferte schematische Diagramm, um alle Komponenten anzuschließen.

(Der linke Bereich des Steckbretts ist der positive und der rechte Bereich des Steckbretts ist der negative. `

Im siebten Schritt habe ich das Soundmodul an der Außenseite des Glasdeckels platziert. Dies geschieht absichtlich, damit das Modul den Ton später außerhalb des Glases leichter aufnehmen kann. Nachdem Sie das Modul platziert haben, verbinden Sie es mit dem Kabel und passen Sie es gemäß dem angegebenen Schaltplan an. Verbinden Sie dann das gesamte Kabel mit dem Sensor und Arduino mit dem Steckbrett. Der Arduino wird vertikal aufgestellt, so dass das Kabel zum Einschalten des Stromkreises leicht durch die Schaumstoffplatte mit dem Arduino-Board verbunden werden kann.

Und damit schließe ich das Projekt ab. Ich brauche eine Weile plus mit dem Ausprobieren, aber ich habe es geschafft, es abzuschließen.

Code

  • Codierung für den Arduino
Codierung für den ArduinoArduino
Mit diesem Code kann die LED auf den vom Soundmodul erkannten Ton reagieren.
#include /** GRUNDKONFIGURATION **///Die Anzahl der LEDs im Setup#define NUM_LEDS 60 //Der Pin, der die LEDs steuert#define LED_PIN 6//Der Pin, den wir Sensorwerte auslesen#define ANALOG_READ 0//Bestätigter Mikrofon-Niedrigwert und Maximalwert#define MIC_LOW 0.0#define MIC_HIGH 200.0/** Andere Makros * ///Wie viele vorherige Sensorwerte beeinflussen den Betriebsmittelwert?#define AVGLEN 5//Wie viele vorherige Sensorwerte entscheiden, ob wir auf einem Peak/HIGH sind (zB in einem Song)#define LONG_SECTOR 20//Mneumonics#define HIGH 3 #define NORMAL 2//Wie lange halten wir den "aktuellen Durchschnitt"-Ton, bevor die Messung neu gestartet wird#define MSECS 30 * 1000#define CYCLES MSECS / DELAY/*Manchmal sind die Messwerte falsch oder seltsam. Wie viel darf ein Messwert vom Durchschnitt abweichen, um nicht verworfen zu werden? **/#define DEV_THRESH 0.8//Arduino loop delay#define DELAY 1float fscale( float originalMin, float originalMax, float newBegin, float newEnd, float inputValue, float curve);void insert(int val, int *avgs, int len);int compute_average(int *avgs, int len);void visual_music();//Wie viele LEDs wir anzeigenint curshow =NUM_LEDS;/*Noch nicht wirklich verwendet. Denke, zwischen Sound-Reaktionsmodus und allgemeinem Gradientenpulsing / statischer Farbe wechseln zu können*/int mode =0; // Anzeigen verschiedener Farben basierend auf dem mode.int songmode =NORMAL; // Durchschnittliche Klangmessung der letzten CYCLESunsigned long song_avg; // Die Anzahl der Iterationen seit dem Song_avg resetint iter =0; // Die Geschwindigkeit, mit der die LEDs zu schwarz verblassen, wenn nicht relitfloat fade_scale =1.2; // Led arrayCRGB leds [NUM_LEDS]; / * Short sound avg verwendet zum "Normalisieren" die Eingabewerte. Wir verwenden den kurzen Durchschnitt, anstatt den Sensoreingang direkt zu verwenden */int avgs[AVGLEN] ={-1};//Längerer Sound avgint long_avg[LONG_SECTOR] ={-1};//Wie oft verfolgen , und wie lange wir einen bestimmten Modus erreichen time_keeping { unsigned long times_start; kurze Zeiten;}; // Wie viel jede Farbe inkrementiert oder dekrementiert wird jeder Cyclestruct color { int r; intg; int b;};struct time_keeping high;struct color Farbe; Void setup () { Serial.begin (9600); // Stellen Sie alle Lichter ein, um sicherzustellen, dass alle wie erwartet funktionieren FastLED.addLeds(leds, NUM_LEDS); für (int i =0; i  (song_avg/iter * 1.1)) { if (high.times !=0) { if (millis() - high.times_start> 200.0) { high.times =0; Songmode =NORMAL; aufrechtzuerhalten. Sonst { high.times_start =millis (); hoch.x++; } } else { high.times++; high.times_start =millis(); } } if (high.times> 30 &&millis() - high.times_start <50.0) songmode =HIGH; sonst if (millis() - high.times_start> 200) { high.times =0; Songmode =NORMAL; }} // Hauptfunktion zur Visualisierung der Klänge im Lampvoid visual_music() { int sensor_value, mapped, avg, longavg; // Tatsächlicher Sensorwert sensor_value =analogRead (ANALOG_READ); //Wenn 0, sofort verwerfen. Wahrscheinlich nicht richtig und CPU sparen. if (sensor_value ==0) zurück; // Messwerte verwerfen, die zu stark vom letzten Durchschnitt abweichen. gemappt =(float)fscale(MIC_LOW, MIC_HIGH, MIC_LOW, (float)MIC_HIGH, (float)sensor_value, 2.0); avg =compute_average (avgs, AVGLEN); if (((avg - mapped)> avg*DEV_THRESH)) //|| ((avg - mapped) <-avg*DEV_THRESH)) zurück; //Neuen Durchschnitt einfügen. Werte einfügen (zugeordnet, avgs, AVGLEN); insert(avg, long_avg, LONG_SECTOR); // Berechnen Sie den Sensorwert "Song Average" song_avg +=avg; iter++; if (iter> CYCLES) { song_avg =song_avg / iter; iter =1; } longavg =compute_average (long_avg, LONG_SECTOR); // Überprüfen Sie, ob wir in den HIGH-Modus wechseln check_high (longavg); if (songmode ==HIGH) {fade_scale =3; Farbe.r =5; Farbe.g =3; Farbe.b =-1; aufrechtzuerhalten. Sonst if (Songmode ==NORMAL) {fade_scale =2; Farbe.r =-1; Farbe.b =2; Farbe.g =1; } // Entscheidet, wie viele der LEDs leuchten curshow =fscale (MIC_LOW, MIC_HIGH, 0.0, (float)NUM_LEDS, (float)avg, -1); /*Setze die verschiedenen LEDs. Kontrolle auf zu hohe und zu niedrige Werte. Lustige Sache zum Ausprobieren:Berücksichtigen Sie nicht den Überlauf in eine Richtung, es erscheinen einige interessante Lichteffekte! */ for (int i =0; i  255) leds[i]. r =255; else if (leds[i].r + Color.r <0) leds[i].r =0; sonst leds[i].r =leds[i].r + Farbe.r; if (leds[i].g + Color.g> 255) leds[i].g =255; else if (leds[i].g + Color.g <0) leds[i].g =0; else leds[i].g =leds[i].g + Color.g; if (leds[i].b + Color.b> 255) leds[i].b =255; else if (leds[i].b + Color.b <0) leds[i].b =0; sonst leds[i].b =leds[i].b + Farbe.b; // Alle anderen LEDs beginnen ihre verblassende Reise bis zur endgültigen Dunkelheit} else {leds[i] =CRGB(leds[i].r/fade_scale, leds[i].g/fade_scale, leds[i].b/fade_scale ); } FastLED.show(); } // Durchschnitt eines int-Arrays berechnen, gegeben den Startzeiger und die Längeint compute_average(int *avgs, int len) { int sum =0; for (int i =0; i  10) Kurve =10; if (Kurve <-10) Kurve =-10; Kurve =(Kurve * -.1); // - invertieren und skalieren - das scheint intuitiver zu sein - positive Zahlen geben dem oberen Ende der Ausgabekurve mehr Gewicht =pow(10, curve); // lineare Skala in lograthmischen Exponenten für andere pow-Funktion umwandeln // Auf Werte außerhalb des Bereichs prüfen if (inputValue  originalMax) { inputValue =originalMax; } // Null Referenz auf die Werte OriginalRange =originalMax - originalMin; if (newEnd> newBegin){ NewRange =newEnd - newBegin; } else { NewRange =newBegin - newEnd; invFlag =1; } zeroRefCurVal =inputValue - originalMin; normalizedCurVal =zeroRefCurVal / OriginalRange; // Normalisieren auf 0 - 1 float // Prüfe auf originalMin> originalMax - die Mathematik für alle anderen Fälle, d.h. negative Zahlen scheinen gut zu funktionieren if (originalMin> originalMax ) { return 0; } if (invFlag ==0){ rangedValue =(pow(normalizedCurVal, curve) * NewRange) + newBegin; aufrechtzuerhalten. Sonst // invertieren Sie die Bereiche { rangedValue =newBegin - (pow(normalizedCurVal, curve) * NewRange); } return rangedValue;}

Schaltpläne


Herstellungsprozess

  1. TinyML-Spracherkennung basierend auf Edge Impulse &Arduino
  2. Arduino-Gyroskop-Spiel mit MPU-6050
  3. Arduino Digital Dice
  4. Iron Man
  5. Finde mich
  6. Audio in Arduino abspielen
  7. Arduino-Befeuchtersteuerung
  8. Sonar mit Arduino und Anzeige bei der Verarbeitung von IDE
  9. MobBob:DIY-Arduino-Roboter, der von einem Android-Smartphone gesteuert wird
  10. NeoMatrix Arduino Pong