- 12V Akku mit 280 Ah bauen         
Seite 2 von 10 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 92

Thema: Abstandsmessung ähnlich wie IR-Schnittstelle des asuro

  1. #11
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.686
    Anzeige

    LiFePo4 Akku selber bauen - Video
    hallo robo.fr,

    korrekte Abschirmung setze ich als unabdingbar voraus. Hatte ich bereits beim asuro-Aufbau. Das muss natürlich auch gesichert sein, klar.
    Ciao sagt der JoeamBerg

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    12.02.2006
    Beiträge
    459
    Aber nicht vergessen: etwas Licht wird bei LED's auch nach hinten abgestrahlt ...

  3. #13
    Erfahrener Benutzer Begeisterter Techniker Avatar von M1.R
    Registriert seit
    02.06.2007
    Ort
    Freiburg
    Beiträge
    213
    Hallo,

    wo ist der Denkfehler?

    Mit diesem Programm wollte ich 3 verschiedene Abstände in Abhängigkeit von den distance-werten ermitteln. Aber irgendwie beeinflussen sich meine 3 Messungen gegenseitig.
    siehe Kommentare im Quellcode:
    Code:
    //------------------------------------------------------------------
    //ir_abstand_test
    //------------------------------------------------------------------
    
    #include "asuro.h"
    
    /*************************************************************************
    
    	uint8_t objekt_sichtbar(uint8_t abstand)
    
    	return: TRUE falls Objekt gefunden
    			FALSE wenn nicht
    
    	Zeitbedarf: 5ms
    
    	author: robo.fr, christoph ( ät ) roboterclub-freiburg.de
    	date: 2008
    
    *************************************************************************/
    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;   // wenn OCR2=0xFE dann Objekt 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;
    }
    
    
    //------------------------------------------------------------------
    //hauptprogramm
    
    int main(void)
    {
    /*
                             // abstandsmessung weisses papier :
    #define test_weit 10     // 70 cm
    #define test_mittel 5    // 45 cm
    #define test_nah 0       // 25 cm
    */
    
    /*                       
    #define test_weit 20     // 140 cm
    #define test_mittel 5    // 70 cm
    #define test_nah 0       // 30 cm
    */
    
                          
    #define test_weit 0      // 8 cm
    #define test_mittel 0    // 8 cm
    #define test_nah 0       // 8 cm
    
    
    Init();
    StatusLED(OFF);
    	
    while(1)
    {	
    	if (objekt_sichtbar(test_weit) == 1)
    	{
    	StatusLED(GREEN);
    	FrontLED(OFF);
    	Msleep (200);
    	}
    
    	if (objekt_sichtbar(test_mittel) == 1)
    	{
    	StatusLED(YELLOW);
    	FrontLED(OFF);
    	Msleep (200);
    	}
    
    	if (objekt_sichtbar(test_nah) == 1)
    	{
    	StatusLED(RED);
    	FrontLED(OFF);
    	Msleep (200);
    	}
    
    	StatusLED(OFF);
    	FrontLED(ON);
    }	
    	while (1);
      	return 0;
    }
    Kann mir jemand von euch weiterhelfen?

    Gruss
    M.

  4. #14
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.064
    hast du die led evtl vergessen wieder abzuschalten? wie merkst du dass die messungen sich beeinflussen?
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  5. #15
    Erfahrener Benutzer Begeisterter Techniker Avatar von M1.R
    Registriert seit
    02.06.2007
    Ort
    Freiburg
    Beiträge
    213
    Zitat Zitat von damaltor
    hast du die led evtl vergessen wieder abzuschalten?
    welche LED warum abschalten?
    Zitat Zitat von damaltor
    wie merkst du dass die messungen sich beeinflussen?
    ich versuchs nochmal zu erläutern:
    ich mache 3 Messungen hintereinander mit verschiedenen distance-Werten: test_weit, test_mittel, test_nah. (OCR2 = 254-distance)
    Dann messe ich die Entfernungen zwischen ASURO und einem weißen Blatt Papier bei den verschiedenen Farben in denen die StatusLED beginnt aufzuleuchten. Ich nähere mich von weit (StatusLED aus) bis die StatusLED grün blinkt, messe den Abstand für test_weit, gehe näher ran, bis sie grün-gelb blinkt, messe test_mittel, noch näher bis sie in allen 3 Farben blinkt und messe test_nah.

    Meine gemessenen Entfernungen betragen für diese distance-Werte:

    test_weit 10 // 70 cm
    test_mittel 5 // 45 cm
    test_nah 0 // 25 cm

    und für diese:

    test_weit 20 // 140 cm
    test_mittel 5 // 70 cm
    test_nah 0 // 30 cm

    und für diese:

    test_weit 0 // 8 cm
    test_mittel 0 // 8 cm
    test_nah 0 // 8 cm

    man sieht also, dass sich bei verschiedenen Kombinationen auch bei den selben distance-Werten unterschiedliche Entfernungen ergeben.

    Das Problem in der Praxis ist folgendes:
    Der ASURO soll ein Objekt in einer einstellbaren Maximalentfernung finden, und dann feststellen, wenn er ganz nah (max. 10 cm) herangefahren ist.
    Das funktioniert nun eben nicht bei größeren Maximalentfernungen.

    Gruss
    M.

  6. #16
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.064
    hab was verlesen, vergiss das mit der led...

    du testest im moment nur 3 verschiedene distanzen. evtl solltest du die auflösung erhöhen. du hast 3 leds (back links, back rechts, status) zur verfügung, damit kannst du binär schonmal von null bis 8 zählen und kannst die auflösung der messungen erhöhen.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  7. #17
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    12.02.2006
    Beiträge
    459
    Einen Gegenstand in sehr großen Entfernungen mit dem Sesnor detektieren zu wollen, ist eher ungeeignet.
    Weinn ein weises Blatt Papier in 1,4m Entfernung detektiert, wird eine weise Wand wahrscheinlich in 5 m Entfernung detektiert. So viel Platz ist in kleineren Räumen normalerweise nicht.
    Das Verfahren funktioniert nur einigermaßen zuverlässig für Distanzen bis ca. 50cm. Sonst läuft man Gefahr, das man irgendwelche großen Gegenstände weiter weg erkennt.

    Gruß,
    robo

  8. #18
    Erfahrener Benutzer Begeisterter Techniker Avatar von M1.R
    Registriert seit
    02.06.2007
    Ort
    Freiburg
    Beiträge
    213
    Zitat Zitat von robo.fr
    Einen Gegenstand in sehr großen Entfernungen mit dem Sesnor detektieren zu wollen, ist eher ungeeignet.
    aber warum bleibt die Entfernung beim distance-Wert 0 nicht gleich? Sie ist bei meinem Testprogramm abhängig von dem vorher gemessenen größerem distance-Wert.
    Gruss
    M.

  9. #19
    Erfahrener Benutzer Begeisterter Techniker Avatar von M1.R
    Registriert seit
    02.06.2007
    Ort
    Freiburg
    Beiträge
    213
    Hallo,

    jetzt habe ich mein Problemchen mal auf das Entscheidende reduziert:

    Wenn ich nur den nahen Abstand (distance=0) messe,
    erhalte ich eine andere Entfernung ( 8 cm)
    Code:
    #define weit 10
    #define nah 0
    uint8_t objekt_nah, objekt_weit;
    
    while(1)
    	{
    		//wird nicht gemessen: objekt_weit = objekt_sichtbar(weit);
    		objekt_nah = objekt_sichtbar(nah);			
    
    		if (objekt_nah == 1)
    		StatusLED(RED);
    		
    		else
    		StatusLED(OFF);			
    	}
    als wenn ich vorher noch die Messung mit distance=10 durchführe, dann sinds nämlich fast 40 cm und das ist ja Quatsch!!
    Code:
    while(1)
    	{
    		objekt_weit = objekt_sichtbar(weit); //wird gemessen !!!!!
    		objekt_nah = objekt_sichtbar(nah);			
    
    		if (objekt_nah == 1)
    		StatusLED(RED);
    		
    		else
    		StatusLED(OFF);			
    	}
    Gruss
    M.

  10. #20
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    12.02.2006
    Beiträge
    459
    Mir fallen dazu 2 mögliche Usachen ein:
    1. Bei den Experimenten herschen nicht immer die gleichen Bedingungen ( Abstand nicht gleich, Beleuchtungsverhältnisse nicht gleich )
    2. Der IR-Empfänger hat eine AGC eingebaut ( AGC= automatic gain control, automatische Verstärkungsregelung ). Die Verstärkungsregelung passt sich mit der Zeit an die veränderten Lichtbedingungen an. Wenn man also zuerst ein Messung mit sehr hellem Licht durchführt, ist der Sensor bei einer darauffolgenden Messung mit sehr dunklem Licht quasi blind. Das ist so, wie wenn wir in die Sonne schauen und dann in einem dunklen Zimmer etwas sehen will. Unser Auge ist kurzzeitig unempfindlicher.

    Was das Verhalten der Messung vielleicht ändern könnte:

    PORTD |= (1 << PD1); // PD1 auf High

    am Ende der Abstandsmessroutine setzen, um die Sendediode auszuschalten, damit die nächste Messung nicht beeinflußt wird.

    Gruß,
    robo

Seite 2 von 10 ErsteErste 1234 ... LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test