Doodle Bot Art Competition
May 13, 2013
Announcing the winners!!
I appologise to everyone for taking so long. It was just an unfortunate combination of Chinese holidays and lots of work. This was tough to judge because good code was just as important as the final image.
1st prize ($200) goes to Kariloy.
His code gave good accuracy resulting in a large image of a humanoid robot.
2nd prize ($150) goes to OrionBot.
His code was not as good but his "portrait of a broken android" had more "art" in it. Very Picasso like.
3rd prize ($100) goes to Tnbit.
His code was very clever, pity he did not put more effort into the actual picture.
Contact Pome to claim your prizes.
Well despite a 1 month extension we did not get as many entries as we hoped but still It looks like we have some prize winners.
I'm not judging this contest, my boss will do that and at the end of the week I'll list the prize winners and we'll send out the prizes.
Thanks everyone who entered the competition. Even if you never finished I hope you had some fun along the way.
If you have an entry then please make sure you've posted it as a robot post with your code attached as a zip file and put a link to your robot post in the comment section of this post so everyone can find it easily.
Your robot post should include the words "Doodle" "Bot" "art" "challenge" as seperate tags to make it easier to find in the future.
Ok, we have no entries to date and several contestants have asked for a time extension. I will extend this challenge by 1 month.
There has been some complaint about the low encoder resolution. This challenge is about your programming skills, not the picture itself.
HINT: Write a calibration routine. Here is one possible method to increase resolution.
- Drive the robot forward and backward for 10 encoder pulses on each wheel. Ignore the first 2 pulses as the robot is still accelerating. The next 8 pulses are a complete revolution of the wheel. Your code should adjust the PWM of each motor with seperate values for forward and reverse and measure the time for 1 revolution. Store these values in the EEPROM for future use.
- Using the time it takes for 1 revolution you can then time your movements for smaller steps with the encoder being used as just to correct error accumulation. You may also need to pulse the motor in reverse to stop quickly otherwise the robot may coast a small distance.
Well we are about half way through this challenge with about 5 weeks left. Aproximately 20 Doodle Bot kits were bought for the challenge so the big question is...
Who is still in the challenge and where are they up to?
This challenge is one for the programmers, unlike most challenges you do not have to design and build a robot from scratch. DAGU will supply all contestants with a Doodle Bot Kit (including shipping cost) for $38. Considering shipping from China to your door is normally about $20 we are actually loosing money on this deal.
Sample code is attached to this post, you can download the instruction manual here:
You must then program it to draw a picture of a robot.If you have no idea where to begin then check out the tutorial here:
The winner is judged by the quality and complexity of the artwork produced. You can modify the existing sample code or you can write all new code. Video of the robot creating the artwork must be posted on Youtube with the title "Doodle Bot Art Competition". The code used must be submitted!
First prize is $200 worth of DAGU products.
Second prize is $150 worth of DAGU products.
Third prize is $100 worth of DAGU products.
Contact Claudia to order your Doodle Bot Kit. Use "Doodle Bot Art Competition" as your email subject to get the cheap price.
If you want to connect your Doodle Bot to a PC for generating complex images then ask Claudia about including a Bluetooth module. This plugs directly into the Mini Driver without any additional wiring.
I forgot to mention. The newer versions of the Arduino IDE do not allow some single capital letters to be used for function names. If you are deleting the alphabet included in the sample code this will not be a problem otherwise use Arduino IDE 0022. it may work on 0023 as well but I have not tested it.
About Doodle Bot:
Doodle Bot is a simple robotic platform consisting of:
- Arduino compatible "Mini Driver" robot controller with built in USB interface and dual motor drivers.
- Two ball raced, geared motors.
- One miniature servo rated at 2Kg.cm torque.
- Two magnetic wheel encoders to measure speed / distance travelled.
The motors are powered directly from the battery but the servo needs to be powered from the 5V regulator because the encoders share the same power rail. Do not change the power selection jumper from +5V to +Bat otherwise the ATmega8 digital inputs could be damaged.
The Sample code does not use the servo library but instead sends a single pulse to the servo to change the position from pen up to pen down. As the servo is not supporting any weight there is no need to continue sending pulses every 20mS. Once the servo stops receiving pulses it stops trying to drive the motor which saves battery power.
Using encoders to measure distance can be a bit tricky because even when you cut power to the motors the robot's momentum will carry it forward a bit leading to overshoot. This problem can be made worse if one gearbox has a bit more friction than the other as it can also cause the robot to turn a bit.
The sample code provided makes some attempt to control the amount of overshoot by controlling the speed of the motors. The battery voltage is measured on A7 and a variable called "dspeed" is calculated based on power (Power = Volts x Amps) to try and regulate the motor speed.
As the motors often turn at different speeds the sample code uses a very simple method of correction where the fater motor stops at each step and waits for the other motor to catch up. If there is a big speed difference between the two motors this can cause the robot to draw wobbly lines. Quite often this reduces after the robot has been running for a while and the motors wear in a bit.
For the purpose of this challenge it may be necessary to include a callibration sequence at the start of you program where the robot goes forward at least 8 steps (1 full revolution of the wheels) and then back 8 steps. By measuring the time take for each motor it should be possible to fine tune the PWM values for forward and backward for each motor.
The sample code is accurate enough for writing simple messages but you will need to improve it to get good accuracy for drawing pictures. This is part of the challenge.