Doel:€250.00
Donaties:€0.00

Per saldo:€-250.00

Steun ons nu!

Laatst bijgewerkt
op 03-12-2025

Vacature: secretaris bestuur
Algemeen

De stichting

Recente berichten

Goederenloods Zandvoort door Peter J K
Vandaag om 01:08:16
MOBEXPO 2026 Stereo beelden The Mill ... door Rob Ellerman
13 May 2026, 23:54:51
De projecten van Ruben (NL H0) door Ruben90
13 May 2026, 23:49:23
Mallnitzer Tauernbahnstrecke ÖBB N Spoor door Schachbrett
13 May 2026, 23:43:27
Projekt 083-338 door grossraumwagen
13 May 2026, 23:37:44
De IJmuider spoorlijn - korte geschiedenis en plaatjes door Vislijn
13 May 2026, 23:31:25
Vraag bouwbeschrijving MK modelbouw Vickers panto door Rob Bennis
13 May 2026, 23:25:38
Digikeijs DRC 2400v5 lichtsetjes door KoosDeJong
13 May 2026, 22:59:19
EifelBurgenBahn door basjuh1981
13 May 2026, 22:46:35
Mijn eerste H0-modeltreinbaan in aanbouw door bigboynl
13 May 2026, 22:26:20
Een HTM 'Ombouwer' door GerardvV
13 May 2026, 22:15:15
De overeenkomst tussen een Ovaalramer en een Motorpost. door FritsT
13 May 2026, 21:56:33
Pendelbaan met 1 keerlus (H0, L-vorm, 4,50 x 3,00 mtr) (Zandvoort) door wob
13 May 2026, 21:17:30
Raadplaatje door Bob11
13 May 2026, 21:15:19
Trix DXI van DC naar AC door puntenglijder
13 May 2026, 19:31:55
kleur rook model diesellocs door Herb73
13 May 2026, 19:13:04
20 jaar BNLS door Hans van de Burgt
13 May 2026, 19:04:00
Diorama ND Blödenhügel Am Taubenkrug door neudalhausenstadbahn
13 May 2026, 18:54:09
Toon hier je nieuwe (model-) spooraanwinst(en)... door edwin1974
13 May 2026, 17:56:21
Welke merken H0 Materieel door Arjan6511
13 May 2026, 17:37:55
Serre bergbaan, knutselproject van mijn zoon Jamie en mij door Robkop
13 May 2026, 17:37:44
PT Trains 2026 door Biesje
13 May 2026, 16:46:02
Gelders Smalspoormuseum / Gelderse Smalspoor Stichting stelt zich voor door spoorijzer
13 May 2026, 15:39:16
Ronald bouwt opnieuw een US Micro Layout! door Ronald Halma
13 May 2026, 15:37:12
Halma ladies gaan bouwen voor....... OntraXS 2027! door Ronald Halma
13 May 2026, 15:17:54
't Boemeltje door RobVille
13 May 2026, 12:44:13
BNLS-actie: Artitec DAF SRV door Ferdinand Bogman
13 May 2026, 11:42:51
De Hasseberg (spoor nul op 9mm) door Dave.......
13 May 2026, 10:55:03
Wie heeft hier ook een Piko 52694 (NS 2255) door rhberk
13 May 2026, 10:16:56
Anlage 2.0 door a.moonen
13 May 2026, 09:44:00
  

Auteur Topic: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.  (gelezen 8589 keer)

Ajean

  • Offline Offline
  • Berichten: 89
Re: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.
« Reactie #15 Gepost op: 28 February 2015, 17:14:51 »
@ Timo,

Heb PB gestuurd
< = >

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4655
Re: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.
« Reactie #16 Gepost op: 02 March 2015, 12:52:50 »
Okay, ik ben er even naar gekeken. Ik moet wel zeggen, ik heb geen ervaring met de FastLED librarie en ik heb helaas ook geen Neopixels ofzo liggen. Mijn code is puur gemaakt op basis van de documentatie en compilled zonder error. Maarja, er zou nog een foutje in kunnen zitten...

Goed, omdat er misschien meer mensen wat te zeggen hebben over de code en de aanpassingen begin ik met de originele code van Adri.

Orginele code:

#include "FastLED.h"


// How many leds in your strip?
#define NUM_LEDS 8
// For led chips like Neopixels, which have a data line, ground, and power, you just
// need to define DATA_PIN.  For led chipsets that are SPI based (four wires - data, clock,
// ground, and power), like the LPD8806 define both DATA_PIN and CLOCK_PIN
#define DATA_PIN 6
#define BRIGHTNESS 30
// Define the array of leds
CRGB leds[NUM_LEDS];

void setup() {
    FastLED.addLeds<NEOPIXEL, DATA_PIN, RGB>(leds, NUM_LEDS);
    FastLED.setBrightness( BRIGHTNESS );
    }

void loop(){
   // Turn the LED off, then pause
   leds[0].setRGB(0,0,0);
   leds[1].setRGB(0,0,0);
   leds[2].setRGB(0,0,0);
   leds[3].setRGB(0,0,0);
   leds[4].setRGB(0,0,0);
   leds[5].setRGB(0,0,0);
   leds[6].setRGB(0,0,0);
   leds[7].setRGB(0,0,0);
   FastLED.show();
   delay(2000);
  // Turn the LED on, then pause
   leds[0].setRGB(60,0,20);
   leds[1].setRGB(60,0,20);
   leds[2].setRGB(60,0,20);
   leds[3].setRGB(60,0,20);
   leds[4].setRGB(60,0,20);
   leds[5].setRGB(60,0,20);
   leds[6].setRGB(60,0,20);
   leds[7].setRGB(60,0,20);
   FastLED.show();
   delay(5000);
  // Turn the LED on, then pause
   leds[0].setRGB(120,0,40);
   leds[1].setRGB(120,0,40);
   leds[2].setRGB(120,0,40);
   leds[3].setRGB(120,0,40);
   leds[4].setRGB(120,0,40);
   leds[5].setRGB(120,0,40);
   leds[6].setRGB(120,0,40);
   leds[7].setRGB(120,0,40);
   FastLED.show();
   delay(5000);
  // Turn the LED on, then pause
   leds[0].setRGB(180,0,60);
   leds[1].setRGB(180,0,60);
   leds[2].setRGB(180,0,60);
   leds[3].setRGB(180,0,60);
   leds[4].setRGB(180,0,60);
   leds[5].setRGB(180,0,60);
   leds[6].setRGB(180,0,60);
   leds[7].setRGB(180,0,60);
   FastLED.show();
   delay(5000);
  // Turn the LED on, then pause
   leds[0].setRGB(240,0,80);
   leds[1].setRGB(240,0,80);
   leds[2].setRGB(240,0,80);
   leds[3].setRGB(240,0,80);
   leds[4].setRGB(240,0,80);
   leds[5].setRGB(240,0,80);
   leds[6].setRGB(240,0,80);
   leds[7].setRGB(240,0,80);
   FastLED.show();
   delay(5000);
   }

Eerste paar opmerkingen over de code. Probeer altijd de delay() functie te vermijden. Deze legt het hele programma namelijk stil. Zie Blink Without Delay. Ook als je heel vaak hetzelfde doet moet je je gaan afvragen of het makkelijker kan. Vandaar dat ik een for loop gebruik om de ledstrip in te stellen.

Ook staat er een foutje in, hij vind RGB in FastLED.addLeds<NEOPIXEL, DATA_PIN, RGB>(leds, NUM_LEDS); niet leuk bij Neopixels  ;D

Ik ben in mijn aangepaste code uitgegaan van een vaste volgorde van kleuren met elk een overgangstijd (fadIn time, transition time) en duur welk vast staan bij compillen. Meer kleuren (en tijden) zijn toe te voegen. Ik heb nu even gekozen voor vol aan (alles 255) en de laatste kleur die jij gebruikte (CRGB(240, 0, 80)) waarbij ik niet weet wat dit oplevert.

In mij voorbeeld ga ik uit van de hele strip in dezelfde kleur. Dit maakt een Neopixel natuurlijk nogal nutteloos. Maar ik denk dat de opzet wel te gebruiken is om meer dynamische (links beginnen bijvoorbeeld) overgangen te maken. Ook al denk ik dat Neopixel nog steeds overkill is als je baan lang is.

Mijn code:
#include "FastLED.h"

/********** Color and timing *************/
typedef struct{
unsigned int fadeIn;
unsigned int ontime;
CRGB color;
} preset_map;

//map of {fadeIn time = transition time (in ms), on time (in ms), CRGB color}
//You can add more colors (and times) for more transitions
//transitions happen in chronological order order starting at 0 at boot
const preset_map Presets[] = { {10000, 5000, CRGB(240, 0, 80)},
{10000, 5000, CRGB(255, 255, 255)}};

#define NUM_PRESETS sizeof(Presets)/sizeof(Presets[0])

/********** FastLED definitions **********/
// How many leds in your strip?
#define NUM_LEDS 8
// For led chips like Neopixels, which have a data line, ground, and power, you just
// need to define DATA_PIN.  For led chipsets that are SPI based (four wires - data, clock,
// ground, and power), like the LPD8806 define both DATA_PIN and CLOCK_PIN
#define DATA_PIN 6
#define BRIGHTNESS 30
// Define the array of leds
CRGB leds[NUM_LEDS];

void setup() {
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
FastLED.setBrightness( BRIGHTNESS );
}

void loop(){
ledsUpdate();


}

void ledsUpdate(){
static bool inTransition;
static unsigned long millisLast;
static byte presetCounter;
static unsigned int interval;
static byte transitionCounter;

byte r, g, b, lastPreset;

if(millis() - millisLast > interval){
millisLast = millis();

if(inTransition){
//It's a new transition, calculate transition interval
                        //transition in 256 steps
                        //Full transition will be 256 * (fadeIn / 256) as int so there can be a significant error
if(transitionCounter == 0){
interval = Presets[presetCounter].fadeIn / 256;
transitionCounter++;
}

//What was the last preset?
lastPreset = (presetCounter == 0 ? NUM_PRESETS - 1 : presetCounter - 1);

//calculate in between color for RGB
r = lerp8by8(Presets[lastPreset].color.r, Presets[presetCounter].color.r, transitionCounter);
g = lerp8by8(Presets[lastPreset].color.g, Presets[presetCounter].color.g, transitionCounter);
b = lerp8by8(Presets[lastPreset].color.b, Presets[presetCounter].color.b, transitionCounter);

//set al the colors
for(byte i = 0; i < NUM_LEDS; i++){
leds[i].setRGB(r, g, b);
}

//if it was the last transition
if(transitionCounter == 255){
inTransition = false;
}
transitionCounter++;
}
//we are at the new preset
else{
//turn all leds to preset color
for(byte i = 0; i < NUM_LEDS; i++){
leds[i] = Presets[presetCounter].color;
}
//start waiting for next transition
interval = Presets[presetCounter].ontime;
presetCounter++;
inTransition = true;
}
FastLED.show();
}
}
/code]

Ik hoop dat je hier iets mee kan.


Timo
Verzonden vanaf mijn desktop met Firefox

Ajean

  • Offline Offline
  • Berichten: 89
Re: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.
« Reactie #17 Gepost op: 02 March 2015, 21:43:31 »
@ Timo,

Bedankt voor je reactie. ik heb de sketch ingelezen. Er gebeuren echter enkele dingen (o.a. opeens opflitsen van een ander kleur) die ik niet kan thuisbrengen en ook moeilijk te beschrijven zijn.
Met alle plezier stuur ik je een neopixel stripje (8 leds) op zodat je zelf het resultaat van je sketch kunt bekijken. Als je dit wat lijkt stuur me dan via een PB je adres.

Groeten,

Adri
< = >

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4655
Re: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.
« Reactie #18 Gepost op: 02 March 2015, 22:14:10 »
Hoi Adri,

Mm, dan zal er ongetwijveld er een, waarschijnlijk klein en lullig, foutje in zitten ja  ::) Snap je globaal wel hoe ik het programma bedoelt heb? De overgangen tussen kleuren moet je zelf dus maken in zo klein mogelijke stapjes.

Als je een stukje zou willen opsturen dan test ik het met alle plezier voor je :) Ik zal je een pb sturen!


Timo
Verzonden vanaf mijn desktop met Firefox

Milan

  • Offline Offline
  • Berichten: 38
Re: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.
« Reactie #19 Gepost op: 15 June 2015, 16:05:19 »
Misschien dat deze regel veranderen je probleem met kleur verspringen op lost.
Orgineel:
for(byte i = 0; i < NUM_LEDS; i++){
leds[i].setRGB(r, g, b);
}

Nieuw:
for(byte i = 0; i < NUM_LEDS; i++){
leds[i].setRGB(r, g, b);
 delay(10);
}


Ik had ook problemen met timing in PWM. Het korte wachten loste bij mij het probleem op.
« Laatst bewerkt op: 16 June 2015, 11:30:17 door Neef1988 »
Projecten:
- Weer simulatie programma (gestopt)
- Bouw paradebaan Noord-Holland - Schiphol (afgebroken)
- N-Spoor Rheinland - Pfalz https://forum.beneluxspoor.net/index.php?topic=112841.0

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4655
Re: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.
« Reactie #20 Gepost op: 15 June 2015, 16:13:49 »
Hoi Neef(?),

Als je code plaatst moet je dan wel even tussen de [code ] tags doen, kijk nu maar eens naar je code  ;D

Maar dan terug komen op het onderwerp. Naast dat ik geen fan ben van de delay functie (je laat de uC zijn kostbare tijd uit zijn neus eten..) is 10ms ook erg veel. Zou je er een strook van 100 ledjes aan hangen zit je al op een seconde!

Daarnaast kan dat het probleem ook niet zijn. Alles wat de set functie doet is de waarde in de buffer (geheugen van de Arduino) aanpassen. Pas met FastLED.show() wordt het signaal naar de ledstrip gepompt (in een keer allemaal). En logischerwijs zal een vertraging voor het schrijven van wat Arduino geheugen niets uitmaken.

Mag ik vragen wat jij voor timing problemen had met PWM?


Timo
Verzonden vanaf mijn desktop met Firefox

Milan

  • Offline Offline
  • Berichten: 38
Re: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.
« Reactie #21 Gepost op: 16 June 2015, 11:38:44 »
Beste Timo,

Misschien is 10ms ook wel wat veel. Heb alleen de ervaring dat bits nog wel eens door elkaar willen lopen bij een Arduino UNO,

Met het project waar ik zelf mee bezig ben heb ik het zelfde ondervonden en meestal zorgde de vertraging er voor dat dit probleem werd op gelost.

Als alle dat in één keer weg geschreven wordt met de FastLED.show() functie dan kan het hier inderdaad niet aan liggen.

Zou alleen toch een keertje de waarde van de variabele leds.setRGB(r, g, b) uit lezen per led.

Misschien kom je hier ongeregeld heden in die niet zouden moeten.
Projecten:
- Weer simulatie programma (gestopt)
- Bouw paradebaan Noord-Holland - Schiphol (afgebroken)
- N-Spoor Rheinland - Pfalz https://forum.beneluxspoor.net/index.php?topic=112841.0

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4655
Re: Modelbaan uitlichten m.b.v. WS2812 (Neopixel) leds en Arduino.
« Reactie #22 Gepost op: 16 June 2015, 16:31:58 »
Hoi Milan,

Bitjes door elkaar lopen is per definitie niet mogelijk. Het schrijven van bitjes is iets wat de Arduino doet en pas verder gaat als het gedaan is.

Wel kan het zijn dat externe dingen (Serial, ledstrips, displays enz) wat tijd nodig hebben het te verwerken. Nu kan een hele korte delay wel eens handig zijn maar dan een paar microseconde. Gebruik van delay() is eigenlijk altijd af te raden en kan beter opgelost worden.

Wil ik het probleem eruit halen zou ik er toch even weer langer voor moeten gaan zitten. Al weer even geleden dat ik naar de library gekeken had...  ::)

Timo

PS, let met code plaatsen even op. Code met arrays botsen namelijk met de opmaak tags, zeker omdat i vaak als pointer gebruikt wordt maar [i ] italic oplevert.
Verzonden vanaf mijn desktop met Firefox