My friend GroG from MRL is working on a simple User Interface for the game, so it doesn’t take a computer science degree to play the game, hehe. It uses HTML & Ajax + JSON calls to the MRL server, thus it will work on any OS machine. GroG hopes that the video feed will be a G+ hangout embedded in the UI through an iFrame.
Here are some pictures of what he has done so far:
Then you choose a robot from the <available> robots and you can see who else is playing and in what team, as well as how much time is left in the game:
Looks good, doesn’t it?
The robots are preparing! A new team member has been recruited and they got numbers. Little by little, the code is being polished. The training has started, they were even thinking to play with the Easter Egg:
But the Ball is their game:
I am trying to make them listen to my commands, but no, they have their own way of playing the game. I’m not even sure Football is what they are playing but this is what I’m training them to play. Soon they will be ready! Will you?
After a long waiting for parts and a bit of a depression I got back on my feet and started to build a few µBipedino robots to see if they work fine and to improve the programming before I start to sell the kits. I took lots of pictures while soldering the electronics and assembling the robot and now I have to write the manual. But since the robots are maneuverable enough and I have 2 colors already, I decided to resuscitate the LMR Online Soccer Game that got axed because of poor maneuverability of the Mini Bipeds.
What is this game? Well, it’s a game of Football (soccer as some of you might call it) played by the µBipedino robots. There will be 6 robots in the field, 3 in each team, all controlled remotely through internet by different users. The users will use a software called MyRobotLab to connect to the game and will see a bird view of the field and will be able to move their robot around, kick the ball and control some special effects actions. The game will be televised on uStream from a panning camera and hopefully will be commented.
So, I started to build a field for the game and I assembled 3 robots, with 3 more to do. The field needs painting and the robots need to have the wires tucked in and numbers displayed that will be visible from above and from the sides.
Here are some sneak preview pictures of the field and the robots:
So, what do you think? Will this game be worth watching or playing?
The WordPress.com stats helper monkeys prepared a 2011 annual report for this blog.
Here’s an excerpt:
The concert hall at the Syndey Opera House holds 2,700 people. This blog was viewed about 12,000 times in 2011. If it were a concert at Sydney Opera House, it would take about 4 sold-out performances for that many people to see it.
Click here to see the complete report.
A couple of weeks ago I saw a nice video of kids playing with a tiny biped robot made by Easybotics. I contacted the owner and asked if I could create a similar robot based on an ATmega328 microcontroller that can be programmed in Arduino IDE, either directly in C, or, by using the ArduBlock tool, in a graphical manner, connecting blocks to write the program. He responded quickly saying that he has no problem with that, in fact, we could collaborate to build an Arduino compatible robot. After exchanging design ideas, we decided to go separate ways, as I wanted a simple robot board kit to be assembled by the customer or bought already ready assembled, and he wanted a more sophisticated board with a built in USB port and SMD parts. I started to prototype a robot and design the main board and today I have it ready for demos.
But first, let me introduce the µBipedino(TM) (pronounced micro-Biped-eeno) robot to you:
- micro-biped using 2 servos per leg for walking and dancing
- ATmega328 microcontroller at 3.3V, 8MHz with Arduino bootloader
- runs on a 3.6V LiIon battery
- built in charger with charging status LED (MAX1555)
- high side switch to enable the power to the servos by the microcontroller
- On/Off power switch with power status LED
- dual IR proximity sensor (38kHz) to detect objects on the Left/Right/Center
- trim-pots to adjust the IR LEDs light emitting level
- removable head board with built in Buzzer and dual RGB LEDs
- 4 extra connections for additional servos or sensors
- programmable start/select button
- keyed FTDI cable connector for programming
- board size: 5x5cm (2×2″)
- robot size: 6x6x10.5cm (2.5×2.5×4″)
Want to see it? Here are the pictures:
And the schematic and the PCB design:
I expect to have kits in the store sometime mid-January, perhaps even sooner if all works well.
Oh, yeah, want to see it in action? There you go:
I finally got the boards in my hands and soldered and tested one board. It works as it is supposed to, but still has little things I want to fix in the next revision. Here are some pictures:
- ATmega328P DIP28 package (yellow rectangle) mounted in a socket to be easy replaced
- SN754410 dual H-bridge (purple rectangle) with 1A continuous current draw per motor (2A peak)
- screw terminals for motor connection (green squares)
- correct hole placements and female headers to fit the Arduino Diecimila perfectly
- extended the board on the left side so the sensor and servo connectors do not interfere with any shieds
- replaced the bulky 220uF capacitors with lower profile 100uF capacitors so they fit under the shields
- installed the 5V 3A voltage regulator flat on the board with the hole aligned to the mounting hole of the board (red square at the top of the board)
- a 3.3V 250mA voltage regulator to power off sensors that need that voltage (pink square at the bottom of the board)
- added a second power switch for the motors and servos (brown rectangle at the top of the board)
- 6 connectors for servos (top left corner), with Ground (black), Voltage (orange), Signal (yellow) pins
- 6 connectors for sensors (bottom left corner), with Ground (black), 5V (red), Signal (yellow) pins
- jumper J1 to select the power for the servo connectors either 5V (shunt in red rectangle position) or battery voltage (shunt in orange rectangle position)
- jumpers J2 and J3 to select the control mode for the motors, either 2 signal pins (shunt in black rectangle positions) or 3 signal pins per motor (shunt in grey rectangle positions) with the loss of 2 control pins for servos
- relocated the reset button (light green rectangle) to the upper right corner, close to the edge of the board
- ISP header for hardware programmer (blue rectangle)
- relocated FTDI header (dark blue rectangle) at 90 degree for easy access from under a shield
- doubled the female headers with male headers perfectly spaced so you can build your own shield from a perf board or use wire jumpers for custom connections
- the electronics power switch is hard to flip when under a shield
- the motor power switch does not fit between the jumper and voltage regulator on the board, I had to solder it sideways, but it may be a good thing. I will look into sourcing 90 degree switches
- the 3.3V regulator has to be mounted in reverse, wrong pad connections in Eagle
I guess third time is the charm, so the next revision of the board will have these issues fixed. Until then, look at how nicely the board fits my Compact robot:
Of course, I added the kit to the store here and have updated the Assembly Guide that you can download here.
Looking at what search terms people used to get to my blog, I found that people are looking to find a way to use old Lego sensors (from the RIS kit) with Arduino. It is very simple.
1. Hardware. You need to cut a Lego cable (not the one connected to the sensor, use an extension cable) in 2 and use each half to connect a sensor to Arduino. Split the cable in 2 wires, solder a male pin to each wire and plug one wire in a GND pin and the other wire in any available analog pin, let’s say A0.
2. Software. You need to set the pin as Output and High for about 10 milliseconds for the sensor capacitor to charge, then set the pin back to Input and do a analog reading. Remember, when you set an analog pin to Output you need to use the equivalent digital pin mapping, not the analog channel! Use the reading as raw value (0-1024) or convert it to percent by using the map command. Here is a sample code:
#define legoSensorPin 14 // digital pin D14 is analog pin A0
#define legoSensor 0 // this time we define the analog channel
int raw=ReadLegoSensor(); // we read the raw value of the sensor
Serial.print("Raw value: ");
Serial.println(raw); // and print it to the monitor
byte percent=map(raw, 0, 1024, 0, 100); // we convert raw to percent
Serial.print("Percent value: ");
Serial.println(percent); // and print it to the monitor
pinMode(legoSensorPin, OUTPUT); //set pin as output
digitalWrite(legoSensorPin, HIGH); //set output high
delay(10); // wait a bit
pinMode(legoSensorPin, INPUT); //set pin as input
int value=analogRead(legoSensor); //read the input
return value; //return the raw value
That’s it! I hope someone will find this useful!