Differences

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

Link to this comparison view

Next revision
Previous revision
en:iot-open:practical:hardware:itt:avr:ir_distance [2025/08/26 08:12] – created ingmar05en:iot-open:practical:hardware:itt:avr:ir_distance [2025/09/02 11:23] (current) raivo.sell
Line 1: Line 1:
 +<pagebreak>
 ====== Infrared distance sensor ====== ====== Infrared distance sensor ======
- 
-//Necessary knowledge:  
-[HW] [[en:hardware:homelab:digi]],  
-[AVR] [[en:avr:adc]], \\ 
-[LIB] [[en:software:homelab:library:adc]], [LIB] [[en:software:homelab:library:module:lcd_graphic]], [LIB] [[en:software:homelab:library:module:sensor]]// 
- 
 ===== Theory ===== ===== Theory =====
  
-[{{  :examples:sensor:ir_distance:sensor_ir_distance_gp2y0a21yk_picture.jpg?240|Sharp GP2Y0A21YK}}]+[{{  :examples:sensor:ir_distance:sensor_ir_distance_gp2y0a21yk_picture.jpg?150|Sharp GP2Y0A21YK}}]
  
-For measuring the distance to an object there are optical sensors using triangulation measuring method. Company “Sharp” produces most common infra-red (IR) wavelength using distance sensors which have analogue voltage output. The sensors made by “Sharp” have IR LED equipped with lens, which emits narrow light beam. After reflecting from the object, the beam will be directed through the second lens on a position-sensible photo detector (PSD). The conductivity of this PSD depends on the position where the beam falls. The conductivity is converted to voltage and if the voltage is digitalized by using analogue-digital converter, the distance can be calculated. The route of beams  reflecting from different distance is presented on the drawing next to the text+For measuring the distance to an objectthere are optical sensors using the triangulation measuring method. The company “Sharp” produces the most common infra-red (IR) wavelength using distance sensorswhich have an analogue voltage output. The sensors made by “Sharp” have an IR LED equipped with lens, which emits narrow light beam. After reflecting from the object, the beam will be directed through the second lens to a position-sensitive photo detector (PSD). The conductivity of this PSD depends on the position where the beam falls. The conductivity is converted to voltageand if the voltage is digitized by using an analogue-digital converter, the distance can be calculated. The route of beams  reflecting from different distances is presented on the drawing next to the text
  
-[{{  :examples:sensor:ir_distance:sensor_ir_distance_principle.png?240|The route of the light beam from an IR distance sensor}}]+[{{  :examples:sensor:ir_distance:sensor_ir_distance_principle.png?200|The route of the light beam from an IR distance sensor}}]
  
-The output of distance sensors by "Sharp" is inversely proportional, this means that when the distance is growing the output is decreasing (decreasing is gradually slowing). Exact graph of the relation between distance and output is usually on the data-sheet of the sensor. All sensors have their specific measuring range where the measured results are creditable and this range depends on the type of the sensor. Maximum distance measured is restricted by two aspects: the amount of reflected light is decreasing and inability of the PSD registering the small changes of the location of the reflected ray. When measuring objects which are too far, the output remains approximately the same as it is when measuring the objects at the maximum distance. Minimum distance is restricted due to peculiarity of Sharp sensors, meaning the output starts to decrease (again) sharply as the distance is at certain point (depending on the model 4-20 cm). This means that to one value of the output corresponds two values of distance. This problem can be avoided by noticing that the object is not too close to the sensor.+The output of distance sensors by "Sharp" is inversely proportional, which means that when the distance is growingthe output is decreasing (decreasing is gradually slowing). The exact graph of the relation between distance and output is usually on the data sheet of the sensor. All sensors have their specific measuring range where the measured results are credible, and this range depends on the type of sensor. The maximum distance measured is restricted by two aspects: the amount of reflected light is decreasingand the inability of the PSD to register the small changes in the location of the reflected ray. When measuring objects that are too far, the output remains approximately the same as it is when measuring the objects at the maximum distance. Minimum distance is restricted due to peculiarity of Sharp sensors, meaning the output starts to decrease (again) sharply as the distance is at certain point (depending on the model 4-20 cm). This means that for one value of the output, there are two values of distance. This problem can be avoided by noticing that the object is not too close to the sensor.
                        
 ===== Practice  ===== ===== Practice  =====
  
-[{{  :examples:sensor:ir_distance:sensor_ir_distance_graph.png?240|Diagram of voltage-distance of IR distance sensor}}]+[{{  :examples:sensor:ir_distance:sensor_ir_distance_graph.png?200|Diagram of voltage-distance of IR distance sensor}}]
  
-The HomeLab set of sensors includes IR distance sensor SHARP GP2Y0A21YK. Measuring range of the sensor is 10 cm – 80 cm. The output voltage of this sensor is, depending on the distance measured, up to 3 V. The distance sensor can be connected to any ADC (the analogue-digital converter) channel of the HomeLab module. On the basis of previous exercises of sensors, it is easy to write a program which measures the output voltage of the distance sensors, but in addition, this exercise includes converting this output voltage to distance.  +The HomeLab set of sensors includes an IR distance sensorSHARP GP2Y0A21YK. The measuring range of the sensor is 10 cm – 80 cm. The output voltage of this sensor is, depending on the distance measured, up to 3 V. The distance sensor can be connected to any ADC (the analogue-digital converter) channel of the HomeLab module. On the basis of previous exercises with sensors, it is easy to write a program that measures the output voltage of the distance sensors, but in addition, this exercise includes converting this output voltage to distance.  
  
-On the datasheet of the GP2Y0A21YK is graph of relation between its output voltage and measured distance. This graph is not a linear onehowever the graph of inverse values of output voltage and distance almost is, and from that is quite easy to find the formula for converting voltage to distance. To find the formula, the points of the same graph must be inserted to any kind of spreadsheet application and then generate a new graph. In spreadsheet programs is possible to calculate automatically the trend-line. Next, the graph of GP2Y0A21YK corrected output voltage inverse value’s relation to the corrected inverse value of measured distance with linear trend-line is presented. To simplify, the output voltage is already converted to 10 bit +5 V values of analogue-digital converter with comparison voltage.   +On the datasheet of the GP2Y0A21YK is graph of the relation between its output voltage and measured distance. This graph is not a linear onehoweverthe graph of inverse values of output voltage and distance almost is, and from that, it is quite easy to find the formula for converting voltage to distance. 
- +
-[{{  :examples:sensor:ir_distance:sensor_ir_distance_gp2y0a21yk_graph_calculation.png?400|The graph of linearizing ADC value and distance}}] +
- +
-As seen on the graph, the trend-line (blue) overlaps quite precisely with the points of the graph. Such overlapping is achieved by using the help of the corrective constant. This corrective constant is discovered by using the trial-and-error method – many variables were tested until such was found which made the graph overlap the trend-line the most. This corrective constant of present graph is +2; this means that to all real distances +2 is added. This way the graph is very similar to the linear trend line and a generalization can be made and +
- say that the relation between the distance and the voltage is following: +
- +
-1 / (d + k) = a * ADC + b +
- +
-where +
- +
-  * d - distance in centimeters. +
-  * k - corrective constant (fund using tial-and-error method) +
-  * ADC - digitalized value of voltage. +
-  * a - linear member (value is determined by the trend line equation) +
-  * b - free member(value is determined by the trend line equation) +
- +
- +
-Distance d can be expressed from the formula: +
- +
-d = (1 / (a * ADC + B)) - k +
- +
-Now it is basically possible to calculate the distance by using this formula, but this requires floating-point calculations, since while dividing fractions will occur. Because the microcontroller operates using integers, the formula must be simplified and converted to larger ratios. Then when dividing the quotient with a linear-member it will look as follows: +
- +
-d = (1 / a) / (ADC + B / a) - k +
- +
-When introducing the corrective constant to the formula and also the linear-member and the free-member from the trend-line equation, the formula for calculating the distance will be: +
- +
-d = 5461 / (ADC - 17) - 2 +
- +
-This formula is computable with 16-bit integers and completely suitable to AVR. Before calculating, must be ensured that the value of the ADC is over 17, otherwise dividing with 0 or negative distance may occur.  +
- +
-Following is the function for converting the values of ADC to centimeters, it is written in the library of the HomeLab. Linear- and free-member and corrective constant are not stiffly written into the function, they are fed with the structure object parameters of the IR distance sensor. By holding the parameters in separate constant, it is easy to add new IR distance sensors to the program.  +
  
  
Line 84: Line 47:
 </code> </code>
  
-To make the conversion the function //ir_distance_calculate_cm// must be engaged. The first parameter of this function is the object of the parameters of the IR distance sensor, second is the value of the ADC. The function returns the calculated distance in centimeters. If the operation is wrong (unnatural value of the ADC) the returned value is -1.  Following program demonstrates the use of IR distance sensor and conversion function. Graphical LCD is used, where measured results are displayed. If the distance is unnatural “?” is displayed.   +To make the conversionthe function //ir_distance_calculate_cm// must be engaged. The first parameter of this function is the object of the parameters of the IR distance sensor, and the second is the value of the ADC. The function returns the calculated distance in centimeters. If the operation is wrong (unnatural value of the ADC)the returned value is -1.  The following program demonstrates the use of an IR distance sensor and the conversion function. A graphical LCD is used, where measured results are displayed. If the distance is unnatural“?” is displayed.   
  
 <code c> <code c>
 // The example program of the IR distance sensor of the HomeLab // The example program of the IR distance sensor of the HomeLab
-// Measured results in centimeters is displayed on the LCD+// Measured results in centimeters are displayed on the LCD
 #include <stdio.h> #include <stdio.h>
 #include <homelab/adc.h> #include <homelab/adc.h>
Line 103: Line 66:
  char text[16];  char text[16];
  
- // Robotic HomeLab II external sensors pin of Sensor module  
- //pin ex_sensors = PIN(G, 0); 
- //pin_setup_output(ex_sensors); 
- //pin_set(ex_sensors); 
-  
  // Initialization of LCD  // Initialization of LCD
  lcd_gfx_init();   lcd_gfx_init();
Line 136: Line 94:
  else  else
  {   {
- // Creating the text for unknown distance+ // Creating the text for an unknown distance
  sprintf(text, "Error   ");  sprintf(text, "Error   ");
  }  }
Line 146: Line 104:
 } }
 </code> </code>
-/* 
-===== Extra materials ===== 
  
-  * {{:examples:sensor:ir_distance:ir_distance.ods|Graph of the Sharp GP2Y0A21YK sensor}} +==== Task to be implemented ==== 
-  * [[http://www.acroname.com/robotics/info/articles/irlinear/irlinear.html|Linearizing Sharp Ranger Data]]+  - Show on the LCD the direction, whether the distance increases or decreasesFor changing the distance, use a Servo motor (use the following scenario and instructions for servo motor control).
  
-*/ 
en/iot-open/practical/hardware/itt/avr/ir_distance.1756195941.txt.gz · Last modified: 2025/08/26 08:12 by ingmar05
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