Ich benutze den NiboBee, der hat schön viele Erweiterungsports.
Ausserdem glaube ich, noch nicht ganz so weit zu sein, nen eigenen Roboter zu bauen (der HL-Walker Buldog wäre aber wohl meine nächste Wahl).
Schaltplan gibts bei Nicai-Systems.de
Konkret hängen Sharp und Servo bei mir am Port X3, die genaue Belegung kannst du dem Schaltplan entnehmen.
Der Code, um das Servo anzusteuern, stammt nicht von mir, ich glaube, radbruch hat den geschrieben (schwirrt im Forum herum) und ist, an Einfachheit, wohl schwer zu überbieten, es wird Timer2 (AtMega16) benutzt:
Code:
TCCR2 = (1 << WGM21) | (1 << CS20); // CTC-Mode, no prescaling, no OC2-PIN!
OCR2 = 208; // 36kHz @15MHz
TIMSK |= (1 << OCIE2);
Die ISR dazu sieht so aus:
Code:
//----------------------------------- Timer2-ISR --------------------------------------------------
ISR (TIMER2_COMP_vect)
{
if(count_serv>servo) PORTC &= ~(1<<PC3); else PORTC |= (1<<PC3);
if(count_serv<1440) count_serv++; else {count_serv=1; if(p) p--;};
}
Die Variable servo() legt die Soll-Position des Servos fest, Mittelstellung ist bei ca. 100 (die habe ich, ebenso wie servo_maxLinks und servo_maxRechts in Konstanten gespeichert, somit ist das Ganze supereinfach trimmbar, indem man den entsprechenden Wert ändert), da ich nicht den vollen, möglichen Ausschlag benutzen kann wegen meiner Umlenk-Hebelei.
Man muss nur dem Servo genug Zeit geben, die vorgegebene Position auch wirklich zu erreichen, ich hab ein, leider etwas lahmes HS55 drin, wenn mir mal ein schnelleres in die Finger kommt (muss ich mal meine Wühlkisten durchsuchen) wird das Ding ausgetauscht, Kraft braucht es für das bisschen Sensor wirklich nicht.
Ich glaube, einfacher gehts kaum mehr. Indem man servo() in Stufen ändert, kann man ziemlich Zeit sparen bzw. erstmal gröber scannen und bei Bedarf (die Variable heisst bei mir servo_scanStep, und hat derzeit den Wert 10) einfach servo_scanStep verringern, um feiner suchen zu können.
Derzeit braucht ein voller Scan (zwischen servo(55) und servo(155) von rechts nach links oder umgedreht rund anderthalb Sekunden, dabei liegt der Erfassungswinkel bei ca. 90°, das reicht für vorne.
Mit geschickter Bauweise lässt sich da allerdings weit mehr herausholen, die meisten Servos schaffen ohne weiteres 180°, und wenn man den Sharp direkt aufs Servo montiert hat man die auch. Zwei reichen also für ringsum, und wenn das Servo oben drauf ist, reicht ein Servo sogar für beide Sensoren. 
Hinten werde ich irgendwann einfache, digitale IR-Sensoren montieren, denke ich mal.
Was den Wert 150 angeht: so doll ist das gar nicht, wenn die Biene Vollgas fährt, ist sie ganz schön flink, und wie gesagt: eine volle Scanbreite dauert über eine Sekunde. Werde sie aber wahrscheinlich sowieso nicht mit Vollgas betreiben, von daher _wird_ es reichen (notfalls kann man auch mal anhalten).
Grundsätzlich kann man aber auch bedeutend schneller scannen, indem man die Steps erhöht, nur erkennt der Sensor dann eben nur noch breitere Hindernisse. Ich aber denke da (im Hinblick auf für später geplante Dinge) an Dominosteine oder Streichholzschachteln, darum mag ichs nicht gröber haben. Weitere Temposteigerung wäre eventuell noch mit den Warteschleifen fürs Servo drin, die sind erstmal lang genug, damit es _sicher_ klappt (wie gesagt, mit nem schnelleren Servo schaut auch das anders aus).
220 gibt mir der Sharp bei etwas über 20 cm, das ist bereits sehr nahe (wie gesagt, aus irgendeinem Grunde komme ich auf einen Maximalwert von rund 600, das scheint an der Bibliotheksfunktion zu liegen, so ganz blicke ich das alles auch noch nicht).
Man braucht ja auch zum rangieren noch etwas Platz.
Lesezeichen