Differences
This shows you the differences between two versions of the page.
hu:arduino:distant [2018/08/08 11:58] |
hu:arduino:distant [2022/04/21 15:02] () |
||
---|---|---|---|
1: | 1: | ||
+ | ====== 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, | ||
+ | |||
+ | **hangalapú (szonár) szenzorok** \\ | ||
+ | Az angolul // | ||
+ | * [[# | ||
+ | * [[# | ||
+ | |||
+ | {{ : | ||
+ | **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, | ||
+ | * [[# | ||
+ | |||
+ | {{ : | ||
+ | ===== 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 [[hu: | ||
+ | |||
+ | ==== Technikai jellemzők ==== | ||
+ | * Érzékelés távolsága: | ||
+ | * Tápfeszültség: | ||
+ | * Áramfelvétel: | ||
+ | * Üzemi hőmérséklet: | ||
+ | * UART: 9600 baud, 8N1, Flow Control : None | ||
+ | |||
+ | ==== Vezeték-kiosztás ==== | ||
+ | * ①GND Black | ||
+ | * ②VCC Red | ||
+ | * ③RXD Yellow | ||
+ | * ④TXD white | ||
+ | * ⑤SDA blue | ||
+ | * ⑥SCL purple | ||
+ | |||
+ | ==== Vezetékezés az Arduinoval ==== | ||
+ | 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. | ||
+ | |||
+ | ^TOF10120^Arduino pin^Megjegyzés| | ||
+ | |1.fekete|Arduino GND|GND| | ||
+ | |2.piros|Arduino 5v DC|5v DC táp| | ||
+ | |3.sárga|Pin 1 Tx|RxD : A serialhoz kell bekötni| | ||
+ | |4.fehér|Pin 0 Rx|TxD : A serialhoz kell bekötni| | ||
+ | |5.kék|Pin A4|SDA : Az I²C-hez kell bekötni| | ||
+ | |6.zöld|Pin A5|SCL : Az I²C-hez kell bekötni| | ||
+ | |||
+ | <WRAP center round important 80%> | ||
+ | A serial Rx és Tx használata blokkolja a soros letöltést és a serial monitor használatát. | ||
+ | </ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | ==== Szoftver ==== | ||
+ | A lenti szoftver az I²C-t használja a kommunikációhoz, | ||
+ | <hidden Szoftver megjelenítése> | ||
+ | <code c> | ||
+ | /* | ||
+ | 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:// | ||
+ | */ | ||
+ | |||
+ | #include < | ||
+ | |||
+ | 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, | ||
+ | printf_begin(); | ||
+ | |||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | | ||
+ | |||
+ | int x=ReadDistance(); | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | int serial_putc( char c, struct __file * ) | ||
+ | { | ||
+ | Serial.write( c ); | ||
+ | return c; | ||
+ | } | ||
+ | |||
+ | void printf_begin(void) | ||
+ | { | ||
+ | fdevopen( & | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | void SensorRead(unsigned char addr, | ||
+ | { | ||
+ | unsigned short result=0; | ||
+ | // step 1: instruct sensor to read echoes | ||
+ | Wire.beginTransmission(82); | ||
+ | // 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)); | ||
+ | Wire.endTransmission(); | ||
+ | // step 2: wait for readings to happen | ||
+ | delay(1); | ||
+ | // step 3: request reading from sensor | ||
+ | Wire.requestFrom(82, | ||
+ | // step 5: receive reading from sensor | ||
+ | if (cnt <= Wire.available()) { // if two bytes were received | ||
+ | *datbuf++ = Wire.read(); | ||
+ | *datbuf++ = Wire.read(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | int ReadDistance(){ | ||
+ | SensorRead(0x00, | ||
+ | lenth_val=i2c_rx_buf[0]; | ||
+ | lenth_val=lenth_val<< | ||
+ | lenth_val|=i2c_rx_buf[1]; | ||
+ | delay(300); | ||
+ | return lenth_val; | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | {{ : | ||
+ | ===== Sharp IR távolságérzékelők ===== | ||
+ | {{anchor: | ||
+ | |||
+ | Az Sharp távérzékelők népszerűek olyan projektekhez, | ||
+ | |||
+ | 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 [[hu: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | 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ó: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ==== Néhány Sharp IR távérzékelő típus ==== | ||
+ | ^típus^Üzemi feszültség^Áramfelvetel^Távolságmérési \\ tartomány^megjegyzés| | ||
+ | |GP2Y0A60SZ(LF)|2 működési mód \\ 3V: 2,7..3,6V \\ 5V: 2, | ||
+ | |GP2Y0A02(YK0F)|4, | ||
+ | |GP2Y0A21(YK0F)|4, | ||
+ | |GP2Y0A41(SK0F)|0, | ||
+ | |GP2Y0A51(SK0F)|0, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | ==== Néhány Sharp IR távérzékelő adatlap ==== | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | ==== Vezetékezés ==== | ||
+ | piros vezeték (táp): Arduino +5V DC \\ | ||
+ | fekete vezeték (föld): Arduino GND \\ | ||
+ | sárga vezeték (jel): Arduino analóg input \\ | ||
+ | |||
+ | <WRAP center round tip 80%> | ||
+ | Az IR-LED belső időzítése miatt előfordulhat, | ||
+ | </ | ||
+ | |||
+ | ==== Szoftver ==== | ||
+ | **GP2Y0A21(YK0F), | ||
+ | A szoftverpéldákat ezúttal is a Githubon érdemes keresgélni, | ||
+ | |||
+ | {{ : | ||
+ | ===== HC‑SR04 szonárszenzor ===== | ||
+ | {{anchor: | ||
+ | |||
+ | A modul a hangvisszaverődés idejét mérve következtet a távolságra, | ||
+ | |||
+ | 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\\ // | ||
+ | |||
+ | <WRAP center round important 80%> | ||
+ | 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. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 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, | ||
+ | |||
+ | **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ó, | ||
+ | |||
+ | // | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | A méréseket nem érdemes 60 ms-on belül ismételni, mert zavarhatják egymást: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | <WRAP center round important 80%> | ||
+ | A modult a tapasztalatok alapján érdemes úgy a tápfeszülségre csatlakoztatni, | ||
+ | |||
+ | 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), | ||
+ | </ | ||
+ | |||
+ | ==== Technikai adatok ==== | ||
+ | ^jellemző^adat| | ||
+ | |Üzemi feszültség|DC 5V| | ||
+ | |Áramfelvétel|15 mA| | ||
+ | |Üzemi frekvencia|40 kHz| | ||
+ | |Maximális távolság|4m| | ||
+ | |Minimális távolság|2cm| | ||
+ | |Mérés pontossága|> | ||
+ | |Mérési tartomány (szög)|15°| | ||
+ | |Trigger jel|10 μs TTL impulzus| | ||
+ | |||
+ | ==== Pinek ==== | ||
+ | ^jelölés^leírás| | ||
+ | |Vcc|táp, 5V DC| | ||
+ | |Trig|" | ||
+ | |Echo|válasz (viszhang) a " | ||
+ | |GND|grund| | ||
+ | |||
+ | ==== HC‑SR04 adatlap ==== | ||
+ | {{: | ||
+ | |||
+ | ==== Vezetékezés ==== | ||
+ | |||
+ | Arduino 5V ↔ HC-SR04 Vcc \\ | ||
+ | Arduino GND ↔ HC-SR04 Gnd \\ | ||
+ | Arduino pin 11 ↔ HC-SR04 " | ||
+ | Arduino pin 12 ↔ HC-SR04 " | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ==== Github ==== | ||
+ | A modulhoz könyvtár és példaprogramok a Github-ról letölthetők: | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | ==== Források ==== | ||
+ | http:// | ||
+ | |||
+ | ===== Ultrasonic távolságmérő szenzor ===== | ||
+ | {{anchor: | ||
+ | {{ : | ||
+ | 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: | ||
+ | **Készenléti áramfelvétel: | ||
+ | **Üzemi áramfelvétel: | ||
+ | **Átviteli frekvencia: | ||
+ | **Maximális távolság: | ||
+ | **Holttér: | ||
+ | **Pontosság: | ||
+ | **Látószög: | ||
+ | **Üzemi hőmérséklet: | ||
+ | **Tárolási hőmérséklet: | ||
+ | **Méret:** 41x28.5mm \\ | ||
+ | **Vezetékhossz: | ||
+ | |||
+ | |||