DIY Kaleidoscoop Oneindige Spiegel – Bouw een Indrukwekkende LED-lichtdisplay
Onderdelen en benodigdheden
| Onderdeel | Aantal | Opmerkingen |
|---|---|---|
| Arduino 101 | 1 | Met ingebouwde accelerometer |
| 1m Adresseerbare LED-strip (60 LEDs/m) | 1 | SparkFun-versie is handig bedraad, Adafruit NeoPixels werken ook |
| Kort stuk massieve draad of header-pinnen | 1 | Om gedraaide draad Arduino-compatibel te maken |
| Krimpkous | 1 | Optioneel, voor nette afwerking |
| Barrel jack female connector met schroefklemmen | 1 | |
| Barrel jack male connector met schroefklemmen | 1 | |
| 3x AA-batterijhouder met schakelaar | 1 | |
| Pololu Spanningsopvoer-regelaar (step-up) | 1 | Laat het hele project van één batterijpakket draaien. Alternatief: 9V-batterij voor Arduino + 3x AA voor LEDs |
| AA-batterijen | 1 set | |
| 12" vierkante "shadow box" lijst | 1 | Diepte en formaat zijn perfect |
| 12" vierkante spiegel | 1 | Past in de achterkant van de lijst |
| 11" foto-ezel | 1 | Om het eindresultaat te tonen |
| Gespiegeld privacy-folie (getint) | 1 | Optioneel – verbetert het effect aanzienlijk, maar niet strikt nodig |
| Foamcore (3/16" of 1/4") | 1 | Wit of zwart. Genoeg voor één 12"x12" stuk + een strip van 1m lang, 0,5" breed |
Benodigde tools en machines
- Solderbout
- Stanleymes met scherp mes
- Lijmpistool
- Kabelstripper
Software en online diensten
- Arduino IDE - Je hebt de Adafruit NeoPixel-bibliotheek nodig. Installatie-instructies. Voor de Arduino 101 heb je ook de Curie Core nodig voor toegang tot de positie-sensoren. Meer info.
Over dit project
Een kruising tussen een kaleidoscoop en een oneindige spiegel! Wanneer je de spiegel roteert, veranderen de lichten als reactie. Dit project is gebouwd met een kant-en-klare spiegel en lijst, plus enkele elektronische componenten. De Arduino 101 ontwikkelbord heeft ingebouwde positie-sensing die we gebruiken om de hoek te meten en de lichtweergave te sturen.
Let op: Dit project gebruikt dezelfde elektronica-opstelling als de Holiday Shadow Theater, basisgewijs een Arduino 101, een LED-strip en een batterijpakket. Ik gebruik een $4 spanningsregelaar zodat hetzelfde batterijpakket zowel de LEDs als de Arduino 101 kan voeden. Alternatief kun je een 9V-batterij voor de Arduino gebruiken en de regelaar weglaten.
Deel 1: De spiegel bouwen
Stap 1
Knip met een scherp stanleymes of hobby-mes een 12" x 12" vierkant uit foamcore en markeer het midden met een potlood. Je kunt de achterkant van de lijst als referentie gebruiken.
Stap 2
Teken met een cirkeltrekker of een touw en potlood een perfecte cirkel met een straal van 5,25" gecentreerd in het 12x12 vierkant. Je kunt een liniaal gebruiken om een markering op 0,75" van de rand van het 12x12 te zetten als startpunt.
Stap 3
Knip de cirkel zorgvuldig uit met een stanleymes of hobby-mes met een nieuw mes. Deze snede is zichtbaar in het eindproduct, dus snij zo schoon mogelijk.
Stap 4
Zodat het gat is uitgeknip, kies de mooiste kant en leg deze met de mooie kant naar beneden op een schone werkvlak.
Stap 5
Knip een aparte ½-inch strip foamcore, ongeveer 36" lang. Dit kan uit kortere segmenten samengezet worden met tape. Houd de breedte zo uniform mogelijk op 0,5".
Stap 6
Leg de voltooide strip horizontaal op een tafel en knip elke 2" over de totale lengte gelijkmatige verticale insneden door het bovenste papierlaagje.
Stap 7
Keer de strip om en lijm met de lijmpistool de LED-string langs de lengte van de foamcore-strip.
Stap 8
Buig de voltooide strip in een grove cirkel met behulp van de insneden die je in de achterkant van de foamcore maakte als buigpunten.
Stap 9
Leg de LED-strip in een ring over het gat in je 12x12" foamcore-vierkant. De volledige LED-strip is te lang. Maak je LED-cirkel net iets groter dan het gat en knip de overbodige LEDs eraf (ongeveer 6 LEDs). Je kunt deze reserve-LEDs later voor een ander project gebruiken.
Stap 10
Plaats de LED-strip in een ring op het bovenste oppervlak (slechte kant) van je 12x12" vierkant en lijm deze vast net aan de rand van het cirkelgat. Zorg dat de achterkant van de LED-ring minimaal 0,25" van de rand van het 12x12" vierkant afstaat. (Anders passen de zwarte kunststof afstandshouders van de lijst er niet omheen.)
Stap 11
Als je de half-spiegelende folie gebruikt, haal dan het glas uit je shadowbox-lijst en plak de folie op het glas volgens de instructies van de fabrikant. Ik vond dit de meest lastige stap. Maak het glas eerst schoon en gebruik water (of zeepoplossing) om luchtbellen gemakkelijker te verwijderen. De spiegel-folie creëert een veel sterkere illusie en verbergt de LEDs, maar is niet 100% noodzakelijk (en je kunt het later nog toevoegen!). Als je folie gebruikt, plaats het glas terug in de lijst met de folie-kant naar boven/naar binnen.
Stap 12
Met de lijst naar beneden en het glas schoon, positioneer de foamcore op het glas, met de mooie kant naar beneden en de LED-ring naar boven. Voeg twee van de afstandshouders toe die bij de lijst kwamen, en leg daarna je 12x12" spiegel met het gezicht naar beneden. De LED-draden moeten aan de achterkant van de lijst voorbij de spiegel uitkomen. Als de spiegel te strak zit voor de draden, moet je misschien een kleine uitkeping voor de draden in de lijstrand knippen met een stanleymes.
Als er ruimte is, voeg dan de karton achterkant van de lijst toe, of houd de spiegel op zijn plaats met de klampjes van de lijst. Dat is klaar! Nu de magie van de elektronica.
Deel 2: De elektronica instellen
Stap 1
Zoek de extra 6 LEDs die je eerder afknipte. Haal de aansluiting van het uiteinde, knip ongeveer 1 cm van de lichten af. Strip de draadeinden.
Stap 2
Haal de gebogen header-pinnen die bij je spanningsregelaar zaten los, en soldeer er twee aan de einden van de groene en gele draad. Hiermee kun je ze gemakkelijk in de pinnen van de Arduino 101 steken.
Stap 3
Soldeer nu de rode draad aan de VIN-klem van de spanningsregelaar, en soldeer twee rechte headers in de GND en VOUT-pinnen zoals getoond.
Stap 4
Sluit nu de barrel-jack adapters aan. Strip eerst de einden van de draden van je batterijhouder, en monteur ze in de klemmen van de male barrel jack. Draai ze vast met een schroevendraaier. ROOD gaat naar de (+) klem, ZWART naar de (-) klem.
Sluit daarna de female barrel jack adapter aan op de losse draden die vanaf het begin van de LED-strip komen (van de achterkant van je spiegel). Op deze strip gaat GEEL naar de (-) klem, en ROOD naar de (+).
Stap 5
Sluit nu je kabelboom aan op de Arduino 101. De GROENE draad gaat naar PIN 6, de GELE draad gaat naar de GND-pin bij #13.
Met de twee header-pinnen op de spanningsregelaar: GND gaat naar GND en VOUT gaat naar de "Vin"-pin op de Arduino 101. Doe dit niet verkeerd! Omgekeerd aansluiten leidt tot rook en brandschade. Ik weet het.
Stap 6
Verbinder de kabelbomen op de Arduino 101 en de LED-strip met elkaar, sluit dan de batterijpakket-barrel-jack aan op de barrel-jack van de LED-strip en je bent volledig bedraad!
Stap 7
Nu je elektronica klaar is, positioneer de Arduino 101 op de achterkant van de spiegel met de oriëntatie parallel aan een willekeurige zijde van de spiegel. Bevestig het met Klettband, dubbelzijdig tape of lijmpistool. Monteer het batterijpakket in de buurt en bevestig losse draden met tape of lijm.
Upload de voorbeeldcode met een computer, een USB-kabel en de Arduino IDE. Alternatief kun je de voorbeeldcode openen, bewerken en uploaden via de web-gebaseerde Arduino IDE.
Probeer het uit!
De voorbeeldcode verandert de kleuren van de LEDs op basis van de hoek van de spiegel, zoals gelezen vanuit de accelerometer op de Intel Curie Compute Module. Op dit moment zorgt één positie ervoor dat alle lichten uitgaan, en een andere hoek creëert een "chasing light"-effect met de laatst gebruikte kleur. Duik gerust in de code en maak geweldige licht-effecten! De uitstekende Adafruit NeoPixel Uberguide is een geweldige plek om te beginnen.
BELANGRIJK! Als je deze spiegel permanent wilt installeren, kun je een netvoeding gebruiken in plaats van het batterijpakket, maar zorg dat deze 3,5V - 5V levert! Een hogere spanning (zoals een 9V blokbatterij) kan de LED-strip overbelasten.
Code
Arduino 100 Oneindige Spiegel Sketch
/* Copyright (c) 2016 Intel Corporation. Alle rechten voorbehouden. Zie licentiekennisgeving aan het einde van het bestand.
Arduino 100 "Oneindige Spiegel." De rotatiehoek van de Arduino 101 verandert de lichten in een Neopixel-strip.
Deze code gebruikt de Adafruit Neopixel-bibliotheek.
Bibliotheekinstallatie-instructies: https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-installation
Als je de desktop-versie van de Arduino IDE gebruikt, zorg dan dat je de nieuwste Intel Curie Core hebt geïnstalleerd.
Meer info: https://www.arduino.cc/en/Guide/Arduino101 */
#include "CurieIMU.h"
#include <Adafruit_NeoPixel.h>
#define PIN 6 //// welke pin zijn de NeoPixels aangesloten?
Adafruit_NeoPixel strip = Adafruit_NeoPixel(54, PIN, NEO_GRB + NEO_KHZ800);
/// de strip is 15 pixels lang. Je kunt dit aanpassen voor het aantal pixels in jouw strip.
int tr = 0; //Variabelen om "kleur-doel" en "kleur-huidig" te houden voor smoothing...
int tg = 0;
int tb = 0;
int r = 0;
int g = 0;
int b = 0;
int rawX = 0; ///// om waarden van Curie's accelerometer te houden
int rawY = 0;
//int rawZ = 0;
float angle = 0.0;
void setup() {
//Serial.begin(9600); //voor debug.
CurieIMU.begin();
CurieIMU.setAccelerometerRange(2); // Stel accelerometer-bereik in op 2g.
strip.begin(); // initialiseer neopixel-strip
strip.show(); // Initialiseer alle pixels naar 'uit'
}
void loop() {
// lees accelerometer:
int rawX = CurieIMU.readAccelerometer(X_AXIS);
int rawY = CurieIMU.readAccelerometer(Y_AXIS);
int rawZ = CurieIMU.readAccelerometer(Z_AXIS);
angle = atan2(rawX, rawY); // de functie atan2() converteert x en y krachten naar een hoek in radialen. Cool! Output is -3.14 tot 3.14
if (abs(angle) > 2.5) { // digitale pennen zijn naar beneden
/// zet lichten uit in deze positie
tr = 0; tg = 0; tb = 0;
runlights();
}
if ((angle > 1.5) && (angle < 2.5)) { //maak lichten wit in deze positie (gelijke r, g en b.) Kleurwaarden kunnen tot 255, maar ik vind het helder genoeg op 100.
tr = 100; tg = 100; tb = 100;
runlights();
} else if ((angle < 1.5) && (angle > 0.5)) { //maak lichten rood in deze positie
tr = 100; tg = 0; tb = 0;
runlights();
} else if ((angle < 0.5) && (angle > -0.5)) { //maak lichten groen in deze positie
tr = 0; tg = 100; tb = 0;
runlights();
} else if ((angle < -1.5) && (angle > -2.5)) { //maak lichten blauw in deze positie
tr = 0; tg = 0; tb = 100;
runlights();
} else if ((angle < -0.5) && (angle > -1.5)) { //// één hoek kiezen voor iets leuks!
theaterChase(); /// deze functies staan onderaan de sketch.
//rainbowCycle(2);
} else { //// in geval van onverwachte hoek, zet lichten uit.
tr = 0; tg = 0; tb = 0;
runlights();
}
}
void runlights() {
/// kleur-smoothing. Huidige kleur beweegt naar doelkleur...
// Als doel meer is dan huidig, ga omhoog, als minder, ga naar beneden.
if (tr > r + 1) { r++; }
if (tg > g + 1) { g++; }
if (tb > b + 1) { b++; }
if (tr < r) { r--; }
if (tg < g) { g--; }
if (tb < b) { b--; }
// zet alle LEDs naar de huidige r, g, b waarden.
for (int i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, r, g, b);
}
strip.show();
delay(10); // tijdsvertraging voor simpele fade-timing.
}
///////////////Speciale lichtfuncties van Adafruit Strandtest Voorbeeldcode
// Regenboog! Let op - deze functie blokkeert nieuwe positie-inputs totdat hij klaar is.
void rainbowCycle(uint8_t wait) {
uint16_t i, j;
for(j=0; j<256*5; j++) { // 5 cycli van alle kleuren op het wiel
for(i=0; i< strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
}
strip.show();
delay(wait);
}
}
//////Theater Chase lichten van Adafruit strandtest voorbeeldcode. Neemt de huidige RGB-waarde en doet een "theater chase" effect ermee.
void theaterChase(){
for (int j = 0; j < 3; j++) { //3 cycli van chasing
for (int q = 0; q < 3; q++) {
for (uint16_t i = 0; i < strip.numPixels(); i = i + 3) {
strip.setPixelColor(i + q, r, g, b); //zet elke derde pixel aan
}
strip.show();
delay(50);
for (uint16_t i = 0; i < strip.numPixels(); i = i + 3) {
strip.setPixelColor(i + q, 0); //zet elke derde pixel uit
}
}
}
}
// Input een waarde 0 tot 255 om een kleurwaarde te krijgen. Gebruikt voor regenboog-effect hierboven.
// De kleuren zijn een overgang r - g - b - terug naar r.
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if(WheelPos < 85) {
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if(WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
////////////////////////////////////////////////////////////////////////////////////////////
/* Deze bibliotheek is vrije software; je kunt het herdistribueren en/of wijzigen onder de voorwaarden van de GNU Lesser General Public License zoals gepubliceerd door de Free Software Foundation; of versie 2.1 van de Licentie, of (naar keuze) een latere versie.
Deze bibliotheek wordt gedistribueerd in de hoop dat het nuttig zal zijn, maar ZONDER ENIGE GARANTIE; zelfs zonder de geïmpliceerde garantie van VERKOOPBAARHEID of GESCHIKTHEID VOOR EEN BEPAALD DOEL. Zie de GNU Lesser General Public License voor meer details.
Je zou een kopie van de GNU Lesser General Public License samen met deze bibliotheek moeten hebben ontvangen; zo niet, schrijf dan naar de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */
Productieproces
- De Kaleidoscoop: Van Brewsters Wetenschap tot Modern Ontwerp
- De Wetenschap en Vakmanschap van Moderne Spiegels
- Infinity Gears: 41-traps tandwielkast met 346 quintiljoen jaar rotatie
- Bluetooth-gecontroleerde Arduino Spybot bouwen
- FlickMote: Gebarengecontroleerde IR-afstandsbediening voor Slimme Huizen
- DIY Arduino TV-B-Gone: Universele TV-uit-schakelaar
- DIY Arduino Koelspiegel-hygrometer: Precieze temperatuur- en vochtigheidsmeting
- Bouw een Aangepaste LED Hoofdklok met Alarm – Zichtbaar vanaf 12 Meter
- Find Me: Slimme Item Locator met Arduino en Bluetooth
- Geoptimaliseerde Voedingsoplossingen voor Arduino Projecten
- Oneindige Spiegel Klok: Oneindige Elegantie Trefst Nauwkeurige Tijd