I am using the APM 2 for both my quads and it is tricky to get the barometer covered to avoid errant airflow since it is below the daughterboard. To solve this, I ended up pretty much filling up my stack cover with breathable foam. But once that was done, I could barely see the on-board LED indicators.
Fortunately, the current code supports remote indicators without too much trouble.
If you look at the pin-out images on the Wiki, you will see that the AN pins are labeled Motor LEDs. They really don’t have a lot to do with the motors – but they do serve as pretty handy indicators.
If you look in the code, you will find defines for these pins as follows:
AN4 – Motor or Aux LED
AN5 – Motor or Beeper
AN6 – Motor or GPS
AN7 – Motor
AN8 – Motor
For my purposes, I focused on AN5 for the Beeper, AN6 for GPS indicator and AN7 as an Armed indicator.
The default seems to be to have the beeper enabled and the LEDs on. That is easy to change however. The different possibilities are set using bit masks to build the LED_mode parameter. A bit mask (if you already know, feel free to skip ahead) is simply a way of packing a bunch of on/off settings into one byte of data. A Byte is 8 bits, so you can have 8 different switches in one byte. If you look at the following table, you will see a single bit is set to ‘1’ and the rest to ‘0’ in each row. To build the mask, you just add all the rows together and convert to a decimal number (or convert then add).
Bit Number
7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 1 = 1 Motor LEDs On/Off
0 0 0 0 0 0 1 0 = 2 GPS On/Off
0 0 0 0 0 1 0 0 = 4 AUX Function On/Off
0 0 0 0 1 0 0 0 = 8 Beeper On/Off
0 0 0 1 0 0 0 0 = 16 Low Battery Flash – fast/slow
0 0 1 0 0 0 0 0 = 32 Motor LEDs NAV blink On/Off
0 1 0 0 0 0 0 0 = 64 GPS LEDs Nav Blink On/Off
1 0 0 0 0 0 0 0 = 128 Not used
Note that the NAV settings cause the LEDs (either the motor LEDs, the GPS LED, or both) to blink 3 times when you hit a waypoint in AUTO flight.
The low battery flashing defaults to fast flash so setting that bit to 1 will enable slow flash.
I really only want the beeper, the GPS and the Motor LEDs on, so I set the mode to decimal value 11 (which is binary 00001011). This should equate to: GPS Nav blink off, Motor LED Nav blink off, low battery flash fast, beeper on, AUX off, GPS on, Motor LEDs on..
The way you set this to be the value used is through the Mission Planner.
Establish a connection with the APM and the Mission Planner software. Go to the parameters list and find LED_Mode. It should be set to something like 9. Change that to 170 (or whatever you decide to use) and write the settings to the APM.
The outputs on the APM are 5V, so for most LEDs, you’ll need a resistor on the positive lead (the longer leg of the LED). In my case, the blue LED I was using required a 100 Ohm resistor and the red one required a 150 Ohm resistor (note – not going to explain it here, but there are a ton of online resources and calculators to figure out the resistor values needed for a given LED). I soldered up the resistors and LEDs to leads and cemented them at the edge of my stack cover’s base. For the beeper, I just used a 5V piezo beeper I happened to have lying around. Radio shack sells one that will work, but it isn’t very loud. If you want volume, you may need to shop around,
When you connect to the AN outputs, you need to run the negative lead to the ground pin (the one nearest the edge of the board) and the positive lead goes to the signal pin (the one farthest from the edge of the board). The middle pin is always 5 Volts so if you plugged in there, the LED or beeper would be always on.
Beeper goes to AN5, GPS to AN6 and the ARMED light goes to any other motor LED output, but I chose to just use AN7.
That’s all there is to it. When you turn on the APM, you the LEDs will stay off until it is booted, then will flash the same as the on-board ones. When a GPS lock is achieved, the GPS LED will stay lit. When the bird is armed, the red LED will blink out and once it is fully armed, it will light a solid red. The beeper will beep twice on arming, and once on disarm.
Comments
Just made my mod, great Scott! works like a charm with a value of 11. so much easier now.
Now Im intrigued with the other pins. fancy doing the nav flashing etc, but will drive those with a transistor to limit current draw out of the APM. Out with the Veroboard!
Is the behavior of the other led modes documented somewhere so I can RTFM?
thanx Scott for an informative post!
GPS sounds right, but I have not seen the slow flash fast flash you reference for the others. I would expect flashing when disarmed and solid red when armed.
What should the default behavior be if the bitmask is set to 3? Right now i have blinking blue on no GPS fix, and solid on fix which is great. However the red LED blinks slow on disarm and faster on arm. Is it still necessary to edit the "leds" source code to get red off (or blinking) on disarm and red solid on arm?
I focused on AN5 for the Beeper, AN6 for GPS indicator and AN7 as an Armed indicator.
I set the mode to decimal value 11.
Establish a connection with the APM and the Mission Planner software. Go to the parameters list and find LED_Mode.
could you post the code you added to make the led works
Aux LED is AN4 on APM2. What it does is allow you to turn a signal on and off manually using Ch7. So this is a "sub-function" of Ch7, and you can still use the Ch7 for other Ch7 things.
The normal Ch7 functions (eg: simple mode) only turn on when Ch7 goes above 1800 PWM. The Aux LED will turn on with a PWM of only 1400. Oh wait... I just looked, somebody broke that during the move to 3.0. So now Aux LED will only come on when Ch7 goes above 1800. Bummer.
Still could be useful, you could have a light come on whenever you use Ch7, for simple mode, camera trigger, etc.
Just wanted to say thanks for the wonderful post... got it all working last night with no problems.
I used a 4x 3mm LED Bank in parallel to split up Green and Red along with the Buzzer wrapped in Ducting Foil to shield interference.
Cheers.
The beeper is A5 as above. the LED_MODE set to 11 should work to enable Arm, beeper, and GPS. I think mine is actually set to 27. If you only want the beeper, 9 should work. Remember you only want the ground and signal lines. The signal is sourcing the current. You also need to ensure your beeper has an internal driver. You can test it by connecting it directly to a 5V power source. If it does not make a sound, It won't work. Some devices require the input signal to be modulated externally. These will just make a short click when power is applied. The APM just raises and lowers the signal line to turn the beeper on and off.
In wich output pin do you have the buzzer, and what value do you have in the led_mode parameter? Thanks Wayne !
I am using V3.0.1. I built a board and connected the arm, gps, and buzzer. The buzzer works for arm, disarm, and low battery on mine. I did not do anything special other than enable the low battery alarm. If I connect with USB (no battery) the alarm - buzzer is on all the time. I have to put a piece of tape over it.