Flatgebouw verlichting met Arduino
Flatgebouw verlichting met Arduino
Van heel lang terug had ik nog een flatgebouw met op de benedenverdieping de winkel Fink Mode. Wie heeft die niet?
Daar wilde ik graag verlichting in maken, maar dan wel met opties.
Ik heb een led-strip gekocht met programmeerbare RGB (Rood, Groen, Blauw) leds. Deze zijn bijvoorbeeld met een Arduino aan te sturen waardoor je alle denkbare kleuren kunt instellen. Toevallig is de afstand tussen de leds gelijk aan de hoogte van een verdieping van het flatgebouw.
Voor iedere soort kamer heb ik van plastic een kolom gemaakt met afscheidingen die als een soort vloer tussen iedere verdieping komen. Een stripje met 7 of 8 leds (afhankelijk van de plaats in het flatgebouw) heb ik aan de achterzijde geplakt. Iedere led heeft zo een eigen 'kamer' gekregen. Daarna heb ik verschillende kolommen met leds en vloeren van onder af in het gebouw geschoven. Aldus zat achter ieder raam een kamer met een eigen led.
. .
In het Arduino programma heb ik een dag- en nacht ritme geprogrammeerd. 'S ochtends gaat in de verschillende slaapkamers licht aan. Niet allemaal tegelijk maar met variatie. Dan gaat licht in de keukens aan en later in de woonkamer. Dan wordt het weer minder op enkele willekeurige uitzonderingen na. 'S avonds met etenstijd weer keuken verlichting en later licht in de woonkamer aan. Nog later weer in de slaapkamer en dan wordt de woonkamer donker. Af en toe gaat er 's nachts nog ergens een lampje aan. Dit alles willekeurig per woning en iedere dag verschillend. Ook de kleur van het licht varieert (een beetje) per dag. Wel in de slaapkamer meer blauwig, in de keuken wit en in de woonkamer warmer.
Daar wilde ik graag verlichting in maken, maar dan wel met opties.
Ik heb een led-strip gekocht met programmeerbare RGB (Rood, Groen, Blauw) leds. Deze zijn bijvoorbeeld met een Arduino aan te sturen waardoor je alle denkbare kleuren kunt instellen. Toevallig is de afstand tussen de leds gelijk aan de hoogte van een verdieping van het flatgebouw.
Voor iedere soort kamer heb ik van plastic een kolom gemaakt met afscheidingen die als een soort vloer tussen iedere verdieping komen. Een stripje met 7 of 8 leds (afhankelijk van de plaats in het flatgebouw) heb ik aan de achterzijde geplakt. Iedere led heeft zo een eigen 'kamer' gekregen. Daarna heb ik verschillende kolommen met leds en vloeren van onder af in het gebouw geschoven. Aldus zat achter ieder raam een kamer met een eigen led.
. .
In het Arduino programma heb ik een dag- en nacht ritme geprogrammeerd. 'S ochtends gaat in de verschillende slaapkamers licht aan. Niet allemaal tegelijk maar met variatie. Dan gaat licht in de keukens aan en later in de woonkamer. Dan wordt het weer minder op enkele willekeurige uitzonderingen na. 'S avonds met etenstijd weer keuken verlichting en later licht in de woonkamer aan. Nog later weer in de slaapkamer en dan wordt de woonkamer donker. Af en toe gaat er 's nachts nog ergens een lampje aan. Dit alles willekeurig per woning en iedere dag verschillend. Ook de kleur van het licht varieert (een beetje) per dag. Wel in de slaapkamer meer blauwig, in de keuken wit en in de woonkamer warmer.
Marco
Digitaal spoor N met Z21 (voorheen DR5000) en Digikeijs modules.
Diverse Arduino's voor wissels en seinen. Zelfbouw DCC decoders.
Ook een paar DTS ground-detectie modules.
Aangestuurd door Koploper.
Digitaal spoor N met Z21 (voorheen DR5000) en Digikeijs modules.
Diverse Arduino's voor wissels en seinen. Zelfbouw DCC decoders.
Ook een paar DTS ground-detectie modules.
Aangestuurd door Koploper.
Re: Flatgebouw verlichting met Arduino
He Marco.. dit zijn natuurlijk toffe projecten. Die vragen natuurlijk ook om een filmpje..!
Tevens wat ik nou echt interessant zou vinden is, wat heb je nou allemaal precies gebruikt om dit te maken en wat heeft het je bij wijze van gekost.
Welke Arduino, eventuele uitbreidingen? Welke ledstrip dan.
En misschien een schetsje van hoe je dit dan aanstuurt (elektrisch gezien dan)
Tevens wat ik nou echt interessant zou vinden is, wat heb je nou allemaal precies gebruikt om dit te maken en wat heeft het je bij wijze van gekost.
Welke Arduino, eventuele uitbreidingen? Welke ledstrip dan.
En misschien een schetsje van hoe je dit dan aanstuurt (elektrisch gezien dan)
Re: Flatgebouw verlichting met Arduino
Gaaf!
Heb je de sketch zelf geprogrammeerd, of gebruik je MOBALedLid van het stummiforum?
Uiteraard benieuwd naar het "live" resultaat in een filmpje
Heb je de sketch zelf geprogrammeerd, of gebruik je MOBALedLid van het stummiforum?
Uiteraard benieuwd naar het "live" resultaat in een filmpje
Groet,
Rico (momfer)
Centrale: DCC-Ex | Arduino Mega + Motor shield
Besturing: EXRAIL | Traintastic | RocRail | Engine Driver | DecoderPro
Rails: Minitrix / Fleischmann Piccolo
En hier vind je de bouw van mijn kerstbaan en Starten met EXRAIL
Rico (momfer)
Centrale: DCC-Ex | Arduino Mega + Motor shield
Besturing: EXRAIL | Traintastic | RocRail | Engine Driver | DecoderPro
Rails: Minitrix / Fleischmann Piccolo
En hier vind je de bouw van mijn kerstbaan en Starten met EXRAIL
Re: Flatgebouw verlichting met Arduino
Als het goed is moet dit het filmpje zijn...
Marco
Digitaal spoor N met Z21 (voorheen DR5000) en Digikeijs modules.
Diverse Arduino's voor wissels en seinen. Zelfbouw DCC decoders.
Ook een paar DTS ground-detectie modules.
Aangestuurd door Koploper.
Digitaal spoor N met Z21 (voorheen DR5000) en Digikeijs modules.
Diverse Arduino's voor wissels en seinen. Zelfbouw DCC decoders.
Ook een paar DTS ground-detectie modules.
Aangestuurd door Koploper.
Re: Flatgebouw verlichting met Arduino
De aansturing doe ik met een enkele Arduino Nano.
Bijvoorbeeld: https://www.tinytronics.nl/shop/nl/deve ... compatible
Zorg wel voor een voldoende voedingsspanning, het zijn een heleboel leds.
Bijvoorbeeld: https://www.tinytronics.nl/shop/nl/powe ... ningsmeter
Ik heb ledstrip gebruikt met WS2812 RGB leds.
Bijvoorbeeld: https://www.tinytronics.nl/shop/nl/verl ... eds-1m-5mm
Voor de kokers heb ik 1,5 mm dik knutsel-plastic gebruikt van een hobby-winkel. Deze kun je lijmen met dezelfde lijm waarmee je huisjes e.d. in elkaar zet.
Totaal met draadjes e.d. rond de 25 Euro.
Laatst gewijzigd door mjdb op 18 feb 2022 14:17, 1 keer totaal gewijzigd.
Marco
Digitaal spoor N met Z21 (voorheen DR5000) en Digikeijs modules.
Diverse Arduino's voor wissels en seinen. Zelfbouw DCC decoders.
Ook een paar DTS ground-detectie modules.
Aangestuurd door Koploper.
Digitaal spoor N met Z21 (voorheen DR5000) en Digikeijs modules.
Diverse Arduino's voor wissels en seinen. Zelfbouw DCC decoders.
Ook een paar DTS ground-detectie modules.
Aangestuurd door Koploper.
Re: Flatgebouw verlichting met Arduino
Ik maak in principe alle programma's zelf. Natuurlijk kijk ik wel naar voorbeelden op het Internet. Je moet het tenslotte ergens van leren.
Dit is de betreffende programma-code. In Arduino-termen de Sketch:
Code: Selecteer alles
// Flatgebouw verlichting
#include <Adafruit_NeoPixel.h>
// Which pin on the Arduino is connected to the NeoPixels?
#define Pin_Slaapkamer1 2
#define Pin_Keuken1 3
#define Pin_Woonkamer1a 4
#define Pin_Woonkamer1b 5
#define Pin_Slaapkamer2 6
#define Pin_Keuken2 7
#define Pin_Woonkamer2 8
#define Pin_Trappenhuis 9
// How many NeoPixels are attached to the Arduino?
#define Etages 8
#define KamerCount 8
#define Col_Slaapkamer1 0
#define Col_Keuken1 1
#define Col_Woonkamer1a 2
#define Col_Woonkamer1b 3
#define Col_Woonkamer2 4
#define Col_Keuken2 5
#define Col_Slaapkamer2 6
#define Col_Trappenhuis 7
// Declare our NeoPixel strip objects:
Adafruit_NeoPixel Kamers[] = {Adafruit_NeoPixel(Etages, Pin_Slaapkamer1, NEO_GRB + NEO_KHZ800),
Adafruit_NeoPixel(Etages, Pin_Keuken1, NEO_GRB + NEO_KHZ800),
Adafruit_NeoPixel(Etages, Pin_Woonkamer1a, NEO_GRB + NEO_KHZ800),
Adafruit_NeoPixel(Etages, Pin_Woonkamer1b, NEO_GRB + NEO_KHZ800),
Adafruit_NeoPixel(Etages, Pin_Slaapkamer2, NEO_GRB + NEO_KHZ800),
Adafruit_NeoPixel(Etages, Pin_Keuken2, NEO_GRB + NEO_KHZ800),
Adafruit_NeoPixel(Etages, Pin_Woonkamer2, NEO_GRB + NEO_KHZ800),
Adafruit_NeoPixel(Etages, Pin_Trappenhuis, NEO_GRB + NEO_KHZ800)};
// Argument 1 = Number of pixels in NeoPixel strip
// Argument 2 = Arduino pin number (most are valid)
// Argument 3 = Pixel type flags, add together as needed:
// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)
// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
// NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
// setup() function -- runs once at startup --------------------------------
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
for (int i=0; i<4; i++) { //enkele secondes aftellen
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
digitalWrite(2, HIGH); // turn the LED on (HIGH is the voltage level)
delay(300); // wait for 3/10 second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
digitalWrite(2, LOW); // turn the LED off by making the voltage LOW
delay(700); // wait for 7/10 second
} // countdown
Serial.begin(57600);
for(int i=0; i<KamerCount; i++) { // For each strip...
Kamers[i].begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
Kamers[i].show(); // Turn OFF all pixels ASAP
Kamers[i].setBrightness(80); // Set BRIGHTNESS to about 1/5 (max = 255)
}; // Alle strips initializeren
ShowAllColors();
randomSeed(analogRead(0));
} // setup
// loop() function -- runs repeatedly as long as board is on ---------------
void loop() {
int Kans_Slaapkamer=0;
int Kans_Keuken=0;
int Kans_Woonkamer=0;
int Kans_Trappenhuis=0;
int Kans=0;
int Rood = 0;
int Groen = 0;
int Blauw = 0;
int StapPauze = 200; // milliseconden
Serial.println("DagEnNacht");
// doorloop een dag en een nacht
for (int Uur=0; Uur<24; Uur++) { // alle uren
switch(Uur) {
case 0:
Kans_Slaapkamer=20;
Kans_Keuken=20;
Kans_Woonkamer=20;
Kans_Trappenhuis=100;
break;
case 1:
Kans_Slaapkamer=10;
Kans_Keuken=10;
Kans_Woonkamer=20;
Kans_Trappenhuis=100;
break;
case 2:
Kans_Slaapkamer=10;
Kans_Keuken=5;
Kans_Woonkamer=10;
Kans_Trappenhuis=100;
break;
case 3:
Kans_Slaapkamer=5;
Kans_Keuken=5;
Kans_Woonkamer=10;
Kans_Trappenhuis=100;
break;
case 4:
Kans_Slaapkamer=5;
Kans_Keuken=5;
Kans_Woonkamer=10;
Kans_Trappenhuis=100;
break;
case 5:
Kans_Slaapkamer=10;
Kans_Keuken=5;
Kans_Woonkamer=5;
Kans_Trappenhuis=100;
break;
case 6:
Kans_Slaapkamer=30;
Kans_Keuken=20;
Kans_Woonkamer=30;
Kans_Trappenhuis=100;
break;
case 7:
Kans_Slaapkamer=50;
Kans_Keuken=40;
Kans_Woonkamer=50;
Kans_Trappenhuis=80;
break;
case 8:
Kans_Slaapkamer=80;
Kans_Keuken=6;
Kans_Woonkamer=60;
Kans_Trappenhuis=60;
break;
case 9:
Kans_Slaapkamer=60;
Kans_Keuken=80;
Kans_Woonkamer=80;
Kans_Trappenhuis=0;
break;
case 10:
Kans_Slaapkamer=40;
Kans_Keuken=70;
Kans_Woonkamer=60;
Kans_Trappenhuis=0;
break;
case 11:
Kans_Slaapkamer=20;
Kans_Keuken=50;
Kans_Woonkamer=50;
Kans_Trappenhuis=0;
break;
case 12:
Kans_Slaapkamer=10;
Kans_Keuken=90;
Kans_Woonkamer=70;
Kans_Trappenhuis=0;
break;
case 13:
Kans_Slaapkamer=10;
Kans_Keuken=80;
Kans_Woonkamer=70;
Kans_Trappenhuis=0;
break;
case 14:
Kans_Slaapkamer=10;
Kans_Keuken=50;
Kans_Woonkamer=60;
Kans_Trappenhuis=0;
break;
case 15:
Kans_Slaapkamer=10;
Kans_Keuken=40;
Kans_Woonkamer=70;
Kans_Trappenhuis=0;
break;
case 16:
Kans_Slaapkamer=10;
Kans_Keuken=50;
Kans_Woonkamer=80;
Kans_Trappenhuis=0;
case 17:
Kans_Slaapkamer=20;
Kans_Keuken=70;
Kans_Woonkamer=90;
Kans_Trappenhuis=0;
break;
case 18:
Kans_Slaapkamer=30;
Kans_Keuken=90;
Kans_Woonkamer=90;
Kans_Trappenhuis=60;
break;
case 19:
Kans_Slaapkamer=40;
Kans_Keuken=80;
Kans_Woonkamer=90;
Kans_Trappenhuis=80;
break;
case 20:
Kans_Slaapkamer=60;
Kans_Keuken=70;
Kans_Woonkamer=90;
Kans_Trappenhuis=100;
break;
case 21:
Kans_Slaapkamer=80;
Kans_Keuken=50;
Kans_Woonkamer=80;
Kans_Trappenhuis=100;
break;
case 22:
Kans_Slaapkamer=90;
Kans_Keuken=30;
Kans_Woonkamer=70;
Kans_Trappenhuis=100;
break;
case 23:
Kans_Slaapkamer=50;
Kans_Keuken=20;
Kans_Woonkamer=60;
Kans_Trappenhuis=100;
break;
}; // switch Uur
Serial.print(Uur);
Serial.print(" ");
Serial.print(Kans_Slaapkamer);
Serial.print(" ");
Serial.print(Kans_Keuken);
Serial.print(" ");
Serial.print(Kans_Woonkamer);
Serial.print(" ");
Serial.print(Kans_Trappenhuis);
Serial.println();
for(int e=0; e<Etages; e++) { // For each Etage...
Kans = rand() % 100 + 1;
if (Kans_Slaapkamer>Kans) {
Rood = rand() % 100 + 80;
Groen = rand() % 100 + 80;
Blauw = rand() % 120 + 50;
}
else {
Rood = 0;
Groen = 0;
Blauw = 0;
}
Kamers[Col_Slaapkamer1].setPixelColor(e, Rood, Groen, Blauw); // On
Kamers[Col_Slaapkamer1].show(); // Update strip to match
delay(StapPauze); // Pause for a moment
Kans = rand() % 100 + 1;
if (Kans_Keuken>Kans) {
Rood = rand() % 50 + 200;
Groen = rand() % 50 + 200;
Blauw = rand() % 50 + 150;
}
else {
Rood = 0;
Groen = 0;
Blauw = 0;
}
Kamers[Col_Keuken1].setPixelColor(e, Rood, Groen, Blauw);
Kamers[Col_Keuken1].show(); // Update strip to match
delay(StapPauze); // Pause for a moment
Kans = rand() % 100 + 1;
if (Kans_Woonkamer>Kans) {
Rood = rand() % 100 + 155;
Groen = rand() % 100 + 150;
Blauw = rand() % 50 + 50;
}
else {
Rood = 0;
Groen = 0;
Blauw = 0;
}
Kamers[Col_Woonkamer1a].setPixelColor(e, Rood, Groen, Blauw);
Kamers[Col_Woonkamer1a].show(); // Update strip to match
delay(StapPauze); // Pause for a moment
Kans = rand() % 100 + 1;
if (Kans_Woonkamer>Kans) {
Rood = rand() % 150 + 100;
Groen = rand() % 150 + 100;
Blauw = rand() % 50 + 50;
}
else {
Rood = 0;
Groen = 0;
Blauw = 0;
}
Kamers[Col_Woonkamer1b].setPixelColor(e, Rood, Groen, Blauw);
Kamers[Col_Woonkamer1b].show(); // Update strip to match
delay(StapPauze); // Pause for a moment
Kans = rand() % 100 + 1;
if (Kans_Slaapkamer>Kans) {
Rood = rand() % 100 + 150;
Groen = rand() % 100 + 150;
Blauw = rand() % 100 + 100;
}
else {
Rood = 0;
Groen = 0;
Blauw = 0;
}
Kamers[Col_Slaapkamer2].setPixelColor(e, Rood, Groen, Blauw);
Kamers[Col_Slaapkamer2].show(); // Update strip to match
delay(StapPauze); // Pause for a moment
Kans = rand() % 100 + 1;
if (Kans_Keuken>Kans) {
Rood = rand() % 50 + 200;
Groen = rand() % 50 + 200;
Blauw = rand() % 50 + 150;
}
else {
Rood = 0;
Groen = 0;
Blauw = 0;
}
Kamers[Col_Keuken2].setPixelColor(e, Rood, Groen, Blauw);
Kamers[Col_Keuken2].show(); // Update strip to match
delay(StapPauze); // Pause for a moment
Kans = rand() % 100 + 1;
if (Kans_Woonkamer>Kans) {
Rood = rand() % 150 + 100;
Groen = rand() % 150 + 100;
Blauw = rand() % 50 + 80;
}
else {
Rood = 0;
Groen = 0;
Blauw = 0;
}
Kamers[Col_Woonkamer2].setPixelColor(e, Rood, Groen, Blauw);
Kamers[Col_Woonkamer2].show(); // Update strip to match
delay(StapPauze); // Pause for a moment
} // Each Etage
Kans = rand() % 100 + 1;
for(int e=0; e<Etages; e++) { // For each Etage...
if (Kans_Trappenhuis>=Kans) {
Rood = 127;
Groen = 127;
Blauw = 100;
}
else {
Rood = 0;
Groen = 0;
Blauw = 0;
}
Kamers[Col_Trappenhuis].setPixelColor(e, Rood, Groen, Blauw);
Kamers[Col_Trappenhuis].show();
} // Each Etage
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait for 3/10 second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(100); // wait for 7/10 second
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait for 3/10 second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(700); // wait for 7/10 second
} // alle uren
} // loop
void ShowAllColors(){
for(int i=0; i<KamerCount; i++) { // For each strip...
for(int j=0; j<Kamers[i].numPixels(); j++) { // For each pixel in strip...
Kamers[i].setPixelColor(j, Kamers[i].Color(255, 0, 0)); // Red
Kamers[i].show(); // Update strip to match
delay(50); // Pause for a moment
};
for(int j=0; j<Kamers[i].numPixels(); j++) { // For each pixel in strip...
Kamers[i].setPixelColor(j, Kamers[i].Color(0, 255, 0)); // Green
Kamers[i].show(); // Update strip to match
delay(50); // Pause for a moment
};
for(int j=0; j<Kamers[i].numPixels(); j++) { // For each pixel in strip...
Kamers[i].setPixelColor(j, Kamers[i].Color(0, 0, 255)); // Blue
Kamers[i].show(); // Update strip to match
delay(50); // Pause for a moment
};
for(int j=0; j<Kamers[i].numPixels(); j++) { // For each pixel in strip...
Kamers[i].setPixelColor(j, Kamers[i].Color(0, 0, 0)); // Off
Kamers[i].show(); // Update strip to match
delay(50); // Pause for a moment
};
}; // Each strip
for(int j=0; j<Etages; j++) { // For each Etage...
for(int i=0; i<KamerCount; i++) { // For each pixel in strip...
Kamers[i].setPixelColor(j, Kamers[i].Color(255, 0, 0)); // Red
Kamers[i].show(); // Update strip to match
delay(50); // Pause for a moment
};
for(int i=0; i<KamerCount; i++) { // For each pixel in strip...
Kamers[i].setPixelColor(j, Kamers[i].Color(0, 255, 0)); // Green
Kamers[i].show(); // Update strip to match
delay(50); // Pause for a moment
};
for(int i=0; i<KamerCount; i++) { // For each pixel in strip...
Kamers[i].setPixelColor(j, Kamers[i].Color(0, 0, 255)); // Blue
Kamers[i].show(); // Update strip to match
delay(50); // Pause for a moment
};
for(int i=0; i<KamerCount; i++) { // For each pixel in strip...
Kamers[i].setPixelColor(j, Kamers[i].Color(0, 0, 0)); // Off
Kamers[i].show(); // Update strip to match
delay(50); // Pause for a moment
};
}; // Each Etage
}; // ShowAllColors
Het programma begint om alle leds per kolom en per etage de basis-kleuren rood, groen en blauw te laten zien. Dit ter controle of alle leds werken.
Marco
Digitaal spoor N met Z21 (voorheen DR5000) en Digikeijs modules.
Diverse Arduino's voor wissels en seinen. Zelfbouw DCC decoders.
Ook een paar DTS ground-detectie modules.
Aangestuurd door Koploper.
Digitaal spoor N met Z21 (voorheen DR5000) en Digikeijs modules.
Diverse Arduino's voor wissels en seinen. Zelfbouw DCC decoders.
Ook een paar DTS ground-detectie modules.
Aangestuurd door Koploper.
Re: Flatgebouw verlichting met Arduino
Zojuist het filmpje bekeken. Ontzettend leuk geworden!
Wat een drukte in die flat
Groet,
Rob
Wat een drukte in die flat
Groet,
Rob
Modelbaan met kopstation "Waterloo". Nederland 1945 - 2000
-
- Berichten: 410
- Lid geworden op: 05 jan 2021 20:06
- Locatie: Omgeving Rotterdam mijn geboorte stad