Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
de:examples:sensor:ultrasonic_distance [2010/11/26 09:17] – angelegt Wemberde:examples:sensor:ultrasonic_distance [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ====== Ultraschall-Entfernungsmesser ====== ====== Ultraschall-Entfernungsmesser ======
  
-//Necessary knowledge: [HW] [[en:hardware:homelab:controller]], [HW] [[en:hardware:homelab:lcd]], [AVR] [[en:avr:timers]], [LIB] [[en:software:homelab:library:timer]], [LIB] [[en:software:homelab:library:module:lcd_alphanumeric]], [LIB] [[en:software:homelab:library:module:sensor]]//+//Notwendiges Wissen: [HW] [[en:hardware:homelab:controller]], [HW] [[en:hardware:homelab:lcd]], [AVR] [[en:avr:timers]], [LIB] [[en:software:homelab:library:timer]], [LIB] [[en:software:homelab:library:module:lcd_alphanumeric]], [LIB] [[en:software:homelab:library:module:sensor]]//
  
 ===== Theorie ===== ===== Theorie =====
  
-[{{  :examples:sensor:ultrasonic_distance:sensor_ultrasonic_srf04.jpg?160|Ultrasonic distance sensor SRF04}}]+[{{  :examples:sensor:ultrasonic_distance:sensor_ultrasonic_srf04.jpg?160|Ultraschall-Entfernungsmesser SRF04}}]
  
-Ein Ultraschall-Entfernungsmesser bestimmt die Entfernung zu einem Objekt, durch das Messen der Zeit die ein Schall zum Objekt und zurück benötigt. Die Frequenz des Geräusches ist irgendwo im Bereich des Ultraschalls, das ermöglicht eine konzentrierte Bündlung der Schallwelle, da hochfrequenter Schall sich in der Umgebung weniger zerstreut. +Ein Ultraschall-Entfernungsmesser bestimmt die Entfernung zu einem Objekt, indem er die Zeit misst, die ein Schall zu einem Objekt hin und zurück benötigt. Die Frequenz des Geräusches liegt im Bereich des Ultraschalls. Dies garantiertdass die Schallwelle gebündelt gelenkt wird, da sich hochfrequenter Schall weniger in der Umgebnung zerstreut. Ein typischer Ultraschall-Entfernungsmesser besteht aus zwei Membranen. Eine Membran produziert den Schall, die andere empfängt das Echo. Im Grunde besteht er also aus einem Lautsprecher und einem Mikrophon. Der Schallgenerator generiert kurze (wenige Perioden umfassendeUltraschallimpulse und startet den Timer. Die zweite Membran registriert die Ankunft des Echos und stoppt den Timer. Mit der Zeit des Timers ist es möglichdie zurückgelegte Entfernung des Schalls zu berechnen. Die Entfernung zu einem Objekt entspricht der Hälfte der zurückgelegten Entfernung des Schalls. 
-Ein typischer Ultraschall-Entfernungsmesser besteht aus zwei Membranen. Eine Membran produziert den Schall, die andere empfängt das Echo. Also eigentlich eine Box und ein Mikrofon. Der Schallgenerator generiert kurze (Länge weniger Perioden) ultraschall Impulse und startet den Timer. Die zweite Membran registriert die Ankunft des Echos und stoppt den Timer. Mit der Zeit des Timers ist es möglich die zurückgelegte Entfernung des Schalls zu berechnen. Die Entfernung zum Objekt ist die Hälfte der zurückgelegten Entfernung des Schalls. +
  
-[{{  :examples:sensor:ultrasonic_distance:sensor_ultrasonic_principle.png?280|Working principle of the ultrasonic distance sensor.}}]+[{{  :examples:sensor:ultrasonic_distance:sensor_ultrasonic_principle.png?280|Funktionsweise eines Ultraschall-Entfernungsmessers.}}]
  
-Der Ultraschall-Entfernungsmesser hat eine große Breite an Anwendungen um tägliche LebenSie werden anstatt von Messbändern als Messgeräte auf Baustellen genutzt. Autos haben Ultraschall-Entfernungsmesser als Parksensoren. Außer das Messen von Entfernungenkönnen Sie auch einfach das Dasein eines Objekts in der Messentfernung registrieren, z.B. in der Gefahrenzonen einer Arbeitsmaschine. Wenn Transmitter und Empfänger getrennt sind, kann die Fließgeschwindigkeit einer Substanz bestimmt werden, da die Schallwellen langsamer Stromaufwärts fließen.+Der Ultraschall-Entfernungsmesser findet im täglichen Leben eine Vielzahl von AnwendungsmöglichkeitenEr wird beispielsweise als Ersatz für Maßbänder auf Baustellen eingesetzt, Autos besitzen Ultraschall-Entfernungsmesser als Parksensoren. Neben der Entfernungsmessung dient er auch dazu, das bloße Vorhandensein eines Objekts im Messbereich zu erkennen, z. B. in der Gefahrenzone einer Arbeitsmaschine. Sind Ultraschalltransmitter und -empfänger getrennt, kann die Fließgeschwindigkeit des Materials zwischen ihnen bestimmt werden, da Schallwellen langsamer aufwärts fließen. 
  
 ===== Übung ===== ===== Übung =====
  
-HomeLab hat einen Devantech SRF04/SRF05 Ultraschall-Entfernungsmesser. SRF04/SRF05 ist jedoch nur ein Sensor und gibt keine direkte Information über die Distanz. Außer den Stromversorgungspins, hat der Sensor auch einen Trigger- und einen Echo-Pin. +Das HomeLab enhält einen Devantech SRF04/SRF05 Ultraschall-Entfernungsmesser. Der SRF04/SRF05 ist jedoch nur ein Sensor und gibt keine direkte Information über die Distanz. Neben den Stromversorgungspins besitzt der Sensor auch einen Trigger- und einen Echo-Pin. 
-Wenn der Trigger-Pin high ist generiert der Sensor eine 40 kHz Ultraschall-welle welche 8 Perioden lang istIn diesem Moment wird der Echo-Pin high und bleibt high bis das Echo zurück kommt. Also ist das Echo-Signal die Zeit die der Schall brauchte um das Objekt zu erreichen und zurück zum Sensor zu kommen. Diese Zeit wird mit der Schallgeschwindigkeit multipliziert und durch zwei dividiert, das Ergebnis ist die Entfernung zum Objekt. Der folgende Graph zeigt den Zusammenhang zwischen Zeit und den Signalen des TransmittersTrigger und Echo:  +Ist der Trigger-Pin "high", generiert der Sensor eine acht Perioden lange 40 kHz UltraschallwelleDaraufhin wird der Echo-Pin "highund bleibt "high", bis das Echo zurück kommt. Das Echo-Signal gibt also generell die Zeit an, die der Schall benötigt um das Objekt zu erreichen und zum Sensor zurück zu kommen. Die Entfernung zum Objekt ergibt sich daraus, dass die gemessene Zeit mit der Schallgeschwindigkeit multipliziert und dann durch zwei dividiert wird. Der folgende Graph zeigt den Zusammenhang zwischen Zeit und den Signalen des EmpfängersTriggers und des Echos:  
  
-[{{  :examples:sensor:ultrasonic_distance:sensor_ultrasonic_signals.png?280|The signals of the SRF04}}]+[{{  :examples:sensor:ultrasonic_distance:sensor_ultrasonic_signals.png?280|Die Signale des SRF04}}]
  
-Um den SRF04/SRF05 mit dem AVR zu nutzen, müssen Trigger- und Echo-Pin an AVR Pins angeschlossen werden. Um Zeit zu messen, sollte man einen 16-Bit Timer nutzen, z.B. //timer3//Das folgende ist eine Funktion welche alle Messprozeduren ausführt - sie generiert das Signal des Triggers, startet den Timer, misst die Länge des Echosignals und konvertiert dies zur Entfernung in cm. Die Funktion blockt, d.h. Sie hält den Prozessor beschäftigt, bis die Messung abgeschlossen istoder die Messung zu lange dauert. Um so schneller die Messung dauertum so schneller ist das Ergebnis da. Falls kein Echo ankommt, wartet die Funktion 36 ms und gibt eine aus. Es ist wichtig mindestens eine 20ms Pause zwischen den Messungen zu lassen, um den Soundgenerator komplett zum Stillstand kommen zulassen, so dass die neue Messung nicht durch die alte beeinträchtigt wird. +Um den SRF04/SRF05 mit dem AVR zu nutzen, müssen Trigger- und Echo-Pin an den AVR Pins angeschlossen werden. Zur Zeitmessung, sollte ein 16-Bit Timer genutzt werden, z.B. //timer3//Nachfolgend ist eine Funktion dargestellt, die alle Messvorgänge ausführt - sie generiert das Signal des Triggers, startet den Timer, misst die Länge des Echosignals und konvertiert dies zur Entfernung in Centimetern. Die Funktion blockt, das bedeutet sie hält den Prozessor beschäftigt, bis die Messung abgeschlossen ist oder zu lange dauert. Je schneller das Echo ankommtdesto schneller erhält man ein Ergebnis. Falls kein Echo ankommt, wartet die Funktion 36 ms und geht dann auf zurück. Es ist wichtig zwischen den Messungen eine Pause von mindestens 20 ms Pause einzuhalten, um den Soundgenerator komplett zum Stillstand kommen zulassen, so dass die neue Messung nicht durch die alte beeinträchtigt wird. 
-Es ist wichtig sich zu merken, dass die Schallwellen sich nicht gegenseitig Stören, wenn man mehrere Ultraschallsensoren simultan nutzt.+Außerdem sollte darauf geachtet werden, dass die Schallwellen sich nicht gegenseitig stören, wenn verschiedene Ultraschallsensoren gleichzeitig genutzt werden.
  
 <code c> <code c>
Line 28: Line 27:
  
 // //
-// Instant ultrasonic distance measuring+// Sofortige Ultraschall-Entfernungsmessung
 // //
 unsigned short ultrasonic_instant_measure(pin trigger, pin echo) unsigned short ultrasonic_instant_measure(pin trigger, pin echo)
 {  {
- // Pin setup+ // Pin-Setup
  pin_setup_output(trigger);  pin_setup_output(trigger);
  pin_setup_input_with_pullup(echo);  pin_setup_input_with_pullup(echo);
  
- // Set timer to normal mode + // Timer auf den normalen Modus setzen 
- // with period of F_CPU / 8+ // mit der Periode des F_CPU / 8
  timer3_init_normal(TIMER3_PRESCALE_8);  timer3_init_normal(TIMER3_PRESCALE_8);
  
- // Create trigger pulse+ // Erzeugung des Aulöse-Impulses
  pin_set(trigger);  pin_set(trigger);
   
- // Reset timer+ // Timer zurücksetzen
  timer3_overflow_flag_clear();  timer3_overflow_flag_clear();
  timer3_set_value(0);   timer3_set_value(0);
   
- // Wait ~10 us+ // ~10 us warte
  while (timer3_get_value() < 18) {}  while (timer3_get_value() < 18) {}
   
- // End trigger pulse+ // Auslöse-Impuls beenden
  pin_clear(trigger);  pin_clear(trigger);
   
- // Wait for echo start+ // Warten auf den Echo-Start
  while (!pin_get_value(echo))  while (!pin_get_value(echo))
  {  {
Line 63: Line 62:
  }  }
   
- // Reset timer again+ // Timer erneut zurücksetzen
  timer3_set_value(0);  timer3_set_value(0);
   
- // Wait for echo end + // Warten auf Beendigung des Echos
  while (pin_get_value(echo))  while (pin_get_value(echo))
  {  {
Line 76: Line 75:
  }  }
   
- // Convert time to distance+ // Konvertierung von Zeit in Entfernung
- //   distance timer * (1 / (F_CPU / 8)) * speed / 2+ //   Entfernung Timer * (1 / (F_CPU / 8)) * Geschwindigkeit / 2
  return (unsigned long)timer3_get_value() *  return (unsigned long)timer3_get_value() *
  ULTRASONIC_SPEED_OF_SOUND / (F_CPU / 4);  ULTRASONIC_SPEED_OF_SOUND / (F_CPU / 4);
Line 83: Line 82:
 </code> </code>
  
-Die gegebene Funktion erlaubt es dem Nutzer den Echo-und den Trigger-Pin zu wählen, so dass der Sensor da angeschlossen werden kann wo es am nützlichsten ist. Zusätzlicherlaubt dies, die Funktion auch außerhalb von HomeLab zu nutzen. die gegebene Funktion gehört schon zur HomeLab Library, daher muss man sie nicht schreibenEine Sache muss bedacht werden: Die Funktion in der Library ist streng an die Taktrate des Controller-Moduls von HomeLab gekoppelt. Die Taktrate ist 14,7456 MHz und wenn man die Funktion mit anderen Taktraten nutztwürde sie falsche Ergebnisse liefern. Um die Funktion mit anderen Taktraten zu nutzen sollte man sie manuell programmieren +Die gegebene Funktion erlaubt dem Nutzer den Echo-und den Trigger-Pin so zu wählen, dass der Sensor dort angeschlossen werden kann wo es am günstigesten ist und genug Platz vorhanden ist. Zusätzlich erlaubt dies, die Funktion auch außerhalb von HomeLab zu nutzen. Die dargestellte Funktion ist bereits in der HomeLab Library enthalten und muss somit nicht geschrieben werdenEs gibt noch eine Sache zu beachten: Die Funktion in der Library ist streng an die Taktrate des Controller-Moduls von HomeLab gekoppelt. Die Taktrate beträgt 14,7456 MHzwenn die Funktion mit anderen Taktraten genutzt wirdliefert sie falsche Ergebnisse. Um die Funktion mit anderen Taktraten zu nutzen sollte sie manuell programmiert werden. Der folgende Code demonstriert die Nutzung des  SRF04/SRF05 Ultraschall-Entfernungsmessers mit der HomeLab Library: 
-Der folgende Code demonstriert das Nutzen des  SRF04/SRF05 Ultraschall-Entfernungsmessers mit der HomeLab Library:+
 <code c> <code c>
 // //
-// The example program of the ultrasonic distance sensor of the HomeLab +// Beispielprogramm für den Ultraschall-Entfernungsmesser des HomeLab 
-// Measuring the distance is blocking.+// Die Entfernungsmessung wirkt blockierend.
 // //
 #include <stdio.h> #include <stdio.h>
Line 97: Line 96:
  
 // //
-// Pins of ultrasonic sensor+// Pins des Ultraschallsensors
 // //
 pin pin_trigger = PIN(G, 1); pin pin_trigger = PIN(G, 1);
Line 103: Line 102:
  
 // //
-// Main program+// Hauptprogramm
 // //
 int main(void) int main(void)
Line 110: Line 109:
  char text[16];   char text[16];
    
- // Initialization of the LCD+ // Initialisierung des LCD
  lcd_alpha_init(LCD_ALPHA_DISP_ON);  lcd_alpha_init(LCD_ALPHA_DISP_ON);
    
- // Clearing of the LCD+ // Löschen des LCD
  lcd_alpha_clear();  lcd_alpha_clear();
    
- // Name of the program+ // Name des Programms
  lcd_alpha_write_string("Ultra sound");  lcd_alpha_write_string("Ultra sound");
  
- // Little break+ // Kleine Unterbrechung
  sw_delay_ms(100);  sw_delay_ms(100);
  
-  // Endless loop.+  // Endlosschleife.
  while (true)  while (true)
  {  {
- // Measuring+ // Messen
  distance = ultrasonic_measure(pin_trigger, pin_echo);  distance = ultrasonic_measure(pin_trigger, pin_echo);
  
- // Was the measuring successful ?+ // War die Messung erfolgreich?
  if (distance > 0)  if (distance > 0)
  {   {
- // converting the distance to text.+ // Konvertierung von Entfernung in Text.
  sprintf(text, "%d cm   ", distance);  sprintf(text, "%d cm   ", distance);
  }  }
- // Were there errors during the measuring ?+ // Sind während der Messung Fehler aufgetreten?
  else  else
  {  {
- // Text of the errer.+ // Text des Fehlers.
  sprintf(text, "Error    ");  sprintf(text, "Error    ");
  }   }
  
- // Displaying the text in the beginning of the second row of the LCD+ // Darstellung des Textes am Anfang der zweiten Zeile des LCD
  lcd_alpha_goto_xy(0, 1);  lcd_alpha_goto_xy(0, 1);
  lcd_alpha_write_string(text);  lcd_alpha_write_string(text);
    
- // Little break.+ // Kleine Unterbrechung.
  sw_delay_ms(500);  sw_delay_ms(500);
  }  }
 } }
 </code> </code>
de/examples/sensor/ultrasonic_distance.1290763051.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0