Datchiklar7 daqiqada oʻqiladi26-sentabr, 2026

Ultratovush datchigi qanday koʻradi va qachon koʻrmaydi

HC-SR04 masofani tovush yordamida qanday oʻlchaydi, yumshoq, qiya va ingichka narsalar nega koʻrinmay qolishi mumkin, oʻlchovlarni qachon olish, qanday filtrlash va datchikni robotga qanday oʻrnatish kerak.

Foto: © Nevit Dilmen · CC BY-SA 3.0

HC-SR04 kabi ultratovush datchigi yorugʻlikni koʻrmaydi. U tovush chiqaradi va uning aks-sadosini tinglaydi. Bu qanday ishlashini bilsangiz, datchik qachon ishlamay qolishini ham oldindan ayta olasiz va robotingiz kodini aynan shunday paytlarga moslab yoza olasiz.

Borib-qaytgan tovush

HC-SR04 40 kHz tovush yuboradi, devor aks-sadoni qaytaradi, mikrosekundlardagi t vaqt esa masofani beradi: d = t / 58 sm.

TRIG piniga berilgan, davomiyligi kamida 10 mks boʻlgan ishga tushirish impulsi oʻlchashni boshlaydi. Datchik 40 kHz chastotali qisqa tovush signalini chiqaradi — bu odam eshita oladigan chastotadan (taxminan 20 kHz gacha) ancha yuqori. Keyin u ECHO pinini HIGH qiladi va aks-sado qaytguncha HIGH holatda ushlab turadi. Shu impulsning davomiyligi — tovushning narsagacha borib, qaytib kelishi uchun ketgan vaqt.

20 °C da tovush taxminan 343 m/s tezlikda tarqaladi, shuning uchun bir santimetrga taxminan 29 mks ketadi. Borib-qaytishni hisoblasak, masofaning har bir santimetriga 58 mks toʻgʻri keladi:

ECHO impulsi Masofa
116 mks 2 sm, u oʻlchaydigan eng qisqa masofa
1160 mks 20 sm
5800 mks 1 m
23 200 mks 4 m, taxminan eng uzoq masofa

Saytdagi sketchlar mana shu funksiyadan foydalanadi:

int readDistanceCm() {
  digitalWrite(TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG, HIGH);            // at least 10 microseconds starts a measurement
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);
  unsigned long us = pulseIn(ECHO, HIGH, 25000UL);  // echo pulse length, 0 after 25 ms
  if (us == 0) return 400;
  return us / 58;                      // there and back at 343 m/s: 58 us per cm
}

Tovush dastasi — konus

Tovush ingichka chiziq boʻylab tarqalmaydi. U kengligi taxminan 15 gradus boʻlgan konus shaklida yoyiladi. Datchikdan 1 m uzoqlikda konusning eni taxminan 26 sm, 2 m da esa taxminan yarim metr boʻladi.

Buning robot uchun uchta oqibati bor:

  • Datchik faqat roʻparadagi narsani emas, konusning istalgan joyidagi eng yaqin narsani koʻrsatadi. Bir chetda turgan stol oyogʻi robotni ochiq yoʻlakda ham toʻxtatib qoʻyishi mumkin.
  • U faqat masofani beradi. Narsa konusning qayerida ekanini aytmaydi.
  • Robotga yaqin joyda konus robotning oʻzidan torroq boʻladi. Gʻildirakka yoki korpus burchagiga uriladigan toʻsiq konusdan tashqarida qolishi mumkin. Konusdan pastdagi past pogʻona yoki undan yuqoridagi stol usti ham shunday. Bular — koʻr zonalar.

Javob bermaydigan sirtlar

Datchik faqat qaytib kelgan aks-sadoni oʻlchay oladi. Baʼzi narsalar aks-sado qaytarmaydi:

  • Yumshoq narsalar, masalan pardalar, yostiqlar, kiyimlar va porolon, tovushning katta qismini yutadi. Aks-sado kuchsiz boʻladi yoki umuman boʻlmaydi.
  • Qiya sirtlar tovushni boshqa tomonga qaytaradi, xuddi koʻzgu yorugʻlikni qaytargani kabi. Robot kichik burchak ostida, deyarli devor boʻylab yurib yaqinlashayotgan boʻlsa, bunday devor umuman hech narsa qaytarmasligi mumkin.
  • Ingichka yoki dumaloq narsalar, masalan stul oyoqlari va ustunlar, tovushning ozgina qismini qaytaradi. Ular kech sezilishi yoki umuman sezilmasligi mumkin.
  • Burchaklar tovushni devordan devorga urib qaytarishi mumkin. Aks-sado kech qaytadi va oʻlchov haddan tashqari katta chiqadi.

Aks-sado qaytmasligi — eng xavfli holat. pulseIn() 25 ms kutadi, hech narsa olmaydi va 0 qaytaradi, readDistanceCm() esa uni 400 ga aylantiradi. Robot uchun 400 «taxminan 4 m ichida hech narsa yoʻq» degani, hatto qiya devor uning shundoq roʻparasida turgan boʻlsa ham.

Eng kichik masofa

Taxminan 2 sm dan yaqin masofada oʻlchovlarga ishonib boʻlmaydi. Bunchalik yaqindan qaytgan aks-sado datchik hali oʻz tovush signalini chiqarayotgan paytda keladi. Robotda bu kamdan-kam ahamiyatga ega, chunki robot ancha oldinroq harakat qilishi kerak: Toʻsiqni aylanib oʻtuvchi robot biror narsa 25 sm dan yaqin boʻlsa, orqaga yuradi.

Robotning hech bir qismi konus ichida boʻlmasligi muhimroq. Dastaga tushib qolgan sim, sharli tayanch yoki plastinaning (qavatning) old cheti doimiy, lekin notoʻgʻri qiymat beradi.

Eski aks-sadolar va ikkita datchik

Tovush xonada qisqa vaqt saqlanib, devordan devorga urilib yuradi. Keyingi signalni juda erta yuborsangiz, oldingi signalning kechikkan aks-sadosi yetib kelib, yangi, yaqin narsadek koʻrinishi mumkin. Shuning uchun signallar orasida taxminan 60 ms kuting. ObstacleAvoider sketchi aynan shu sababli har 60 ms da oʻlchaydi.

Ikkita HC-SR04 datchigi bir xil 40 kHz chastotadan foydalanadi, shuning uchun har biri ikkinchisining tovushini eshitishi mumkin. Ularni navbatma-navbat, oralarida xuddi shunday pauza bilan ishlating, hech qachon bir vaqtda emas. Datchiklari bir-biriga qaragan ikkita robot ham bir-biriga xuddi shunday xalaqit berishi mumkin.

Harorat

Tovush tezligi har bir gradus Selsiyda taxminan 0,6 m/s ga oʻzgaradi, koddagi 58 esa taxminan 20 °C ga moʻljallangan. 0 °C da tovush sekinroq, taxminan 331 m/s, shuning uchun 1 m narida turgan devor taxminan 104 sm boʻlib oʻlchanadi. Issiq xonada qiymatlar biroz qisqaroq chiqadi. Agar haroratni bilsangiz va aniq masofa kerak boʻlsa, tezlik = 331 + 0,6 × harorat (m/s da) va masofa (sm) = impuls davomiyligi (mks) × tezlik / 20 000 formulalaridan foydalaning. Devorlardan qochadigan robot uchun esa bu sahifadagi boshqa taʼsirlar ancha muhimroq.

Vaqt: pulseIn() kutib turadi

pulseIn() dasturni toʻxtatib turadi: u aks-sadoni kutayotganda Arduino boshqa hech narsa qilmaydi. Uchinchi argument berilmasa, u bir soniyagacha kutadi va shu vaqt davomida robot yangi oʻlchovlarsiz yurishda davom etadi. Saytdagi sketchlar unga 25 000 mks beradi, bu 4 m dan qaytadigan aks-sado uchun kerak boʻlgan 23 200 mks dan biroz koʻproq.

Robot oʻlchovlar orasida qancha yurishini ham oʻylab koʻring. 0,5 m/s tezlikda u 60 ms da 3 sm yuradi. 60 ms oraliq bilan olingan uchta oʻlchovning medianasi taxminan 180 ms vaqt oladi, shu orada robot taxminan 9 sm yurib qoʻyadi. Shuning uchun ObstacleAvoider sketchi millis() taymerlari yordamida oʻlchaydi va signallar orasida yurishda davom etadi. Buni qanday qilish Hech qachon kutmaydigan dasturlar darsida koʻrsatilgan.

Filtrlash: yakka sakrashlarni tashlab yuboring

Haqiqiy oʻlchovlar vaqti-vaqti bilan sakrab ketadi. Qaytmagan aks-sado 400 beradi. Adashgan aks-sado esa haddan tashqari qisqa masofa beradi. Oʻrtacha qiymat buni tuzatmaydi: 20, 20 va 400 ning oʻrtachasi taxminan 147. Mediana, yaʼni uchta qiymatning oʻrtadagisi esa 20 ga teng.

int median3(int a, int b, int c) {
  if ((a <= b && b <= c) || (c <= b && b <= a)) return b;
  if ((b <= a && a <= c) || (c <= a && a <= b)) return a;
  return c;
}

DistanceMeter sketchi uchta oʻlchovning medianasini chiqaradi. Uchtadan bitta notoʻgʻri qiymat yoʻqoladi. Ketma-ket kelgan ikkita notoʻgʻri qiymat esa oʻtib ketadi.

Robot tez-tez oʻlchasa, ikkinchi qoida ham yordam beradi: katta sakrashga faqat keyingi oʻlchov uni tasdiqlasagina ishoning. 0,5 m/s tezlikda robot ikki signal orasida atigi 3 sm yaqinlashadi. Oldingisidan, masalan, 50 sm ga farq qiladigan oʻlchov yo xato, yo yangi narsa. 60 ms dan keyingi yana bitta signal qaysi biri ekanini koʻrsatadi.

Uni robotning qayeriga oʻrnatish kerak

  • Old tomonga, toʻgʻri oldinga qaratib va gorizontal holda. Pastga qiyshaysa, polni koʻrishi mumkin. Yuqoriga qiyshaysa, past toʻsiqlarni koʻrmay qoladi.
  • Ikkita dumaloq oʻzgartirgichi (transduseri) old chetdan chiqib turadigan qilib. Simlar va sharli tayanch dastaga tushmasin.
  • Mahkam qilib. Boʻsh mahkamlangan datchik har bir turtkidan keyin boshqa tomonga qarab qoladi.
  • CoreEngine robot-mashinasida: VCC — L298N ning +5V chiqishiga, GND — Unoning GND piniga, TRIG — D9 ga, ECHO — D10 ga.

HC-SR04 bilan masofani oʻlchash darsida ulanish va DistanceMeter sketchi koʻrib chiqiladi. Bu sketchni simulyatorda ishga tushirib, arenadagi jonli masofa koʻrsatkichini kuzatishingiz mumkin. Soʻng Masofa saqlovchi robot xuddi shu oʻlchovlar yordamida qoʻlingizga ergashadi. Datchikning oʻzi Marketda bor.