I am new with APM.
I have a Evo10GX gas engine that comes with a cable for RPM telemetry, how could I read this signal with the APM.
Can any arduino compatible termometer work with APM to register the engine temperature?
Also, the airspeed sensor with a simple venturi could easily measure fuel flow. How can I write a code for this features?
It seems that is very unusual to use Gas engines with APM. I am planning to design a POD, much like this one on the photo below. With APM, GPS, Telemetry and a photo camera to Aerial Photography without much modification on my airplane.
This pod will have dampeners to filter the engine vibration. But I would like to register engine information and even develop an algorithm to manage fuel and engine health but I could not find any infiltration even about simple sensors as engine temperature and RPM. I imagine that any sensor that we could manage to interface with an Arduino would be compatible with APM.
I would like to mess with code if necessary :D I only need some tips for where to start.
I am shooting for about the same thing : RPM & engine temperature w/ telemetry using the APM. At this point, I only have the RPM working using an indepedant arduino (see below). This could be your starting point. Next, I ll try to do the processing using the on board arduino with either a thermistor, a silicon diode thermometer, or an amplified thermocouple. Finally, I will try to let the APM do the processing. If I failed, I will try to transfer the data from the arduino to the APM (using I2C, PWM, ???). The goal is to reveal the data within mission planer. It seems to me this idea fits your goal.
For now, here is what is working :
The picture below shows the canopy of my Zlin 42 (see my page) powered by a nitro 10cc four strokes.
The photoresistor is about 200 Ohm under sun light, and 5 kiloOhm under workshop light. This is current consuming. A 2k ohm under sun light should be better. I got this one with the arduino starter kit.
The picture below shows the hardware. There are arduino nano, 2 buttons (for menu), 1 switch (on/off), a pot (LCD contrast), and a LCD.
"RPM: fast" shows the function the arduino is looping on
"4.53" shows the voltage of the voltage divider (best is 2.5V, that is why there is a resistor that can be changed near the buttons, sorry it is blurry on the picture)
"6014" shows the measured RPM (round per minute), which is wrong here since the engine is OFF in my workshop
"9" shows the rising edge count
Here is a picture of the code body. Attached is a file of the full code of my on board computer.
To get the RPM, here is my idea (work in progress). The voltage divider (typically a 200 ohm resitor in series with the photoresistor) provides a voltage that indicates whether there is a face of the propeller. For instance, I typically read 2.8V with propeller, and 2.6V without. The arduino ADC converts this as 573 (=2.8/5*1023) and 532 (=2.6/5*1023). I roughly remember the voltage difference (here 0.2V=2.8V-2.6V) is typically much better. The photoresistor position can be improved on my plane, but there is no point since it already works great. Then, I record every 108us (seems to be the maximum of my elementary arduino nano loop code) the voltage.
I get a time series which looks like that :
532 532 532 532 532 532 532 532 532 573 573 573 573 573 532 532 532 532 .....
I compare with the average 532+(573-532)/2=533, and detect the rising edge at that 533 threshold and get :
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ...
then count and convert the number of edges over my 40ms time series in RPM (of a 2 faces propeller over 1 minutes).
COMMENTS AND SUGGESTIONS WELCOME.