views:

4712

answers:

12

A student of mine came to me this morning and asked for some ideas for an embedded systems (ideally hardware+software design) project to be completed in the next 6 months or so. He's a freshman, and inexperienced, but has the motivation to learn if pointed in the right direction. The purpose of completing this project, besides getting his feet wet in Electrical/Computer Engineering and Computer Science, is to make his resume more attractive in terms of snagging an internship in Summer '09.

My question is:

  1. What are some good general resources to understand simple hardware, a microcontroller, and the basics of what firmware/software is, given little to no experience in any of the above? My own background is somewhat unhelpful here, as I learned a lot through both formal training (which he's interested in, but wants to get started now) and through the internship I got my freshman year through nepotism ;-) (which he wants to do, but there's a chicken-and-egg problem)

  2. What are some interesting project ideas of the appropriate scope?

Some initial ideas:

  • A Jeopardy-style game that would light up an LED, and the player who pressed his/her button first is the winner, and perhaps the microcontroller could keep score on a couple 7-segment displays.
  • A tone generator (user sets DIP switches (or more ambitiously, presses keys on a PS2 keyboard) to set a frequency), and the microcontroller uses a D/A converter to output a sinusoid of that frequency
  • Some kind of small sensor (maybe a temperature sensor for his dorm room that served up the results as an RSS feed). The web-based aspect of this project would be made significantly easier with a RabbitCore from Rabbit Semiconductor.

All the suggestions as to microcontroller kits are great! I would really appreciate additional project ideas (i.e. "The student should design X) as well. Thanks!

+4  A: 

Many microcontroller manufacturers offer cheap experimental boards and development tools that are fun to play with.

Examples:

(Others feel free to add to this list.)

Kristopher Johnson
+7  A: 

I've heard, and read a bunch of good things about the Arduino and PicAxe platforms. Arduino seems to have the biggest community behind it, and the upstart cost is fairly minimal (~20-30USD for the kit).

http://arduino.cc/

LadyAda from adafruit industries sells a tutorial kit which comes with an Arduino board and 8 tutorials which teach basic electronics, and microcontroller programming.

Abyss Knight
+4  A: 

Lego Mindstorms may be a place to start. The firmware is open-source, so your student could experiment with adding new I/O features or creating some new peripherals.

Kristopher Johnson
Good idea! I enjoyed the first rev of Mindstorms quite a bit as a young teenager, I think subsequent revs are even more interesting, and abstract away most of the stuff that requires formal education to really understand.
Matt J
+1  A: 

A Tern Acore86 board is a nice kit to work on.

Paul Nathan
A: 

There are several companies that make small robot kits using PICs or similar microprocessors.

Jim C
+2  A: 

I have been working in embedded systems for over a decade now, and for a beginner Rabbit Semiconductor is hard to beat.

However, you can start much more cheaply with Arduino and a few other systems. But there's always a tool installation and setup learning curve. Rabbit stuff is very nearly designed as "hardware for software programmers" and is very easy to get started with, as well as pretty powerful. My first effort was putting dynamic web pages in there to display graphs of weather related sensors (wind, temp, pressure, etc).

If I were to do it again, I'd stuff Ajax techniques in there, and use canvas or svg to generate much nicer graphs.

Other options are Microchip's new 32 bit processors, and Atmel's AVR32. You can get started with those for about $100. The AVR32 supports linux now, and for not too much more money you can get an LCD and other stuff to make it a very high end embedded system. They also come with WinCE demonstration software so you can check out that end of development. The 32 bit PIC doesn't yet have linux on it, and I don't know that it'll support WinCE.

Disclaimer: I worked for Rabbit some time ago. Technically the processors are not horribly powerful, but the compiler and included libraries are so full featured and easy to use that a lot of people use them.

Whichever way he goes, good luck!

Adam Davis
Great suggestions! Yeah, embedded Linux is an interesting part of the space, it just abstracts away a lot of the things he might want to learn his first go 'round. PICs (and others) don't have an MMU, which means that they can't do virtual memory, which means nothing better than a simple RTOS :-(
Matt J
+1  A: 

I think best way to start work on embedded systems is to work on BeagleBoard.

BeagleBoard is Texas Instruments OMAP3 Processors, which includes ARM processor as well as a DSP. Besides that the cost is too cheap compared to other development boards, its just 150$.

And the best part is that software for it is completely Open source, you can make a build using components such as Linux kernel, uBoot and xloader.

Initially play around it, try to make a stable build. You can think of many projects which can use the power of the board.

Best wishes for it.

Chintan
A: 

The Chumby provides an incredible platform for newbie embedded systems programmers. It provides a great set of peripherals (LCD, USB, speakers, wifi), is completely open source (if you ignore the FLASH stuff), and provides a great interface to a prototyping board.

Nate
+3  A: 

I'd recommend a Lego Mindstorms NXT kit. The updated robotics kit has many attractive features such as servo motors with integrated encoders, Bluetooth and ultrasonic distance sensors. Third parties have also developped accelerometers, gyroscopes, compasses and much more. You can easily develop your own sensor since all sensors operate on the standard i2c bus.

Last year, with a few other students, we built a small Segway-like robot using the Hitechnic gyroscope and open-source LeJos firmware. It would have been quite possible to built a client-server interface so that we could control the robot wirelessly using a bluetooth device (i.e. mobile phone).

This platform is very versatile if you want your project to move and the community is great. Check out the following project ideas using custom sensors.

JcMaco
+1  A: 

I strong recommend Parallax products which you can find here

Basic Stamp and the propeller chip are both outstanding. Many add-on boards are available that allow you to do many simple and complex projects.

Mindstorms is good but a bit pricy compared to what Parallax offers. However for easy of use nothing can be Mindstorm.

RS Conley
+2  A: 

Something else to consider...

You need to decide what it is you want the kid to learn. There are a lot of different kits you can buy (see above answers for a lot of good ones); however, keep in mind that kits are made to get the user up and running quickly, usually to evaluate some microcrontroller or interface chip.

For really teaching someone embedded systems, "quickly" isn't necessarily the best way to go. The kits will provide some IDE (Interactive Development Environment) that adds multiple levels of abstraction between the student and the topic of "learning firmware". As a result, the kid may be writing "hello world" apps the first day, but still doesn't have a clue what the difference is between RAM/ROM/Address/Data/etc...

Bottom line... these days, there are so many kits out there, you really have no choice but to just pick one (see other answers for good suggestions); however, if you really want the kid to learn the fundamantals, then after he writes the "hello world" app, and makes a few LEDs blink. Stop him there, and teach him whats behind all that.

Yep, that didn't directly answer your question, but hopefully it will guide you in how to really teach him the "meat". A good place to start for this may be a book I wrote a few years ago: "Embedded Systems Firmware Demystified". There are others as well, like "Programming Embedded Systems in C and C++". My book also introduces a boot monitor that is a good place to start for learning firmware. Check out http://www.umonfw.com for info on that.

Ed
+2  A: 

Check http://www.embedds.com

It's a listing of embedded system projects from all over the web. Most are beginner or hobbyist generated and would be a good start or inspiration.

Hillwalker