17

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.

dukeofgaming
  • 625
  • 1
  • 6
  • 13
  • may be technology mapping algorithm to iverilog back-end. – Standard Sandun Apr 17 '12 at 10:13
  • 1
    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
  • 1
    http://electronics.stackexchange.com/questions/3343/how-to-become-an-embedded-software-developer – Toby Jaffey Apr 17 '12 at 11:19
  • 1
    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 02:40
  • Meta discussion on this question here: http://meta.electronics.stackexchange.com/questions/1083/canonical-software-developer-wanting-to-learn-electronics-question – Kevin Vermeer Apr 18 '12 at 20:13

10 Answers10

10

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

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:

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

Robot

Rocketmagnet
  • 26,933
  • 17
  • 92
  • 177
5

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.

PSoC Creator

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.

Rocketmagnet
  • 26,933
  • 17
  • 92
  • 177
  • 2
    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
  • 1
    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
  • 2
    @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
  • @sandundhammika No probs. I think everyone should discover what a pleasure it is to develop applications on these things. – Rocketmagnet Apr 17 '12 at 12:48
  • do you have a Link? – Michael Brown Apr 17 '12 at 15:35
  • [PSoC3](http://www.cypress.com/?id=2232). You have to scroll down to see the list of devices. It wasn't immediately apparent to be the first 10 times I went there. – Rocketmagnet Apr 17 '12 at 15:56
5

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.

stevenvh
  • 145,145
  • 21
  • 455
  • 667
  • 1
    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 04 '12 at 17:30
5

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.

Piotr Kula
  • 2,134
  • 4
  • 21
  • 44
WillyWonka
  • 221
  • 1
  • 3
  • 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
3

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.

clabacchio
  • 13,481
  • 4
  • 40
  • 80
2

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.

enter image description here

Step 2.

enter image description here

Along with the software NI Multisim.

enter image description here

1

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

enter image description here

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.

enter image description here

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 :-)

Piotr Kula
  • 2,134
  • 4
  • 21
  • 44
  • 10
    ...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. – Piotr Kula 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
  • @dukeofgaming you should not have a problem picking up on this from the code side. There are so many answers here that proove this subject is massive. I urge you to read some basic electronics books, with basic examples using 555 timers, some logic gates and transistors, what diodes are and when to use capacitors.. But most important.. Read and understand Ohm's Law! Print out Ohms Circle :) – Piotr Kula Apr 17 '12 at 13:58
  • 12
    *"...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 No problem at the code side, but when I start seeing hex numbers and assembly code my mind goes num – dukeofgaming Apr 18 '12 at 23:23
  • @dukeofgaming - you will very rarely have to look at assembly code.Thats why we write in C so it gets compiled into ASM or HEX. Hex and Binary(bits and bytes), you just have to learn them. They are simple just search for `fast ways to convert between binary, decimal and hexadaceimal` You do it in your head without messy charts and writting on paper. – Piotr Kula Apr 19 '12 at 08:03
  • 1
    @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
1

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.

JonnyBoats
  • 4,108
  • 1
  • 17
  • 19
1

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.

spearson
  • 1,533
  • 8
  • 13
  • 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
1

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

but if you are going to learn electronics i would suggest you to get the basics first like Resistance, Diodes, Transistors etc.. an electronics hobby kit from radioshack or any other vendor would do.. next move on to the Microcontrollers, Arduino would make it really simple, but i would advice you go with something that hasnt been made already easy, Arduino is really easy and doesnt put much of a challenge before its user.. Start by AVR,PIC or 8051 Micro controllers, Buy a Microcontroller,a book and srart coding starting with the Blinking LED Program (the "Hello World" in Electronics Department) and as you will see, in no time you would be using matrix Keypads and Seven Segment Displays to learn some more basics, after that comes the real work, interfacing your devices with other ICs and sensor networks, the one related to your work.. your Development board would already have some of these features and if they dont you can always buy sheilds or breakout borads available easily, then it all up to you...

i would also advice you to check with your Company about the Platform they are using this would give you a direction on the Micro-controller to learn and since you are already a programmer this should prove really easy to you and always do hobby projects like Robot and LED matrix among others, this would keep you mind into the Subject you wont get bored!!

ArunMKumar
  • 233
  • 2
  • 6