Spektrum DX6i Logo Bar LED and Backlight Mod Using Arduino

Spektrum DX6i Logo Bar LED and Backlight Mod Using Arduino

 

 

 

 

 

There’s always room for improvement or change, and that’s exactly what I’ve done here. This article is the 2nd generation based on the groundwork of the first post here. There are some similarities between the two threads and as such, these will share some images and components. I recommend reading the original post first to understand the LED arrangement and what the initial goal was for this project.

 

The Backstory

Assuming you read the first thread as recommended, you noticed it was focused solely on integrating LED’s into the Spektrum logo bar.  Unlike the higher-end DX-series transmitters (Tx), the DX6i has no light to indicate the power is on.  Sure, there is an LCD but obviously when the Tx is on the bench you can’t see that too well.  Some took a drill and placed a simple LED in place, dotting the ‘i’ in the DX6i logo and calling it creative.  Ehhh, OK… I suppose, but I want my projects to actually challenge me, and a drill and one LED isn’t going to do that.  So that’s where the first post takes me.  Distributing the LED lighting across five LED’s in a Knight Rider fashion.  Yes, KITT lives on, and if you don’t know who KITT is you probably still live with your Mom.  So that was done with analog circuitry and worked rather well.

 

The Backlight Dilema

Then I bough this backlight from HobbyKing.  It comes with wiring for their Turnigy 9X Tx, and in the tidy connector is a 470Ω resistor.  Since the 9x is a 12V Tx and the DX6i is half that, 470Ω seemed too high.  This guy says you can go down to 180Ω and one other poster mentioned 120Ω as the floor value.  That seemed like a good starting point… if I wanted a fixed output… which I didn’t.  So that was item one to work through.  Item two was how to turn off the backlight.  This particular one doesn’t have a provision for that and being that the DX6i has no factory backlight there is no software option for this.  I could put it on a toggle switch, simple enough.  One guy put it on a 555 timer chip.  Whoaa! I thought.  I just put a 555 in this thing (and you know this because you read the other post, right?)  Hmmm, definitely more complicated than the toggle so it qualified for the challenge factor, but then it would only turn on and off, like a light switch.  But what if I could make it fade on and fade off?  And what if I could ‘blur’ the LED chase sequence a little?

 

Enter the Arduino Nano

Well this certainly ratchets up the challenge factor.  Not only do I get to solder and run wire and disassemble the Tx, I get to nerd out with some pseudo-C++ programming.  That ought to do it.  I selected the Arduino Nano version because it includes the mini-B USB connector and has an extremely small form-factor.  Measuring 0.73″ x 1.70″ makes it roughly half the size of the previous board I used in the first gen effort.  FWIW, there is room for a larger Arduino, but not by much.  The Nano has six PWM-enabled ports.  PWM is Pulse Width Modulation, a fancy way for getting analog results with digital means.  Digital control is used to create a square wave, a signal switched between on and off.  More PWM nerdery here.

 

Rehashing the Logo Bar LED’s

All of the mounting and wiring is in place.  The ground remained unchanged.  I connected the five LED anode leads to 180Ω resistors, and then to the Nano PWM ports 5, 6, 9, 10 & 11.  More on why those six later.

 

Installing the Backlight

This was pretty straight forward.  I followed this article and I recommend you do the same BUT, read beyond the opening post as there are some improvements made on the original post that you may find useful, as I did.  Since the details are in the previous link, here is the 30,000 foot view.  Take your time.  That means starting with disconnecting the white plugs.  I broke a wire.  It was tiny.  Repairing it sucked.  Don’t do that yourself.  Throughout that thread there are several posters asking if they should remove the clear layers on the backlight.  Some did, most did not.  I didn’t either.  It works just fine as-is.  Be careful handling the LCD module and DO NOT scratch the silver coating on the back of it.  These will show up as hair-like lines.  Ask me how I know.  Don’t assemble it with the backlight reversed either.  I recommend first connecting it outside the Tx to get the orientation correct.  Take this time to experiment with resistors if you’re taking the “easy” route.  If you’re taking the full Arduino route, I recommend you use an digital multi-meter to gauge the milliamps the backlight pulls.  Mine pulled 47mA unrestricted and the documented limit not to exceed is 40mA per Arduino pin.  Most recommend 20mA as a safe operating output.  I chose 30mA because I live on the edge.  After you determine the resistor value that controls the milliamps write it down.  You’ll need it in the potentiometer and trimpot section.  Get it all screwed back into place.  Tie the ground wire to a suitable ground point.  I chose the outer solder point of the scroll wheel enter/select button.  Don’t guess, because the other side of the button is hot with 3.3V.  Do it backward and you’ll be disappointed.  For now leave the positive flying lead loose, we’ll address it shortly.

 

Dude, You Put Pot In Your Transmitter?

No, I didn’t.  Pot and a pot are two different things.  A pot, or potentiometer, is in our application nothing more than a variable resistor.  Why, you ask?  Now we can control the brightness of the backlight when it’s on, independent of the Arduino code.  In bright daylight, crank it up.  In the dark, dim it down.  All of this is independent of the Arduino code coming up in a little bit.  But there’s a catch!  When you take the pot full rotation in one direction there will be little if any resistance.  Uh, oh, now the backlight gets the 47mA it wanted from back in the milliamp testing.  You have two options.  A resistor or a trimpot.  Flying in the face of Einstein’s quote (or whomever really said it) “Everything Should Be Made as Simple as Possible, But Not Simpler”, I went with the trimpot.  I’m using a 2KΩ pot and 500Ω trimpot.  Stick with the 2kΩ pot for the external adjustment.  The trimpot can go lower than 500Ω, but not lower than the resistor value you wrote down earlier.  You wrote it down, right?

 

Setting Up the 500Ω Trimpot

Take your meter and measure Ω across the center pin and an outer pin of the trimpot.  Turn the trimpot full counter-clockwise.  What does the meter show?  If you’re using a 500Ω trimpot it better be close to 500Ω.  If it’s around 0Ω then move the outer meter lead to the opposite trimpot lead.  500Ω right?  This makes it so when you turn the trimpot clockwise less resistance is applied, so the screen gets brighter.  Just like a volume knob on a radio.  Somehow mark the leads as they are because we need to know how to wire it up later.  For now, set it so the resistance meters out to whatever you wrote down earlier.  See how I keep coming back to this?

 

Setting Up the 2KΩ Pot

This one is easier.  Just repeat the same process to identify which outer pin makes it so when full counter-clockwise it meters as 2000Ω.  If you wanted it to turn even darker bump this pot up to 5KΩ or even 10KΩ.  Just remember the higher you go here means the less granular control you’ll have when spinning the pot.

 

Installing the Pot and Trimpot

Pick a suitable location such that when the case halves are reassembled there is clearance with them and the existing electronics.  I put both on the rear half of the case, behind the throttle cut button and left of the throttle hold switch.  For the trimpot I drilled a small hole in the rear of the back case half between (when viewing from behind) the throttle hold switch and handle mount.  On the inside I positioned the trimpot and hot glued it in place.  The 2KΩ pot sticks up between the antenna and throttle hold switch.  The video below will be helpful here I’m sure.  We’ll wire these up soon, but they will be in series, with the output of the 2KΩ pot connecting to the 500Ω trimpot.  This way when the 2KΩ pot is full clockwise (read: 0Ω) then the trimpot will still place the resistance you wrote down earlier.  It’s all coming together, right?  And my reasoning for the trimpot instead of a static resistor is you can actually adjust or trim (hey, lookie there) the final resistance from outside the Tx.  Hooray!!! No cracking the case open to tweak this value later is genius!

 

Installing the Arduino Nano

This is up to you.  Where you choose to install it is purely arbitrary, but I would suggest leaving a few provisions.  For one, you will want a way to load and modify the Arduino code, so that means USB mini-B access and two, the reset switch is on the board, so if you need to reboot it without powering off the Tx, you’ll want a way to trip the reset pin to ground.  Those two necessities aside, you’re free to find a place that works for you.  I chose beneath the aileron/elevator gimbal.  Lots of open space there.  I faced the USB out the side, carving the plastic out so just the USB connector was flush with the exterior surface.  On the inside I leveraged the ICSP header to make it sit level and placed some acrylic scraps behind these pins.  This way when the USB is connected the board can’t push back inside the case.  Hot glue is your friend here, and it’s cheap, so go crazy.

 

Wires, Wires and More Wires

This is actually pretty easy.  Get some breadboarding jumper wire with a female end on one end and male on the other.  If you can find 8″ long jumpers then don’t worry about the male end since you won’t need to connect them together to make them long enough.  OK, here we go.  When I say pin X, it refers to the pin number as they’re screen printed on the board (which if you didn’t already notice, is upside-down now.  Haha.  Keep up!
Here is the schematic

  • Solder a 1N4004 diode (any 1N400x diode really) to the 6V solder dot under the RF module
    • Make sure the diode is blocking +V into the solder dot.  We want the power to flow to the Arduino
  • Pin 5V to diode from previous step
    • The diode will have a forward voltage drop of about .6V, so we’ll be close to 5V with alkaline AA’s, even closer with NiMH’s
  • Pin GND to ground solder dot under RF module
  • Pin RST to a switch that is normally open.  Other half of switch to ground
  • Pin D2 to 3.3V solder dot on inside edge of scroll wheel enter/select button
    • We’ll expect 3.3V and watch for 0V.  When we see 0V we know the button was pressed.
  • Pin D3 to the 2KΩ pot
    • Out of the 2KΩ pot to the 500Ω trimpot
    • Out of the 500Ω trimpot to the positive wire of the backlight
  • Pin D4 to the buzzer +V solder dot under the RF module
    • Opposite of D2, we expect 0V and when the buzzer triggers we see voltage and act in code
  • Pin D5 to the 180Ω resistor connected to logo bar LED #1
  • Pin D6 to the 180Ω resistor connected to logo bar LED #2
  • Pin D9 to the 180Ω resistor connected to logo bar LED #3
  • Pin D10 to the 180Ω resistor connected to logo bar LED #4
  • Pin D11 to the 180Ω resistor connected to logo bar LED #5

So why do the LED’s connect to those pins specifically?  Because the Nano has six PWM ports, and if we’re going to fade power in and out we must use these six ports.

 

So What’s Going To Happen?

Well, to begin with, any time the backlight is off the and the buzzer is triggered we will wake up the backlight AND blink all the logo bar LED’s.  Once the backlight is lit we assume you’re in the menu system so we stop blinking the logo bar LED’s on buzzer events because scrolling left or right creates a flurry of buzzer events.  Pressing the enter/select button will blink the logo bar LED’s to provide some confirmation the button was pressed.  In addition, each time the enter/select button is pressed the backlight timer is reset to zero.  As long as you press the enter/select button once every 20 seconds the backlight remains lit.  There is also code to periodically check the battery voltage and flicker the LED’s if it drops below a threshold for multiple periodic checks.  This prevents one-off drops and ensures the alarm trigger is legitimate.  All of the code to manage these parameters are liberally marked up in the INO file.

Interesting backlight trigger is the timer.  Every minute the backlight will relight because the buzzer would have beeped.  Kind of neat.

Unintended backlight trigger are the gimbal flight trims.  That sucks.

 

And How’s This Going To Happen?

With some code in the Arduino, of course.
Here’s a snippet, but you can get the most current full release flavor of the code here.


else if(ap >= pins && ap <= maxpin) {
value[ap-dp] = maxpwm;
q++;
if(q==intsteps){
dp+=2;
}
}
for (i = 0; i <=(pins-1); i++) { //fade all pins if(value[i] >= 5)
value[i]-=2;
} else if (value[i] < 5) {
value[i]=0;
}
}
for (i = 0; i <=(pins-1); i++) {//write to all pins
analogWrite(ledpin[i], value [i]);
}

 

Closing It All Up

The BOM (bill of materials) is here.

And here you have it.
http://youtu.be/IicKnVGPHwk

2 Comments

  1. As a fellow voider of warranties, this is really freaking cool. Just tell me where to throw my money so you will mod mine. lol

  2. kudos, your style and clarity is rare to find.

    thanks for the guide and peace!

Leave a Comment

Your email address will not be published. Required fields are marked *