Hallo
Davon habe ich schon immer geträumt, aber rein mechanisch (mit lego oder fischertechnik..) hat das nie funktioniert:
Bild hier
http://www.youtube.com/watch?v=SZ3aWmsqfFQ
Nach vielen Versuchen kann ich nun sagen, dass die Fertigungstoleranzen meiner Bio-Dominosteine absolut unakzeptabel sind. Ich vermute, die werden aus massivem Holz rausgebissen. Ich werde dem Hersteller/Vertrieb mal eine Kopie der Videos senden...
Beim Aussortieren der "schräg" gesägten Steine:
Bild hier Bild hier
http://www.youtube.com/watch?v=6RqBD0XeheQ
http://www.youtube.com/watch?v=DcgoIOig_Mk
Das Programm auf Basis meiner Mini-Lib:
Code:
// Domino Day für den RP6 16.11.07 mic
#include "rblib.h"
#include "rblib.c"
uint8_t y, z;
ISR(TIMER0_COMP_vect)
{
static uint16_t count=0;
//if(count>x) PORTA &= ~16; else PORTA |= 16; // E_INT1 (Pin8)
if(count>y) PORTC &= ~1; else PORTC |= 1; // SCL (Pin10)
if(count>z) PORTC &= ~2; else PORTC |= 2; // SDA (Pin12)
if(count<1000)count++; else count=0;
}
void servo_init(void)
{
//DDRA |= 16; // E_INT1 als Ausgang
DDRC |= 3; // SCL und SDA als Ausgang
TCCR0 = (0 << WGM00) | (1 << WGM01); // CTC-Mode
TCCR0 |= (0 << COM00) | (0 << COM01); // ohne OCR-Pin
TCCR0 |= (0 << CS02) | (1 << CS01) | (0 << CS00); // prescaler /8
TIMSK = (1 << OCIE0); // Interrupt ein
OCR0 = 9; // 100kHz?
}
int main(void)
{
rblib_init();
servo_init();
setLEDs(0b1001);
setMotorDir(FWD,FWD);
setMotorPWM(0,0);
z=225;
y=100;
delay(255);
while(1){
y=161; // hoch
delay(100);
z=211; // greifen
delay(50);
y=45; // runter
delay(50);
setMotorDir(BWD,BWD); // zurück
setMotorPWM(50,50);
delay(50);
setMotorPWM(0,0);
delay(50);
z=202; // loslassen
delay(150);
z=195; // auf Abstand
delay(50);
setMotorDir(FWD,FWD); // vor
setMotorPWM(50,50);
delay(100);
setMotorPWM(0,0);
}
return 0;
}
Doku des Greifers folgt noch
Gruß
mic
Lesezeichen