I just completed the Arduino Starter Kit, and a few hobby projects from instructables.com.
What I feel is that the Arduino language is extremely useful, but somewhat sugar coated. For instance, you can buy a distance sensor, and program your own wall-avoiding robot in a mere 20 lines of code. It doesn't feel......professional (I'm aspiring a future career in robotics).
I feel as if I'm operating with black boxes. I can assemble them through some simple logic, but I do not know how they really work, both in terms of programming and hardware.
I want to ask, what should I do if I wish to go beyond basic Arduino hardware and software? Where should I start?
I think it has not to do with being more or less professional 8)
You can read datasheets of sensors and avr chips (like the ATmega328p).
Read for example the datasheet of the ATmega328p, the part about frequency and phase correct pwm signals.
If you want to learn the basics of the avr chips, see www.avrfreaks.net
All the source code is in the Arduino folder. You can see how registers are used.
For instance, you can buy a distance sensor, and program your own wall-avoiding robot in a mere 20 lines of code. It doesn't feel......professional (I'm aspiring a future career in robotics).
I'm sure that a lot of people would like to know how to program a wall avoiding robot in 20 lines of code.
I feel as if I'm operating with black boxes. I can assemble them through some simple logic, but I do not know how they really work, both in terms of programming and hardware.
What black boxes are you referring to? I can see that you might feel that way about analogWrite() or pulseIn(). But, digitalRead() is nothing mysterious. It is quite easy to see whether the code works, or not.
what should I do if I wish to go beyond basic Arduino hardware and software? Where should I start?
What does "a career in robotics" mean to you? There are aspects of robotics that are quite challenging. For instance, getting from point A to point B with navigating around all obstacles, and then retrace that path in reverse. Or mapping a room to determine the obstacles, and then computing the most direct course from a given location to the nearest door, for instance.
The Arduino language is C++. There are few languages more widely used or more advanced than C++.
I think I made it pretty clear what I'm looking for.
I feel the stuff I've been doing on Arduino are simplified. I'm interested in learning about how everything works in the background. For instance, a person can become really great with Lego Mindstorms, which simplifies everything to a considerable degree, but he still wouldn't be considered an expert roboticist.
Somehow I have a feeling that robotics is more complex than this. I hear of people using Matlab or Python, and thousands of lines of code to program very simple robots. Whereas I'm able to program similar machines through the simplified Arduino language.
I'm interested in learning more advanced robotics, but am not sure where to start since I'm a beginner to robots in the first place. What is beyond Arduino? How do electrical engineers and professional programmers build their robots?
But you can see how simple it is to program this kind of robot.
When you are done, any project looks simple. On the other end though, it is anything but simple.
When developing that code, you had some idea of the capabilities of the Arduino, and some idea what you wanted the code/robot to do. Many people do not.
Somehow I have a feeling that robotics is more complex than this.
It depends on the task that the robot has to perform. Take the example I gave earlier. Go from point A to point B, avoiding all obstacles. Then, turn around, and retrace the same path from point B to point A. Sounds simple, but it is a very complicated task.
What is beyond Arduino?
You haven't even begun to push the limits of Arduino, yet. Talk of moving on is a bit premature. Getting code to fit in small controllers IS the future.
How do electrical engineers and professional programmers build their robots?
Have you looked at the Robotics sub-forum? Have you google anything? Have you talked to anyone in the field? Learn where robots are used near where you live. Go visit those places. Almost everyone is happy to talk about the work they do, as long as no proprietary data or information needs to be given up.
If you see some black boxes and are asking yourself "Is that all there is ??", then why don't you open those boxes and have a look inside.
These black boxes you're talking about, can be the modules you'd buy.
Try to figure out how those work and how you could build an improved version of that.
But they can be pieces of software as well.
And for this the same is valid:
Write your own library, improving efficiency, extending functions or both.
Stuff like that.
It's up to you how advanced you want to approach using your Arduino.
The beauty of it is that all these boxes (whatever color they may be) are offering a low threshold to start programming and using hardware.
Once you've mastered that and you might be looking for some more challenging stuff, you can consider building your own boxes.
But if you need to ask, then i'm really wondering if you're there yet.
I know i've still got a long way to go for that.
MAS3:
If you see some black boxes and are asking yourself "Is that all there is ??", then why don't you open those boxes and have a look inside.
These black boxes you're talking about, can be the modules you'd buy.
Try to figure out how those work and how you could build an improved version of that.
But they can be pieces of software as well.
And for this the same is valid:
Write your own library, improving efficiency, extending functions or both.
Stuff like that.
It's up to you how advanced you want to approach using your Arduino.
The beauty of it is that all these boxes (whatever color they may be) are offering a low threshold to start programming and using hardware.
Once you've mastered that and you might be looking for some more challenging stuff, you can consider building your own boxes.
But if you need to ask, then i'm really wondering if you're there yet.
I know i've still got a long way to go for that.
I used the Servo library twice. Someone else may use it a thousand times. Both of us are equally clueless as to how it actually works.
You can become an expert at lego mindstorms with 50 years experience and still not know what's a microcontroller.
It's important to take the initiative and define what you wish to accomplish from the very beginning.
That being said, I find your post very informative. I'm going to look into C++ and individual microprocessors. Thank you.
No matter how you look at it, Arduino takes care of the nitty gritty details of programming and simplifies the process.
Have you SEEN that guy's code? It is extremely simple, that's undeniable. The logic maybe tricky, but the programming done to initiate it is simple. I'm no expert, but I'd wager that if you were to program this with just C, it'd take a couple pages.
I was able to build and program some simple robots with absolutely no prior knowledge of programming or hardware. I still have no idea what a byte is, or exactly how "CapacitiveSensor" works.
I'm going to look into how these black boxes work, and hopefully crawl out of such heavy reliance on pre-made libraries by other peoples, and on circuit boards of which I have no idea how they work. Thanks for your replies.
ThePrince:
No matter how you look at it, Arduino takes care of the nitty gritty details of programming and simplifies the process.
This is true all the way down to assembler.
mov AX, 10
takes a lot more work than that to actually move the value 10 into a register.
I think it's good to have an understanding of how things work at a low level, agreed. But it is typically unnecessary when it comes to developing solutions. If a mature library or a component works as expected, you are far better off using it and trusting it, and getting on with completing the solution you've been tasked with.
I'm no expert, but I'd wager that if you were to program this with just C, it'd take a couple pages.
Definitely look into C++ and C. You will find one is an extension of the other, and that the code is probably close enough to C to be indistinguishable. I'd hazard a guess that the code rewritten in C would look as simple and take the same number of lines.
I was able to build and program some simple robots with absolutely no prior knowledge of programming or hardware
Lol there is no need to get defensive. I still love Arduino, I just plan to learn more in depth.
My goal is not only to make a working robot. If thats the case I would've gone with Lego mindstorms. I want to learn how robots work, in order to innovate. The deeper you go, the further you can see ahead.
Yea you can say it's simplification all the way to the assembly, but come on. Mindstorms is NOT the same as arduino, which in turn is NOT the same as building your own microprocessor and circuits and programs. I prefer depth to a certain degree. No, that does not mean I would like to write programs in 1's and 0's, sorry for the confusion.
aarondc:
Give you've typed in someone else's code or copied their .ino file it is not surprising you have found it easy.
What you've missed in that process is:
coming up with the idea in the first place
selecting appropriate components
programming the solution
testing it
getting it to work
presenting the final solution in such a manner that complete newbies to the technology can use it successfully
If you want to go beyond what you've done, build a robot.
From scratch.
How far does he want to go with "From scratch"? To paraphrase Carl Sagan:
If you wish to make an apple pie a robot from scratch, you must first invent the universe.
A dirty little secret about EE is there is very little innovation with circuits. Most of it is cutting and pasting datasheet sample circuits in different ways. Like with Leggos... Do you actually make the blocks, or just come up with creative new ways of connecting lots of different blocks together?
Ok so if someone comes up with a program where, say you want to create a robot that avoids walls, all you need to input is: "robot avoid walls." Would you still be interested in making robots?
Some people here seems to think it has to be one extreme or another. Wanting more indepth knowledge does not necessarily mean wanting to create everything from scratch, including the raw materials.
If you have deeper knowledge, you'd be able to think of new ideas better. In 1970's, Steve Wozniak made the first computer, with technology already widely available. That's an innovation. He knew his electronics inside out, which enabled him to think of whole new ideas of doing things. Even ignoring innovations based on existing technologies, who are you to say that EE is not advancing? Nanotechnology, microscopic circuits, cotton wiring, and other things are constantly being developed and researched.
I don't understand why you people are trying to deny that Arduino is very simplified. There's nothing wrong with that. If your goal is to simply develop fun projects, and you just want to get things done as fast as possible, Arduino is a good choice. I also want to build cool things, but through my own ability. I don't want to be spoon fed.
Proof or gtfo. Arduino is simple for the beginner to use, with lots of functions taken care of for you, like digitalWrite and CapacitiveSensor. You can get things done with relatively simple code, there's no argument.
ThePrince:
Proof or gtfo. Arduino is simple for the beginner to use, with lots of functions taken care of for you, like digitalWrite and CapacitiveSensor. You can get things done with relatively simple code, there's no argument.
Have you seen printf, in C? or sprintf or fprintf?