-         

Ergebnis 1 bis 10 von 10

Thema: Asuro IR Hinderniserkennung im Fahren?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2010
    Beiträge
    5

    Asuro IR Hinderniserkennung im Fahren?

    Anzeige

    Hallo.

    Bei meinem Asuro ist die IR-Modifikation von waste drauf(siehe http://www.roboternetz.de/phpBB2/zei...ag.php?t=11114).

    Nun dachte ich mir verwendeste mal die IR-Schnittstelle zur Hinderniserkennung und Umfahren von Objekten. Ich habe den Beispielcode aus dem Thread genommen und dies getestet, etwas vereinfacht und es funktionierte wunderbar:
    Code:
    #include "asuro.h"
    #include <stdlib.h>
    void InitIRDetect(void)
    { 
      UCSRB = 0;
      DDRD |= (1 << DDD1);    // Port D1 als Ausgang
      PORTD &= ~(1 << PD1);    // PD1 auf LOW
      OCR2  = 0xFD;   //Pulsbreite 2
    }
    
    int main(void)
    {       
        Init();
    	InitIRDetect();
    	
        while (1)
          {
    		
    			UCSRB = 0;
                if (PIND & (1 << PD0))
                      StatusLED(GREEN);
                else
                    StatusLED(RED);
        }
      return 0;
    }
    Man sieht mit dem Programm sehr schön die Annäherung des Objektes. Die Schleifendurchläufe mit roter LED nehmen bei Annäherung immer mehr zu, bis die LED irgendwann ganz rot ist - so weit so gut (ich verwende immer den Wert ßxFD für die Pulsbreite).

    Nun wollte ich natürlich, dass der Asuro dies auch während der Fahrt tut. Wenn ich nun aber nur die Anweisung den Motoren zu starten einfüge, geht die Hinderniserkennung gar nicht mehr PortD Pin0 ist dauerhaft low, die LED belibt grün.
    Code:
    #include "asuro.h"
    #include <stdlib.h>
    void InitIRDetect(void)
    { 
      UCSRB = 0;
      DDRD |= (1 << DDD1);    // Port D1 als Ausgang
      PORTD &= ~(1 << PD1);    // PD1 auf LOW
      OCR2  = 0xFD;   //Pulsbreite 2
    }
    
    int main(void)
    {       
        Init();
    	InitIRDetect();
    	MotorSpeed(64,64); //Ohne diese Zeile gehts es wie gedacht
        while (1)
          {
    			UCSRB = 0;
                if (PIND & (1 << PD0))
                      StatusLED(GREEN);
                else
                    StatusLED(RED);
        }
      return 0;
    }
    Nun habe ich herausgefunden, dass die Funktion der IR-Erkennung davon abhängt, was durch MotorSpeed in die Register OCR1A und OCR1B reingeschrieben wird: Bei 64 funktioniert es noch gerade so (es werden sehr wenige Reflexionen erkannt, aber es werden noch welche erkannt), bei 100 wird nichts mehr erkannt. Bei 20 ist es quasi wie bei 0.
    Das blöde dabei ist freilich, dass der Asuro sich bei 64 für OCR1A und OCR1B nicht bewegt. Folglich funktioniert die Erkennung nicht in der Bewegung. Da ich hier im Forum und an anderen Stellen des Internets niemanden mit demselben Problem fand, schließe ich auf einen Fehler meinerseits.

    Hat ihn wer gefunden?

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Da sollte eigentlich kein direkter Zusammenhang bestehen. Der Antrieb verwendet Timer1, die Trägerfrequenz für das IR-Signal den Timer2. Ist die IR-Led nicht richtig abgeschirmt, so dass der IR-Empfänger irgendwelche IR-Echos empfängt? Welche Lib verwendest du? myMotorSpeed() kenne ich nicht.

    Gruß

    mic

    [Edit]
    "geht die Hinderniserkennung gar nicht mehr PortD Pin0 ist dauerhaft low, die LED bleibt grün"

    Grün bedeutet bei deinem Programm, dass der Port des IR-Empfängers High ist!

    if (PIND & (1 << PD0))
    StatusLED(GREEN);

    Das bedeutet, der IR-Empfänger erkennt kein Signal. Sind die Akkus/Batterien ok? Möglicherweise senkt die Belastung durch die Motoren die Bordspannung soweit ab, dass der IR-Empfänger nicht mehr richtig funktioniert. Er ist sehr zickig bei Unterspannung.

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2010
    Beiträge
    5
    oh, danke für den Hinweis. Die Funktion myMotorSpeed hatte ich mir zwischendurch selbst geschrieben, das sollte eigentlich nicht in den Codeabschnitt rein. Die Funktion ist inzwischen wieder verworfen, da der Ansatz keine Lösung des Problems brachte.

    Was ich vielleicht noch erwähnen sollte:
    Der Fehler kann nicht an derr grundsätzlichen Bewegung im physikalischen Sinne liegen - es funktioniert nähmlich auch dann nicht, wenn ich die Räder des Asuro anhebe und so die Bewegung verhindere und nur die Raddrehung erzeuge.

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Schau mal mein Edit oben, habe ich grad geschrieben :)

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2010
    Beiträge
    5
    Das ist eine sehr gut Idee. daran habe ich noch gar nicht gedacht.

    Die Spannungen sehen wie folgt aus:
    Abgeschaltet 5,14 V
    Bootvorgang: 5,09 V
    Angeschaltete Motoren bei v=255: 4,93 V
    Angeschaltete Motoren bei v=64 (Räder drehen sich nicht): 5,05 V

    Ist das schon zuwenig bei 255?
    Im moment betreibe ich den Asuro mit NiMH-Akkus 4x1,2 V ohne gejumperte Diode. Sollte man da schon jumpern? Rein theoretisch sollte da ja nur 4,8V rauskommen... Ohne Last sinds aber 5,14 V (s.o)

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    23
    Beiträge
    173
    Also ich will das vieleicht auch machen und fasse mal zusammen


    zuerst einfach nur die 2 IR-Dioden wie am Bild montieren

    siehe http://www.roboternetz.de/phpBB2/zei...ag.php?t=11114).

    Brauch ich 5 Kabelstücke und richtig anlöten (verbinden)

    Dann ist es nur noch eine Progermierer sache oder

    Wie weit geht das ca. ? (Hindernisserkennung)

    mfg

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Die Spannungen sehen wie folgt aus:
    An welchen Punkten gemessen? Gut wäre (trotz der Kurzschlussgefahr beim Messen) direkt am SFH5110 bzw. am C8/C2.

    Im Moment betreibe ich den Asuro mit NiMH-Akkus 4x1,2 V ohne gejumperte Diode.
    Der Jumper sollte bei Akkus gesteckt (=überbrückt) sein. Auch wenn die Ladeschlussspannungen der Akkus in Summe mehr als 5V betragen. Der Mega8 kann nominal 5,5V und ich habe bisher noch nichts von einem "abgerauchten" asuro gelesen :)

    Die Library bietet auch die Funktion Batterie(), leider weiß ich aber nicht, ab welcher Version. Damit könnte man die Bordspannung mit und ohne Motoren ermitteln und aus den Werten eventuell Rückschlüsse auf die Bordspannung ziehen. Das habe ich aber bisher noch nie versucht und ich bin mir deshalb nicht sicher, ob das möglicherweise eine Sackgasse ist. Jumper stecken und Akkus laden sollte vorerst mal reichen ;)

    @Problem (ist der Name Programm? :)
    Die zwei "IR-Dioden" sind die IR-LED und der IR-Empfänger. Die haben 2+3=5 Beinchen und benötigen daher auch fünf Leitungen, wenn man sie mit dem asuro verbinden will. Infos zur IR-Abstandsmessung findest du auch im asurowiki. Du stürzt dich von einem Abenteuer ins nächste, magst du nicht mal bei einem Thema bleiben?

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2010
    Beiträge
    5
    verdammt ich depp!

    Die Spannungen sind gemessen direkt am Akkupack, also kommt die Diode noch dahinter. Das würde bedeutet:

    Abgeschaltet 5,14 V -0,6 V = 4,54 V
    Bootvorgang: 5,09 V -0,6V = 4,49 V
    Angeschaltete Motoren bei v=255: 4,93 V -0, 6V = 4,33 V
    Angeschaltete Motoren bei v=64 (Räder drehen sich nicht): 5,05 V - 0,6 V = 4,45 V

    das reicht natürlich nicht. Ich werd die Diode heute mal überbrücken und testen, dann melde ich mich nochmal. Vielen Dank schonmal *freu*

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    23
    Beiträge
    173
    Zitat Zitat von radbruch
    Du stürzt dich von einem Abenteuer ins nächste, magst du nicht mal bei einem Thema bleiben?
    Ja währ vlt besser

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2010
    Beiträge
    5
    also die Vermutung kann ich nun bestätigen. Mit überbrückter Diode funktioniert die IR-Erkennung nun bei allen Geschwindigkeiten.

    besten Dank, radbruch =D>

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •