- LiFePO4 Speicher Test         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 30

Thema: Asuro mit Ultraschallsensor SRF04

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2007
    Beiträge
    15

    Asuro mit Ultraschallsensor SRF04

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hey Leute!!!!

    Also ich hab mich jetzt bestimmt 45 min. durchs Forum gesucht und nix gefuden. Mein Problem ist folgendes. Ich will mit dem Asuro und dem angebrachten Ultraschallmodul (SRF04) die Entfernung zu Gegenständen messen können. Der Ultraschallsensor wurde so angebracht dass er durch den Port B.3 sein Triggerimpuls und durch den Port D.6 sein Echoimpuls bekommt. Port D.6 wurde auch schon auf In gestellt. Nun weis ich so viel dass ich ein Triggerimpuls an den Ultraschallsensor geben muss was auch funktioniert (leises knistern zu hören) und dieser Impuls sollte ja ungefähr 10 µs dauern. Danach muss ich ja das Echosignal irgendwie auffangen und je nach dem wie lang es ist auswerten und kann dann daraus die entfernung ermitteln.Nun hab ich das Problem dass ich nicht weiß wie ich den Timer bzw. Counter was ich auch immer benötige beim ATMega8 ansteuere und was ich sonst noch alles zu beachten habe.

    Ich wäre euch sehr dankbar wenn ihr mir dabei helfen könnten

    MFG G_UNIT00101

  2. #2
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    dafür brauchst du keinen timer, es sollte auch ungefähr so gehen:

    Code:
    double entfernung=0 //entfernungsvariable, evtl richt auch ein long oder sogar ein int
    //hier ist der normale programmablauf
    
    //jetzt wird der triggerimpuls gegeben
    
    while((PINB & 64)=0);  //64=0b01000000, diese schleife bleibt so lange bis der entfernungsimpuls beginnt aktiv.
    while((PINB & 64)=64){ //diese schleife bleibt aktiv während spannung anliegt, in dieser zeit wird eine variable hochgezählt)
    entfernung++; //variable wird um eins erhöht
    } //schleife ende
    
    //weiterer programmablauf mit auswertung der variable, wert ist größer je weiter entfernt das objekt ist
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2007
    Beiträge
    15
    Danke für dien Antwort !!!

    Ich habe es jetzt mal so ausprobiert wie du gesagt hast blos irgendwie funktioniert das noch nicht ganz. Ich hab das Gefühl dass er bei der ersten while schleife hängen bleibt und gar nicht mehr weiter geht. (höre kein knacken mehr vom Ultraschallsensor). Aber weis nicht wie ich das lösen soll.

    Code:
    void distanzmessen(){
        int entfernung = 0;
        triggerimpuls = 1;
        wait();
        triggerimpuls = 0;
        while((echoimpuls & 64) == 0);  
        while((echoimpuls & 64) == 64){
             entfernung++;   
        } 
        if(entfernung <= 10){
            Motorvor();
        }else if(entfernung > 10){
            Motorstop();
        }
    }

  4. #4
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    was macht die funktion wait()? warum setzt du "triggerimpuls" erst 1 und dann 0? wo ist die funktion, die den triggerimpuls startet?
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2007
    Beiträge
    15
    Die Funktion wait() startet einen Timer der eine kurze wartezeit verursacht, da es mir so bekannt ist, dass man kurz warten sollte nachdem man den triggerimpuls gegeben hat

    Code:
    void wait(){
        unsigned int i;
        for(i = 0;i < 65000;i++){
            TCNT0 = 0;
            TCNT1H = (0xffff - 16666)>>8;
            TCNT1L = (0xffff - 16666)%256;
            TIFR = 0; 
            TCNT0 = 1;                     
            while(TIFR == 0);
            TIFR = 1;
        }
    }
    ...ich dachte man muss den triggerimpuls nur kurz anmachen danach wieder aus und dann das echosignal abfangen.

    ...der triggerimpuls wird doch durch den befehl triggerimpuls = 1 gestartet

    Danke für die schnelle antwort

  6. #6
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    die funktion wait brauchst du nicht, da ja die erste shleife genausolange wartet wie noch kein entfernungsimpuls vorhanden ist.

    wie soll das funktioniieren mit dem triggerimpuls? warum wird der gestartet bloss weil eine variable eins gesetzt wird?
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2007
    Beiträge
    15
    OK habe die wait funktion entfernt aber triggerimpuls is keine variable sondern eine konstanten des Ports B.3 an den die Leitung für den Impuls angeschlossen ist. Aber so funktioniert es immernoch nicht.

    Code:
    void distanzmessen(){
        int entfernung = 0;
        triggerimpuls = 1;                          
        while((echoimpuls & 64) == 0);            
        while((echoimpuls & 64) == 64){
             entfernung++;   
        } 
        if(entfernung <= 10){
            Motorstop();
        }else if(entfernung > 10){
            Motorvor();
        }
    }
    aber was mich jetzt wundert wenn ich in dem ersten teil der if-schleife Motorvor() aufrufe passiert genauso wenig als wenn ich Motorvor() im zweiten teil aufrufe.Aber in einem von den zwei fällen müsste doch logischerweise etwas passieren.

  8. #8
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    hm. zeig mir mal die definition der portkonstanten. iegend was stimmt da noch ncih... ansonsten muss ich mal mein wissen über die timer raussuchen...
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2007
    Beiträge
    15
    Hier die Portkonstanten:

    Code:
    #define triggerimpuls PORTB.3 
    #define echoimpuls PORTD.6
    ich denke aber dass es schon ohne Timer funktionieren sollte wobei es ja nicht vom Timer abhängt ob ich ein Echo bekomme oder nicht.

  10. #10
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    hm. hast du ein multi zur hand? du könntest mal mit deinem original-programm laufen lassen und dann messen, wie lang (ungefähr) der echoimpuls ist. ich will wissen, ob es sich um millisekunden, oder sekunde oder was handelt. ich werde in der zeit mal ein datenblatt des sensors finden.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests