Hacker News new | comments | ask | show | jobs | submit login
Ask HN: I know software. Now I want to know hardware. Where do I start?
21 points by holgersindbaek on Sept 11, 2012 | hide | past | web | favorite | 13 comments
I started with RoR 6 months ago and I can do cool stuff with that now (www.Meer.li for example).

I really want to go into hardware now, but I have no idea where to start.

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?

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

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.... 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.

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."


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

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

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

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.


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

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

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.

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?

"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.

Applications are open for YC Summer 2019

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact