Dopplerradar/Bewegungssensor mit HB100 und Arduino

Für alle anderen Basteleien, Messgeräte und physikalische Experimente.

Moderatoren: ebastler, SeriousD, MaxZ

Antworten
Nachricht
Autor
Benutzeravatar

Thread-Ersteller
stoppi
Beiträge: 1402
Registriert: Mo 29. Mär 2010, 21:39
Danksagung erhalten: 263 Mal
Kontaktdaten:

Dopplerradar/Bewegungssensor mit HB100 und Arduino

#1 Beitrag von stoppi »

Mit dem HB100 Sensor steht dem Bastler ein sehr günstiger Bewegungssensor (Dopplerradar) zur Verfügung. Es wird mit 5V versorgt. Das Ausgangssignal (= Schwebung mit der Frequenz f) muss dann noch verstärkt werden. Aus dieser Frequenz f kann dann direkt die Geschwindigkeit v des bewegten Objekts berechnet werden.

Kurze Herleitung der linearen Beziehung zwischen f und v:

Für die vom bewegten Objekt reflektierte Frequenz gilt: f = f0 * (1 + v/c) / (1 - v/c)

Am Ort des Sensors überlagern sich die nach z.B. rechts ausgesandte und die nach links wieder zurückkommende Welle additiv. Es gilt also:

y_ges = y_1 + y_2 = y_1,0 * sin(k*x - w*t) + y_2,0 * sin(k'*x + w'*t)

mit k = 2*Pi/Lambda_0 = 2*Pi*f0/c, w = 2*Pi*f_0, k' = 2*Pi*f/c und w' = 2*Pi*f

Daraus folgt:

y_ges = y_1,0 * sin(2*Pi*f0*[x/c - t]) + y_2,0 * sin(2*Pi*f*[x/c + t])

Nehmen wir vereinfachend für den Sensorort x = 0 an. Daraus folgt:

y_ges(t) = y_1,0 * sin(-2*Pi*f0*t) + y_2,0 * sin(2*Pi*f*t)

Nehmen wir weiters vereinfachend für die Amplituden y_1,0 = y_2,0 = 1 an:

y_ges(t) = sin(-2*Pi*f0*t) + sin(2*Pi*f*t)

Mittels trigonometrischer Additionsformeln ergibt sich daraus:

y_ges(t) = 2 * sin(Pi * [f - f0] * t) * cos(Pi * [f + f0] * t)

Der erste Faktor entspricht genau der Amplitudenmodulation, eben der Schwebung. Für die Schwebungsfrequenz gilt also:

f_Schwebung = 0.5 * [f - f0] = 0.5 * [f0 * (1 + v/c) / (1 - v/c) - f0] = 0.5 * f0 * [2 * v/c / (1 - v/c)]

Durch die sehr kleine Geschwindigkeit v in Relation zur Lichtgeschwindigkeit c gilt: v/c = 0. Daher ergibt sich folgender Ausdruck:

f_Schwebung = f0 * v / c , also direkt proportional zur Geschwindigkeit v

Ich habe zwei unterschiedliche Schaltungen ausprobiert. Welche der beiden nun besser ist, kann ich nicht abschließend bestimmen. Ich machte aber die Erfahrung, dass der Sensor HB100 bei Verwendung des 5V-pins vom Arduino nicht stabil lief, da die Spannung in der Regel unterhalb von 5V lag. Daher verwende ich nun einen LM317, welcher in der abgebildeten Konfiguration ca. 5.1V zur Verfügung stellt. Damit gelingen stabilere Messungen.


Code: Alles auswählen

#include <Wire.h>
#include <FreqMeasure.h>
#include <LiquidCrystal_I2C.h>

//LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display. ACHTUNG: Adresse kann auch 0x3F sein !!!
LiquidCrystal_I2C lcd(0x3F,16,2);

// Anschlüsse:
// GND - GND
// VCC - 5V
// SDA - ANALOG Pin 4
// SCL - ANALOG pin 5


double sum = 0;
int count = 0;

float f;   // Frequenz
float v;   // Geschwindigkeit


// ========================
// ======== SETUP =========
// ========================

void setup()
   {
    Serial.begin(57600);
    
    lcd.init();                      // initialize the lcd

    // Print a message to the LCD.
    lcd.backlight();
    
    lcd.setCursor(0,0);
    lcd.print("Dopplerradar");
    lcd.setCursor(0,1);
    lcd.print("Version 1.0");
    
    delay(4000);
    
    lcd.setCursor(0,0);
    lcd.print("             ");
    lcd.setCursor(0,1);
    lcd.print("             ");  
    
    lcd.setCursor(0,0);
    lcd.print("f = ");
    lcd.setCursor(0,1);
    lcd.print("v = ");
    
    FreqMeasure.begin();
   }


// ================================
// ======== HAUPTSCHLEIFE =========
// ================================

void loop()
   {
    if (FreqMeasure.available())
       {
        // average the readings together
        sum = sum + FreqMeasure.read();
        
        count = count + 1;
    
        if (count >= 10)
           {
            f = FreqMeasure.countToFrequency(sum / count);
            
            v = f / 19.49;       // conversion from frequency to kilometers per hour
      
            lcd.setCursor(4,0);
            lcd.print("          ");
            lcd.setCursor(4,0);
            lcd.print(f);
            lcd.print(" Hz");
            
            lcd.setCursor(4,1);
            lcd.print("          ");
            lcd.setCursor(4,1);
            lcd.print(v);
            lcd.print(" km/h");
            
            Serial.print("v = ");
            Serial.println(v,1);
            
            delay(50);
                        
            sum = 0;
            count = 0;
           }
       }
   }
Dateianhänge
Doppler_HB100_Arduino_a_01.jpg
Doppler_HB100_Arduino_a_01.jpg (32.47 KiB) 1270 mal betrachtet
Doppler_HB100_Arduino_a_03.jpg
Doppler_HB100_Arduino_b_01.jpg
Doppler_HB100_Arduino_b_08.jpg
Doppler_HB100_Arduino_b_17.jpg
Doppler_HB100_Arduino_b_15.jpg
Doppler_HB100_Arduino_c_01.jpg
Doppler_HB100_Arduino_c_03.jpg
Doppler_HB100_Arduino_c_05.jpg
Doppler_HB100_Arduino_c_07.jpg

Benutzeravatar

ferrum
Beiträge: 645
Registriert: Sa 11. Mai 2013, 15:31
Spezialgebiet: Kaffee
Wohnort: Bayern
Hat sich bedankt: 2 Mal
Danksagung erhalten: 26 Mal

Re: Dopplerradar/Bewegungssensor mit HB100 und Arduino

#2 Beitrag von ferrum »

Sind das die Dinger die auch in den Anzeigetafeln drinnen sind wo einem zeigen ob man zu schnell ist?
I <3 0402
Real ist alles was warm wird.
Pull turn Pull: The quick and easy way to throw the DJ out of the Club!!!
Es gibt keine Probleme die man nicht mit Mathematik Äquivalenzumformen kann.
KAFFEE SCHWARZ

Benutzeravatar

Paul
Admin
Beiträge: 3379
Registriert: So 7. Aug 2005, 14:34
Schule/Uni/Arbeit: HW/SW-Entwickler
Wohnort: Braunschweig
Hat sich bedankt: 398 Mal
Danksagung erhalten: 134 Mal
Kontaktdaten:

Re: Dopplerradar/Bewegungssensor mit HB100 und Arduino

#3 Beitrag von Paul »

Moin stoppi,

sehr cooles Teil! :) Wie ist die Reichweite so? Und könnte man das noch irgendwie pulsen, um die absolute Entfernung zum reflektierenden Objekt herauszufinden? :gruebel: :mrgreen:

Viele Grüße
Paul!
“With great power come great heat sinks.”

Benutzeravatar

Thread-Ersteller
stoppi
Beiträge: 1402
Registriert: Mo 29. Mär 2010, 21:39
Danksagung erhalten: 263 Mal
Kontaktdaten:

Re: Dopplerradar/Bewegungssensor mit HB100 und Arduino

#4 Beitrag von stoppi »

Um die Entfernung zu bestimmen, müsste man das Signal entweder pulsen oder modulieren. Das ist dann aber nicht mehr so trivial wie das Mixen zweier Signale.

Die Geschwindigkeit vorbeifahrender Autos kann ich gut erfassen. Genauere Tests müsste ich noch machen...

Hier gibt es einen anderen Sensor (IPM 165), sogar inklusive Verstärker: https://shop.weidmann-elektronik.de/ind ... uct&info=8
Dateianhänge
Doppler_IPM165_Arduino_06.jpg

Benutzeravatar

Paul
Admin
Beiträge: 3379
Registriert: So 7. Aug 2005, 14:34
Schule/Uni/Arbeit: HW/SW-Entwickler
Wohnort: Braunschweig
Hat sich bedankt: 398 Mal
Danksagung erhalten: 134 Mal
Kontaktdaten:

Re: Dopplerradar/Bewegungssensor mit HB100 und Arduino

#5 Beitrag von Paul »

Danke für den Tipp mit dem IPM 165, aber in der Beschreibung steht, dass sich auch der nicht zur Abstandsmessung eignet. :rage:

EDIT: Achso, war auch garnicht nicht als Tipp für meine Anwendung gemeint. :hihi: Sorry.
“With great power come great heat sinks.”


jasontse175
Beiträge: 1
Registriert: Mo 1. Jun 2020, 14:07

Re: Dopplerradar/Bewegungssensor mit HB100 und Arduino

#6 Beitrag von jasontse175 »

where is the <FreqMeasure.h> file? I cant find it? Cound you give me one?Thank U very much!

Benutzeravatar

Thread-Ersteller
stoppi
Beiträge: 1402
Registriert: Mo 29. Mär 2010, 21:39
Danksagung erhalten: 263 Mal
Kontaktdaten:

Re: Dopplerradar/Bewegungssensor mit HB100 und Arduino

#7 Beitrag von stoppi »

Here's the frequency-library:
Dateianhänge
FreqMeasure-master.zip
(8.04 KiB) 28-mal heruntergeladen

Antworten