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 matricielle LED à colle chaude

Composants et fournitures

Ruban LED adressable Digilent WS2812
IP60 (60 LED par mètre, non étanche, 128 LED au total)
× 128
Arduino Nano R3
× 1
Mini régulateur de tension pour convertisseur DC-DC 3A
× 1
Résistance 10k ohm
× 1
Résistance 330 ohm
× 1
Condensateur 470 µF
Type à profil bas 10V
× 1
Potentomètre à curseur 10K lin 45mm (longueur de course 30mm par exemple :Bourns PTA3043 )
× 1
Petit bouton poussoir
× 1
Petit interrupteur à bascule
× 1
Prise d'alimentation CC (version panneau)
× 1
Bâton de colle 7mm x 100mm
× 64

Outils et machines nécessaires

Imprimante 3D (générique)

Applications et services en ligne

Arduino IDE

À propos de ce projet

Cette lampe était basée sur une lampe similaire appelée "Fiber Optic" LED Matrix par jbumstead. En utilisant OpenSCAD, l'objectif était de remplacer la LED RVB numérique diffuse de 12 mm utilisée dans la conception de jbumstead par des bandes RVB WS2812B bon marché et de rendre le conteneur pour les LED et l'électronique aussi fin que possible, ce qui permet d'utiliser des bâtons de colle de 7 mm moins chers.

Impression du boîtier

La seule partie qui nécessite des supports est "Hot Glue Matrix - Bottom.stl". J'ai utilisé une hauteur de couche de 0,2 mm et un remplissage de 15 %. J'ai trouvé qu'en augmentant la taille du trou à l'aide d'une perceuse 19/64" après l'impression, il était plus facile d'insérer les bâtons de colle dans leurs trous respectifs.

Assemblage de la section lampe

1. Coupez les bandes LED WS2812B en 16 bandes contenant chacune 8 LED.

2. Vous ne pouvez pas câbler les bandes LED ensemble directement sur les formulaires du haut ou du bas car elles sont placées à l'envers sur chaque formulaire. Collez 8 bandes sur une surface plane avec le centre de chaque bande à 15 mm de sa bande adjacente. Disposez les bandes de manière à ce que chaque bande alternative soit orientée dans la direction opposée.

Assurez-vous que DIN est dans le coin supérieur gauche. Câblez les bandes comme indiqué ci-dessus. J'ai utilisé du fil enroulé, mais vous pouvez utiliser n'importe quel fil de cuivre mince isolé. Une fois qu'il est câblé, ajoutez trois longs fils multibrins à GND, DIN et +5V. Ces fils passeront par un trou et se joindront à GND, DOUT et +5V de la section inférieure. Passez maintenant les trois fils à travers le trou sur le formulaire "Matrice de colle chaude - Haut du support" et placez soigneusement les bandes à l'envers dans leurs canaux respectifs. Les bandes doivent reposer à plat. Sinon, vérifiez que les bandes sont dans le bon sens. Ils ne vont que dans un sens. Il y a aussi des canaux pour les fils. Une fois les bandes LED en place, utilisez du Blue Painters Tape pour les fixer en place.

3. Câblez la plaque inférieure de la même manière. DOUT est en haut à droite. Ajoutez les trois longs fils multibrins à VCC, DIN et GND avant de placer les bandes à l'envers sur le formulaire. Ces fils iront au PCB.

4. Ne connectez pas encore les fils de la section supérieure tant que tous les bâtons de colle ne sont pas en place.

Ajout des bâtons de colle

Cela demandera un peu de patience. Tout d'abord, vous devez trier les bâtons de colle. Les bâtons de colle de 7 mm que vous obtenez sur eBay mesurent environ 100 m de long. J'ai trouvé qu'ils variaient un peu. Le mien est venu en paquets de 30, j'ai donc eu 90 bâtons pour en trouver 64 de longueur similaire. De plus, j'avais besoin d'augmenter la taille des trous à l'aide d'une perceuse 19/64" après l'impression pour les rendre plus faciles à insérer dans les trous.

J'ai également utilisé une paille transparente pour placer les trois fils qui relient les bandes supérieure et inférieure ensemble.

Ajoutez les bâtons de colle une rangée à la fois en commençant par une extrémité et en progressant jusqu'à l'autre extrémité. Une fois qu'ils sont tous en place, mesurez la distance entre le haut et le bas à chaque coin. Ils devraient tous être EXACTEMENT les mêmes. Sinon, ajustez la profondeur des bâtons de colle en conséquence. Une fois que vous êtes satisfait de l'alignement, retirez les bâtons de colle de chaque coin et remettez-les en place avec une petite quantité de super colle. (Ne pas mettre de super colle sur la LED). Cela devrait rendre la structure assez robuste.

Connectez les bandes supérieure et inférieure

Soulevez délicatement la bande inférieure près du trou, coupez les trois fils et soudez-les en place. +5V à +5V, DIN (en haut) à DOUT (en bas), GND à GND.

Faire le PCB

J'ai inclus les fichiers Eagle si vous souhaitez faire fabriquer la planche dans le commerce ou faire comme moi et la fabriquer vous-même. J'ai fait ma planche en utilisant la méthode du toner. Vous pouvez simplement utiliser un morceau de carte proto si vous le souhaitez car le schéma est très simpliste et facile à câbler. Les 4 trous de montage doivent être percés avec une perceuse de 2,5 mm et un filetage créé avec un taraud de 3 mm. Utilisez des vis M3 de 6 mm pour maintenir la carte en place.

IMPORTANT :Réglez la sortie du régulateur CC sur 5 V AVANT de le fixer à la carte.

Câblage final

Câblez le potentiomètre à glissière, l'interrupteur poussoir, l'interrupteur d'alimentation et la prise d'alimentation CC comme indiqué ci-dessous :

Connectez les fils des bandes LED au PCB.

Logiciel

Le logiciel inclus exécute une série d'animations de test. Le bouton fait défiler les animations disponibles. Le potentiomètre règle la vitesse des animations.

Code

  • GlueMatrixTest.ino
  • Bouton.h
  • Bouton.cpp
GlueMatrixTest.inoC/C++
#include #ifdef __AVR__ #include #endif#include "Button.h"#define PIN_LED 2#define PIN_SWITCH 3#define PIN_POT A0#define LEDS 128// Paramètre 1 =nombre de pixels dans la bande // Paramètre 2 =numéro de broche Arduino (la plupart sont valides) // Paramètre 3 =drapeaux de type de pixel, additionnés au besoin:// NEO_KHZ800 800 KHz bitstream (la plupart des produits NeoPixel avec LED WS2812)/ / NEO_KHZ400 400 KHz (pixels FLORA classiques 'v1' (pas v2), pilotes WS2811)// Les pixels NEO_GRB sont câblés pour le flux binaire GRB (la plupart des produits NeoPixel)// Les pixels NEO_RGB sont câblés pour le flux binaire RVB (pixels FLORA v1, pas v2) // Les pixels NEO_RGBW sont câblés pour le flux de bits RGBW (produits NeoPixel RGBW) Bande Adafruit_NeoPixel =Adafruit_NeoPixel (LEDS, PIN_LED, NEO_GRB + NEO_KHZ800); Mode bouton =Bouton (PIN_SWITCH); Mode boolAppuyé =faux ; // Carte LED physique supérieure pour le bas et le haut Réseaux de LED//LED Bottom (regardé par le haut)//064 049 048 033 032 017 016 001//063 050 047 034 031 018 015 002//062 051 046 035 030 019 014 003/ /061 052 045 036 029 020 013 004//060 053 044 037 028 021 012 005//059 054 043 038 027 022 011 006//058 055 042 039 026 023 010 007//057 056 041 040 025 024 009 008/ /(Regardant de face depuis le haut)//LED Haut (Regardant vers l'arrière depuis le haut)//065 080 081 096 097 112 113 128//066 079 082 095 098 111 114 127//067 078 083 094 099 110 115 126//068 077 084 093 100 109 116 125//069 076 085 092 101 108 117 124//070 075 086 091 102 107 118 123//071 074 087 090 103 106 119 122//072 073 088 089 104 105 120 121//( Vue de face depuis le haut)const uint8_t botLED[] PROGMEM ={ 64,49,48,33,32,17,16,1, 63,50,47,34,31,18,15,2, 62,51,46 ,35,30,19,14,3, 61,52,45,36,29,20,13,4, 60,53,44,37,28,21,12,5, 59,54,43,38 ,27,22,11,6, 58,55,42,39,26,23,10,7, 57,56,41,40,25,24,9,8,};const uint8_t topLED[] PROGMEM ={ 65,80,81,96,97,112,113,128, 66,79,82,95,98,111,114,127, 67,78,83,94,99,110,115,126, 68,77,84,93,100,109,116,125, 69,76,85,92,101,108,117,124, 70,75 86,91,102,107,118,123, 71,74,87,90,103,106,119,122, 72,73,88,89,104,105,120,1 21};//Stockage pour les valeurs actuellesint rouge =128;int vert =128;int bleu =128;int pattern =1;// IMPORTANT :pour réduire le risque d'épuisement du NeoPixel, ajoutez un condensateur de 1 000 uF entre les câbles d'alimentation // du pixel, ajoutez Résistance de 300 à 500 ohms sur l'entrée de données du premier pixel // et minimise la distance entre Arduino et le premier pixel. Évitez de vous connecter // sur un circuit sous tension... si vous le devez, connectez GND first.void setup() { Serial.begin (115200); pinMode(PIN_LED, SORTIE); pinMode(PIN_SWITCH, INPUT); pinMode(PIN_POT, ENTREE); //Série de bande de pixels.println("Setup()"); strip.begin(); strip.show(); // Initialiser tous les pixels sur 'off' //Rappels de boutons //mode.Background(ButtonBackground); //Définir l'ISR pour le changement de broche sur la broche MODE Button::PinChangeSetup(PIN_SWITCH);}void loop() { if (modePressed) { pattern =(motif % 8) + 1; strip.clear(); } modePressed =false; Serial.print("Mode "); Serial.print(motif, DEC); Serial.println(); switch (motif) { cas 1 :colorWipe(strip.Color(255, 0, 0)); Pause; // Cas rouge 2 :colorWipe(strip.Color(0, 255, 0)); Pause; // Cas vert 3 :colorWipe(strip.Color(0, 0, 255)); Pause; // Cas bleu 4:TheaterChase(strip.Color(127, 127, 127)); Pause; // Case blanche 5 :arc-en-ciel(); Pause; cas 6 :rainbowDifference(); Pause; cas 7 : arc-en-ciel(); Pause; cas 8 :arc-en-cielCycleDifference(); Pause; cas 9 :théâtreChaseRainbow(); Pause; } if (!modePressed) { modePressed =mode.Pressed(); }}//Interruption du bouton Mode pour sortir des boucles etc//PCINT1 gère les changements de broches pour les broches de A0 à A5ISR (PCINT2_vect){ modePressed =modePressed | (mode.State() ==LOW);}void ButtonBackground(void){}// Remplissez les points les uns après les autres avec un colorvoid colorWipe(uint32_t c) { int total =strip.numPixels() / 2; for(uint16_t i=0; i  0 &&!modePressed; i--) { uint8_t botIndex =pgm_read_byte(&botLED[i]) - 1; strip.setPixelColor(botIndex, 0); uint8_t topIndex =pgm_read_byte(&topLED[i]) - 1; strip.setPixelColor(topIndex, 0); strip.show(); delay(map(analogRead(PIN_POT), 0, 1024, 100, 0)); }}arc-en-ciel vide() { int total =strip.numPixels() / 2; for(uint16_t j=0; j <256 &&!modePressed; j++) { for(uint16_t i=0; i  
Button.hFichier d'en-tête C
/*Class :ButtonAuthor :John Bradnam ([email protected])Objectif :Bibliothèque Arduino pour gérer les boutons*/#pragma once#include "Arduino.h"#define DEBOUNCE_DELAY 5//Repeat speed#define REPEAT_START_SPEED 500# define REPEAT_INCREASE_SPEED 50#define REPEAT_MAX_SPEED 50class Button{ public://Simple constructeur Button(int Pin); //Fonction d'arrière-plan appelée dans une boucle d'attente ou de répétition void Background(void (*pBackgroundFunction)()); //Fonction de répétition appelée lorsque le bouton est enfoncé void Repeat(void (*pRepeatFunction)()); //Teste si le bouton est enfoncé et relâché //Appelle la fonction de répétition si elle est fournie bool Pressed(); // Retour de l'état du bouton (HIGH ou LOW) - LOW =Pressed int State(); //Configuration de l'interruption de changement de broche //Interruption de changement de broche ISR (PCINT0_vect) pour D8 à D13 //Interruption de changement de broche ISR (PCINT1_vect) pour A0 à A5 //Interruption de changement de broche ISR (PCINT2_vect) pour D0 à D7 statique vide PinChangeSetup (octet épingler); privé :int _pin ; void (*_repeatCallback)(void); void (*_backgroundCallback)(void);};
Bouton.cppC/C++
#include "Button.h"Button::Button(int pin){ _pin =pin; pinMode(_pin, INPUT);}//Définir la fonction à invoquer dans un délai ou répéter loopvoid Button::Background(void (*pBackgroundFunction)()){ _backgroundCallback =pBackgroundFunction;}//Définir la fonction à invoquer si le système de répétition est requisvoid Button ::Repeat(void (*pRepeatFunction)()){ _repeatCallback =pRepeatFunction;}static void Button::PinChangeSetup(byte pin) { *digitalPinToPCMSK(pin) |=bit (digitalPinToPCMSKbit(pin)); // activer la broche PCIFR |=bit (digitalPinToPCICRbit(pin)); // efface toute interruption en attente PCICR |=bit (digitalPinToPCICRbit(pin)); // active l'interruption pour le groupe }//Teste si un bouton est enfoncé et relâché// renvoie vrai si le bouton a été enfoncé et relâché// si un rappel répété est fourni, le rappel est appelé pendant que la touche est enfoncéebool Button::Pressed( ){ bool pressé =faux ; if (digitalRead(_pin) ==LOW) { longue attente non signée =millis() + DEBOUNCE_DELAY; while (millis() =heure) { _repeatCallback(); non signé longtemps plus rapide =vitesse - REPEAT_INCREASE_SPEED ; if (plus rapide>=REPEAT_MAX_SPEED) { vitesse =plus rapide ; } temps =millis() + vitesse ; } } enfoncé =vrai; } } return pressé;}//Retour à l'état actuel du bouton Button::State(){ return digitalRead(_pin);}

Pièces et boîtiers personnalisés

Fichiers STL pour l'impression 3D stl_files_vSNeOCJWDn.zip

Schémas

Schéma et PCB au format Eagle eagle_files_D8oAM5ngf5.zip

Processus de fabrication

  1. lampe halogène
  2. Colle
  3. Hot Dog
  4. Lampe à lave
  5. Montgolfière
  6. Super colle
  7. Affichage de porte à matrice LED + détecteur de mouvement [Arduino Holiday]
  8. 8x éclairage LED par le son
  9. Matériaux pour les communications de données à base de LED de nouvelle génération