Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Lámpara de matriz LED Hot Glue

Componentes y suministros

Tira de LED direccionables Digilent WS2812
IP60 (60 LED por metro, no resistente al agua, total 128 LED)
× 128
Arduino Nano R3
× 1
Mini regulador de voltaje convertidor reductor DC-DC 3A
× 1
Resistencia de 10k ohmios
× 1
Resistencia de 330 ohmios
× 1
Condensador 470 µF
Tipo de perfil bajo de 10 V
× 1
Potenciómetro deslizante de 10K lin 45 mm (longitud de carrera de 30 mm, por ejemplo:Bourns PTA3043 )
× 1
Botón pulsador pequeño
× 1
Interruptor basculante pequeño
× 1
Toma de corriente CC (versión de panel)
× 1
Barra de pegamento de 7 mm x 100 mm
× 64

Herramientas y máquinas necesarias

Impresora 3D (genérica)

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

Esta lámpara se basó en una lámpara similar llamada "Fiber Optic" LED Matrix de jbumstead. Usando OpenSCAD, el objetivo era reemplazar el LED RGB digital difuso de 12 mm utilizado en el diseño de jbumstead con tiras RGB WS2812B baratas y hacer que el contenedor para los LED y la electrónica sea lo más delgado posible, lo que permite el uso de barras de pegamento de 7 mm más baratas.

Impresión de la carcasa

La única parte que requiere soportes es "Hot Glue Matrix - Bottom.stl". Usé una altura de capa de 0,2 mm y un relleno del 15%. Descubrí que al aumentar el tamaño del orificio con un taladro de 19/64 "después de la impresión, era más fácil insertar las barras de pegamento en sus respectivos orificios.

Montaje de la sección de la lámpara

1. Corte las tiras de LED WS2812B en 16 tiras que contengan 8 LED cada una.

2. No puede conectar las tiras de LED juntas directamente en los formularios superior o inferior, ya que se colocan en cada formulario al revés. Pegue 8 tiras en una superficie plana con el centro de cada tira a 15 mm de su tira adyacente. Organice las tiras de modo que cada tira alternativa mire en la dirección opuesta.

Asegúrese de que DIN esté en la esquina superior izquierda. Conecte las tiras como se muestra arriba. Usé alambre envuelto en alambre, pero puedes usar cualquier alambre de cobre delgado y aislado. Una vez que esté cableado, agregue tres cables largos de múltiples hilos a GND, DIN y + 5V. Estos cables pasarán por un orificio y se unirán a GND, DOUT y + 5V de la sección inferior. Ahora pase los tres cables a través del orificio en el formulario "Matriz de pegamento caliente - Parte superior del soporte" y coloque con cuidado las tiras boca abajo en sus respectivos canales. Las tiras deben quedar planas. De lo contrario, compruebe que las tiras estén en la forma correcta. Solo van de una manera. También hay canales para los cables. Una vez que las tiras de LED estén en su lugar, use Blue Painters Tape para asegurarlas en su lugar.

3. Conecte la placa inferior de manera similar. DOUT está arriba a la derecha. Agregue los tres cables largos de múltiples hilos a VCC, DIN y GND antes de colocar las tiras al revés en el formulario. Estos cables irán a la PCB.

4. No conecte los cables de la sección superior todavía hasta que todas las barras de pegamento estén en su lugar.

Agregar las barras de pegamento

Esto requerirá algo de paciencia. En primer lugar, debe clasificar las barras de pegamento. Las barras de pegamento de 7 mm que obtiene de eBay miden alrededor de 100 m de largo. Descubrí que variaban un poco. El mío venía en paquetes de 30, así que tenía 90 palos para encontrar 64 de longitud similar. También necesitaba aumentar el tamaño del orificio con un taladro de 19/64 "después de la impresión para que encajen más fácilmente en los orificios.

También usé una pajita transparente para beber para colocar los tres cables que conectan las tiras superior e inferior.

Agregue las barras de pegamento una fila a la vez comenzando en un extremo y avanzando hasta el otro extremo. Una vez que estén todos en su lugar, mida la distancia entre la parte superior e inferior en cada esquina. Todos deben ser EXACTAMENTE iguales. De lo contrario, ajuste la profundidad de las barras de pegamento en consecuencia. Una vez que esté satisfecho con la alineación, retire las barras de pegamento de cada esquina y vuelva a colocarlas en su lugar con una pequeña cantidad de superpegamento. (No apliques superpegamento al LED). Esto debería hacer que la estructura sea bastante robusta.

Conecte las tiras superior e inferior

Levante con cuidado la tira inferior cerca del orificio, recorte los tres cables y suéldelos en su lugar. + 5V a + 5V, DIN (arriba) a DOUT (abajo), GND a GND.

Haciendo la PCB

He incluido los archivos Eagle si desea que la placa se fabrique comercialmente o haga lo mismo que yo y la haga usted mismo. Hice mi tablero usando el método del tóner. Puede usar una pieza de protoboard si lo desea, ya que el esquema es muy simplista y fácil de conectar. Los 4 orificios de montaje deben perforarse con un taladro de 2,5 mm y una rosca creada con un grifo de 3 mm. Utilice tornillos M3 de 6 mm para mantener la placa en su lugar.

IMPORTANTE:Configure la salida del regulador de CC a 5V ANTES de fijarlo a la placa.

Cableado final

Conecte el potenciómetro deslizante, el interruptor de empuje, el interruptor de encendido y la toma de corriente CC como se muestra a continuación:

Conecte los cables de las tiras de LED a la PCB.

Software

El software incluido ejecuta una serie de animaciones de prueba. El botón recorre las animaciones disponibles. El potenciómetro ajusta la velocidad de las animaciones.

Código

  • GlueMatrixTest.ino
  • Button.h
  • Button.cpp
GlueMatrixTest.ino C / C ++
 #include  #ifdef __AVR__ #include  # endif # include "Button.h" #define PIN_LED 2 # define PIN_SWITCH 3 # define PIN_POT A0 # define LEDS 128 // Parameter 1 =número de píxeles en la tira // Parámetro 2 =número de pin de Arduino (la mayoría son válidos) // Parámetro 3 =indicadores de tipo de píxel, agregue según sea necesario:// NEO_KHZ800 800 KHz bitstream (la mayoría de los productos NeoPixel con LED WS2812) / / NEO_KHZ400 400 KHz (píxeles FLORA clásicos 'v1' (no v2), controladores WS2811) // NEO_GRB Los píxeles están conectados para el flujo de bits GRB (la mayoría de los productos NeoPixel) // Los píxeles NEO_RGB están conectados para el flujo de bits RGB (píxeles FLORA v1, no v2) // NEO_RGBW Los píxeles están conectados para el flujo de bits RGBW (productos NeoPixel RGBW) Adafruit_NeoPixel strip =Adafruit_NeoPixel (LEDS, PIN_LED, NEO_GRB + NEO_KHZ800); Modo de botón =Botón (PIN_SWITCH); modo bool Pressed =falso; // Mapa físico de LED para la parte inferior y superior Matrices de LED // LED Inferior (Vista trasera desde arriba) // 063049048033032017016001 // 06305047034031018015002 // 062051046035030019014003 / / 0610520450360290200013004 // 060053044037028021012005 // 059054043038027022011006 // 058055042039026023010007 // 057056041044025024009008 / / (Vista frontal desde arriba) // LED Top (Vista trasera desde arriba) // 06608081096097 112113128 // 066079082095 098111114127 // 067078083094099110115126 // 068 077084093100 109116125 // 06907608509210108117124 // 077075086091102107118123 // 071074087090103106119122 // 072073088089 104105120121 // ( Frente mirando desde arriba) 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}; // Almacenamiento de valores actualesint red =128; int green =128; int blue =128; int pattern =1; // IMPORTANTE:Para reducir el riesgo de quemado de NeoPixel, agregue un capacitor de 1000 uF a través de // cables de alimentación de píxeles, agregue Resistencia de 300 - 500 ohmios en la entrada de datos del primer píxel // y minimiza la distancia entre Arduino y el primer píxel. Evite conectar // en un circuito en vivo ... si es necesario, conecte GND primero.void setup () {Serial.begin (115200); pinMode (PIN_LED, SALIDA); pinMode (INTERRUPTOR_PIN, ENTRADA); pinMode (PIN_POT, ENTRADA); // Pixel Strip Serial.println ("Configuración ()"); strip.begin (); strip.show (); // Inicializar todos los píxeles en 'off' // Devoluciones de llamada de botón //mode.Background(ButtonBackground); // Establecer ISR para el cambio de pin en el botón MODE pin ::PinChangeSetup (PIN_SWITCH);} void loop () {if (modePressed) {patrón =(patrón% 8) + 1; strip.clear (); } modePressed =falso; Serial.print ("Modo"); Serial.print (patrón, DEC); Serial.println (); cambiar (patrón) {caso 1:colorWipe (strip.Color (255, 0, 0)); descanso; // Caja roja 2:colorWipe (strip.Color (0, 255, 0)); descanso; // Caso verde 3:colorWipe (strip.Color (0, 0, 255)); descanso; // Caso azul 4:theaterChase (strip.Color (127, 127, 127)); descanso; // Caso blanco 5:arcoiris (); descanso; caso 6:rainbowDifference (); descanso; caso 7:ciclo arcoiris (); descanso; caso 8:rainbowCycleDifference (); descanso; caso 9:theaterChaseRainbow (); descanso; } if (! modePressed) {modePressed =mode.Pressed (); }} // Interrupción del botón de modo para salir de los bucles, etc. // PCINT1 maneja los cambios de pines para los pines de A0 a A5ISR (PCINT2_vect) {modePressed =modePressed | (mode.State () ==LOW);} void ButtonBackground (void) {} ​​// Rellena los puntos uno tras otro con un colorvoid colorWipe (uint32_t c) {int total =strip.numPixels () / 2; para (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 (); retraso (mapa (analogRead (PIN_POT), 0, 1024, 100, 0)); }} arco iris vacío () {int total =strip.numPixels () / 2; for (uint16_t j =0; j <256 &&! modePressed; j ++) {for (uint16_t i =0; i  
Button.h Archivo de encabezado C
 / * Class:ButtonAuthor:John Bradnam ([email protected]) Propósito:Biblioteca Arduino para manejar botones * / # 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:// Botón de constructor simple (pin int); // Se llama a la función en segundo plano cuando se está en un bucle de espera o repetición void Background (void (* pBackgroundFunction) ()); // Función de repetición llamada cuando se presiona el botón void Repeat (void (* pRepeatFunction) ()); // Prueba si se presiona y suelta el botón // Llamará a la función de repetición si se proporciona una bool Pressed (); // Estado del botón de retorno (HIGH o LOW) - LOW =Pressed int State (); // Configuración de interrupción de cambio de pin // ISR (PCINT0_vect) interrupción de cambio de pin para D8 a D13 // ISR (PCINT1_vect) interrupción de cambio de pin para A0 a A5 // ISR (PCINT2_vect) interrupción de cambio de pin para D0 a D7 vacío estático PinChangeSetup (byte alfiler); privado:int _pin; void (* _repeatCallback) (vacío); void (* _backgroundCallback) (vacío);}; 
Button.cpp C / C ++
 #include "Button.h" Button ::Button (pin int) {_pin =pin; pinMode (_pin, INPUT);} // Establecer la función para invocar en un retraso o repetir loopvoid Button ::Background (void (* pBackgroundFunction) ()) {_backgroundCallback =pBackgroundFunction;} // Establecer la función para invocar si el sistema lo requiere ::Repetir (void (* pRepeatFunction) ()) {_repeatCallback =pRepeatFunction;} Botón vacío estático ::PinChangeSetup (byte pin) {* digitalPinToPCMSK (pin) | =bit (digitalPinToPCMSKbit (pin)); // habilitar pin PCIFR | =bit (digitalPinToPCICRbit (pin)); // borra cualquier interrupción pendiente PCICR | =bit (digitalPinToPCICRbit (pin)); // habilitar interrupción para el grupo} // Prueba si se presiona y suelta un botón // devuelve verdadero si se presionó y soltó el botón // si se repite la devolución de llamada, la devolución de llamada se invoca mientras se presiona la tecla bool Botón ::Presionado ( ) {bool presionado =falso; if (digitalRead (_pin) ==LOW) {espera larga sin firmar =millis () + DEBOUNCE_DELAY; while (millis ()  =tiempo) {_repeatCallback (); sin firmar mucho más rápido =velocidad - REPEAT_INCREASE_SPEED; if (más rápido> =REPEAT_MAX_SPEED) {velocidad =más rápido; } tiempo =milis () + velocidad; }} presionado =verdadero; }} volver presionado;} // Devuelve el estado actual del botón Button ::State () {return digitalRead (_pin);} 

Piezas y carcasas personalizadas

Archivos STL para impresión 3D stl_files_vSNeOCJWDn.zip

Esquemas

Esquema y PCB en formato Eagle eagle_files_D8oAM5ngf5.zip

Proceso de manufactura

  1. Lámpara halógena
  2. Pegamento
  3. Perro caliente
  4. Lámpara de lava
  5. Globo aerostático
  6. Súper pegamento
  7. Matriz LED + Pantalla de puerta con sensor de movimiento [Arduino Holiday]
  8. Iluminación LED de 8x por sonido
  9. Arduino Cuadrúpedo
  10. Control de matriz LED 8x8 sin controladores ni bibliotecas
  11. Materiales para comunicaciones de datos basadas en LED de próxima generación