Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Lampe de bureau réactive audio Arduino

Composants et fournitures

Arduino Nano R3
× 1
module de son
× 1
Planche à pain (générique)
× 1
Câbles de raccordement (générique)
× 1
Led adressable
× 1
Ikea DROPPAR Jar
× 1
Une petite longueur de tuyau en PVC
× 1

Outils et machines nécessaires

Fer à souder (générique)

Applications et services en ligne

Arduino IDE

À propos de ce projet

BONJOUR LE MONDE !!

Salut! Dans cette version, nous allons créer une belle lumière qui danse sur tous les sons et toutes les musiques, en utilisant des composants simples et quelques éléments de base Arduino la programmation. Cela fait un effet impressionnant lorsque vous vous tenez debout sur le bureau lorsque vous jouez, jouez de la musique et tout ce qui fait vraiment du son. Allons-y !

C'est un projet que je suis basé sur le "Natural Nerd" du youtuber qu'ils ont fait. Ceci est ma version du projet. Tout le mérite leur revient et un grand bravo à eux pour m'avoir fourni les détails sur la façon de faire le projet.

Lien Youtube

ÉTAPE 1 :FOURNITURES PRINCIPALES

Tout d'abord :de quel type de fournitures avons-nous besoin et combien coûtent-elles ? Eh bien, ils sont en grande partie facultatifs et peuvent être réalisés avec beaucoup d'improvisation. Néanmoins, certains éléments clés sont nécessaires si vous souhaitez suivre ce guide :

  • Arduino Nano (ou tout autre type Arduino tout aussi petit) (lien d'achat RM 12,50)
  • Module de détection de son (lien d'achat de 5,90 RM)
  • alimentation 5 volts (ou 12 volts avec le module Stepdown)
  • Individuellement LED adressable bandes 60 leds par. compteur (lien d'achat)

Selon le look que vous souhaitez, vous pouvez disposer les bandes différemment ou diffuser la lumière d'une autre manière. C'est là que vous pouvez être créatif. Si vous aimez mon approche, j'ai utilisé les éléments suivants :

  • Le plus grand pot IKEA Droppar (Lien IKEA)
  • Une petite longueur detuyau PVC.
  • Panneau de mousse
  • Pistolet à colle chaude

Tout bien considéré, j'ai dépensé environ 83,30 RM selon le magasin où vous allez acheter les articles, où les bandes LED étaient de loin la partie la plus chère qui m'a coûté 40 RM pour seulement 1 mètre.

ÉTAPE 2 :ALIMENTATION DES COMPOSANTS

L'alimentation du composant sera une méthode simple. J'utilise simplement le câble USB de l'Arduino Nano et je le branche directement sur le PC. Si vous utilisez une alimentation externe telle qu'une source d'alimentation CA vers CC, vous aurez besoin d'un module abaisseur pour vous aider à réduire le flux de courant vers votre circuit. Sinon, si vous ne l'utilisez pas, vous risquez fort de graver l'Arduino, y compris les composants connectés.

La vedette du spectacle est le module détecteur de son. Cela fournira un signal analogique à l'Arduino, que nous pourrons utiliser pour (espérons-le) allumer intelligemment les lumières RVB. Pour pouvoir le faire, nous devons alimenter les deux appareils. Heureusement, ils nécessitent tous les deux une entrée de 5 volts. J'utilise un module abaisseur pour passer de 12 volts à 5 volts, mais il serait plus facile d'utiliser directement une source d'alimentation de 5 volts. Câblez le VIN sur l'Arduino et sur la carte du détecteur de son à l'entrée positive. Ensuite, câblez le GND sur l'Arduino et le détecteur au négatif. Regardez les fils noir et rouge sur le schéma ci-joint. Nous devons également raccorder les entrées positive et négative de la bande LED à la source d'alimentation.

ÉTAPE 3 :DÉTECTEUR ET BANDES

Après avoir connecté les trois parties à l'alimentation, nous devons les connecter les unes aux autres.

Le module détecteur de son communiquera avec l'Arduino via les broches d'entrée analogique. J'utiliserai le numéro de broche 0 dans ce cas.

Les bandes LED ont besoin d'une impulsion numérique pour pouvoir comprendre à quelle LED nous voulons nous adresser. Par conséquent, nous devons connecter une broche de sortie numérique à l'Arduino nano. J'utiliserai la broche numéro 6.

Utilisez le tube rétractable sur la zone de choix afin que le câble ne se heurte pas plus tard dans un espace restreint.

Suivez simplement le schéma que j'ai fourni ici et tout ira bien !

Génial, maintenant nous en avons surtout fini avec l'électronique !

ÉTAPE 4 : TÉLÉCHARGER LE CODE

La partie la plus importante de cette construction sera sans doute le code. Cela peut changer cette construction d'assez cool à incroyablement génial. Vous pouvez utiliser le code que j'ai fourni avec ce projet. Le principe principal consiste à mapper la valeur analogique que nous obtenons du capteur à une quantité de LED à afficher.

ÉTAPE 5 :PRÉPARATION DU BOÎTIER

J'ai d'abord pensé que le couvercle était en acrylique, après avoir acheté le pot et réalisé que ce n'était pas un acrylique mais un verre. Je dois donc réajuster mon plan en fabriquant un couvercle facile à enfoncer et à monter l'Arduino et la led. Je choisis donc le carton mousse.

Première étape , je dois couper le panneau de mousse en le faisant exactement circulaire et en ayant le même diamètre que le couvercle en verre du pot. Je n'ai pas les outils de mesure de diamètre appropriés, alors j'improvise la méthode en utilisant un marqueur humide et marque le diamètre du verre et le tamponne sur un morceau de papier. Après cela, je colle le papier sur le carton mousse et le carton en suivant le bord du cercle sur le papier. Ce n'est pas parfait mais il devrait être assez bon pour contenir tous les composants Arduino et led.

Deuxième étape , j'ai besoin de casser le verre sur le couvercle du bocal. ATTENTION ! veuillez couvrir le pot avec un sac en plastique épais pour éviter que le verre ne se disperse dans la pièce et le faire dans l'espace ouvert. Conscient de votre environnement. Après avoir cassé le verre, assurez-vous que tout le verre collé à la fissure latérale du couvercle du pot doit être retiré. Ceci afin d'éviter que vous ou une autre personne ne vous blessiez en vous coupant sur le verre coincé.

Troisième étape , placez le panneau de mousse en forme de cercle au centre du couvercle du bocal. Assurez-vous que la mousse est bien serrée et pas trop lâche pour qu'elle s'adapte parfaitement au pot.

Quatrième étape, Je viens de réaliser que je dois changer la mise en page de ce projet. Je voudrais faire en sorte que l'utilisateur puisse accéder facilement aux composants Arduino en cas de panne. J'ai donc décidé d'utiliser la mini planche à pain et je l'ai placée au centre du couvercle. Non seulement cela, j'ai coupé deux trous pour le câble du module de son que je placerai au bas du couvercle du pot pour aller à l'intérieur du pot et sur la planche à pain et un autre trou pour que l'Arduino se connecte avec le câble USB pour agir comme alimentation électrique du circuit.

Cinquième étape , je marque le tuyau en pvc avec du ruban adhésif et trace la ligne au centre du ruban. Ensuite, je l'ai scotché sur le tuyau en pvc. Le marquage est l'indicateur pour moi de couper le tuyau en PVC uniformément et d'essayer d'avoir une coupe nette.

Après avoir mesuré la longueur de pvc que j'ai besoin d'utiliser, je l'ai coupé soigneusement en suivant la marque que j'ai fournie. La longueur du tuyau en pvc dépend de la hauteur de votre pot. Vous pouvez utiliser n'importe quelle longueur que vous désirez.

Sixième étape , je déforme le tuyau en PVC que j'ai coupé avec la bande LED autour et le rend légèrement incliné et en spirale vers le haut du PVC. Je m'assure de créer un petit trou pour que la longueur de câble en excès soit cachée à l'intérieur du bocal en PVC pour la gestion des câbles. Je dois ensuite trouver un moyen de placer le PVC sur la planche à pain. En utilisant un pistolet à colle chaude ou du ruban adhésif double face, j'ai pu coller le tuyau en PVC sur le panneau de mousse supplémentaire, puis le coller sur la zone inutilisée de la planche à pain. Au cours de cette étape, j'ai pu connecter une partie du composant à la maquette.

Utilisez le schéma fourni pour connecter tous les composants.

(La zone gauche de la maquette sera le positif et la zone droite de la maquette sera le négatif. `

Septième étape, j'ai placé le module sonore à l'extérieur du couvercle du bocal. Ceci est fait exprès pour la facilité du module de choisir le son à l'extérieur du pot plus tard. Après avoir placé le module, connectez-le avec un câble et faites-le correspondre comme indiqué dans le schéma de principe donné. Ensuite, connectez tout le câble avec le capteur et Arduino à la planche à pain. L'Arduino étant configuré verticalement afin que le câble d'alimentation du circuit puisse se connecter facilement à la carte Arduino via la carte en mousse.

Et ainsi, je termine le projet. Je prends un certain temps avec l'essai et l'erreur mais j'ai réussi à le terminer.

Code

  • Codage pour l'Arduino
Codage pour l'ArduinoArduino
Ce code permettra à la LED de réagir au son détecté par le module de son.
#include /** CONFIGURATION DE BASE **///Le nombre de LED dans la configuration#define NUM_LEDS 60 //La broche qui contrôle les LED#define LED_PIN 6//La broche que nous lisons les valeurs des capteurs forment#define ANALOG_READ 0//Confirmé la valeur basse du microphone et la valeur max#define MIC_LOW 0.0#define MIC_HIGH 200.0/** Autres macros * ///Combien de valeurs de capteur précédentes affectent la moyenne de fonctionnement ?#define AVGLEN 5//Combien de valeurs de capteur précédentes décident si nous sommes sur un pic/HIGH (par exemple dans une chanson)#define LONG_SECTOR 20//Mneumonics#define HIGH 3 #define NORMAL 2//Combien de temps gardons-nous le son "moyenne actuelle", avant de redémarrer la mesure#define MSECS 30 * 1000#define CYCLES MSECS / DELAY/*Parfois les lectures sont fausses ou étranges. De combien une lecture peut-elle s'écarter de la moyenne pour ne pas être rejetée ? **/#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 visualize_music();//Combien de LED afficherint curshow =NUM_LEDS;/*Pas encore vraiment utilisé. Pensé pour pouvoir basculer entre le mode réactif du son et le gradient général de couleur pulsée/statique*/mode int =0 ;//Affichage de différentes couleurs en fonction du mode.int songmode =NORMAL ;//Mesure sonore moyenne le dernier CYCLESunsigned long song_avg ; //Le nombre d'itérations depuis que le song_avg a été réinitialisé. iter =0 ;//La vitesse à laquelle les LED s'estompent au noir si ce n'est pas le cas. les valeurs d'entrée. Nous utilisons la moyenne courte au lieu d'utiliser directement l'entrée du capteur , et combien de temps nous atteignons un certain modestruct time_keeping { unsigned long times_start; short times;}; // De combien incrémenter ou décrémenter chaque couleur chaque cyclestruct color { int r; entier g; int b;};struct time_keeping élevé;struct color Couleur; void setup() { Serial.begin(9600); //Définir toutes les lumières pour s'assurer que toutes fonctionnent comme prévu FastLED.addLeds(leds, NUM_LEDS); pour (int i =0; i  (song_avg/iter * 1.1)) { if (high.times !=0) { if (millis() - high.times_start> 200.0) { high.times =0; mode chanson =NORMAL ; } else { high.times_start =millis(); haute.fois++ ; } } else { high.time++; high.times_start =millis(); } } if (high.times> 30 &&millis() - high.times_start <50.0) songmode =HIGH; else if (millis() - high.times_start> 200) { high.times =0; mode chanson =NORMAL ; }}//Fonction principale pour visualiser les sons dans le lampvoid visualize_music() { int sensor_value, mapped, avg, longavg; //Valeur réelle du capteur sensor_value =analogRead(ANALOG_READ); //Si 0, défaussez immédiatement. Probablement pas correct et économisez le CPU. if (sensor_value ==0) return ; //Rejeter les lectures qui s'écartent trop de la moyenne passée. mappé =(float)fscale(MIC_LOW, MIC_HIGH, MIC_LOW, (float)MIC_HIGH, (float)sensor_value, 2.0); moy =calculate_average (moyenne, AVGLEN); if (((moy - mappé)> moy*DEV_THRESH)) //|| ((moy - mappé) <-avg*DEV_THRESH)) return ; //Insérer un nouveau moy. valeurs insert(mappé, moy, AVGLEN); insert(moy, long_moy, LONG_SECTOR); //Calculez la valeur du capteur "moyenne de la chanson" song_avg +=avg; iter++; if (iter> CYCLES) { song_avg =song_avg / iter; iter =1 ; } longavg =compute_average(long_avg, LONG_SECTOR); //Vérifiez si nous entrons en mode HIGH check_high(longavg); if (songmode ==HIGH) { fade_scale =3; Couleur.r =5; Couleur.g =3 ; Couleur.b =-1 ; } else if (songmode ==NORMAL) { fade_scale =2; Couleur.r =-1; Couleur.b =2 ; Couleur.g =1 ; } //Décide combien de LED seront allumées curshow =fscale(MIC_LOW, MIC_HIGH, 0.0, (float)NUM_LEDS, (float)avg, -1); /*Régler les différentes leds. Contrôle des valeurs trop élevées et trop basses. Chose amusante à essayer :Ne comptez pas le débordement dans une direction, des effets de lumière intéressants apparaissent ! */ for (int i =0; i  255) leds[i]. r =255 ; sinon si (leds[i].r + Color.r <0) leds[i].r =0; sinon leds[i].r =leds[i].r + Couleur.r; si (leds[i].g + Color.g> 255) leds[i].g =255 ; sinon si (leds[i].g + Color.g <0) leds[i].g =0 ; sinon leds[i].g =leds[i].g + Color.g; si (leds[i].b + Color.b> 255) leds[i].b =255 ; sinon si (leds[i].b + Color.b <0) leds[i].b =0 ; sinon leds[i].b =leds[i].b + Couleur.b; // Toutes les autres LED commencent leur voyage vers l'obscurité totale } else { leds[i] =CRGB(leds[i].r/fade_scale, leds[i].g/fade_scale, leds[i].b/fade_scale ); } FastLED.show(); }//Calculer la moyenne d'un tableau int, étant donné le pointeur de départ et le lengthint compute_average(int *avgs, int len) { int sum =0; for (int i =0; i  10) courbe =10; si (courbe <-10) courbe =-10; courbe =(courbe * -.1); // - inverser et mettre à l'échelle - cela semble plus intuitif - les nombres positifs donnent plus de poids au haut de gamme sur la courbe de sortie =pow(10, courbe); // convertir l'échelle linéaire en exposant lograthimique pour une autre fonction pow // Vérifier les valeurs d'entrée hors plage if (inputValue  originalMax) { inputValue =originalMax; } // Zéro Référence les valeurs OriginalRange =originalMax - originalMin; if (newEnd> newBegin){ NewRange =newEnd - newBegin; } else { NewRange =newBegin - newEnd; invFlag =1 ; } zeroRefCurVal =inputValue - originalMin; normalizedCurVal =zeroRefCurVal / OriginalRange ; // normaliser à 0 - 1 float // Vérifier originalMin> originalMax - le calcul pour tous les autres cas, c'est-à-dire les nombres négatifs, semble fonctionner correctement if (originalMin> originalMax ) { return 0; } if (invFlag ==0){ rangedValue =(pow(normalizedCurVal, curve) * NewRange) + newBegin; } else // inverse les plages { rangedValue =newBegin - (pow(normalizedCurVal, curve) * NewRange); } return rangedValue;}

Schémas


Processus de fabrication

  1. Détecteur de langage TinyML basé sur Edge Impulse et Arduino
  2. Jeu de gyroscope Arduino avec MPU-6050
  3. Dés numériques Arduino
  4. Iron Man
  5. Trouvez-moi
  6. Lire l'audio dans Arduino
  7. Contrôle de l'humidificateur Arduino
  8. Sonar utilisant arduino et affichage lors du traitement de l'IDE
  9. MobBob :Robot Arduino DIY contrôlé par smartphone Android