Ask HN: How to learn to be a self-taught hardware (EE?) engineer?
In terms of technical skills, I am pretty much pure software (rather web dev). There are MASSIVE resources out there for learning how to program, base on CS tracks, or base on self-taught web development advice from people who've done it.
Anything from recommendations from learning Python, Ruby, PHP, to the order in which you would normally learn how to program something... HTML, CSS, Javascript and some backend language, etc...
Perhaps I'm a bit naive in hardware development but just exactly what topics in what order would you normally study if you were going at it solo? Yes I do realize hardware development and electrical engineering as a whole is typical an extremely difficult major as it is in college but there's got to be a few hardware hackers out there who are primarily self taught? Advice for someone with no hardware knowledge and where to start?
14 comments
[ 3.1 ms ] story [ 196 ms ] threadI recently got into microcontroller programming (using both AT90USB162 Atmel microcontrollers and PIC24H PIC microcontrollers). I use them for building/hacking/tinkering with MIDI controllers.
I'll give you a brief overview of how I started and what I'm doing now and then if you want to know more, you can comment or email me or whatever and I'll be happy to help, if I can.
I started in February, when my brother and myself decided to mod the Midifighter[1] he has. The Midifighter is interesting because, not only does it have an awesome arcade feel to it (because of its arcade buttons), but also it has been designed to be very hacker friendly: DJ Tech Tools (the guys who make it) have released the schematics under the creative commons license and the source code under the GPL. The circuit board also contains solder points for power, ground, four digital extension pins and four analog extension pins - so it is easy to extend.
What we did is built an extension which connects to these extension pins, giving the midifighter an additional 17 LEDs, 14 buttons and 8 analogs (4 pots/knobs, 4 faders) - actually, technically, it gave us 32 analogs, which we use for 16 buttons, 16 knobs/faders - though 10 connections are left disconnected.
The rest is in the firmware: shift buttons, banks, changing MIDI channel on the fly, etc. Also, the difference between the button extensions and analog extensions is purely in the firmware (and of course what we connected to them).
Some details for our mod can be found here[2], the modded firmware source code is on my github[3], more details, pics, videos to be put online soon.
This basically taught me everything I know about hardware hacking.
What I am doing now is working on a configuration (tool used to configure a midifighter from your desktop) as well as some awesome new firmware mods for existing Midifighter owners (eg, I already released an early prototype version of a mod which allows you to record keypresses and have it automatically play back the MIDI notes in a loop). My brother and myself are also planning our next MIDI controller hardware, which will be even more ambitious than the first.
So, from my experience, I would say the best way to learn is to just dive right in! Be prepared to make a few mistakes along the way (which may end up costing a few $, but its worth it for the learning experience - eg, we ordered a few of the wrong parts at first) and just experiment. The midifighter was a great way to get started because it is an open platform and a cool toy. You could just as easily start with an Arduino (a lot of people do!) or something like the Chameleon[4] (actually, the xgamestation.com website has a few cool electronic devices which may be great ways to get started!).
[1] http://midifighter.com/
[2] http://www.djtechtools.com/forum/showthread.php?t=28014
[3] http://github.com/dublindan/Midifighter
[4] http://www.xgamestation.com/view_product.php?id=52
Next, get a couple of books of simple projects. I'm not up on the current ones, but even a lot of older ones, like Traister's 39 One-Evening Electronic Projects (http://www.amazon.com/One-Evening-Electronic-Projects-Robert...) or some of Delton Horn's books, will give you a few simple things to start with.
Next is the classic The Art of Electronics, which has a new edition coming out, finally. [EDIT: Sorry, looks like a rumor. The second edition from 1989 is still current and couldn't find any actual details for a third.]
After that, you should have a better idea which way you want to go and what you want to do. Anything you want to do will be easier with a decent grounding in simple projects though. A lot of electronics, unless you are just plugging together pre-built modules, requires practice.
http://www.eevblog.com/forum/index.php?topic=3473.0
The first important thing is to learn how to read simple schematics: that only takes a few hours. Then build something. It doesn't matter what you build, it all gives you experience. First thing I built at about age 12 was a "crystal" radio with a hand-wrapped coil and a diode and tuning capacitor removed from an old radio. Try your hand at simple kits like the ones on SparkFun or the Velleman kits.
The biggest mistake I see n00bs making is they bite off too much at first. helloWorld() != Facebook
Start small: build a headphone amplifier, get some high-power LEDs and make a little flashlight, then get a Teensy or an Arduino and start programming microcontrollers. The experience you gained from lighting LEDs and amplifying signals will pay off when you try to get a tiny micro to control things in the real world. Read the room temperature and have the micro display it by flashing Morse Code on an LED, easy stuff like that.
Above all, have fun!
When designing hardware you need to keep in mind how the software will interact with it. And when designing software you might want to think about how the hardware could help you simplify the design. A general word of advice, keep the hardware as unspecialized as possible. Changing code is easier than rebuilding the board.
You may wish to consider starting with an Arduino kit and breadboard stuff incrementally. That way you'll get a feel for how SW and HW interact.