monoleg - Der einbeinige Roboter
Hallo Roboterfans
Nach Räder-, Ketten- und Raupenantrieben wollte ich mal in die Welt der Spinnenbeine reinschnuppern.
Noch hängt das inzwischen fertige "Fahrwerk" am RP6, geplant ist aber ein
eigenes ATtiny13-Kontrollerplatinchen auf Basis meines Trostpreises:
Bild hier
Ein Demo-Video der Bewegungsmöglichkeiten:
Bild hier
Bild anklicken für youtube-Video
Orginal: 8,4MB mpg mit Ton
Bauteile Fahrwerk:
3 5€-Miniservos
1 Akkuhalter mit 2500er NIMH-Akkus (4,8V)
4 Gummitüllen aus einem alten Videorekorder
1 Kabel einer seriellen Maus mit Buchse
2 80mm Vorderräder eines RC-Cars mit Nylonlagern
2 Inbusschrauben M5*50
1 22mm Messingrohr (5mm Innendurchmesser)
2 U-Scheiben M5
1 Kunststofftrinkhalm
Bauteile Servoadapter:
1 Stück Lochraster
1 Buchse vom Mauskabel
3 3er-Stiftleisten
1 1uF Tantal
1 Kabelbinder (klein)
Bauteile RP6-Adapter:
1 14-Pol Flachkabelstecker
1 9Pol-SUBD-Stecker mit Gehäuse
2 10K Widerstände (PullDown für SCL/SDA)
1 Stück Klebeband
Stütze, Finger und konstruktive Verbindungen sind aus Heiskleber.
Verdrahtung:
Die Servos hängen am Erweiterungsport des RP6. Ich verwende die Signale E_INT(8 ), SCL(10) und SDA(12) und die geregelten 5V an Pin1/2(-) und Pin3 (+). (Tipp für Nachbauer: Die Pins liegen am 14Pol-Flachkabelstecker nicht nebeneinander!) Der Weg der Signale: Vom 14-Pol über den 9-Pol, das Mauskabel, Buchse Mauskabel, Lochraster zu den Stiftleisten. Parallel zu den Stiftleisten ist noch ein 1uF-Elko zwischen + u - und zwischen Pin 10 und 12 im RP6-Adapter ist noch je ein 10K-PullDown (um elektrisch wie Pin E_INT zu sein).
Funktion und Software:
Das Bein mit seinen drei Achsen (Finger, Arm und Schulter) soll den auf der Stütze stehenden Roboter anheben und bewegen. Das hört sich einfach an, ist aber für einen Realschüler wie mich mathematisch nicht zu lösen. *grummel* Mehr als "stochern" habe ich bisher nicht geschafft, deshalb zeige ich euch hier nur ein kleines Demo der Bewegungsmöglichkeiten. Das Programm dazu ist mit Absicht und Voraussicht auf den kleinen ATtiny13 recht einfach gehalten und verwendet die orginalen Libraries:
Code:
#include "RP6RobotBaseLib.h"
uint8_t i, pause, servo_stellzeit, servo_delay;
void servo(uint8_t w0, uint8_t w1, uint8_t w2)
{
unsigned int count=0;
do{
PORTA |= E_INT1; // E_INT1 (Pin8)
sleep(w0);
PORTA &= ~E_INT1;
PORTC |= 1; // SCL (Pin10)
sleep(w1);
PORTC &= ~1;
PORTC |= 2; // SDA (Pin12)
sleep(w2);
PORTC &= ~2;
sleep(servo_delay-(w0+w1+w2));
//sleep(127);
} while (count++ < servo_stellzeit);
mSleep(10*pause);
}
int main(void) {
initRobotBase();
i=0;
servo_stellzeit=15;
DDRA |= E_INT1; // E_INT1 als Ausgang
DDRC |= 3; // SCL und SDA als Ausgang
// 5 - 15 - 25 // Min - Mitte - Max
servo(15,15,15); // Grundstellung
while (1)
{
switch (i)
{
case 0: i++; pause=30; servo_delay=255; mSleep(1000); break;
case 1: i++; pause=10; servo_delay=255; break;
case 2: i++; pause=10; servo_delay=127; break;
case 3: i++; pause=1; servo_delay=127; break;
case 4: i=0; pause=1; servo_delay=127; break;
}
servo(10,15,15); // Finger zurück
servo(15,15,15);
servo(20,15,15); // Finger vor
servo(15,15,15);
servo(15,10,15); // Arm runter
servo(15,15,15);
servo(15,20,15); // Arm hoch
servo(15,15,15);
servo(15,15,10); // Schulter links
servo(15,15,15);
servo(15,15,20); // Schulter rechts
servo(15,15,15);
servo(20,10,15); // Finger vor, Arm runter
servo(25,5,15);
servo(20,10,15);
servo(15,15,15);
servo(20,20,15); // Finger vor, Arm hoch, Schulter links
servo(15,15,10);
servo(10,20,10); // Finger zurück, arm hoch
servo(5,25,10);
servo(10,20,10);
servo(15,15,15);
}
return 0;
}
Ausblick:
Der ATtiny13 hat 6 I/Os, 3 davon sind für die Servos reserviert. Einen share ich zwischen einer LED und einem Taster. Einen weiteren werde ich für einen Lichtsensor opfern, dann kann er mit einer Solarzelle auf dem Rücken nach Energie suchen. Bleibt noch ein Pin zur freien Verfügung. Hier bräuchte ich noch eine Idee...
Softwaremässig soll er das Laufen lernen. Zuerst noch in C über den RP6, später dann in Maschinensprache mit dem ATtiny13. Das wird aber noch etwas dauern, denn ich habe noch keine Kontrollerplatine, keinen ISP-Adapter, keine Programmiersoftware, keinen Assembler und vor allem, AVR-Maschinensprache kann ich auch noch nicht. Es gibt noch viel zu tun.
Impressionen:
Bild hier Bild hier Bild hier Bild hier
Bild hier Bild hier Bild hier Bild hier
Gruß
mic