Enhancing Kyosho model car with LED lights: Design phase



Introduction

The target is to place a LED strip over the Kyosho model that indicate how much throttle or brake is pressed. In other words, it will be a live feedback for training future drivers.  

Methodology

In the first phase, the R&D is as follows. We selected the WS2813 Led strip that consists of 144 densely position RGB leds that are controlled by an Arduino UNO. The Arduino Uno will be used in the research phase, while NANO will replace uno in the car. A program is written that progressively turns on red color, turns it off also progressively, and does the same thing with green leds. 

Components 

  1. LED : WS2813 with 144 lights (aliexpress, 15euros)
  2. Radio: Flysky FS-GR3E receiver  and GT3C transmitter (hobbyland.gr ,80 euros)
  3. Controller: Arduino UNO R3 (skroutz.gr, 8 euros). Second phase NANO R3 (7 euros).
  4. Battery: A 5V power bank and a 2 cell LiPo 8.2v. Later to remove 5V and use only 8.2V. 
  5. LM7805: transistor for reducing 8.2v to 5v. Small cooler aluminum.
  6. Led: Power Indication Red 3.6v (Optional)
  7. Resistor: 330 Ohm for Single Led for power indication. (Optional)
  8. Capacitor 1:  To be filled C for stabilizing led stripe current.
  9. Capacitors 2 and 3: To be filled C for stabilizing LM7805 transformattor.
  10. Various cables (dupont) and mini breadboards for fast prototyping
Tools:
  1. Laptop: Blackview N97 (aliexpress, 250euros). 
  2. Software: Arduino sketch for PC
  3. USB power measure stick (Optional). Design phase only.
  4. 5V power bank (Optional). Design phase only.

Future work

The next phase will a) connect the remote control with Arduino, and b) a voltage regulator will be designed so that the 8.2V LiPo battery can feed the led stripe that works for voltage under 5.5V. These will conclude the research phase, and next the installation phase will begin.









THE CODE v2 

Use Arduino Sketch to install to NANO

// Turn on strip WS2813 with 144 LED lights
//   according to channel 2 signal
//      of flysky FS-GR3E receiver
//
// Controller Arduino Uno R3
// For connection diagram see
//    dimitriosververidis.blogspot.com
//
// Dimitrios Ververidis v1: 14/11/2025, first working version for UNO
//                      v2: 23/11/2025, intensifier light. Fine tune for NANO.
// MIT License
// Free but use at your own risk

// Library for strip
#include <Adafruit_NeoPixel.h>

// Data led for strip (use a 330 ohm R)
#define LED_PIN    6

// Number of leds on the strip
#define NUM_LEDS   144

// Define led strip
Adafruit_NeoPixel strip(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);

// Signal received at arduino slot 2 as pwm pulses (not analog)
int ch2Pin = 2;  // CH2 connected to D2

// FS-GR3E Neutral
#define PULSE_NEUTRAL 1500
// #define PULSE_FULL_MAX 1700
// #define PULSE_FULL_BRAKE 1300

// Initialize
void setup()
{
  // Listening frequency
  Serial.begin(9600);

  // Pin to hear signal from FlySky
  pinMode(ch2Pin, INPUT);

  // Initialize Strip  
  strip.begin();
}

// Main
void loop()
{
  // ----- Measure the HIGH pulse width (in microseconds) ------------------
  int pulse = pulseIn(ch2Pin, HIGH, 25000) - PULSE_NEUTRAL;  // 25 ms timeout

  // Console output
  // Serial.print("CH2 pulse width: ");
  // Serial.print(pulse);
  // Serial.println(" us");
  delay(50);

  // ------------------ LED --------------------------

  // Turn all LEDs off before visualizing next step
  for (int i = 0; i < NUM_LEDS; ++i)
  {
    strip.setPixelColor(i, 0); // Off all leds
  }

  // Green/Yellow for Throttle
  if ( pulse > 3 )
  {
      // Light up LEDs one by one starting from Led 72 (center)
      //                     ~280 / 4 ~= 70
      for ( int i = 0; i < abs( pulse / 4 ); ++i )
      {  
        // green or yellow                     R         G  B
        uint32_t col =  i < 55 ? strip.Color(   0, (i+1)*4, 0 ): // Green
                                 strip.Color( 200,      80, 0 ); // Yellow

        strip.setPixelColor( 72 + i, col ); // left
        strip.setPixelColor( 72 - i, col ); // right
      }
  }
  // Red for Brake
  else if ( pulse < - 5 )
  {
      // Light up LEDs one by one
      for ( int i = 0; i < abs( pulse ) / 2; ++i )
      {        
        strip.setPixelColor( 72 + i, strip.Color( i*3, 0, 0 ) ); // Red left
        strip.setPixelColor( 72 - i, strip.Color( i*3, 0, 0 ) ); // Red right
      }
  }
   
  // Invalidate
  strip.show();
}




Stackoverflow profile

profile for jimver04 at Stack Overflow, Q&A for professional and enthusiast programmers

Stackoverflow Reputation curve

Google scholar citations per year

Google scholar citations per year
Click image for more details

Total Blog Pageviews