I finally received my Raspberry Pi Zero, just in time to get into the DIY challenge of building a smart drone with the Pi Zero and APM under 100$. I called this project: MINI-Zee
How this can be done?
Well first of all, thanks to Victor and the team at Erle Robotics for releasing the plans and software of their PXFmini. This is a real inspiration for building my own board, because all the parts are available at a cheap price and are relatively easy to assemble and interconnect using through-hole breadboard, providing you are very experienced with this type of build. Thanks to Mirko as well, for having introduced a real DIY autopilot project that allows us to experiment with a fully working and well supported BeagleBone based ArduPilot Cape called the BBBMINI.
Bill of Material (US$ - Transport & taxes excl.):
Raspberry Pi Zero 5.
MPU 9250 (SPI 9 dof IMU) 8.
MS 5611 (SPI Baro) 9.
PCA 9685 (16 channel PWM Servo Driver) 5.
3.3 v. regulator 1.
BEC 3 amps 3.
Breadboard, Resistors, Connectors, Misc. 7.
AutoPilot: 38.
HobbyKing Spec FPV250 V2 Quad Copter
ARF Combo Kit - Mini Sized FPV 60.
Total: 98.
*This is Banggood price; I had an ADAFRUIT –PWM on hand, and I really recommend going with ADAFRUIT, because of all the effort they put on making a great tutorial and drivers for this product. Note: Just like Erle , the USB WIFI, GPS and the Radio Control are excluded.
Building:
A) Hardest part: Get a RASPBERRY PI ZERO (Where is my Zero site)
B) Hardware - See BOM
C) Board Schematics : Erle pxfmini
D) Board Software: Erle pxfmini
E) LOAD LATEST Raspbian-Jessie
Disable serial Login (Allow GPS on serial Port)
Enable , I2C, SPI , Serial
Disable Console = Auto Log on a shell
F) LOAD RT-PREEMPT
http://www.frank-durr.de/?p=203
Load Test Result: TEST: T: 0 ( 1136) P:80 I:500 C: 100000 Min: 16 Act: 31 Avg: 32 Max: 157
G) MAKE ArduCopter
Special MINI-ZEE release:
1) The MPU 9250 is mounted on the Z-Axis, so we need to change :
CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_PXFMINI
, _default_rotation(ROTATION_YAW_270) = to ROTATION_NONE
2) The PCA9585 has no external clock, and the ESC are connected to ports 1-2-3-4, so we need to change:
static RCOutput_PCA9685 rcoutDriver(PCA9685_PRIMARY_ADDRESS, true, 3, RPI_GPIO_27); -to-
static RCOutput_PCA9685 rcoutDriver(PCA9685_PRIMARY_ADDRESS, false, 0, RPI_GPIO_27);
H) Fly the MINI-ZEE == Add these to /etc/rc.local
#wait till network is up and DHCP assigned address
while ! ifconfig | grep 192.168.2. >> /home/pi/bootlog; do
echo “no network, waiting…” >> /home/pi/bootlog
sleep 5
done
echo “Starting ArduCopter” >> /home/pi/bootlog
sudo /home/pi/ardupilot/ArduCopter/ArduCopter.elf -A udp:192.168.gcu-address:14550 -B /dev/ttyAMA0 > /home/pi/startup_log &
exit 0
I) FIRST FLY LOG:
Thanks to the damping platform, the vibration level is within specs. Video is available for anyone interested..;-)
Conclusion:
This project took about 20 hours to complete. As you can see, I really enjoyed doing some hardcore DIY to demonstrate that it is still possible to build your own flight controller from a Linux Based system. I do not recommend to try this as a first project, but if you are interested, get a BBBMINI, this is the best introduction to DIY and if you want to fly a Raspberry Pi Zero, it is much easier to buy a PXFMINI.
Comments
Hello Patrick,
is this possible to use external magnetometer?
it is necessary for my big quad.
next question is that,the ppm problem on raspberry pi zero since ver 3.5,is it fixed?
Alex,
Meet me here: https://gitter.im/ArduPilot/GeneralChat
yes I am and I have made those changes as well. I am just not sure what version was considered working for the pxfmini as currently I can't remember having this thing up and running with 4 motors. I used the last version I had compiled for the pi zero which was 3.4.6 and I seem to have only one motor output working which is weird. I don't know what the guy from erle robotics meant by arducopter is not working on erle products as that is a very ambiguous statement to make. I just want to get this flying so I can move on to the osd.
Hello Alex,
Are you talking about the PC9685 mapping ?
2) The PCA9685 has no external clock, and the ESC are connected to ports 1-2-3-4, so we need to change:
static RCOutput_PCA9685 rcoutDriver(PCA9685_PRIMARY_ADDRESS, true, 3, RPI_GPIO_27); -to-
static RCOutput_PCA9685 rcoutDriver(PCA9685_PRIMARY_ADDRESS, false, 0, RPI_GPIO_27);
@patric where the config is changed to dictate motor output what values correspond to what? I only have one motor spinning on my setup and at this point I know it to be a software thing
Voltage from powermodule to A0
Current from powermodule to A1
Three resistors for the LEDs.
Voltage divider for the rc input. From what I've read, not needed also.
ADS115 - if you are using a module, it's
SDA to SDA,
SCL to SCL,
ADDR to GND
I don't remember which input is voltage/curent. (A0, A1)
I left my laptop at home this week, writing this from memory.
also I can't tell how you have hooked up the ads115 from the pictures
@Matic Jovanovic can you explain what the resistors that are necessary on your board do? Or am I fine without them. I understand resistors for the rc input but it looks like some others may be on board
here is something i just realized. you are not using satellite receivers are you? that may be the reason for you not having the receiver issues I am currently.