A good use for ardunio..?

Hello,

I am a Programmer looking to learn more about Electronics Engineering. I have experience working with simple circuits for years, so electronics is not completely foreign to me. My Senior project for my Computer Science degree is going to be hardware programming and I am looking for a powerful microprocessor board to do some cool stuff with.

As a Computer Science student I am confident that I can program just about anything I can imagine (within reason ....), but as for the hardware side of things I am weak.

The arduino board seems to be appealing to tinkerers that have electronics experience but not much programming experience. Since I am the other way around, would it be a good board for me to get for my project?

As far as project goal, I have not gotten that far. I have a few ideas but the point of the project will be to have a working device that stands alone from a computer but can easily connect for data transfer or something. My ideas are:

  • (pre-built) Robotic arm program....think automated cd/dvd duplicator
  • 3-d display made from leds, possibly with 3d interface device. I see some people have posted questions about similar projects
  • Using a 3-d accelerometer chip to build a device that will measure 0-60 times for cars, et cetera
  • Open to suggestions

Hi there + a good morning,

i'll try to answer your question from my point of view.

i don't think that arduino is more appealing to electronicians than programmers or the other way around.
me too came from programming. in my case that was mostly web techniques though. PHP/javascript etc.

basic programming really is simple on arduino but you can certainly go into depth. since you're working an a microcontroller (not a pc) there is much more to consider once your project gets more complicated. that's in terms of size and performance. i'm currently working on musical devices, and the coding really makes a difference in stability and responsiveness.

on the other hand creating circuits, expanding or translating them for different projects is not any harder the code part. but it's the same here: you can go into depth. if you're new to electronics like i was, you can just start off creating things without understanding each resistor's need.

i really found it funny noticing that i suddenly knew the difference between pull-up or pull-down resistors. which might seem like the stupidest question to ask an electronic engineer. but i remember asking it here in the forum, and being only half-able to understand the answer.

i can't tell the exact moment when i learned it but i did learn it. and much more.

much other stuff you will come across is concerning communication between devices. and that is surely a mixture between programming and e-engineering. i had to get arduino understand MIDI messages (musical data) from a keyboard or computer. The MIDI standard itself is a mixture between soft- and hardware descriptions. starting with things like that is always hard because you can't tell for sure if your problems are soft- or hardware based.

you basically have an advantage if you know either coding or circuiting.

the only plattform i can think of that would be more appealing to programmers is something like lego mindstorms (using 3rd party programming tools), which hides the electronic part for you as well as it makes it easy to engineer the whole device. but then again this will limit you on expensive parts unless you understand electronics to bild your own...

my recommendation is clearly to use arduino. you might need something faster or bigger with more in- or outputs. but this won't be a problem once you truly understand what you are doing.

another funny thing is that arduino is growing with my personal needs :slight_smile: i started interfacing a graphical lcd display. it worked on the atmega 8. but the code was too coplex and thus to big (in kb) to do much useful besides communicating with the display. and sadly the only project i really wanted to use the display for, was one that would take 8 analog ins instead of the existing 6. Still i had enough to do to get the display doing what i wanted it to.

now i'm working with the arduino minis (ATMEGA168), which both sports double the memory and 2 extra analog ins!

arduinos most advantages are that it's cheap and open source. i consider both the most important facts to help you make your decision. if you find anything cheaper and or better documented go for it. but i really don't think that there is anything like that out there.

PLUS we need programmers to show us how to do those tricky parts like bit-banging for example. there is always something that has not been documented yet.

concerning your projects, i think you can start on any of your ideas. but you should split it up into smaller projects that kinda work on their own.

referring to my own projects, i used the display to show a welcome message to visitors in a small exhibition on rgenerative energy sources at my university. arduino and the display were powered by a battery and programmed to fade and distort the message over the time of the exhibition.

don't set your aims to high when starting but still think of a little (maybe stupid) use for your work. i think that's importnat to keep you going. a blinking LED will not make you happy for a long time, you'll want more. but a dysfunctional robotic arm might make you rather unhappy for a as long as year until you finally give up on it.

didn't expect my answer to get that long. i hope it helps a little.

//kuk

Good advice. I was shocked that someone wrote more than a sentence or two....thanks.

As far as the coding goes, does arduino do a lot of hand-holding? Browsing over the code samples it seems like it does. What I mean is: if you try to read from a pin that has been declared as output does it bark because you have declared it as output?

If so, is this common behavior with PICs? If I were flashing a chip with a program written in C would I encounter the same thing?

The reason for asking is because as a programmer I don't want to have my hand held very tightly.....its constricting. (So what if I want to read from a pin I just wrote to....maybe that is how I want things to work in my hacked world?)

Its a moot point if at all, but it could still be very constricting ([rant]java for example has a lot of hand-holding and thus makes writing what would be a simple program becomes quite long and extensive[/rant]).

I was also curious about what happens when you do weird things with the pins, so I wrote my own little program that does nothing but receive simple commands over the serial port and execute them. Using this, I have found that yes, you can read input from a digital pin defined as output, and it actually works! It will return the last value you wrote to it. Writing to an input pin does something a little surprising: it enables/disables the state of an internal pull-up resistor for that pin.

So far the only seriously confusing thing I have encountered is when I use up too much SRAM (as opposed to program flash memory). There is no compiler warning, only bizarre behavior when I try to upload and run the sketch.

Pretty much everything is straightforward C++ code, only exceptions are apparently not supported (no big deal).