Pagina1 van 1
Forum

Welkom bij de Tweaking4All gemeenschapsforums!
Voor je gaat deelnemen, bekijk de Forum Regels!

Specifieke onderwerpen: Start het onderwerp met de naam van het programma of systeem.
Bijvoorbeeld “MacOS X – Jouw vraag“, of bijvoorbeeld “MS Word – Jouw Tip of Truc“.

Merk op: Omschakelen naar een andere taal zal niet werken als je een post aan het lezen bent aangezien er waarschijnlijk geen vertaling beschikbaar is.



Arduino - LED raceb...
 
Deel:
Meldingen
Alles wissen

[Opgelost] Arduino - LED racebaan project

55 Berichten
3 Gebruikers
0 Reactions
8,645 Bekeken
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
Topic starter  

Dit is een voortzetting van een opmerking van Alexander, onder het LED Effecten artikel.

ik ben bezig met een model racebaan te maken van hout 140cm x 80cm. hierin heb ik een sleuf gefreesd van 1.2 mm waarin ik de led’s ws2812b in leg. zelf gesoldeerd.

ik heb jou programma first led gepakt en die werkt goed. maar nu wil ik 2 leds apart laten branden op 1 strip. deze leds wil ik via een potmeter aansturen. ieder 1 potmeter. zodat ik ze alle twee afzonderlijk sneller en langzamer kan zetten. je moet het zien als een echte race. nu zag ik dat ik in firstled de kleuren en brighnes niet kan inprogrammeren.

ik ben echt een leek en een beginner in dit…wel ben ik al een heel eind opgeschoten zodat ik de leds al aan de gang hem met jou programma. toch kan ik nog heel veel hulp gebruiken om mij op een goed spoor te krijgen in wat ik wil. Een link naar een video voor dit project.


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
Topic starter  

Dus als ik het goed begrijp wil je een ouderwetse race-baan maken.
Met 2 racers, die ieder een potmeter in de hand hebben om hun snelheid aan te geven, en een ledje voor elk autootje.
Als ik me goed herinner zijn die "knijpertjes" (controllers) inderdaad potmeters.

Als ik er zo over nadenk, dan zou je het volgende kunnen doen;

In de loop() kijken wat de waarde is van elk van de 2 potmeters, en op basis daarvan opgeven hoeveel stappen een autootje vooruit gaat.
Elke autootje heeft z'n eigen kleur, behalve als beide autootje op dezelfde positie staan (misschien het LEDje wit maken voor dat geval?).
Positie op de baan moet worden bijgehouden, maar ook waar de start-streep is en hoeveel rondjes men gaat rijden.
Misschien is een "start" knop ook wenselijk zodat men alleen maar tegelijk kan starten.
Als de race over is, misschien de winnaar laten knipperen.

Laten we beginnen met de start knop. Ik zou een schakelaar gebruiken, die of aan of uit staat.
Er is een Arduino voorbeeld hiervoor: Arduino Button. Daarbij is de volgende code van belang:

int Schakelaar = 2; 
int Racen = 0; // stand van de schakelaar
...
void setup() {
  pinMode(buttonPin, INPUT);
...  
}
void loop() {
Racen = digitalRead(Schakelaar);
if (Racen == HIGH) {
    // doorgaan met racen
    // hier lezen we dus de potmeters en zetten de betreffende LEDs aan afhankelijk van hun positie
  } else {
    // alle LEDs uitzetten }

Voor de potentiometers bestaat ook een voorbeeld: Arduino Potentiometer

Als test voorbeeld (voor uitvoer via de seriële poort naar de serial monitor, zie ook dit artikel). Dit voorbeeld kan handig zijn om wat te testen, zodat je een idee krijgt wat voor waarden de potentiometers gaan geven.

int potPin = 2;    // select the input pin for the potentiometer
int val = 0; // variable to store the value coming from the sensor
void setup() { Serial.begin(9600);
  pinMode(ledPin, OUTPUT); // declare the ledPin as an OUTPUT
}
void loop() {
  val = analogRead(potPin); // read the value from the sensor
  Serial.println(val);
  delay(val); // stop the program for some time
}

Ik vermoed dat een 10K Ohm potentiometer prima gaat zijn. Dan moet je alleen even kijken wat beter gaat werken; een lineaire of logaritmische potentiometer. Ik vermoed dat lineair het beste gaat werken.

De analoge pin leest een waarde tussen 0 en 1023, afhankelijk van de potentiometer, en deze waarde moeten we dus omzetten naar snelheid.
In dit voorbeeld neem ik even aan dat we pin 3 en 4 gebruiken voor de potmeters

int potRacer1 = 3;
int potRacer2 = 4;
...
void loop() {
  snelheidRacer1 = analogRead(potRacer1); // Deze waarde moeten we straks nog wel
  snelheidRacer2 = analogRead(potRacer2); // op schaal zetten zodat de race niet met 1 klik over is
  delay(X); // wacht X milliseconden tussendoor anders gaat het e.e.a. te snel en is de race zo over.
}

LED plaatsen - je sprak over een voorbeeld dat je gebruikt met de naam "first led" - helaas weet ik niet welk voorbeeld dat zou zijn. Weet je of je NeoPixel of FASTLed gebruikt? Zie ook dit artikel voor de verschillen - beiden werken overigens prima.

Voor beide is het plaatsen van een LED relatief eenvoudig:
1) Zet alle LEDs UIT
2) Als beiden op dezelfde positie staan, zet deze LED dan op WIT, anders zet betreffende LED aan voor autootje1 (bv Rood) en voor autootje 2 (bv. Blauw).

Als voorbeeld voor het zetten van de LEDs;

// Stel we gebruiken 60 LEDs
#define NUM_LEDS 60
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
...
void setup() {
  strip.begin();
  strip.show(); // initialisatie van alle LEDs
}
void loop() {
  ...
  for(uint16_t i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, 0,0,0); // alle LEDs UIT
  }
  ... PositieRacer1 = PositieRacer1 + SnelheidRacer1; PositieRacer2 = PositieRacer2 + SnelheidRacer2; ...
  strip.setPixelColor(PositieRacer1, 0xff,0,0); // rode autootje
  strip.setPixelColor(PositieRacer2, 0,0,0xff); // blauwe autootje
  strip.show();
  ...
}

Nu hebben we nog de volgende problemen over:

- Hoe schaalt de baan versus de snelheid van de autootjes?
- Afvangen van de finish lijn (eventueel 2 LED displays die aangeven welke ronde we zijn?)
- Afvangen wanneer de race over is

Ik vindt dit wel een erg leuk idee, dus (met jouw toestemming) wil ik dit later misschien omzetten naar een artikeltje.


   
BeantwoordenCiteren
(@hamilton_fan)
New Member
Deelgenomen: 9 jaar geleden
Berichten: 1
 

Hallo.

ik heb even een ander account aan gemaakt omdat ik bij alexander44 niet meer in kan.

allereerst alvast bedank voor je uitleg. weet wel dat ik een leek en beginner ben met dit. maar ik weet wel wat ik wil.

Ik werk met ws2812b leds die ik zelf aan elkaar soldeer en een adruino one r3.

ik zal het proberen uit te leggen wat ik zou willen doen. De racebaan heb ik van MDF gemaakt. 150cm x 80cm en 3cm breed 18mm dik. in het midden van de baan heb ik een sleuf gefreesd van 5mm diep en 12mm breed waar de leds in worden gelegd. als die erin liggen dan giet ik ze af met 2k hars. om te beginnen zou ik met 2 leds willen werken die ik via een potmeter (10K) in snelheid kan regelen. ook hebben ze alle twee verschillende kleuren. laten we ervan uit gaan dat ik 150 leds heb in de strip. voor led nul wil ik de auto's (leds) laten starten. de eerste begint op led 149 en de tweede op 147. voor de start finish dus :).  nadien wil ik ook gaan kijken of dit gaat lukken met 10 leds maar dat is voor later een zorg.

de baan in ongeveer 4.50mtr lang in zijn geheel. ik vond de snelheid van mijn firstlight van fastLED wel goed.

Graag zou ik ook de kleuren kunnen veranderen in alle kleuren dmv codes. mij is het nog niet gelukt om die codes te gebruiken. simpelweg omdat het programma ze niet ken. code 0xFF6347 en 255,99,71 werken dus echt niet al zou ik dat graag willen lol. dit omdat later misschien met meerdere leds en kleuren gaan werken.

je mag hier zeker een artikel over schrijven daar heb je mijn toestemming niet voor nodig maar zal het je wel geven.

ps: hoe lijm ik het beste een printplaatje op MDF (5v)?

nogmaals bedankt. met vriendelijke groet Alexander van loon.


   
BeantwoordenCiteren
(@alexander44)
Eminent Member
Deelgenomen: 9 jaar geleden
Berichten: 29
 

Hij doet het weer.

Ik was nog even vergeten te vertellen dat het een decoratie is voor aan de muur in de woonkamer. 


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
Topic starter  

Hoi Alexander! 

Dat ziet er echt gaaf uit! Ik wou dat ik zo handig was met een frees (misschien m'n zwager eens aanspreken haha)!

Laten beginnen met de code die je geprobeerd hebt - kun je die hier posten?.
Als jij namelijk zegt "0xFF6347" als kleur, dan wil dit zeggen:

Rood = 0xFF
Groen = 0x63
Blauw = 0x47

"0x" wil alleen maar aangeven dat het nummer een hexadecimaal nummer is.

Dus voor deze kleur, stel je gebruikt NeoPixel:

strip.setPixelColor(LedNummer, 0xff,0x63,0x47);
strip.show;

Voor FastLED gaat het op een vergelijkbare manier:

   leds[LedNummer].r = 0xff;
   leds[LedNummer].g = 0x63;
   leds[LedNummer].b = 0x47;
   FastLED.show();

Voor wat betreft het lijmen van een printje op MDF (ik neem even aan dat het de Arduino is):

- Afstandsbusje gebruiken (en dus schroeven)
- Clip Holder gebruiken (zie attachments)
- Arduino holder (zie attachments)

Als je goed met een frees overweg kunt (wat wel blijkt) dan kun je misschien een sleufje maken waar de Arduino in geschoven kan worden?

Als je echt zou willen gaan lijmen;
Expoxy/Hars zou ook kunnen volgens mij. Het geleid geen stroom als het hard is - maar dus niet onder dompelen, vanwege de mogelijk nodige lucht koeling voor de microcontroller.

Misschien geeft dit wat ideëen 


   
BeantwoordenCiteren
(@alexander44)
Eminent Member
Deelgenomen: 9 jaar geleden
Berichten: 29
 

Hoi hans.

Ik wil de arduino niet lijmen maar eerder de ws2812b in de track. Ik heb het na gevragen en kan de printjes vast zetten met dubbelzijdige tape. Daarna als alles werkt ga ik de sleuf afgieten met 2k hars.


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
Topic starter  

Hoi Alexander,

Als je de print met 2k hars kunt plaatsen, dan kun je dat ook gebruiken voor de Arduino natuurlijk.
Ik weet niet meer of je vermeld had welk model Arduino je gebruikt, maar misschien is de Arduino Nano in een later stadium een goede keuze - lekker klein en goedkoop. 
De Nano is ong. 2x4 cm groot.


   
BeantwoordenCiteren
(@alexander44)
Eminent Member
Deelgenomen: 9 jaar geleden
Berichten: 29
 

Inderdaad het ik een arduino uno r3 en de nano ligt hier ook al klaar. Die kan je inderdaad beter verstoppen. De uni r3 is wat makkelijker om mee te testen.


   
BeantwoordenCiteren
(@alexander44)
Eminent Member
Deelgenomen: 9 jaar geleden
Berichten: 29
 

Zo..de leds zitten in de track. Nu kan ik me gaan concentreren op het programma. Ik zal straks ff code neerzetten.

https://www.dropbox.com/s/kdzathrz2vzim11/20160429_135331.mp4?dl=0


   
BeantwoordenCiteren
(@alexander44)
Eminent Member
Deelgenomen: 9 jaar geleden
Berichten: 29
 

hoi Hans.

ik ben ff bezig geweest met de track om alle leds erin te frotten. resultaat zie hierboven.

ik heb wel een code van FASTLED-FIRSTLIGHT. beetje het standaard verhaal alleen heb ik de led nummer verandert.

eerste probleem is dat de leds de verkeerde kant opdraaien. ik weet het...ik had ze ook andersom moeten zetten maar daar kwam ik pas achter toen ik halverwege was. lol

// Use if you want to force the software SPI subsystem to be used for some reason (generally, you don't)
// #define FASTLED_FORCE_SOFTWARE_SPI
// Use if you want to force non-accelerated pin access (hint: you really don't, it breaks lots of things)
// #define FASTLED_FORCE_SOFTWARE_SPI
// #define FASTLED_FORCE_SOFTWARE_PINS
#include "FastLED.h"

///////////////////////////////////////////////////////////////////////////////////////////
//
// Move a white dot along the strip of leds.  This program simply shows how to configure the leds,
// and then how to turn a single pixel white and then off, moving down the line of pixels.
//

// How many leds are in the strip?
#define NUM_LEDS 148

// Data pin that led data will be written out over
#define DATA_PIN 6

// Clock pin only needed for SPI based chipsets when not using hardware SPI
//#define CLOCK_PIN 8

// This is an array of leds.  One item for each led in your strip.
CRGB leds[NUM_LEDS];

// This function sets up the ledsand tells the controller about them
void setup() {
 // sanity check delay - allows reprogramming if accidently blowing power w/leds
    delay(2000);

     
       FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS);
     
}

// This function runs over and over, and is where you do the magic to light
// your leds.
void loop() {
   // Move a single white led
   for(int whiteLed = 0; whiteLed < NUM_LEDS; whiteLed = whiteLed + 1) {
      // Turn our current led on to white, then show the leds
      leds[whiteLed] = CRGB::Red;

      // Show the leds (only one of which is set to white, from above)
      FastLED.show();

      // Wait a little bit
      delay(100);

      // Turn our current led back to black for the next loop around
      leds[whiteLed] = CRGB::Black;
   }
}



   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
Topic starter  

Alvast een eerste antwoord, terwijl de video over m'n slome Internet verbinding aan het downloaden is ...

Als je de loop wilt omdraaien, in jouw code hierboven, dan kun je gewoon de for-loop omdraaien, dus:

for(int whiteLed = 0; whiteLed < NUM_LEDS; whiteLed = whiteLed + 1)

wordt dan

for(int whiteLed = NUM_LEDS-1 ; whiteLed>=0; whiteLed--)

Zie ook Arduino Programmeren voor Beginners – Deel 5: Lussen 

De loop gaat dan gewoon achteruit tellen ipv vooruit ... 


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
Topic starter  

Zit net de video te bekijken: Mooi man! 


   
BeantwoordenCiteren
(@alexander44)
Eminent Member
Deelgenomen: 9 jaar geleden
Berichten: 29
 

het word al iets...lol...wel veel werk om het allemaal netjes te doen maar het blijft een eerste project.


   
BeantwoordenCiteren
(@alexander44)
Eminent Member
Deelgenomen: 9 jaar geleden
Berichten: 29
 

het ledje gaat nu rechts om.. toppie. maar ik snap niet echt hoe dat kan om die ene zin te veranderen. ik snap die code nog niet echt. dat krijg je als leek zijnde. ik ben ook telkens door die lessen aan het gaan maar voor mij is dat allemaal geheime taal haha. maar komt goed.


   
BeantwoordenCiteren
(@alexander44)
Eminent Member
Deelgenomen: 9 jaar geleden
Berichten: 29
 

hoi hans.

de racebaan telt 148 led's. de start finish zou op led 93 moeten komen en zou ook heel de tijd zwak wit mogen branden. om twee led's te laten beginnen met racen zou ik ze laten starten op led95 (groen) en op 97 (rood). mocht ik zonder potmeters willen gaan werken dan kunnen er nog wat leds bij. dus op led99 (blauw) en op led 101 (geel). wel zou ik deze in snelheden willen laten verschillen. maar omdat ik een zeer grote Lewis hamilton fan ben mag de groene het snelste gaan. lol. er zullen 52 rondes (rechts om zoals jij mij hebt uitgelegd en zoals hij het nu doet) worden gereden. wat we daarna laten doen met alle leds moet ik nog even wat op verzinnen. misschien heb jij ook wat ideeën.

dit is ongeveer wat ik in mijn hoofd heb zitten wat me wel leuk lijkt.

alvast bedankt voor de uitleg. ik ga weer even wat lezen in het programmeren voor beginners pffff lol.

 


   
BeantwoordenCiteren
Pagina 1 / 4
Deel: