Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
de:examples:sensor:ir_distance [2012/03/20 14:56] wittkoepperde:examples:sensor:ir_distance [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 53: Line 53:
 d = 5461 / (ADC - 17) - 2 d = 5461 / (ADC - 17) - 2
  
-Diese Formel kann man mit 16-Bit Integer berechnen und ist daher für den AVR. Vor der Berechnung muss man sichergehen, dass der Wert des ADC über 17 ist, sonst würde man durch 0 teilen (und dabei ggf. das Universum vernichten) oder es kommt eine negative Distanz raus+Diese Formel kann mit 16-Bit Zahlen berechnet werden und ist daher vollständig für den AVR geeignet. Vor der Berechnung muss sicher gestellt sein, dass der Wert des ADC größer als 17 ist, ansonsten kann der Fall eintreten, dass durch 0 geteilt werden muss oder eine negative Distanz ausgegeben wird
  
-Es folgt die Funktion um die Werte des ADC in cm zu konvertieren, sie steht in der Library von HomeLab. Lineareund freie Elemente und die Korrektur-Konstante, sind nicht fest in die Funktion geschrieben, sondern werden mit Objektparametern des IR-Entfernungsmessers eingegebenDa diese Parameter separate konstanten sind, ist es sehr einfach neue IR-Entfernungsmesser in das Programm zu integrieren. +Nachfolgend ist die Funktion dargestellt, die dazu dient, ADC-Werte in Centimeter zu konvertieren. Sie ist in der HomeLab Library enthalten. Lineare und freie Elemente sowie die Korrektur-Konstante, sind nicht fest in die Funktion integriert, sondern werden mittels der Objektparameter des Infrarot-Entfernungsmessers eingespeistDadurch, dass diese Parameter als separate Konstanten verwendet werden, ist es sehr einfachneue Infrarot-Entfernungsmesser in das Programm zu integrieren.
  
  
 <code c> <code c>
 // //
-// The structure of the parameters of the IR distance sensors+// Die Struktur der Parameter des Infrarot-Entfernungsmessers
 // //
 typedef const struct typedef const struct
Line 71: Line 71:
  
 // //
-// The object of the parameters of GP2Y0A21YK sensor+// Die Parametereigenschaften des GP2Y0A21YK Sensors
 //  // 
 const ir_distance_sensor GP2Y0A21YK = { 5461, -17, 2 }; const ir_distance_sensor GP2Y0A21YK = { 5461, -17, 2 };
  
 // //
-// Converting the values of the IR distance sensor to centimeters +// Konvertieren der Werte des Infrarot-Entfernungsmessers in Centimeter  
-// Returns -1, if the conversion did not succeed+// Gibt -1 auswenn die Konvertierung nicht erfolgreich war
 // //
 signed short ir_distance_calculate_cm(ir_distance_sensor sensor, signed short ir_distance_calculate_cm(ir_distance_sensor sensor,
Line 91: Line 91:
 </code> </code>
  
-Um eine Konversion zu machen muss die Funktion //ir_distance_calculate_cm// genutzt werden. Der erste Paramter dieser Funktion ist das Objekt der Parameter der IR-Entfernungsmesserdas zweite der ADC-Wert. Die Funktion gibt dann die berechnete Entfernung in cm aus. Falls die Operation falsch ist (unzulässige ADC Werte) wird der Wert -1 ausgegeben. das folgende Programm veranschaulicht die Benutzung des IR-Entfernungsmessers und der Konversions-Funktion. Es wird das Alphanumerische LCD genutzt, auf dem die gemessenen Werte dargestellt werden. Falls die Distanz unnatürlich ist wird ein "?" dargestellt.+Zur Durchführung der Konvertierung muss die Funktion //ir_distance_calculate_cm// genutzt werden. Der erste Funktionsparameter gibt die Eigenschaften der Parameter des Infrarot-Entfernungsmessers ander zweite den ADC-Wert. Die Funktion gibt dann die berechnete Entfernung in Centimetern aus. Schlägt die Konvertierung fehl (unzulässige ADC-Werte)wird der Wert -1 ausgegeben. Das folgende Programm veranschaulicht die Verwendung des Infrarot-Entfernungsmessers und der Konvertierungsfunktion. Es wird das alphanumerische LCD genutzt, auf welchem die gemessenen Werte dargestellt werden. Falls die Distanz unzulässig istwird ein "?" angezeigt.
  
 <code c> <code c>
 // //
-// The example program of the IR distance sensor of the HomeLab +// Beispielprogramm des Infrarot-Entfernungsmessers des HomeLab 
-// Measured results in centimeters is displayed on the LCD+// Die in Centimetern gemessenen Ergebnisse werden auf dem LCD abgebildet
 // //
 #include <stdio.h> #include <stdio.h>
Line 105: Line 105:
  
 // //
-// Main program+// Hauptprogramm
 // //
 int main(void) int main(void)
Line 113: Line 113:
  char text[16];  char text[16];
    
- // Initialization of LCD+ // External sensor selection 
 + pin ex_sensors = PIN(G, 0); 
 + pin_setup_output(ex_sensors); 
 + pin_set(ex_sensors); 
 + 
 + // Initialisierung des LCD
  lcd_alpha_init(LCD_ALPHA_DISP_ON);  lcd_alpha_init(LCD_ALPHA_DISP_ON);
    
- // Clearing the LCD+ // Löschen des LCD
  lcd_alpha_clear();  lcd_alpha_clear();
    
- // Name of the program+ // Name des Programms
  lcd_alpha_write_string("Distance sensor");  lcd_alpha_write_string("Distance sensor");
    
- // Setup of the ADC+ // Installation des ADC
  adc_init(ADC_REF_AVCC, ADC_PRESCALE_8);  adc_init(ADC_REF_AVCC, ADC_PRESCALE_8);
    
- // Endless loop+ // Endlosschleife
  while (true)  while (true)
  {  {
- // Reading the 4 times rounded value of the output voltage of the sensor+ // Auslesen des viermal gerundeten Wertes der Outputspannung des Sensors
  value = adc_get_average_value(0, 4);   value = adc_get_average_value(0, 4);
  
- // Conversing ADC value to distance+ // Konvertieren des ADC-Wertes in Entfernung
  distance = ir_distance_calculate_cm(GP2Y0A21YK, value);  distance = ir_distance_calculate_cm(GP2Y0A21YK, value);
  
- // Was the calculation successful?+ // War die Berechnung erfolgreich?
  if (distance >= 0)  if (distance >= 0)
  {   {
- // Conversing distance to text+ // Konvertieren von Entfernung in Text
  sprintf(text, "%d cm   ", distance);  sprintf(text, "%d cm   ", distance);
  }  }
  else  else
  {   {
- // Creating the text for unknown distance+ // Text für eine unbekannte Entfernung erzeugen
  sprintf(text, "? cm   ");  sprintf(text, "? cm   ");
  }  }
  
- // Displaying the text in the beginning of the second row on the LCD+ // Anzeige des Textes am Anfang der zweiten Zeile auf dem LCD
  lcd_alpha_goto_xy(0, 1);  lcd_alpha_goto_xy(0, 1);
  lcd_alpha_write_string(text);  lcd_alpha_write_string(text);
Line 156: Line 161:
 </code> </code>
  
-===== Extra materials =====+===== Zusätzliches Material =====
  
-  * {{:examples:sensor:ir_distance:ir_distance.ods|Graph of the Sharp GP2Y0A21YK sensor}} +  * {{:examples:sensor:ir_distance:ir_distance.ods|Graph des Sharp GP2Y0A21YK Sensors}} 
-  * [[http://www.acroname.com/robotics/info/articles/irlinear/irlinear.html|Linearizing Sharp Ranger Data]]+  * [[http://www.acroname.com/robotics/info/articles/irlinear/irlinear.html|Linearisierung der Sharp Entfernungsdaten]]
  
de/examples/sensor/ir_distance.1332255391.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