Leuchtender Weihnachtsstern Hack

Ik kan het niet geloven, maar Kerstmis komt dichterbij. De kerstvakantie komt eraan en u wilt natuurlijk tijdens uw vrije tijd een beetje van de hobby Maker. Volg. Wat is een betere manier om dat te doen dan een kleine IKEA hack te doen? Daarom willen we vandaag de IKEA Lamp Shield RAIL lichtjes aanpassen en het veranderen in een illustratieve window decoratie.

Video aan het einde van de blog!

Vereiste hardware en software

De hardware voor deze test setup is relatief eenvoudig, zie Tabel 1.

Pos.

Aantal

Onderdeel

Koppeling

1

1

Nano V3. 0 CH340

https://az-delivery.de

2

1

Bordboard, beste als kit

https://az-delivery.de

3

1

led Ring 5V RGB WS2812B 12-Bit 37mm

https://az-delivery.de

4

1

Accu-clip 9-Volt I-Type Clip Snap

https://az-delivery.de

5 1 MB-102 Power adapter https://az-delivery.de

Tabel 1: Cyclone-onderdelen met WS2812B ledring

Daarnaast heb je een 9V-blok batterij nodig om de haak later aan te zetten. Voor de haak heb ik een kleine koffer ontworpen voor de 3D printer, maar je kunt ook je eigen koffer maken met een beetje karton en lijm.

Bovendien moet u nog steeds contact opnemen met Ikea Straal van het lampverm Omdat het gaat om de hack van dit scherm.

De voor dit project benodigde software is beheersbaar:

De structuur

Het circuit voor de kleine IKEA hack moet compact maar functioneel zijn, zie Figuur 1.

Figuur 1: Structuur van het circuit

Figuur 1: Structuur van het circuit

Merk op dat de ledring een 5V spanning nodig heeft. De massa van de nano V3. 0 moet worden gekoppeld aan de ledring.

De broncode

Zoals u gewend bent aan ons, heeft de broncode weer veel reacties, zie code 1. Tegelijkertijd wordt het ontworpen in de functie van de lus zodat je verdere lichtanimaties kunt toevoegen.

Sketch DownloadComment

 //-----------------------------------------------------
Ikea Star Hack voor Nano V3. O
// Auteur: Joern Weise
// Licentie: GNU GPl 3.0
// Gemaakt: 07. Dec. 2021
Update:
//-----------------------------------------------------
Omvat bibliotheken
"35; omvat

Omschrijving
„35; PIN LED 6 definiëren Pin on Arduino Nano D6
"35; definieer COUNT LED 12 Aantal LED's
"35; definieer TIME VERANDERING 120000 »Time to switch mode in ms 2 min = 120000ms
"Definieer MODE 5 Max Aantal LED-modellen

Init NeoPixel strip
NeoPixel Adafruit strip(LED COUNT, LED PIN, NIEUWE GROEP + NIEUW KHZ800); Init LED-Ring

Some global vars
int iShowModeComment = -1; /Verander naar geldige modus om een fix modus te krijgen!!
int iValutatMode = 0; Om door de modi te schakelen
ongeschikt lang Comment = 0; for time-check

/*
=================================================================
Functie: instellingen
Terugkeren: ongeldig
Beschrijving: Vereiste setup routine voor Microcontroller
=================================================================
*/
Leeg setup() {
Serie.start(115200);
strip.start(); NeoPixel strip object (VEREIST)
strip.tonen(); Schakel uit naar ASAP pixels
strip.Seth-helderheid(50); // Druk BRIGHNESS op ongeveer 1/5 (max = 255)
randomSeed(analoog(A0)); Maak willekeurig meer willekeur

}

/*
=================================================================
Functie: lus
Terugkeren: ongeldig
Beschrijving: Noodlus routine voor Microcontroller
=================================================================
*/
Leeg ren() {
indien(iShowModeComment == -1)
{
indien(iValutatMode >= MODE NUM)
iValutatMode = 0;
Serie.Afdrukken("Huidige modus: + String(iValutatMode));
}
sm
iValutatMode = iShowModeComment;

Simple State Machine to go through the modi
/Meer modi kan worden toegevoegd, houden in gedachten om NUM MODE te verhogen
schakelaar(iValutatMode)
{
geval 0:
Serie.Afdrukken("Home: 0");
randomColorGenericName();
breuk;
geval 1:
Serie.Afdrukken("Home: 1");
regenboog(10);
breuk;
geval 2:
Serie.Afdrukken("Home: 2");
de-ChaseRegenboog(50);
breuk;
geval 3:
Serie.Afdrukken("Home: 3");
Chase(strip.Kleur(willekeurig(0,255), willekeurig(0,255), willekeurig(0,255)),250);
breuk;
geval 4:
Serie.Afdrukken("Home: 4");
ploeg(150);
breuk;
standaard:
Serie.Afdrukken("Zaak: standaard");
randomColorGenericName();
breuk;
}
}

/*
=================================================================
Functie: randomColor
Terugkeren: ongeldig
Beschrijving: Kleur een willekeurige led met een willekeurige kleur
=================================================================
*/
Leeg randomColorGenericName()
{
statisch ongeschikt lang Willem = millis();
Comment = millis();
Serie.Afdrukken("ElLastTime: + String(Comment));
strip.helder();
terwijl((millis() - Comment) < TIJD VERANDERING)
{
indien(millis() - Willem > 250)
{
int Rood = willekeurig(0,255);
int Groen = willekeurig(0,255);
int Blauw = willekeurig(0,255);
int LED = willekeurig(0,int(LED COUNT) );
strip.setPixel(LED, strip.Kleur(Rood, Groen, Blauw)); // Kleur van pixel s instellen (in RAM)
strip.tonen();
Willem = millis();
}
}
Serie.Afdrukken(Afsluiten terwijl-loop);
iValutatMode++;
}

/*
=================================================================
Functie: regenboog
Terugkeren: ongeldig
In wacht: tijd om te wachten op volgende led verandering
Beschrijving: Kleur de ring als een regenboog
=================================================================
*/
Leeg regenboog(int Wacht.)
{
statisch ongeschikt lang IulRegenboog = millis();
Comment = millis();
Serie.Afdrukken("ElLastTime: + String(Comment));
statisch int iFirstPixelHue = 0;
strip.helder();
terwijl((millis() - Comment) < TIJD VERANDERING)
{
indien(millis() - IulRegenboog > Wacht.)
{
iFirstPixelHue += 256;
indien(iFirstPixelHue >= 65536)
iFirstPixelHue = 0;
voor(int i=0; i<strip.Nupixels(); i++)
{
int iPixelHue. = iFirstPixelHue + (i / strip.Nupixels());
strip.setPixel(i, strip.gamma32(strip.Kleur(iPixelHue.)));
}
IulRegenboog = millis();
strip.tonen();
}
}
Serie.Afdrukken(Afsluiten terwijl-loop);
iValutatMode++;
}

/*
=================================================================
Functie: the terChaseRainbow
Terugkeren: ongeldig
In wacht: tijd om te wachten op volgende led verandering
Beschrijving: Cirkel regenboogkleur rond de ledring
=================================================================
*/
Leeg de-ChaseRegenboog(int Wacht.)
{
statisch ongeschikt lang de-ChaseRegenboog = millis();
Comment = millis();
Serie.Afdrukken("ElLastTime: + String(Comment));
statisch int iFirstPixelHue = 0;
strip.helder();
statisch int iFirstPixel = 0;
terwijl((millis() - Comment) < TIJD VERANDERING)
{
indien(millis() - de-ChaseRegenboog > Wacht.)
{
strip.helder();
voor(int Aantal = iFirstPixel; Aantal < strip.Nupixels(); Aantal += 3)
{
int Whoo! = iFirstPixelHue + Aantal * 655536L / strip.Nupixels();
uint32 kleur = strip.gamma32(strip.Kleur(Whoo!)); // hue > RGB
strip.setPixel(Aantal, kleur); Instellen pixel'c'to value'color
}
de-ChaseRegenboog = millis();
strip.tonen();
iFirstPixelHue += 65536 / 90;
iFirstPixel++ ;
indien(iFirstPixel >= 3)
iFirstPixel = 0;
}
}
Serie.Afdrukken(Afsluiten terwijl-loop);
iValutatMode++;
}

/*
=================================================================
Functie: hetterChase
Terugkeren: ongeldig
In wacht: tijd om te wachten op volgende led verandering
IN kleur: Willekeurige kleur voor de ledring
Beschrijving: Cirkel willekeurige kleur rond de ledring
=================================================================
*/
Leeg Chase(uint32 kleur, int Wacht.)
{
statisch ongeschikt lang Chase = millis();
Comment = millis();
Serie.Afdrukken("ElLastTime: + String(Comment));
statisch int iFirstPixel;
iFirstPixel = 0;
strip.helder();
terwijl((millis() - Comment) < TIJD VERANDERING)
{
indien(millis() - Chase > Wacht.)
{
strip.helder();
voor(int Aantal = iFirstPixel; Aantal < strip.Nupixels(); Aantal += 3)
{
strip.setPixel(Aantal, kleur); Instellen pixel'c'to value'color
}
Chase = millis();
strip.tonen();
iFirstPixel++ ;
indien(iFirstPixel >= 3)
iFirstPixel = 0;
}
}
Serie.Afdrukken(Afsluiten terwijl-loop);
iValutatMode++;
}

/*
=================================================================
Functie: verschuiving
Terugkeren: ongeldig
In wacht: tijd om te wachten op volgende led verandering
Beschrijving: Kleur elke led-ring stap voor stap naar willekeurige kleur
=================================================================
*/
Leeg ploeg(int Wacht.)
{
statisch ongeschikt lang ulShift = millis();
ullasttijd = millis();
Serie.println("laatste keer:" + String(ullasttijd));
statisch int iPixel;
iPixel = 0;
statisch int iShifter = 1;
strip.duidelijk();
statisch uint32_t kleur = strip.Kleur(willekeurig(0,255), willekeurig(0,255), willekeurig(0,255));
terwijl((millis() - ullasttijd) < _TIJDSWIJZIGING)
{
als(millis() - ulShift > wachten)
{
strip.setPixelColor(iPixel, kleur); // Stel pixel ' c 'in op waarde 'color'
ulShift = millis();
strip.laat();

iPixel+= iShifter;
als(iPixel >= (LED_COUNT - 1) )
{
kleur = strip.Kleur(willekeurig(0,255), willekeurig(0,255), willekeurig(0,255));
iShifter = -1;
}
anders als (iPixel <= 0)
{
iShifter = 1;
kleur = strip.Kleur(willekeurig(0,255), willekeurig(0,255), willekeurig(0,255));
}
}
}
Serie.println("Tijdens de lus afsluiten");
iCurrentMode++;
}
Code 1: code voor Poinsettia Hack

 

Voor verdere lichte animaties, gebruik bijvoorbeeld de functie randomColor(), die gewoon het principe van een animatie toont. Aangezien ik persoonlijk geen vriend Ben van de delay() functie, gebruik ik een aftrekking van de momenteel lopende milliseconden tot de laatst opgeslagen waarde. Als een limiet wordt overschreden, wordt de functie voortgezet of wordt een nieuwe lichte animatie gestart. De delay () functie blokkeert het programma en voorkomt zo een soepele programmastroom bij het reageren op gebeurtenissen.

Monteren

Zodat de ster ook aan het einde dienovereenkomstig schijnt, heb ik een klein doosje ontworpen, zie Figuur 2. U kunt de koffer vinden op mijn GitHub- Page, zodat je het zelf kunt snijden.

Huisvesting

Figuur 2: Behuizing voor de technologie

Helaas had ik geen geschikte schroeven om de LED ring te bevestigen, dus heb ik op dit moment ook een flinke portie hete lijm gebruikt. Sluit vervolgens de behuizing aan op de houder van de ster, bijvoorbeeld eenvoudig vastmaken met kabelbinders en de stralende ster is klaar, zie Figuur 3.

De voltooide ster

Figuur 3: de voltooide ster

In totaal duurt de montage, zonder de behuizing af te drukken, ongeveer 30 minuten. Met een beetje knutseltalent maak je snel je eigen kartonnen etui voor de technologie.

Samenvatting

Ik wens u een vrolijk kerstfeest en een vrolijk kerstseizoen. Hoewel Corona ons nog steeds onder controle heeft, mag dit de maker drive niet vertragen. Zoals reeds vermeld in de broncode, heb je de mogelijkheid om je eigen effecten toe te voegen, of gewoon alles laten zoals het is. Ook denkbaar zijn LED-buizen die om een behuizing zijn gewikkeld. Alles is mogelijk, laat je creativiteit de vrije loop.

 

Voor meer projecten voor AZ-levering door mij, Zie
https://github.com/M3taKn1ght/Blog-Repo.

 

Voor arduinoProjecten voor beginners

4 Kommentare

Andreas Wolter

Andreas Wolter

@Claude Wiltzius: danke für den Hinweis. Ich habe das an Jörn Weise weitergegeben. Er überprüft das.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Claude Wiltzius

Claude Wiltzius

Hallo Jürgen Weise,
Top Beitrag, problemlos als Neuling nachgebaut !!!
Leider finde ich die Datei zum 3D Druck des Gehäuses nicht auf Ihrer GitHub-Seite ?
könnte ich diese vielleicht per Mail haben ?
vielen Dank und guten Rutsch !
Claude

J. Weise

J. Weise

Hallo,
Tatsächlich nutze ich den folgenden Schirm https://www.ikea.com/de/de/p/strala-leuchtenschirm-spitze-weiss-20502883/
Interessant, dass das Möbelhaus hier den Link verändert hat, will ich zuvor über den Oberen Link noch den Lampenschirm erwerben konnte.
Weise

Jürgen

Jürgen

Sehr geehrter Herr Jörn Weise,
ich finde Ihren Beitrag sehr interessant und man hat die Möglichkeit mit dem Code zu spielen um noch andere Effekte zu erzeugen.
Das einzige was ich vermisst habe ist die Angabe zum Durchmesser des Sternes.
Der Link zu IKEA zeigt auf einen Lampenschirmfuß und nicht auf einen Stern. Darunter sind zwar Sterne abgebildet, jedoch mit unterschiedlichen Durchmessern.
Welchen Durchmesser bzw. Stern, haben Sie für dieses Projekt verwendet ?
Würde mich über eine Antwort sehr freuen.
Mit freundlichen Grüßen
Jürgen

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert

Aanbevolen blog berichten

  1. Installeer ESP32 nu van de raad van bestuur
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - ESP Programmeren via Wi-Fi