Isobot hacked the mammuth way :-)

Hello from France.

Just a trick for those of you who would attempt to hack an isobot robot toy of Takara Tomy.

A great library was published here on the arduino forum in 2009 http://arduino.cc/forum/index.php/topic,8772.0.html with all the IR codes and a.cpp file making able to control the humanoid robot toy with a simple IR led.

But the hack solution only worked with a 8mhz arduino pro mini.
I just succeeded in controlling it the quick and dirty "mammuth way" with any arduino 16Mhz/9V (Uno, duemillanove...) so i share the solution with you.

Mammuth hardware

Instead of the arduino pro mini plugged directly on the battery block (3,3V), i only have a duemilanove and some Uno's. So let's put an arduino uno on the back and a 9V battery on the little toy (16 cm, 300g). Let's tests the balance and moves with the remote.

Result mammuth backpack -> succeed.

Mammuth compiling

Some people are reporting problems in the compiling of the example code provide on the forum, with the library. Let's try to cut and paste both the isobot.h and the isobot.cpp in the header of the example sketch, erasing the #include lines. Let's try to compile.

Result mammuth compiling->succeed.

Mammuth coding

In the forum, nobody could make the code work with a 16 Mhz arduino. The people had to buy the same arduino pro mini 3,3V/8Mhz and then only the hack worked. And i'm not willing to buy an old 8mhz pro mini especially for this project.

A parameter is coded in the .cpp file (with a comment) to switch between 8/16Mhz cards, but it never worked correctly for the other with 16mhz cards. Some people said that their oscilloscope showed that the frequency resulting from the cards was different. More longer intervals with the 16Mhz. I noticed in the code that the time was everywhere in absolute values (microseconds or seconds), except in the line of the .cpp where you could change a "prescaler" parameter (explained on the forum link i gave). So, always the mammuth way, i decided to reduce the interval by incrementing the prescaler value.

In the original and great source code of isobot.cpp :

//functions
void Isobot::oscWrite(int time){
for(int i = 0; i < (time / 26) - 1; i++){ //prescaler at 26 for 16mhz, 52 at 8mhz, ? for 20mhz
digitalWrite(TXpin, HIGH);
delayMicroseconds(13);
digitalWrite(TXpin, LOW);
delayMicroseconds(13);
}
}

I remplace 26 by 28. Test.

//functions
void Isobot::oscWrite(int time){
for(int i = 0; i < (time / 28) - 1; i++){ //prescaler at 28 for 16mhz, 52 at 8mhz, ? for 20mhz
digitalWrite(TXpin, HIGH);
delayMicroseconds(13);
digitalWrite(TXpin, LOW);
delayMicroseconds(13);
}
}

Then Isobot moves !

Mammuth coding (no intelligence) -> Succeed !

So isobot now walks forward with random funny animations, and when his ultrasound sensor feel an obstacle, he launch random moves, random fight, then goes back clockwise, and so on. So, happy arduino atmega 328 users, you can now hack any isobot the mammuth way :slight_smile: And remember to check out the original codes and library posted in the arduino forum by the people who made the intelligent work :slight_smile:
Link to isobot pro-mini IR hack : http://arduino.cc/forum/index.php/topic,8772.0.htm

@hugobiwan