-
        

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 28

Thema: ASURO mit Ultraschallsensor (SRF05) for Dummies

  1. #1

    ASURO mit Ultraschallsensor (SRF05) for Dummies

    Anzeige

    Hi Leute,

    ich habe meinen ASURO mit dem Ultraschallsensor SRF05 ausgestattet. Da ich nirgends eine Komplett-beschreibung und auch keinen getesteten Code gefunden habe mit dem dieser Sensor angesprochen werden konnte habe ich mir gedacht, ich fasse mal alle wichtigen zu diesem Thema gehörigen Informationen zusammen. Ich habe keine Erweiterungsplatine etc. eingesetzt weil mir das alles zu kompliziert erschien. Für die Ansteuerung des SRF05 habe ich die Linienverfolgung opfern müssen, sollte aber zu verschmerzen sein wenn mann im Gegenzug mit Ultraschall durch die Gegend fahren kann.

    Der Code zur Ansteuerung des Sensors exisitiert in ähnlicher Form schon irgendwo in diesem Forum, allerdings waren noch einige Fehler enthalten.
    Zur Hardware: Der SRF05-Sensor wird von mir im SRF05 Modus betrieben, d.h. nur ein Pin wird für die Ansteuerung und für die Messung benötigt. Insgesamt müssen also 3 Pins des SRF05 an den ASURO angeschlossen werden, die Stromversorgung (5V und GND) und das Ansteuerpin (Auslösen und Messen).
    Folgende Pinbelegung habe ich verwendet:
    5V (SRF05) -> OUT+ (ASURO)
    Ansteuerpin (mittleres Pin am SRF05) -> PD6 (ASURO)
    GND -> OUT- (ASURO)

    Der Anschluss der Spannungsversorgung an den Sensor sollte kein Problem darstellen. Auf dem Asuro sind ja zu diesem Zweck schon zwei Stellen auf der Platine vorhanden (OUT+, OUT-). Das Ansteuerpin des SRF05 habe ich an PD6 am ASURO angelötet. Dazu habe ich D11 entfernt und den Wiederstand R9 (220 Ohm) überbrückt. D11 ist die mittlere (rote) LED auf der Unterseite des ASURO und wird zur Linienverfolgung eingesetzt. Im Prinzip könnte man auch andere Pins zur Ansteuerung verwenden aber da die Linienverfolgung meiner Meinung nach nicht so wichtig ist habe ich D11 verwendet um den Ultraschallsensor anzuschließen.
    Um R9 zu überbrücken muss man den halben Tischtennisball abnehmen, die richtigen Lötstellen (Beinchen von R9) identifizieren und am besten mit einem kleinen Stück Draht überbrücken. R9 muss überbrückt werden da er sich nicht wie im Schaltplan nach sondern vor D11 befindet.
    Angehängte Dateien Angehängte Dateien

  2. #2
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    sehr gut, endlich mal alles zusammengefasst. du hättest auch die erweiterungsplatine nutzen können, dann wäre dein asuro noch kompatbel zu anderen erweiterungen geblieben. die pins out+, out- sowie einige portpins, auch pd6, sind auf die platine herausgeführt.

    wer also die erweiterungsplaine nutzt, kann genau diesen code verwenden. der auslöser vom DRF muss dann an den frontled-pin.

    ich bin mir allerdings recht sicher, dass der schaltplan stimmt. bitte schaut bei eurem asuro nach (nicht in der anleitung, sondern auf der platine!), bevor ihr die brücke baut die ihr evtl nicht braucht. wenn der widerstand HONTER der led ist, dann gilt folgendes:

    den widerstand R9 muss man NICHT überbrücken. dieser ist nämlich mit der masse verbunden, und wnn die frontled ausgebaut ist und der SRF oder die erweiterungsplatine drin ist, dann hat dieser keine bedeutung mehr weil er vom prozessor und der restlichen elektronik getrennt ist.

    vorher:
    + --- Prozessor ---- Diode ---- R9 ---- Masse


    nachher:
    + --- Prozessor ---- SRF od. erweiterungsplatine --- Masse
    und
    Übrig gebliebenr pin der erweiterungsplatine --- R9 -- masse

    also hat dieser keinen einfluss auf den srf.
    kleinschreibung ist cool!

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    05.08.2009
    Beiträge
    32

    -> Problem - riesige Ungenauigkeiten beim SRF05

    Hallihallo

    Sorry, aber diesmal habe ich nicht viel Zeit - muss daher ziemlich stressen.

    Also, ich habe den SRF05 am ASURO montiert, nun das Programm (welches oben gepostet wurde) funktioriert - abr naja - mit riesigen Ungenauigkeiten. i.e. Ich kann zwar unterscheiden ob meine hand vor dem US-Ranger liegt (3cm -12 cm) aber etwas in 30 cm Entfernung wird als 50cm, 20cm oder etwas zwischen drin angegeben. Über ~60cm kommt er nicht hinaus. An der Spannung sollte es aber nicht liegen.

    Kann mir jemand (schnell) helfen!?

    cheers
    ippeb

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    12.02.2006
    Beiträge
    459
    Vielleicht findest Du in diesem Thread eine Lösung zu Deinem Problem.

    Gruß,
    robo.fr

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.08.2007
    Ort
    Delmenhorst
    Alter
    32
    Beiträge
    731
    Hi

    Ich habe das selbe Problem.
    Ich habe es schon mit einem Korrekturwert probiert, aber der ist auch jedesmal unterschiedlich.
    Und wenn ich die 58µs warte bekomm ich immer nur Werte von 1 - 6.

    Code:
    uint16_t getAbstand(uint8_t sensor)
    {
      uint16_t abstand = 0;          // abstand in cm
        
      DDRC |= (1<<sensor);          // sensor Pin auf Ausgang
      PORTC |= (1<<sensor);         // sensor Pin auf high setzen
      
      waitUs(20);                // 20 mikrosek. warten
      
      PORTC &= ~(1<<sensor);        // sensor Pin auf low setzen (ist noch als Ausgang konfiguriert)
      DDRC &= ~(1<<sensor);         // sensor Pin auf Eingang setzen
      
      while(!(PINC & (1<<sensor))); // auf Sensorantwort warten (Eingang wird high)
      
      while(PINC & (1<<sensor))     // warten bis Signalende bis Eingang low wird
      {                  
        waitUs(1);              // 58 mikrosec. warten entspricht 1cm entfernung
        abstand++;                  // Anzahl der cm erhöhen
      }
         
      return abstand;               // gemessenen Abstand zurückgeben
    } 
    
    /////////////////////////////////////////////////////////////////////////////
    // Main-Funktion
    /////////////////////////////////////////////////////////////////////////////
    main()
    {
    	uint16_t x = 0;
    	char ausgabe[10]="\0";
    	
     	lcdInit();
     	lcdString("X ");
     	x = getAbstand(5);
     	itoa(x/1.36, ausgabe, 10);
     	
     	lcdString(ausgabe);
     	lcdString("cm");
     	
     	while (true)  	// Mainloop-Begin
     	{
     	//...
     	} // Mainloop-Ende
    }

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    05.08.2009
    Beiträge
    32

    SRF05 - Ranger - gescheiter Rat gesucht

    Genau! Genau das gleiche Problem hab' ich auch... und ich habe (von der Hardware her) alles gecheckt. Der SRF05 auch nicht kaputt oder so... habe es gerade neu gekauft.

    Hatte jemand das gleiche Problem - und habt ihr es lösen können - wie?

    cheers ippeb

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.08.2007
    Ort
    Delmenhorst
    Alter
    32
    Beiträge
    731
    So, hab eben mitm Osziloskop kontrolliert ob das Timing stimmt und siehe da, das war sowas von daneben das da auch nichts richtiges bei rauskommen konnte!
    Habe den Fehler noch nciht genau ausmachen können, habe es aber soweit korrigiert das die Messungen jetzt zu stimmen scheinen.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    05.08.2009
    Beiträge
    32
    Hey KingTobi

    Sorry... muss nun wirklich stressen...

    Wie hast du das hinbekommen mit dem Oszilloskop?
    Ich hab' leider keins zuhause, und momentan haben wir Ferien - und am ersten Schultag muss ich unbedingt fertig sein...

    Koentest du mir vielleicht sagen, was du geaendert hast (sodass ich kein Oszilloskop benoetigen muesste)?

    Waere wirklich sehr sehr dankbar... ich bin schon zwei ganze Monate an diesem Problem stecken geblieben ... haette nicht gedacht, dass es am Timer liegen koennte...

    mfg
    ippeb

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    05.08.2009
    Beiträge
    32
    Hey KingTobi... noch Was, koenntest du mir auch gleich konkret die Werte angeben, die du korrigieren musstest. Waere wirklich super toll wenn's bei mir klappen wuerde.

    Ausserdem: Wie genau kannst du nun messen?

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.08.2007
    Ort
    Delmenhorst
    Alter
    32
    Beiträge
    731
    Nachdem ich die optimierung eingeschaltet hab, waren die Unterbrechungen waren alle 5mal so lang wie sie sein sollten. Kann bei dir aber anders dein.

    Im Nahbereich ist er jetzt sehr genau, auf größere Entfernungen (2m) weicht er etwas ab. Das Timing ist aber auch nicht perfekt.

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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