

Ask HN: I know software. Now I want to know hardware. Where do I start? - holgersindbaek

I started with RoR 6 months ago and I can do cool stuff with that now (www.Meer.li for example).<p>I really want to go into hardware now, but I have no idea where to start.<p>Let's say I want to create a speaker system you can hook up to your iPhone - similar to this: http://www.kickstarter.com/projects/2107726947/hidden-radio-and-bluetooth-speaker?ref=live. Where would you start?
======
blcArmadillo
As other's have mentioned I'd suggest that you start with an Arduino. It
simplifies a lot of the complexities of embedded development while still been
surprisingly powerful. You'll want to start by learning the basics: How to
control the general purpose IO (GPIO) pins, basic serial communication, analog
to digital converters (ADC), digital to analog converters (DAC), etc.

The Arduino is a nice platform for beginners because it provides a nice set of
libraries that abstract away a lot of the complexities of developing embedded
systems. If you're just interested in building hardware for a hobby the
Arduino may satisfy all your needs. But, if you're interested in actually
developing products to sell I'd recommend that you quickly move from the
Arduino to some more serious hardware. This isn't to say you can't make real
products with an Arduino; I know there are projects like the Makerbot that use
it to great success. But I think by just using an Arduino you run the risk of
learning a framework rather than having a comprehensive understanding of the
interaction between the software and hardware.

After Arduino I'd recommend getting a development board such as:
[http://www.actel.com/products/hardware/devkits_boards/smartf...](http://www.actel.com/products/hardware/devkits_boards/smartfusion_eval.aspx).
One of the classes I took in college used these boards and they're pretty
awesome. They have an ARM microcontroller and FPGA on a single chip. If you're
not familiar with FPGAs check out the wikipedia article:
<http://en.wikipedia.org/wiki/Field-programmable_gate_array>. Basically they
enable you to implement digital logic through software using a Hardware
Descriptor Language (HDL). Usually the manufacturer will also provide you with
premade IP cores you can drop in. These are things like ADC converters,
controllers for SPI or I2C, etc. You can also get crazy though and design
custom chips even a complete general purpose processor and test it out on the
FPGA.

Hopefully this helps. Let me know if you have any questions and I'll try to
answer them.

------
diminium
Your going the wrong direction. Bluetooth and iPhones are highly advanced
hardware systems. It would be like teaching someone who knows nothing about
programming by dropping them in the middle of a complex software API and hope
they can figure things out from there.

Start with a microcontroller AND a FPGA or it's simpler CPLD cousin of some
type. Learn how to use both of them and understand what your doing with both
of them. Look up the Altair! You know, the world's first PC. Find stuff that
was popular in the beginning of the computer age. See how hardware Pong was
made. Try and see if you can recreate it on that microcontroller. After that,
see if you can recreate it on the CPLD. It will you some idea about what your
about to embark on.

From there, try taking on a communication protocol. Ask around for something
simple you can learn in a month.

By this time you will hopefully have enough knowledge to give Bluetooth a shot
and then see exactly how big a divide there is between the hardware and
software world and how much stuff was "hidden" from your view.

Good Luck

------
drbawb
I've always wanted to get an Arduino myself.

I also have an excellent book, it's very simple to understand if you follow it
linearly, and it definitely starts from the "bottom, up."

[http://books.google.com/books/about/The_Elements_of_Computin...](http://books.google.com/books/about/The_Elements_of_Computing_Systems.html?id=THie6tt-2z8C)

(The Elements of Computing Systems: Building a Modern Computer from First
Principles; Nisan and Schocken)

~~~
holgersindbaek
Looks cool. I'll take a look at it :-).

------
Aqua_Geek
These SparkFun tutorials were a pretty good starting point for me:
<http://www.sparkfun.com/tutorials/category/1>

~~~
holgersindbaek
Looks awesome. Do you have any other tutorials like this? Maybe even some
projects people made? Kind of like all the example apps on Github.

------
noodleey
Arduino!

~~~
holgersindbaek
That's an answer I can understand :-). Where would you start with Arduino
then? Any links?

~~~
rabidsnail
<http://wiring.org.co/learning/tutorials/index.html>

<http://fritzing.org/learning/tutorials/>

~~~
holgersindbaek
Awesome... thanks. Is there any well known forums for hardware hackers. Like
StackOverflow, just for Hardware?

~~~
HeyLaughingBoy
There is electronics.stackexchange.com, but it's probably a bit premature at
this point.

When you say you "want to learn hardware" how much do you want to learn?
Saying you started with RoR and showing that speaker thing as an end project,
I'll assume you want to start at a pretty high level.

The easy, inexpensive way of putting together high level "hardware building
blocks" is Arduino. Head over to SparkFun or adafruit Industries and find lots
of beginning hardware hackers in their forums. You'll get all the help you
want there.

For a more HelloWorld.c approach, if you want to learn digital (let's ignore
analog for now) electronics at a more elemental level, I'd say purchase a
breadboard, a handful of CMOS chips and passive components (or get a kit from
Make) and flash an LED, or make some electronic music and experiment from
there.

One way isn't "better" than the other; they just approach the problem from
different viewpoints.

~~~
holgersindbaek
I want to learn enough to be able to create what I want to create. So if I
have an idea for a speaker for Mac-devices, then I want to be able to do it or
have the knowledge, so I know what I need to learn to do it.

Starting doing back-end development can be a bit of a challenge. How much of a
challenge do you think it is to start with Hardware, compared to that?

~~~
HeyLaughingBoy
"Hardware" is such an open ended subject that the question can't be answered
reasonably. Hardware encompasses everything from interplanetary spacecraft
communications to electrical power generation and then some.

Again, it depends on what you want to do. Just like software, electrical
engineering has many specialties and sub-specialties. You can build things
from individual basic components (think of this as assembly or C programming)
or wire modules together (CRUD plumbing).

I don't know the first thing about Macs but if I assume you mean that you want
to be able to connect external speakers to the line-level audio output of a
Mac, you should understand the basics of wiring and building circuits. Pehaps
look online for an LM386 project. Not much theory involved in doing it that
way, just learning how to read schematic diagrams and solder circuits.

