Hallo
Ich glaube, ich habe jetzt eine brauchbare und kostengünstige Methode zum Anlocken des RP6 gefunden. Basis ist ein Strichlaser (Powerfix PLW2) vom Discounter als Bake, Detektor auf dem RP6 ist ein LDR hinter einer Linse (Durchmesser 40mm, Brennweite ca. 50mm) in einer Pappröhre mit Schlitzblende. Obwohl sich der LDR nicht genau im Brennpunkt der Linse befindet und weder Laserwasserwaage noch Detektor großartig ausgerichtet sind, ist das Ergebniss recht gut (besser als das Video auf jeden Fall :)
Bild hier
http://www.youtube.com/watch?v=dmXwCAlR7OA
Durch die Linse wird die lichtempfindliche Fläche des Detektors so weit vergrößert, dass auch ohne exakte Ausrichtung schon Reichweiten von über 5m erreichbar sind. Probleme mit der Hintergrundhelligkeit kann man sicher durch eine bessere KI des Suchprogramms ausmerzen:
Code:
// Projekt Ladestation Step 1: RP6 anlocken mic 2.3.2011
#include "RP6RobotBaseLib.h"
// Achtung! Die PWM-Werte werden hier OHNE Rampe verändert!
void setMotorPWM(uint8_t power_links, uint8_t power_rechts)
{
extern uint8_t mleft_ptmp, mright_ptmp;
if(power_links > 210) power_links = 210;
if(power_rechts > 210) power_rechts = 210;
mleft_power=mleft_ptmp=power_links;
mright_power=mright_ptmp=power_rechts;
OCR1BL = power_links;
OCR1AL = power_rechts;
if(power_links || power_rechts)
TCCR1A = (1 << WGM11) | (1 << COM1A1) | (1 << COM1B1);
else
TCCR1A = 0;
}
int main(void)
{
initRobotBase(); // sollte man nicht vergessen
PORTA |= ADC0; // PullUp einschalten
powerON(); // Achtung! Der RP6 kann sich bewegen!
while(1)
{
setMotorPWM(0, 150); // Bake suchen
setLEDs(56);
while(readADC(ADC_ADC0) > 200);
setMotorPWM(150, 100); // in Kurve darauf zufahren
setLEDs(7);
while(readADC(ADC_ADC0) < 200);
}
while(0) // debug
{
writeInteger(readADC(ADC_ADC0), 10); // ADC Kanal 0
writeChar('\n');
mSleep(300);
}
while(1); // Notbremse
return(0);
}
Schritt "Anlocken" ist so eigentlich gelöst, nun steht das Design der Ladestation an.
Gruß
mic
Lesezeichen