Hot Glue LED Matrix Lamp
Componenten en benodigdheden
| × | 128 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 64 |
Benodigde gereedschappen en machines
|
Apps en online services
|
Over dit project
Deze lamp was gebaseerd op een soortgelijke lamp genaamd "Fiber Optic" LED Matrix van jbumstead. Met behulp van OpenSCAD was het doel om de 12 mm Diffused Digital RGB LED die in het ontwerp van jbumstead werd gebruikt te vervangen door goedkope WS2812B RGB-strips en om de container voor de LED's en elektronica zo dun mogelijk te maken, waardoor goedkopere 7 mm-lijmsticks konden worden gebruikt.
De behuizing afdrukken
Het enige onderdeel dat ondersteuning nodig heeft, is "Hot Glue Matrix - Bottom.stl". Ik gebruikte een laaghoogte van 0,2 mm en een vulling van 15%. Ik ontdekte dat door het vergroten van de gatgrootte met een 19/64" boor na het printen, het gemakkelijker werd om de lijmstiften in hun respectievelijke gaten te steken.
De lampsectie monteren
1. Snijd de WS2812B LED-strips in 16 strips met elk 8 LED's.
2. U kunt de LED-strips niet rechtstreeks op de bovenste of onderste formulieren met elkaar verbinden, omdat ze ondersteboven op elke vorm worden geplaatst. Plak 8 stroken op een plat oppervlak met het midden van elke strook op 15 mm van de aangrenzende strook. Schik de stroken zo dat elke alternatieve strook in de tegenovergestelde richting wijst.
Zorg ervoor dat DIN in de linkerbovenhoek staat. Bedraad de strips zoals hierboven weergegeven. Ik heb wire-wrap draad gebruikt, maar je kunt elke dunne geïsoleerde koperdraad gebruiken. Als het eenmaal is bedraad, voegt u drie lange meeraderige draden toe aan GND, DIN en +5V. Deze draden gaan door een gat en komen samen met GND, DOUT en +5V van het onderste gedeelte. Voer nu de drie draden door het gat op het formulier "Hot Glue Matrix - Holder Top" en plaats de strips voorzichtig ondersteboven in hun respectieve kanalen. De strips moeten plat zitten. Als dit niet het geval is, controleer dan of de strips op de juiste manier zijn geplaatst. Ze gaan maar op één manier. Er zijn ook kanalen voor de draden. Zodra de LED-strips op hun plaats zitten, gebruikt u Blue Painters Tape om ze op hun plaats te bevestigen.
3. Bedraad de bodemplaat op dezelfde manier. DOUT staat rechtsboven. Voeg de drie lange meeraderige draden toe aan VCC, DIN en GND voordat u de strips ondersteboven op het formulier plaatst. Deze draden gaan naar de printplaat.
4. Sluit de draden van het bovenste gedeelte nog niet aan totdat alle lijmstiften op hun plaats zitten.
De lijmstiften toevoegen
Dit zal wat geduld vergen. Eerst moet je de lijmstiften sorteren. De 7 mm-lijmsticks die je van eBay krijgt, zijn ongeveer 100 meter lang. Ik vond dat ze een beetje varieerden. De mijne kwam in verpakkingen van 30, dus ik had 90 sticks om 64 van vergelijkbare lengte te vinden. Ook moest ik de gatgrootte vergroten met een 19/64" boor na het printen om ze gemakkelijker in de gaten te laten passen.
Ik heb ook een doorzichtig rietje gebruikt om de drie draden te plaatsen die de bovenste en onderste strips met elkaar verbinden.
Voeg de lijmstiften rij voor rij toe, beginnend aan het ene uiteinde en werkend naar het andere uiteinde. Zodra ze allemaal op hun plaats zitten, meet u de afstand tussen de boven- en onderkant op elke hoek. Ze zouden allemaal PRECIES hetzelfde moeten zijn. Zo niet, pas dan de diepte van de lijmstiften dienovereenkomstig aan. Als u tevreden bent met de uitlijning, verwijdert u de lijmsticks uit elke hoek en plaatst u ze terug op hun plaats met een kleine hoeveelheid superlijm. (Krijg geen superlijm op de LED). Dit zou de structuur behoorlijk robuust moeten maken.
Verbind de bovenste en onderste strips
Til voorzichtig de onderste strip bij het gat op, knip de drie draden af en soldeer ze op hun plaats. +5V tot +5V, DIN (boven) tot DOUT (onder), GND tot GND.
De printplaat maken
Ik heb de Eagle-bestanden bijgevoegd als u het bord commercieel wilt laten maken of wilt doen zoals ik deed en het zelf wilt maken. Ik heb mijn bord gemaakt met behulp van de tonermethode. Je kunt gewoon een stuk protobord gebruiken als je dat wilt, want het schema is erg simplistisch en gemakkelijk aan te sluiten. De 4 montagegaten moeten worden uitgeboord met een boor van 2,5 mm en een schroefdraad gemaakt met een tap van 3 mm. Gebruik 6 mm M3-schroeven om het bord op zijn plaats te houden.
BELANGRIJK:Stel de uitgang van de DC-regelaar in op 5V ALVORENS deze op het bord te bevestigen.
Laatste bedrading
Sluit de schuifpotentiometer, drukschakelaar, aan/uit-schakelaar en gelijkstroomcontactdoos aan zoals hieronder getoond:
Sluit de draden van de LED-strips aan op de print.
Software
De meegeleverde software voert een reeks testanimaties uit. De knop bladert door de beschikbare animaties. De potentiometer past de snelheid van de animaties aan.
Code
- GlueMatrixTest.ino
- Knop.h
- Knop.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// Parameter 1 =aantal pixels in strip// Parameter 2 =Arduino-pinnummer (de meeste zijn geldig)// Parameter 3 =pixeltype vlaggen, optellen indien nodig:// NEO_KHZ800 800 KHz bitstream (de meeste NeoPixel-producten met WS2812 LED's)/ / NEO_KHZ400 400 KHz (klassiek 'v1' (niet v2) FLORA-pixels, WS2811-stuurprogramma's)// NEO_GRB Pixels zijn bedraad voor GRB-bitstream (de meeste NeoPixel-producten)// NEO_RGB Pixels zijn bedraad voor RGB-bitstream (v1 FLORA-pixels, niet v2) // NEO_RGBW-pixels zijn bedraad voor RGBW-bitstream (NeoPixel RGBW-producten) Adafruit_NeoPixel-strip =Adafruit_NeoPixel (LEDS, PIN_LED, NEO_GRB + NEO_KHZ800); Knopmodus =Knop (PIN_SWITCH); Bool-modus Ingedrukt =false boven;//Phys LED-arrays//LED Bodem (achterkant van boven)//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/ /(Voorzijde gezien vanaf boven)//LED Top (Achterzijde gezien vanaf boven)//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//( Voorkant van boven gezien)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};//Opslag voor huidige waardenint rood =128;int groen =128;int blauw =128;int patroon =1;// BELANGRIJK:Om het risico op doorbranden van NeoPixel te verminderen, voegt u 1000 uF condensator over// pixel voedingskabels toe 300 - 500 Ohm-weerstand op de gegevensinvoer van de eerste pixel // en minimaliseer de afstand tussen Arduino en de eerste pixel. Vermijd het aansluiten van // op een live circuit... als het moet, sluit dan GND aan first.void setup() { Serial.begin(115200); pinMode (PIN_LED, UITGANG); pinMode (PIN_SWITCH, INPUT); pinMode (PIN_POT, INPUT); //Pixel Strip Serial.println ("Setup()"); strip.begin(); strip.show(); // Initialiseer alle pixels op 'uit' // Button-callbacks //mode.Background (ButtonBackground); // Stel ISR in voor pinwijziging op MODE pin Button::PinChangeSetup (PIN_SWITCH);}void loop () {if (modePressed) {patroon =(patroon % 8) + 1; strip.clear(); } modePressed =false; Serial.print("Modus"); Serial.print (patroon, DEC); Serieel.println(); switch (patroon) { geval 1:colorWipe (strip.Color (255, 0, 0)); pauze; // Rood geval 2:colorWipe (strip.Color (0, 255, 0)); pauze; // Groen geval 3:colorWipe (strip.Color (0, 0, 255)); pauze; // Blauw geval 4:theaterChase (strip.Color (127, 127, 127)); pauze; // Witte kast 5:regenboog(); pauze; geval 6:regenboogDifference(); pauze; geval 7:regenboogCycle(); pauze; geval 8:rainbowCycleDifference(); pauze; geval 9:theaterChaseRainbow(); pauze; } if (!modePressed) { modePressed =mode.Pressed(); }}//Modusknoponderbreking om uit lussen te breken enz.//PCINT1 verwerkt pinwijzigingen voor pinnen voor A0 naar A5ISR (PCINT2_vect){ modePressed =modePressed | (mode.State() ==LAAG);}void ButtonBackground(void){}// Vul de puntjes een voor een met een 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(); vertraging (kaart (analoog lezen (PIN_POT), 0, 1024, 100, 0)); }}void rainbow() { int total =strip.numPixels() / 2; for(uint16_t j=0; j <256 &&!modePressed; j++) { for(uint16_t i=0; i Button.hC Header-bestand
/*Class:ButtonAuthor:John Bradnam ([email protected])Doel:Arduino-bibliotheek om knoppen te verwerken*/#pragma eenmaal#include "Arduino.h"#define DEBOUNCE_DELAY 5//Herhaalsnelheid#define REPEAT_START_SPEED 500# definieer REPEAT_INCREASE_SPEED 50#define REPEAT_MAX_SPEED 50class Button {public://Simple constructor Button (int Pin); // Achtergrondfunctie aangeroepen wanneer in een wacht- of herhaallus void Background(void (*pBackgroundFunction)()); //Herhaalfunctie aangeroepen wanneer de knop wordt ingedrukt void Repeat (void (*pRepeatFunction)()); // Test of de knop wordt ingedrukt en losgelaten // Zal de herhaalfunctie aanroepen als er een is bool Pressed (); //Return-knopstatus (HOOG of LAAG) - LAAG =ingedrukt int State (); //Pin Change Interrupt Setup //ISR (PCINT0_vect) pin change interrupt voor D8 naar D13 //ISR (PCINT1_vect) pin change interrupt voor A0 naar A5 //ISR (PCINT2_vect) pin change interrupt voor D0 naar D7 statische leegte PinChangeSetup (byte pin); privé:int _pin; ongeldig (*_repeatCallback) (ongeldig); ongeldig (*_backgroundCallback)(void);};Knop.cppC/C++
#include "Button.h"Button::Button(int pin){ _pin =pin; pinMode(_pin, INPUT);}//Set functie om aan te roepen in een vertraagde of herhaalde loopvoid Button::Background(void (*pBackgroundFunction)()){ _backgroundCallback =pBackgroundFunction;}//Set functie om aan te roepen als herhaalsysteem nodig isvoid Button ::Repeat(void (*pRepeatFunction)()){ _repeatCallback =pRepeatFunction;}static void Button::PinChangeSetup(byte pin) { *digitalPinToPCMSK(pin) |=bit (digitalPinToPCMSKbit(pin)); // activeer pin PCIFR |=bit (digitalPinToPCICRbit (pin)); // wis alle openstaande interrupt PCICR |=bit (digitalPinToPCICRbit(pin)); ( ){ bool ingedrukt =false; if (digitalRead (_pin) ==LAAG) { unsigned long wait =millis () + DEBOUNCE_DELAY; while (millis()=tijd) { _repeatCallback(); niet ondertekend lang sneller =snelheid - REPEAT_INCREASE_SPEED; if (sneller>=REPEAT_MAX_SPEED) { snelheid =sneller; } tijd =millis() + snelheid; } } ingedrukt =waar; } } return ingedrukt;}//Return huidige knop stateint Button::State(){ return digitalRead(_pin);} Aangepaste onderdelen en behuizingen
STL-bestanden voor 3D-printen stl_files_vSNeOCJWDn.zipSchema's
Schema en PCB in Eagle-formaat eagle_files_D8oAM5ngf5.zip
Productieproces
- Halogeenlamp
- Lijm
- Hotdog
- Lavalamp
- Heteluchtballon
- Superlijm
- LED-matrix + bewegingssensor deurdisplay [Arduino Holiday]
- 8x LED-verlichting door geluid
- Arduino Quadruped
- Bedienen van 8x8 LED-matrix zonder drivers en bibliotheken
- Materialen voor op leds gebaseerde datacommunicatie van de volgende generatie