What kind of project could help a software engineer become more of an electronic engineer?

I'm a software developer with practically no electronics background, but I want to get into this since it's relevant to the work I'm doing (infotainment system development). I'm a software engineer, not an electronic engineer, so my background/experience has more to do with application level programming, and maybe a little of system/network programming.

I've heard about Arduino as a flexible project platform and I was wondering what kinds of projects could help someone with my background dig their way to electronic engineering... starting with microcontroller programming and maybe messing with other kinds of peripherals, such as bluetooth, zigbee, wifi, audio, video, I don't know... maybe a kind of project that is typical for electronic engineers during their courses.

In sum, what I'm looking is for a typical/popular kind of project (academic or otherwise) that could help a software engineer develop an electronic engineering skill set at the software level.

-
may be technology mapping algorithm to iverilog back-end. – sandun dhammika Apr 17 '12 at 10:13
I'd recommend that you start with some 555 timer projects. There are countless on the Internet and they will give you some basic understanding of resistors, capacitors and in some cases inductors, which you'll need to familiarize yourself with in order to actually know what you're doing with the higher level stuff such as microcontroller programming and similar. After that you can start playing with Arduino, PICAXE or whatever platform you find interesting. Then bravely start working on a bit bigger project you find interesting and be sure not to give up on the way. – AndrejaKo Apr 17 '12 at 10:22
I am in the same position, i just wanted to tinker around with hardware. I brought an Arduino and a toy RC car, hooked them up together. No idea how, but it works, and its awesome :) It isnt all that difficult, i had never wrote a line of C before (C# dev here), and had something basic running in a couple of hours. – TJHeuvel Apr 17 '12 at 13:04
What kind of project? I would suggest an electronics project. – joeforker Apr 18 '12 at 2:40
show 1 more comment

Here are some suggestions for projects which would not be hard to get into for a software developer. They might all appear rather hard, but I'm a big fan of attempting projects that are way outside my skill set. If they're fun, compelling projects, they will drag you joyfully through the learning process. And remember, we're all here to help.

LED Matrix

This is an entirely digital project, and but lots of fun (who doesn't like LEDs). You'll need some drivers like the ULN2803, and a microcontroller. Get the matrix to tell the time, or show a picture. I was just about able to show a picture of Bjork on a 16x16 green matrix.

Gyro stabilised foam plane

Get a foam plane and a couple of micro ailerons:

You'll also need a MEMS gyro with an analog output and some tiny OpAmps. Mix them all together to make a gyro stabilised rubber band foam plane.

Robot

Everyone loves a robot. The great thing about a little robot like this is that you can start with something extremely simple (just drives forwards), and slowly add more and more functionality (Sensors and decision making), learning all the while.

-

If you're already a software developer then microcontroller programming in itself shouldn't be a challenge really, and there's little electronic about it. At least not in the way that you would have to deal with different types of components, and have to make calculations on voltages and currents to make something work.

A microcontroller kit may help you get control, though. You can work with all kinds of inputs, digital and analog, and outputs.
Try the ubiquitous thermostat for instance.

Inputs
You'll need to get an understanding of temperature sensors (whatever kind), amplifiers, opamps and maybe transistors, besides capacitors and resistors. Opamps and especially transistors are basic, they're used in every circuit.

Output
To drive a relay you'll need to know how a transistor works as a switch (that's the easiest application to understand).

Microcontroller development boards often have a display on them, LCD or LED, or can connect to a display module. While this is useful (e.g. for debugging) and fun it doesn't help you understand electronics. You'll have to make your own display, like a LED matrix, and learn how to drive a multiplexed display, both from a software and a hardware point of view.

Apart from the microcontroller board get hold of an electronic starters kit, which contains most of the basic parts to make simple circuits. And a good handbook, of course. The Art of Electronics is immensely popular here, though last time I saw it it was due for an update.

-
And if you're sick of the thermostat, you can upgrade to implementing a PID controller. :) – Nick Johnson Apr 17 '12 at 12:02
Neat project idea that incorporates a wide range of electrical and electronic concepts. Once you have done this project in discrete components you could look to move on to a micro controller to do the same job, and so learn the pros (flexibility) and cons (comparative cost) of micro controllers – SimonBarker May 4 '12 at 17:30

Get hold of a PSoC development kit. The PSoC is a microcontroller which contains re-configurable digital and analog blocks. You can basically wire up digital and analogue schematics with the IDE. Those schematics are then implemented inside the PSoC chip.

You can play with digital and analogue circuit designs to your heart's content, and combine it all with software written in the same IDE.

-
This is an uncommon place to start; the PSoC is a very complex and unusual system. Have you had success training others using this as a starting point? – Kevin Vermeer Apr 17 '12 at 11:24
It may be complex inside, but it's a dream to use. They have done an amazing job of making everything integrate smoothly, and produced lots of nice tutorial videos and documents. – Rocketmagnet Apr 17 '12 at 11:27
The fact that all those peripherals are integrated in a PSoC is a case against it. You're supposed to build these systems yourself if you want to learn. – stevenvh Apr 17 '12 at 11:52
@stevenvh Not at all. What's the difference between wiring up gates inside chips, and wiring up gates in a schematic? It's conceptually identical. – Rocketmagnet Apr 17 '12 at 11:58
this is soo cool , thanks for sharing. – sandun dhammika Apr 17 '12 at 12:19
show 3 more comments

Proteus is an excellent software driven proptyping platform. You can build PCB boards and schematics using most, if not all of the mentioned MCU's here; And best of all, you can simulate your source code as if it were running on the real hardware it self!

The nicest thing about this software is that you can change variables like crystals, capacitors, resistors without having to solder, desolder, order and wait to eventually muck around with proto boards or shields. It emulates it perfect.

Also; You get virtual tools like Osciliscopes.. You know how much a good osciliscope cost? A fortune! It is all included with virtually tons of other features and virtual tools.

It is not free but the price is absolutely reasonable for the amount of time and frustration it can save you, instead of messing with the real hardware.

-
 Do you get to make real circuits this way ? – Rocketmagnet Apr 17 '12 at 20:13 Yes, I make my circuit in Proteus for example attiny 861 with h-bride, and link it to hex file that AVR Studio compiles. Everytime i change source and compile in AVRStudio, i animate in Proteus and my changes are instant. And i can mesaure output from h-bride using an scope, probe or voltmeter with accurate reading.. jsut like my real proto. Its pretty good – WillyWonka Apr 18 '12 at 13:02

I think that trying to learn everything will only result in a lot of confusion and lost time. IMHO you should try to focus your interest: you said that you need it for infotainment systems, right?

An approach could be to get an idea of what one of those system is:

• A processing unit (probably a microcontroller or a simple computer);

• Some drivers for the display;

• I/O interface for user interaction;

• Communication interfaces (networking, interfacing to other devices...)

Any of these sub-domains is a complete system which can be studied and designed as a project. Some of them can also be divided in more sub-sub-domains at a lower level of abstraction, and down to the component level.

So my suggestion is to break this complex architecture in blocks, and try to create simple circuits (maybe starting from LED drivers), but that can be then inserted into the bigger plan. You'll have the motivation to do that, since it's going to be part of the final work, and in the way you will learn about electronics.

Just take care of studying and understanding what you're doing, instead of relying on pre-made schematics and generic rules of thumb.

-

I was in the same problem. And eventually I learned that there is no short-cut way to learn electronics. A college degree can help you.

Otherwise you can try the following books:

Step 1.

Step 2.

Along with the software NI Multisim.

-

Well as a software develeoper you are either on of the two major available platforms.

PHP or .NET ?

If you are .NET then I can strongly suggest to you .NET MicroFramework IDE and the NetDuino

There are loads of other hardware available but I suggest this one because its price is reasonable and it is very similar in design to the Arduino and many other brews of prototyping boards which will help develop familiarity across several kits.

Neither .NET or PHP has no real connection to embedded programming but PHP syntax is very close to C which is a good to know. .NET, well its nice to stay within a familiar environment and also you can get certifications for this with Microsoft Learning.

Another platform I would suggest is Atmels AVR XMega which is basically the arduino but much newer and more capable.

The Important parts about both these guys is that the Development Environments ARE FREE! Yes, Microsoft gives you Free Visual Studio for Micro Framework and Atmel has AVR Studio 5 (which is based on Visual Studio as of Version 5)

You also need to realise the capabiliteis of each dev kit.

It is based on Atmega chips but they use low clock speed ones (8mhz, 16mhz) but are quite capable of doing various bits and bops. It is a great starting point in learning electrical engineering because it has free IDE and a massive community with tons of code and libraries. If you learn from here it will be easier to move onto other AVR based chips in terms of syntax and code porting.

It is very limited to what it can do, for example do not expect to relay video data via an internal micro web server to the internet.. These MCU's just cant handle the data and amount of things to do at the same time but once you get to that level then it will be good to step up to either .NET or 32Bit AVR's .

• AVR 32

These guys can handle LCD's, video, web serverd, Wireless and loads of stuff within it self. They also start to go much faster in processing speed. But before you start looking at these you need to realise there are several products that do specific functions aswell.. Such as touch sense, wireless communication, ultra low power, some are mixed and matched and this needs a proper research and development process behind using these bad boys.

• Texas Instruments

Be very careful with them,

They offer fantastic market leading chips that are amazing when you read about them. Unfortunately there is no free IDE and they cost thousands of dollars in license fees. Although, some products like the MSP430 has a free IDE but allot of things are borderline with them and unclear. Also, learning the libraries for some TI chips is an absolute nightmare.. But it is a niche market and you can get a good salary here..

There are loads of devkits out there, I have only told you about some of my own experience coming form a .NET Certification. I did infact start of with an Arduino Mega256.

Today I a am making my own PCB's as small as 1.5cmx1.5cm that run of coin cells for up to 2 years using TI's amazing SystemOnChips. But it took allot time and patience to get there and I still feel like I know nothing about embedded systems...

Good Luck :-)

-
...you're seriously suggesting that every software developer either uses .NET or PHP? – Nick Johnson Apr 17 '12 at 12:02
@NickJohnson in majority.... Go to web host provider and you have two selections of server type; Windows .NET -OR- Linux LAMP with PHP.. Its not just me.. I bet you are like a ruby on rails or C++ ? I know I am only referencing Web technologies .. but applications are so yesterday.. lets keep up. – ppumkin Apr 17 '12 at 12:10
It was a cute question. My main professional experience lies with (well written) PHP, but I'm also fluent with Java, C & C++, Javascript. – dukeofgaming Apr 17 '12 at 13:48
"...applications are so yesterday..." -- Tell that to the hundreds of thousands of non-Web-app developers out there. Instead of "let's keep up", how about "let's be real"? If .NET and PHP were the only choices for writing software, I'd throw my PC over a bridge. Web applications aren't the only applications. – Justin ᚅᚔᚈᚄᚒᚔ Apr 17 '12 at 15:54
@ppumkin, I still strongly think users should learn to read assembly to see when it is doing something stupid. – Kortuk Apr 21 '12 at 22:26
show 3 more comments

Your question is rather broad, and there will be many good possibilities. If you are focused more on the higher level of how to make a small computer interact with physical things, may I suggest you look at something like the Lego Mindstorms kit. With this you can build and program robots. This will be at a high level of plug and play various sensors etc.

There is also an important more basic level of electrical engineering where a "true" EE would design and build sensors. Using a single board computer like an Arduino or a Netduino and a breadboard where you plug various components like resistors, LEDs etc into the breadboard to construct circuits will be closer to this more basic level. At this point you will be dealing with questions like "what value resistor should I put in series with the LED to limit the current so that my led and microcontroller don't go up in smoke?".

With the Lego kit, you simply plug the components together and they have taken care of making it idiot proof.

-
Actually the "true" EE probably wouldn't be using an Ardunio and breadboard. – Jeanne Pindar Apr 17 '12 at 21:30
@Jeanne - True, but we can't all be Jeri Ellsworth and make our own transistors : youtube.com/watch?v=w_znRopGtbE – JonnyBoats Apr 17 '12 at 21:39

I would suggest focusing on the difference between the software written for the PC vs. the firmware written for embedded applications. Brush up on C. With embeddd linux becoming so popular the difference between a firmware engineer and a software developer is shrinking rapidly. Spend some time looking at an open source embedded driver.

I would question somewhat the desire to become more like an EE as the two disciplines are quite distinct. Yes there is a ton of overlap, but focus on the driver side and don't get bogged down in the detail of the electronics.

-
 He tells you he wants to get into electronics! – stevenvh Apr 17 '12 at 15:43 What I am suggesting is a top-down software side approach, rather than starting with a schematic and working back from the IO pins. This seems reasonable since I interpret "electronic engineering skill set at the software level" to mean a focus on firmware development. – spearson Apr 17 '12 at 16:12

first of all its really fine if you are not from electronics background, you are really not going to design Chips are you?