Hallo asurofans
Da mein asuro unter einer defekten H-Brücke leidet (und mein RP6 dafür zu schwer ist) habe ich eine alte Idee neu belebt und ein neues Projekt gestartet. Noch etwas unbeholfen und mechanisch nicht wirklich ausgereift sind dies die ersten "Schritte" meines asuros. Ohne große Mathematik nutzt das einfache Programm die symetrische Anordnung der Servos:
Bild hier
http://www.youtube.com/watch?v=6FOKJ800YRg
Das ist mein erster Versuch und kann noch nicht wirklich als "Gehen" bezeichnet werden. Aber ich muß erst mal ein Gefühl dafür entwickeln, es ist deutlich schwieriger als mit Rädern zu rollen.
Die Hardware:
- asuro-Platine
- Adapter mit einzeln schaltbaren Pins
- vier 4000 mA-Discounter-Akkus mit Halter
- acht 5€-Servos
- Heißkleber und Kleinteile
Das Programm besteht im wesentlichen aus einer 100kHz-ISR die nacheinander die Servos ansteuert. Grundlage dazu war die Vorlage aus dem RN-Wiki die ich etwas modifiziert habe:
Code:
TIMSK |= (1<<OCIE2);
TCCR2 = (1<<WGM21) | (1<<CS20);
OCR2 = 80;
...
ISR(TIMER2_COMP_vect)
{
static uint16_t count=0;
static uint16_t count2=1000;
static uint8_t impuls=0, servo=0;
static uint8_t impuls2=0, servo2=0;
if(!impuls)
{
if(servo == 0) { impuls=hra; servo0_on; }
if(servo == 1) { impuls=hri; servo0_off; servo1_on; }
if(servo == 2) { impuls=vra; servo1_off; servo2_on; }
if(servo == 3) { impuls=vri; servo2_off; servo3_on; }
if(servo == 4) servo3_off;
if(servo < 5) servo++;
} else impuls--;
if(!impuls2)
{
if(servo2 == 4) { impuls2=hla; servo4_on; }
if(servo2 == 5) { impuls2=hli; servo4_off; servo5_on; }
if(servo2 == 6) { impuls2=vla; servo5_off; servo6_on; }
if(servo2 == 7) { impuls2=vli; servo6_off; servo7_on; }
if(servo2 == 8) servo7_off;
if(servo2 < 9) servo2++;
} else impuls2--;
if(count < 2000) count++; else { count=impuls=servo=0; if(p) p--; }
if(count2 < 2000) count2++; else { count2=impuls2=0; servo2=4; }
}
Der Code der Hauptschleife für das Demo sieht so aus:
Code:
while(1)
{
vla=hla=vra=hra=120; // heben/senken
pause(10);
vli=vri=110; // gehen
hli=hri=140;
pause(15);
vla=hla=vra=hra=135; // heben/senken
pause(10);
vli=vri=140; // gehen
hli=hri=110;
pause(15);
}
vli bis hra sind die Servopositionen vornelinksinnen bis hintenrechtsaußen, Drehbereich ist von 50-200 (?). Das Programm nutzt die spiegelbildliche Anordnung der Servos und ist deshalb sehr einfach gestrickt.
Das ist mal die Basis, mal sehen, was ich da rauskitzel kann...
Gruß
mic
Lesezeichen