Quadcopter: New photos and video

December 23, 2010 projects, youtube, flying



continue reading

RTOS quadcopter flight computer

December 21, 2010 projects, flying, embedded

Update: firmware, remote, and packet library all now on github.

The advent of the modern Chinese manufacturing empire has fueled an explosion of high performance, high quality, reliable, accessible, and low-cost hobby electronics like never before. That, coupled with technological advances, have made electric systems more than just an alternative to nitro fuel powered models. The technology improvements have also enabled, for the first time, hobby-level computer flight control systems and even autopilots. Many commercial and community projects have been developed to perform these tasks and out of them have come low-cost, electric powered, computer controlled planes, cars, conventional helicopters, and helicopters that defy convention. Copters with two, three, four, six, and even eight rotors have taken root in the community as a simple and effective way to lift large payloads, film smooth aerial video, and perform unbelievable acrobatics.

As part of a previous project I built a quadcopter with a laser-cut ABS plastic frame and modified version of the open source AeroQuad project. This semester I built my own open source flight software for quadcopters using the NXP LPC2148 ARM 7 processor on an FreeRTOS system. This allows the inherently unstable quadcopter to fly as a human controllable helicopter with only the addition of a wii motion plus as a gyroscope sensor for rotational acceleration.

  • Technology breakdown
  • CPU: Phillips NXP LPC2148 ARM7
  • FreeRTOS, compiled with arm-elf-gcc
  • 32-bit, 40kB RAM, 60Mh, 512kB Flash
  • Nintendo Wii Motion+ gyroscope, I2C
  • 4xPWM PPM Brushless speed controllers
  • Packetized XBee communication
  • Accurate, 10bit remote with backlit LCD
    • Four level menu system


I like remote controlled gadgets a lot. Moving beyond the 2d world of RC cars has long been my dream, but until last year it was just that: a dream. I designed and built a simple rover, controlled by a mint tin that you could simply tilt in the direction you wanted it to drive. After mastering a simple $40 mall-bought helicopter I wanted to move bigger. Rather than shell out several hundred dollars for a regular helicopter I decided to build an AeroQuad quadcopter using parts from hobbyking.com and sparkfun.com. I built my first frame, crashed a lot, and had many issues with my 15 year old FM radio controller. I designed a basic laser-cut acrylic remote and wrote modifications to fly it over a digital XBee connection. I then designed and built a laser-cut ABS plastic frame for the copter.

When I dealt with speed and reliability issues when sending ascii values over serial I decided to design a data packet transfer method similar to UDP. Upon arriving to SJSU I implemented although never finished testing a method for altitude control. I started the year with no idea for how the stabilization with PID control worked, specifically how any of the data busses were implemented, or how the sensor data was processed or used. In the course of this past year of reading, taking apart, fixing, and implementing my own features I’ve learned a great deal. I decided for my open-ended project for CMPE 146 that I’d design and  implement my own flight computer program using the real-time operating system FreeRTOS.

continue reading

mp3 player design

November 19, 2010 github, projects, embedded

Recent edit: The project is now on github! with all the original svn commit history included.


I’m participating in a national student exchange this semester at San Jose State University in Silicon Valley California. One of my classes is CMPE 146, Embedded Microprocessor System Design. For one of our projects we were told to make an mp3 player on the dev board we had to buy for the class. Since the final goal was the same for each person the design was especially important. Here’s my design:

There is also a handy PDF version.

Technology breakdown:

  • CPU: Phillips NXP LPC2148 ARM7
  • FreeRTOS, compiled with arm-elf-gcc
  • 32-bit, 40kB RAM, 60Mh, 512kB Flash
  • 512Kbyte SPI based Flash memory
  • SD Card with elm-chan.org FAT-FS
  • TI PCM1774 DAC & Amplifier
  • Phillips PCA9535 I2C Port expander
  • ST STA013 SPI MP3 Decoder


This project is open source. My hope is that it helps others get started on their ARM without breaking their legs. If you’re taking CMPE 146 want to bum off my code then be warned: my style is pretty distinctive and the TA knows my site.

The project is now on github! with all the original svn commit history included.

Overarching Design Process

I was adamant to have a fully functional audio player that I could use on a regular basis. The button control must be straightforward and the song selection must be dynamic. Using the serial terminal to change settings, select songs, or to do anything at all necessary for playing music was off the table. The interface must be usable by anyone who’s used an iPod despite not having an lcd.

continue reading

Lightweight C MP3 ID3v2 Reader

October 29, 2010 github, projects, embedded

Super lightweight MP3 ID3 metadata tag reader made for embedded systems.

Now on GitHub!


I’m writing a full-featured mp3 player for the SJSU class CMPE 146, Embedded Microprocessor System Design, that runs on the LPC2148 ARM7 Board from sjvalley. The project is running RTOS and has reads files from a SD card streams them through an MP3 decoder to a DAC and finally your headphones.

The project is coming along nicely but I wanted a way to read ID3 tags so read_ID3_info() was born.

continue reading