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