- 12V Akku mit 280 Ah bauen         
Seite 6 von 8 ErsteErste ... 45678 LetzteLetzte
Ergebnis 51 bis 60 von 71

Thema: Minimallösung: IR-Abstandsmessung

  1. #51
    Neuer Benutzer Öfters hier
    Registriert seit
    06.01.2010
    Alter
    37
    Beiträge
    18
    Anzeige

    Powerstation Test
    Ich hab mal ein paar Fragen (nicht nur an Radbruch):

    DDRD |= (1 << DDD1);
    --> wozu macht man das genau?
    bzw ist nicht PB3 schon ausgang und dann ausgang auf ausgang geschaltet?

    PORTD &= ~(1 << PD1);
    --> weil PD1 Highpegel führt?

    und wieso wird PD2 mit DDRD bezeichnet bzw PORTD?
    in meinem Schaltplan find ich nur PD2(INT0) und PB3(MOSI/OC2)

    if (ir || ir1)
    --> soll das genauer sein?
    weil ich keine Veränderung feststelle, wenn ich es weglasse und wofür wird "ir2=ir1;" ir2 deklariert?ir2 wird nicht verwendet oder?

    Gruß

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

    Die IR-Led D10 ist mit der Kathode an PD1 angeschlossen. Dieser Pin ist auch der Sendepin TXD des USART. Die Anode von D10 liegt über den Vorwiderstand R16 (220R) am PB3, dies ist auch der Hardwareausgang OC2 des Timer2. Der Timer2 erzeugt die 36kHz-Trägerfrequenz des IR-Signals und gibt diese an PB3 aus (Ausgang PB3 wechselt mit 36kHz zwischen High und Low und zurück). Um dabei einen Stromfluß durch D10 zu ereichen, muss diese mit der Kathode mit GND verbunden sein. Normalerweise macht dies der USART, wenn er serielle Daten über TXD ausgibt (er moduliert dann das Trägersignal). Da bei der IR-Abstandmessung vom USART aber keine seriellen Daten abgesendet werden (das würde übrigends wohl auch funktionieren) muss das Programm diesen Pin auf Ausgang und low schalten.

    Der IR-Empfänger liefert an seinem Ausgang ein invertiertes Signal, wenn er kein Trägersignal, also kein Echo, erkennt ist der Eingang PD0 gesetzt, in IR steht dann eine 1 (weil PD0 Bit 0 des Ports ist). Das IR-Echo rauscht ziemlich, deshalb werden mehrere Messungen durchgeführt. Die Ergebnisse der Mesungen stehen dann in IR, IR1, IR2... (je nachdem wie groß die Dämpfung sein soll, es ist ein Fifo). Vor jeder neuen Messung werden die alten Werte umkopiert: IR2=IR1, IR1=IR. Nur wenn alle gespeicherten Werte 0 sind, wurde sicher ein echtes Echo empfangen (0 bedeutet ja, der Empfänger hat was erkannt):
    If (IR | IR1 | IR2... ) then kein Echo

    Das kann man auch hier nachlesen:
    https://www.roboternetz.de/phpBB2/vi...=419940#419940


    und wieso wird PD2 mit DDRD bezeichnet bzw PORTD?
    Keine Ahnung, wo du das her hast und in welchem Zusammenhang das zur Abstandsmessung steht. Generell ist es aber sehr hilfreich, wenn man die Quellen auch angibt, denn ich habe echt keinen Bock jedesmal den ganzen Thread zu durchforsten um den Codefetzen zu finden, auf den sich die Frage bezieht.

    Gruß

    mic

    [Edit]
    https://www.roboternetz.de/phpBB2/ze...=473142#473142
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #53
    Neuer Benutzer Öfters hier
    Registriert seit
    06.01.2010
    Alter
    37
    Beiträge
    18
    Um dabei einen Stromfluss durch D10 zu erreichen, muss diese mit der Kathode mit GND verbunden sein..., muss das Programm diesen Pin auf Ausgang und low schalten
    und das entspricht dann GND???

    Keine Ahnung, wo du das her hast und in welchem Zusammenhang das zur Abstandsmessung steht. Generell ist es aber sehr hilfreich, wenn man die Quellen auch angibt, denn ich habe echt keinen Bock jedesmal den ganzen Thread zu durchforsten um den Codefetzen zu finden, auf den sich die Frage bezieht.
    das bezog sich auf die beiden Zuweisungen unmittelbar davor

    DDRD |= (1 << DDD1);
    und
    PORTD &= ~(1 << PD1);

    und ich meinte eigentlich PD1, weil es ja so in dem einen Post von dir steht:
    DDRD |= (1 << DDD1); // Port D1 als Ausgang
    PORTD &= ~(1 << PD1); // PD1 auf LOW
    Aber hab ins Datenblatt geguckt, in dem steht, dass PORTD das Data Register von Port D sei und DDRD das Data Direction Register und jetzt gerafft

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

    Ja, ein Ausgang der Low ausgibt ist quasi GND. Schön, dass du es "gerafft" hast, ein Blick ins Datenblatt ist eben oft hilfreich.

    ...ich meinte eigentlich PD1..
    Aha, alles klar.

    Gruß

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

  5. #55
    Neuer Benutzer Öfters hier
    Registriert seit
    12.02.2010
    Beiträge
    12
    Super Sache!
    Also muss man nur die IR Strahlung der IR-LED nach forne lenken, oder?
    (Nur um sicher zu gehen^^)

  6. #56
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.05.2008
    Ort
    Oststeinbek
    Alter
    35
    Beiträge
    607
    Nur aus reiner Neugier: Wieso wird die Pulsbreite variiert, und nicht die Trägerfrequenz? Mit zunehmend abweichender Trägerfrequenz ändert sich die Sensitivität doch auch (Grafik im Datenblatt). Von Pulsbreiten steht im Datenblatt aber nichts (zumindest habe ich nichts gesehen), obwohl es natürlich logisch ist....

    Gruß, Yaro

  7. #57
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Es wurde von Waste so vorgegeben und funktioniert auch zufriedenstellend. Das "Verbiegen" der Trägerfrequenz funktioniert auch, allerdings habe ich das noch nicht näher untersucht.
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #58
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.693
    Hi Yaro,
    Zitat Zitat von yaro
    Nur aus reiner Neugier: Wieso wird die Pulsbreite variiert, und nicht die Trägerfrequenz ...
    Anfangs hatte ich diese spezielle Art der IR-Abstandsmessung nicht verstanden und deswegen Probleme damit. Dann hatte ich mir das genau angesehen. Mit der Variation der Trägerfrequenz kann ich natürlich eine Abstandsmessung machen - aber das Ganze geht auch nicht annähernd linear sondern in irgendwie geformten Messfeldern, die (für mich) nicht sinnvoll handhabbar waren. Besonders der Nahbereich ist dann eher ein Würfelspiel. Eine gewisse Empfindlichkeitsanpassung der Messstrecke mit Betonung des Nah- oder Fernbereiches hatte ich noch als sinnvollste Möglichkeit gefunden, die habe ich mit Variation der Vorwiderstände der LEDs besser in den Griff bekommen.

    Hier ist vorgestellt, welche feine Abstufung der Lichtenergie durch unterschiedliche duty cycles im untersten Bereich möglich ist. Eine Zusammenfassung der Ergebnisse ist hier.

    Die Ergebnisse hatte ich in einem kleinen Projektchen genutzt mit einer Auswertung auf "Nah" und "Fern" mit der Interpretation "Nah => Kollisionsgefahr" und "Fern => Absturzgefahr" - dazwischen ist freie Fahrt. Wie schnell diese Sensoren messen können zeigt mein WALL R, der ausschliesslich mit drei >>völlig getrennten<< Sensoren munter durch die Gegend fährt.
    Ciao sagt der JoeamBerg

  9. #59
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.05.2008
    Ort
    Oststeinbek
    Alter
    35
    Beiträge
    607
    Alles klar, wenn man eine so ausführliche Dokumentation mit Versuchsergebnissen und Schlussfolgerungen hat, dann lohnt es sich natürlich nicht, sich die Mühe zu machen, es anders zu machen.

    Meinen Respekt für die ausführliche Beschäftigung mit dieser Art der Abstandsmessung hast du (ihr)!

    Gruß, Yaro

  10. #60
    Benutzer Stammmitglied
    Registriert seit
    02.05.2010
    Ort
    München
    Beiträge
    41
    Habe das ganze gerade auch mal ausprobiert.. und nach einigen Schwierigkeiten (habe die 2.8 Lib) habe ich den Code von malediction genommen und siehe da es hat geklappt und die LED leuchtet Rot jedoch bei einem Abstand der ganz knapp vor der Alufolie ist also wäre der Asuro schon längst gegen das Hindernis gefahren..
    Da ich neu in C bin hab ich einfach ein bisschen rumprobiert und bin dann auf das hier gekommen:

    Code:
    #include "asuro.h"
    #include <stdlib.h>
    
    int main(void)
    {
       
       Init();
       
       DDRD |= (1 << DDD1);      // Port D1 als Ausgang
       PORTD &= ~(1 << PD1);   // PD1 auf LOW
       
       UCSRB = 0;
       OCR2 = 0x90;            //Anfangswert (entspricht Pulsbreite 110)
       
       while(1){
       if (PIND & (1 << PD0)){
    	  StatusLED(GREEN);
    	  MotorDir(FWD,FWD);
    	  MotorSpeed(150,150);
       }
       else{
    	  MotorSpeed(0,0);
    	  StatusLED(RED);
    	  Msleep(800);
    	  MotorDir(RWD,BREAK);
    	  MotorSpeed(150,0);
          Msleep(500);
    	  MotorSpeed(0,0);
       }
       }
       return 0;
    }
    Jedoch bemekerkt er das Hindernis trotzdem erst 1 - 2 cm vor sich und dreht dann um.. Das ganze ist mir viel zu nah.. Gibt es eine Möglichkeit das ganze irgendwie noch weiter hochzuschrauben??

    MfG. mtzE

Seite 6 von 8 ErsteErste ... 45678 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress