Sumo-Adapter für ASURO

Bild des IR-Adapters auf einem ASURO-Roboter Dieser Adapter dient der Programmierung des ASURO über ein ISP-Programmiergerät; zusätzlich befindet sich auf dem Adapter eine Infrarot-Sendediode und ein Infrarot-Empfänger, welche anstatt der auf dem Standard-ASURO befindlichen Bauteile benutzt werden können.
Durch die Ausrichtung nach vorne kann eine Hinderniserkennung durch die Reflektion des Infrarotlichtes an einem Gegenstand realisiert werden.

Ideal für einen Sumo-Roboter!

Der Adapter kann bei e-robotix.de bestellt werden.

Vorteile des Adapters:

  • Hinderniserkennung
  • ISP-Programmierung
  • Programmübertragung sehr schnell
  • Keine Übertragungsfehler
  • Mehr Programmspeicher möglich, da kein Bootloader nötig

Der Erste, der meinem Wissen nach dieses Prinzip auf dem ASURO verwendet hat, war der Roboternetz-Nutzer mit dem Nicknamen „waste“.

Bestückungsplan:
Bestückungsplan

Folgende Grafik zeigt die Empfindlichkeit des Abstandssensors für das Detektieren von Joghurtbechern:
Sensor-Empfindlichkeit

Download: Ein HEX-File um den IR-Adapter zu testen befindet sich hier.
Der Source-Code dazu befindet sich hier (Zip-Datei).
Der Source-Code für den Sumo-Asuro findet sich hier (Zip-Datei).

Der Sensor kann mit folgendem Programm abgefragt werden:

/****************************************************************************
    uint8_t objekt_sichtbar(uint8_t abstand)

    Ist ein Objekt in der Entfernung kleiner oder gleich
    dem Eingangsparameter "abstand" erkennbar?

    objekt_sichtbar(7), also bei maximalem Abstand
    liefert TRUE zurueck, falls überhaupt ein Object detektierbar ist.

    abstand:
    0: 5cm
    1: 7cm
    2: 13cm
    3: 15cm
    4: 16cm
    5: 17cm
    6: 18cm
    7: 22cm

    ( Testobjekt: Joghurtbecher, Umgebungsbeleuchtung: Zimmer )

    return: TRUE if obect found
            FALSE if not

    Zeitbedarf: 5ms

***************************************************************************/

uint8_t objekt_sichtbar(uint8_t distance)
{
    uint16_t j,z;

    DDRD |= (1 << DDD1);  // Port D1 als Ausgang
    PORTD &= ~(1 << PD1);  // PD1 auf LOW

    OCR2 = 254-distance;  //OCR2=0xFE ( sehr nahe )
    z=0;
    for(j=0;j<30;j++) // loop time: 5ms
    {
        if (PIND & (1 << PD0))z++;
        Sleep(6); // 6*Sleep(6)=1ms
    }
    if (z>=29) return FALSE; // Objekt nicht gefunden
    else return TRUE;

}
/***************************************************************************
* 
*  (c) 2008 robo.fr, christoph ( ät ) roboterclub-freiburg.de
*
***************************************************************************
*  This program is free software; you can redistribute it and/or modify   *
*  it under the terms of the GNU General Public License as published by   *
*  the Free Software Foundation; either version 2 of the License, or      *
*  any later version.                                                     *
***************************************************************************/
Mikrocontrollersonderheft 2 von Elektor

Das Programmieren des ASURO über die ISP-Schnittstelle hat mehrere Vorteile gegenüber der Programmierung mit dem IR-Adapter: Die Datenübertragung ist wesentlich schneller und vor allen Dingen gibt es keine Übertragungsfehler, wie sie mit dem standardmäßig mitgelieferten IR-Transmitter üblich sind und den Spaß am Umgang mit dem ASURO schnell verderben können.
Es ist allerdings zu beachten, dass für die Programmierung über die ISP-Schnittstelle ein Programmiergerät gebraucht wird.
Dieses Programmiergerät kann man sehr einfach selbst bauen (siehe einfache ISP-Programmiergeräte), oder aus einer Vielzahl angebotener Programmiergeräte im Internet auswählen.
Verwendet man einen AVR-Dragon, der etwas teurer als die normalen Programmiergeräte ist, kann man das Programm mit AVR-Studio im ASURO debuggen, wenn man z.B. einen ATmega88 statt des ATmega8 einsetzt (vergl. Mikrocontrollersonderheft 2 von Elektor).
Es ist zu beachten, dass der standardmäßig mit dem ASURO mitgelieferte ATmega8-Prozessor nicht über die ISP-Schnittstelle programmiert werden kann, da der Hersteller des ASURO hier die Schutzsicherungen gesetzt hat, die ein Umprogrammieren des Prozessors verhindern.
Bei vielen Elektronikversendern gibt es allerdings neue Prozessoren für unter 5€. Wenn man die ISP-Programmierung verwendet, kann man auch einen ATmega168 Prozessor einsetzen.
Damit erhält man gegenüber dem ATmega8 eine Verdoppelung des Programmspeichers von 8KByte auf 16Kbyte Flash. Dies ist vor allen Dingen nützlich, wenn man in den Programmen Fließkommazahlen verwenden will, da diese Routinen sehr viel Platz benötigen. In der beim ASURO mitgelieferten ASURO-Bibliothek müssen dazu lediglich ein paar Registernamen angepasst werden, die sich beim ATmega168 gegenüber dem ATmega8 unterscheiden.

Achtung Mac-User:
Für die meisten USB-ISP-Programmiergeräte scheint es für Apple-Rechner keine Treiber zu geben.
Eine Ausnahme scheint hier MySmartUSB von MyAVR zu bilden.