hu:arduino:distant

Távolságmérés

A távolságmérők valamilyen kibocsátott rezgés (hang vagy fény) adott objektumról való visszaverődés távolságát az eltelt idővel mérik. A hangalalpú (sonáros) távolságmérő eszközöknél a fényalapúak pontosabbak, és itt is a lézeres mérés precízebb, mint az infravörös visszaverődés-mérés (elvileg, ha a hardver megbízható). Típusai:

hangalapú (szonár) szenzorok
Az angolul Ultra-Sonic Ranger nevű technikai megoldás két elemből áll, egy hangszóróból, ami hanginpulzusokat bocsát ki, és egy mikrofonból, ami érzékeli ezeknek a visszaverődését. A kiadás és az érzékelés között eltelt időből – a hang terjedési sebességét iserve – a távolság kiszámolható. Ide tartoznak:

A háromszögeléses módszer sémája infravörös távolságérzékelő szenzorok
A szenzor az ún. háromszögeléses módszerrel működik. A szenzor egy keskeny infravörös fénnyalábot bocsát ki (az IR fény hullámhossza 850nm ± 70nm). A kibocsátott IR fény a tárgyakról visszaverődik. Az érzékelő egy optikával leképezi a visszavert fényt egy CCD-re. Attól függően hogy milyen messze van a céltárgy, más-más szögben érkezik vissza a visszavert fény, és ennek megfelelően más-más CCD pixelre fókuszálódik. Ebből már meghatározható a távolság.

lézeres távolságérzékelő szenzorok
A lézeres érzékelők is – csakúgy, mint az IR-esek – az ún. háromszögeléses módszerrel működnek. A szenzor által kibocsátott lézernyaláb, a mért felületről visszaverődve, egy lencsén át az érzékelő CCD illetve CMOS fényszenzorának felületére vetül. A reflektáló felület közelítésével illetve távolodásával a fényszenzorra vetített pont helyzete is változik, aminek kiértékelésével az elektronika meghatározza a távolságot.

TOF10120 lézeres távolságérzékelő modul

A TOF10120 távolságérzékelését a gyártó Sharp SPAD (Single Photon Avalanche Diodes) eljárással valósítja meg, melyet CMOS-alkalmazásával használ. Pontosabb eredményt biztosít, a környezeti fénnyel szemben ellenállóbb és optikai kialakításának köszönhetően a térgyérzékelése is megbízhatóbb. A modul class 1 940nm-es lézert alkalmaz a méréshez, érzékelési távolsága 10 .. 180 cm. Kimenete UART, kommunikációja lehet RS232, I²C vagy IIC.

  • Érzékelés távolsága: 100 .. 1800 mm
  • Tápfeszültség: 3 .. 5V DC
  • Áramfelvétel: 35mA
  • Üzemi hőmérséklet: -20 .. +70 °C
  • UART: 9600 baud, 8N1, Flow Control : None
  • ①GND Black
  • ②VCC Red
  • ③RXD Yellow
  • ④TXD white
  • ⑤SDA blue
  • ⑥SCL purple

A vezetékezés attól függ, hogy I²C-t vagy Serial-t alkalmazunk. Mind a 6 vezetéket felesleges egyszerre bekötni, 4-nek elégnek kell lennie.

TOF10120Arduino pinMegjegyzés
1.feketeArduino GNDGND
2.pirosArduino 5v DC5v DC táp
3.sárgaPin 1 TxRxD : A serialhoz kell bekötni
4.fehérPin 0 RxTxD : A serialhoz kell bekötni
5.kékPin A4SDA : Az I²C-hez kell bekötni
6.zöldPin A5SCL : Az I²C-hez kell bekötni

A serial Rx és Tx használata blokkolja a soros letöltést és a serial monitor használatát.

TOF10120 lézeres távolságérzékelő modul vezetékezése az Arduinoval

A lenti szoftver az I²C-t használja a kommunikációhoz, azaz a fenti táblázatnak megfelelően az Arduino pin0-t és pin1-et nem kell bekötni.

Szoftver megjelenítése

Szoftver megjelenítése

/*
  TOF10120 Distance Sensor Demonstration
  TOF10120-Demo.ino
  Demonstrates use of TOF10120 Distance Sensor
  Adapted from code from SurtrTech
  Displays results on Serial Monitor
 
  DroneBot Workshop 2019
  https://dronebotworkshop.com
*/
 
#include <Wire.h>
 
unsigned char ok_flag;
unsigned char fail_flag;
 
unsigned short lenth_val = 0;
unsigned char i2c_rx_buf[16];
unsigned char dirsend_flag=0;
 
 
void setup() {
  Wire.begin(); 
  Serial.begin(9600,SERIAL_8N1); 
  printf_begin();          
 
}
 
void loop() {
 
 
   int x=ReadDistance();
 
   Serial.print(x);
   Serial.println(" mm");
 
}
 
int serial_putc( char c, struct __file * )
{
  Serial.write( c );
  return c;
}
 
void printf_begin(void)
{
  fdevopen( &serial_putc, 0 );
}
 
 
 
void SensorRead(unsigned char addr,unsigned char* datbuf,unsigned char cnt) 
{
  unsigned short result=0;
  // step 1: instruct sensor to read echoes
  Wire.beginTransmission(82); // transmit to device #82 (0x52)
  // the address specified in the datasheet is 164 (0xa4)
  // but i2c adressing uses the high 7 bits so it's 82
  Wire.write(byte(addr));      // sets distance data address (addr)
  Wire.endTransmission();      // stop transmitting
  // step 2: wait for readings to happen
  delay(1);                   // datasheet suggests at least 30uS
  // step 3: request reading from sensor
  Wire.requestFrom(82, cnt);    // request cnt bytes from slave device #82 (0x52)
  // step 5: receive reading from sensor
  if (cnt <= Wire.available()) { // if two bytes were received
    *datbuf++ = Wire.read();  // receive high byte (overwrites previous reading)
    *datbuf++ = Wire.read(); // receive low byte as lower 8 bits
  }
}
 
int ReadDistance(){
    SensorRead(0x00,i2c_rx_buf,2);
    lenth_val=i2c_rx_buf[0];
    lenth_val=lenth_val<<8;
    lenth_val|=i2c_rx_buf[1];
    delay(300); 
    return lenth_val;
}

GP2Y0A21 IR távérzékelő

Az Sharp távérzékelők népszerűek olyan projektekhez, melyek pontos távolságmérést igényelnek. Ez az infravörös érzékelő sorozat megbízhatóságával kiemelkedik a többi IR érzékelő sorából. Illesztése a mikrokontrollerekhez egyszerű: az egy analóg kimenet analóg-digitális átalakítóhoz csatlakoztatható távolságmérések elvégzéséhez, vagy a kimenet kompenzátorhoz csatlakoztatható a küszöbérzékeléshez.

A különböző verziónak az érzékelési tartománya nagyjából 10 cm-től 150 cm-ig terjed; a távolságot minden esetben a kimeneti feszültséggel képezik le a mérőegységek.

A legtöbb Sharp típus 3 pólusú JST csatlakozót használ, amely a 3 pólusú JST kábelhez csatlakozik az Sharp távérzékelőkhöz. A hátulról nézve a balról jobbra lévő három csatlakozás a táp (piros), a föld (fekete) és a kimeneti jel (sárga).

A Sharp IR távérzékelők méréshez PSD szenzort használnak:

PSD szenzor

Fontos tudni, hogy a szenzorok távolság-feszültségkonverziója még véletlenül sem lineáris. A lenti ábrán például a GP2Y0A21YK feszültség -távolsággörbéje látható:

GP2Y0A21YK feszültség -távolsággörbéje

típusÜzemi feszültségÁramfelvetelTávolságmérési
tartomány
megjegyzés
GP2Y0A60SZ(LF)2 működési mód
3V: 2,7..3,6V
5V: 2,7V..5,5V
33 mA10..150 cm-igModul: 3V Pololu
Válaszidő: kb. 16.5 ± 4 ms
Engedélyező jel is van rajta
GP2Y0A02(YK0F)4,5..5,5 V33 mA20..150 cm-igKimeneti feszültségkülönbség a távolságtartományon belül: 2,05 V
Válaszidő: kb. 38.3ms ± 9.6ms
GP2Y0A21(YK0F)4,5..5,5 V30 mA10..80 cm-ig (4..32)Talán a leggyakoribb alkalmazott típus
Kimeneti feszültségkülönbség a távolságtartományon belül: 1,9 V
Válaszidő: kb. 38.3ms ± 9.6ms
GP2Y0A41(SK0F)0,4..2,5 V12 mA4..30 cm-igKimeneti feszültségkülönbség a távolságtartományon belül: 2,3 V
Válaszidő: kb. 16.5 ± 4 ms
GP2Y0A51(SK0F)0,4..2,5 V12 mA2..15 cm-igKimeneti feszültségkülönbség a távolságtartományon belül: 1,65 V
Válaszidő: kb. 16.5 ± 4 ms

Sharp IR távérzékelők

piros vezeték (táp): Arduino +5V DC
fekete vezeték (föld): Arduino GND
sárga vezeték (jel): Arduino analóg input

Az IR-LED belső időzítése miatt előfordulhat, hogy a tápvezetéken zavarójelek kerülhetnek ki a mérőegységből. Ezek kiküszöbölésére többen javasolják, hogy érdemes a táp- és földvezeték közé egy 1..10μF-os szűrőkondenzátort beiktatni.

GP2Y0A21(YK0F), GP2Y0A41(SK0F):
A szoftverpéldákat ezúttal is a Githubon érdemes keresgélni, például itt: https://github.com/jeroendoggen/Arduino-distance-sensor-library

HC‑SR04

A modul a hangvisszaverődés idejét mérve következtet a távolságra, azaz szonár-elven működik (mint a tengeralattjárók szonárja). Természetesen ez a modul is több néven ismert, például: SRF04 - Ultra-Sonic Ranger.

A mérés egy 10 μs-os TTL impulzussal indítható. Ezt követően a modul 8 cikluson keresztül 40 kHz-es hangimpulzusokat ad ki, majd a mikrofonnal érzékeli ezeknek a visszaverődését. A távolság a
válaszidő (μs) / 58 = távolság (cm)
vagy
válaszidő (μs) / 148 = távolság (inch)
képletekkel számolható ki, ennek a számításnak a háttere:

A távolságmérés a hanghullámok visszaverődésének a figyelése alapján történik. A hanghullámok kibocsátási és visszaérkezési idejét ismerve kiszámolható a mérés ideje.

HC-SR04 sonárszenzor működési elve

Ezt kell a hangsebességgel beszorozni. Az ehhez szükséges számolásban a csavar, hogy a hangsebesség a légköri nyomás és hőmérséklet függvényében is változik. Jelen esetben csak a hőmérséklet-korrekciót építjük be a számításba, az ehhez szükséges formula:

331.5 + 0.6 * t

Ha a hőmérséklet például 20° C, akkor a hang terjedési sebessége: 331.5 + 0.6 * 20 = 331.5 + 12 = 343.5 m/s, azaz 0.03435 cm/µs. Ebből az is átszámolható, hogy a hangnak 29,112 mikroszekundumra van szüksége egy centiméter megtételéhez (1/0.03435 cm/µs = 29.112 µs/cm). Nyilván a hang esetén az oda-vissza utat is számolni kell, így jön ki a fenti (kerekített)

válaszidő (μs) / 58 = távolság (cm)

A méréseket nem érdemes 60 ms-on belül ismételni, mert zavarhatják egymást:

HC‑SR04 működése

A modult a tapasztalatok alapján érdemes úgy a tápfeszülségre csatlakoztatni, hogy először a grund (GND) kerüljön a modulra.

A mérés bizonytalanná válik, ha a visszaverődési felület kisebb, mint 0,5 m².

A legtöbb szoftver, ha kifut a felügyeleti időből, válasz nélkül (azaz túl nagy a távolság), 0 értékkel tér vissza, amit a szoftverben külön vizsgálni kell.

jellemzőadat
Üzemi feszültségDC 5V
Áramfelvétel15 mA
Üzemi frekvencia40 kHz
Maximális távolság4m
Minimális távolság2cm
Mérés pontossága> 3mm
Mérési tartomány (szög)15°
Trigger jel10 μs TTL impulzus
jelölésleírás
Vcctáp, 5V DC
Trigping kiküldése
Echoválasz (viszhang) a ping-re
GNDgrund

Arduino 5V ↔ HC-SR04 Vcc
Arduino GND ↔ HC-SR04 Gnd
Arduino pin 11 ↔ HC-SR04 Echo
Arduino pin 12 ↔ HC-SR04 Trig

HC‑SR04 vezetékezés

A modulhoz könyvtár és példaprogramok a Github-ról letölthetők:

Ultrasonic távolságmérő szenzor Az autóknál tolatóradarként funkcionáló szenzort a fenti HC-SR04 szenzorhoz hasonlóan kell vezetékezni és programozni. Azzal szemben ennek az előnye, hogy nagyobb távolságra érzékel és vízálló. Adatlapja:

Üzemi feszültség: DC 5V
Készenléti áramfelvétel: 5mA
Üzemi áramfelvétel: 30mA
Átviteli frekvencia: 40KHz
Maximális távolság: 5M
Holttér: 25cm
Pontosság: 0.5cm
Látószög: <50°
Üzemi hőmérséklet: -10 to 70 °C
Tárolási hőmérséklet: -20 to 80°C
Méret: 41×28.5mm
Vezetékhossz: 2.5m

  • hu/arduino/distant.txt
  • 2022/04/21 15:02
  • ()