Mighty Chihuahua
Jump to navigation
Jump to search
Mighty Chihuahua AKA Darth Sidious is a 'bot Brian Wagner built for the Spring 2011 Sumobot competition hosted by Hive13. He is named so because of his yip-yip nature. He looks like a rabid Chihuahua with ADD. Watch out Mighty Chihuahua is coming after you!
Components
I will get pictures up soon, but until then here are the components I used...
- digital line sensor http://www.pololu.com/catalog/product/959
- Motors are from Solarbotics
- Wheels are from Solarbotics
- Battery is a NiMH 7.2V RC battery
- Controller (computer) is a Orangutan from Pololu. I cannot say enough good stuff about this controller. AWESOME!
- Orangutan programmed with AdaFruit's USBTinyISP. Used WinAVR and programmers notepad.
- Misc wire and other stuff
- All held together with hot melt glue. Great stuff for building robots
- Some birch plywood and acrylic plastic
Code
Here is the "meat" of the code I am running on Mighty Chihuahua. I cannot say enough good stuff about the orangutan controllers!
//The main sumo run program. Press a button to stop the run and return unsigned char SumoRun() { unsigned char button; int lspeed = -100; //right motor is slightly faster int rspeed = -95; int turnspeed = 150; int turndelay = 400; //read_trimpot(); adjust turn delay with pot??? int lungespeed = read_trimpot(); int DistanceSensorL; int DistanceSensorR; int DistanceSensorB; // int Adjustment; int LTurn; int RTurn; // int ReallyClose = 400; int Close = 100; int Far = 40; int lungecount = 0; unsigned int LineSensors[2]; if (lungespeed > 150) { lungespeed = 150; } clear(); print("T Minus"); lcd_goto_xy(0, 1); print(" 5 "); play_from_program_space(beep_button_b); delay(1000); lcd_goto_xy(0, 1); print(" 4 "); play_from_program_space(beep_button_b); delay(1000); lcd_goto_xy(0, 1); print(" 3 "); play_from_program_space(beep_button_b); delay(1000); lcd_goto_xy(0, 1); print(" 2 "); play_from_program_space(beep_button_b); delay(1000); lcd_goto_xy(0, 1); print(" 1 "); play_from_program_space(beep_button_b); delay(1000); lcd_goto_xy(0, 1); print(" FIGHT! "); play_from_program_space(beep_button_a); clear(); while (1) { qtr_read(LineSensors, QTR_EMITTERS_ON); lcd_goto_xy(0, 0); print_long(LineSensors[0]); lcd_goto_xy(0, 1); print_long(LineSensors[1]); if (LineSensors[0] <750 && LineSensors[1] <750 ) { //about face //lcd_goto_xy(0, 0); //print("About "); //lcd_goto_xy(0, 1); //print("Face "); set_motors( 0, 0); delay(20); set_motors( lspeed*-1, rspeed *-1); delay(400); set_motors( turnspeed, turnspeed *-1); delay(turndelay); } else if (LineSensors[0] <750) { //turn left //lcd_goto_xy(0, 0); //print("Turn "); //lcd_goto_xy(0, 1); //print("Left "); set_motors( 0, 0); delay(20); set_motors( lspeed*-1, rspeed *-1); delay(100); set_motors( turnspeed* -1, turnspeed ); delay(turndelay); } else if (LineSensors[1] <750) { //turn right //lcd_goto_xy(0, 0); //print("Turn "); //lcd_goto_xy(0, 1); //print("Right "); set_motors( 0, 0); delay(20); set_motors( lspeed*-1, rspeed *-1); delay(100); set_motors( turnspeed, turnspeed *-1); delay(turndelay); } //Check the back sensor to see if someone has snuck up on you DistanceSensorB = analog_read(2); // get result if ((DistanceSensorB < 500) || (lungecount > 1000)) { set_motors( 0, 0); delay(20); set_motors( lspeed*-1, rspeed *-1); delay(100); set_motors( turnspeed* -1, turnspeed ); delay(turndelay); set_motors( lspeed*-1, rspeed *-1); delay(100); lungecount=0; } //check the eyes DistanceSensorL = analog_read(1); // get result DistanceSensorR = analog_read(0); // get result //locked in close if ((DistanceSensorL > Close) && (DistanceSensorR > Close)) { LTurn = 150; //full power RTurn = 150; //full power lungecount++; } else if ((DistanceSensorL > Close) && (DistanceSensorR > Far)) { LTurn = 0; RTurn = 100; lungecount=0; } else if ((DistanceSensorL > Close) && (DistanceSensorR > 0)) { LTurn = 0; RTurn = 100; lungecount=0; } else if ((DistanceSensorL > Far) && (DistanceSensorR > Close)) { LTurn = 100; RTurn = 0; lungecount=0; } else if ((DistanceSensorL > Far) && (DistanceSensorR > Far)) { LTurn = 100; RTurn = 100; lungecount=0; } else if ((DistanceSensorL > Far) && (DistanceSensorR > 0)) { LTurn = 0; RTurn = 100; lungecount=0; } else if ((DistanceSensorL > 0) && (DistanceSensorR > Close)) { LTurn = 100; RTurn = 0; lungecount=0; } else if ((DistanceSensorL > 0) && (DistanceSensorR > Far)) { LTurn = 100; RTurn = 0; lungecount=0; } else if ((DistanceSensorL > 0) && (DistanceSensorR > 0)) { LTurn = 0; RTurn = 0; lungecount=0; } else { LTurn = 0; RTurn = 0; lungecount=0; } lcd_goto_xy(5, 0); print_long(DistanceSensorL); print(" "); lcd_goto_xy(5, 1); print_long(DistanceSensorR); print(" "); set_motors(lspeed - LTurn, rspeed - RTurn); //check for a button press button = button_is_pressed(ANY_BUTTON); if (button != 0) { set_motors(0, 0); return button; } } }