The PX4 autopilot is an amazing open source platform for research. It is one of the first open source autopilots capable of running an on-board extended kalman filter and other advanced control and navigation algorithms. It is also mass produced by 3D Robotics and very affordable.
BlinkM driver with system supervision
Recently I have implemented a optical system supervision with a BlinkM or as an alternate the CYZ_RGB Firmware if you want to build your BlinkM alternate by yourself.
With this driver you are able to get an optical Feedback about the number of used Satellites (if a GPS-Receiver is mounted), selected Flight-Mode, battery warnings and alerts.
For more Information on how to use this, visit the PX4 BlinkM driver page
@majid, the PX4 code cannot be used on APM, but the point with the BlinkM is that they are i2c controlled. So if you have i2c on your APM you can hook it up and control it, although you would I suppose have to add the code for which light color/mode corresponds to which mode into the code of that mode.
On PX4 you have multitasking concurrent processes which means you can just run the BlinkM code side by side with the attitude estimator and other code. This being one of the major strenghts of the PX4 system.
Will be adding this to my PX4 setup, once I get comfy enough to put it on a big frame it'll look sweet with one under each motor.
What I wonder is does it "mix" the signals, say you are in Hold mode with steady slow blue blink, and your battery goes critical, does it then alternate white and blue somehow or how does this work?
Wondering as I mostly fly without telemetry/GCS for short moments.
Can this be integrated with APM? I mean to say that how would one get the status of different sensors for APM? Can your code be modified for APM?
a new version with customizable BlinkM address as optional parameter is in progress.
one of the comments on the instructables site brought help, if you build your "ghetto pixel" and upload the firmware/hex it will be at adress 0x00. so after using the BlinkMTester Arduino Sketch from the examples with the commands "a0" followed by an "A9" and then an "R" i had my homemade version reset to defaults at the nice adress 0x09
from there on its working as it should
@Marco: i used exactly the hardware (attiny45 DIP) and i tried to flash the hexfile for the attiny45 slave with AtmelStuido 6.0 and with avrdude using an AVR ISP MKii both succesfull. At least that was what both programms told me.after that i used the blinkm communication sketch and the sequenzer2 application to scan the i2c bus... nothing on it. after that i had a look at the source code and atmel studio couldn't compile it because there were 2 errors, first the depreciated "#import" and second a problem with the sequenz (needs to be const for progmem)
so i changed this to #include and added a "const" to the sequenz, compiled uploaded, still no device on the i2c bus
next i deactivated the part that reads the i2c adress from eeprom and now it used its preprogramed address and was visible and i could set a color, but still no sequenze was running when i just powered it or when i tried to program it with one.
on the instructables site is a link to a newer fork in the comments -> https://bitbucket.org/Fanjita/cyz_rgb_fork
but same with this one the supplied hex file just doesn't work for me and i don't know why :(
just for fairness i have a REAL BLINKM here on my desk which is working wonderfull without any headache.
its just that i needed another one and had a attiny45 here in my box...
kind regards Christoph
If you need a bright solution, you should use the MaxM if you can place it (size).
Cool implementation of another type of information structure are you using BlinkM or MaxM?
Should be really fun to play around with and determine what the best information it might represent or just to make really interesting light show or both.
you mentioned the cyz rgb firmware... i just tried that code prior to your comment and wondered what you did to get it working, i spent the whole weekend trying to figure out how to get it running.