Névjegyzék

Arduino: Ultrahangos Range Finder HC-SR04. Ultrahangos rangeFinder HC-SR04 - mérőberendezések - ultrahangos távolságmérő szerszámok mikrokontrollerrel saját kezével

Bruno Gavand.

A projekt, amelyben az ultrahangos érzékelő egyszerű és olcsó megoldása a távolság mérésére a Társaság mikrokontroller PIC1677A mikrokontroller, de a felhasználók alapján történik forrás Más mikrokontrollerekhez igazítható. Az érzékelő beágyazható egyéni fejlesztésekbe és eszközökbe: jelenlét detektorok, robotok, parkoló rendszerek, távolságmérő eszközök stb.

Megkülönböztető tulajdonságok:

  • kis számú külső alkatrész;
  • kódméret 200 bájt;
  • munkatávolságok tartománya: 30 cm - 200 cm;
  • mérési pontosság ± 1 cm;
  • jelzés a mérési határértékek elhagyásakor.

Mint tudod, a levegő hangsebessége körülbelül 340 m / s. Így az ultrahangos érzékelő elve 40 kHz-es frekvenciájú ultrahangos impulzust küld, és nyomon követi a visszavert jelet (ECHO). Természetesen a hallható hang, de az ultrahangos érzékelő képes meghatározni a visszavert impulzust. Következésképpen, az impulzus és a visszavert ultrahangjel időtartamának ismerete, a távolságot kaphatjuk. Kétre oszlik, a távolság az ultrahangos érzékelőtől az első akadályra kerülünk, ahonnan a jel tükröződik.

A készülék piezokeramikus ultrahangos emitter MA40B8S és egy piezokeramikus ultrahangos érzékelő MA40B8R nyitott típus. A fő paraméterek az alábbi táblázatban jelennek meg.

Eszköz Célja Frekvencia Fókusz
Grad.
Kapacitás,
Pf
Vidék
érzékelés
M.
Bejárat
feszültség,
Max, B.
MA40B8S. Kibocsátó 40 kHz 50 (szimmetrikus) 2000 0.2 … 6 40
MA40B8R Érzékelő 40 kHz 50 (szimmetrikus) 2000 0.2 … 6

A teszteléshez egy vállalat debug platformot alkalmaztak.

A felhasználó azonban használhatja mikrokontroller képamely legalább egy csatorna ADC és egy PWM csatorna van.

Az ultrahangos érzékelő koncepciója

A radiátorot a BD135 tranzisztor vezérli. Az 1N4007 diódát a tranzisztor védelmére használják a fordított feszültségről. A tranzisztor és a rezonáns lánc használata miatt, amely képződik párhuzamos befogadás Az emitter által alkotott L1 330 μH-os kondenzátor, az emitter tápfeszültsége körülbelül 20 V lesz, amely 200 cm-ig terjedő detektálási tartományt biztosít. Érdemes megjegyezni, hogy az emitter közvetlenül vezérelhető a mikrokontroller kimenetéből , de ebben az esetben a távolságtartomány nem haladja meg az 50 cm-t.

Az érzékelő közvetlenül az ADC mikrokontrollerhez van csatlakoztatva (PIC16F877A - 1. csatorna 1 ADC), az érzékelővel párhuzamosan az ütközéshez szükséges ellenállás szükséges az impedancia megegyezéséhez.

A kezdethez ultrahangos lendületet kell küldeni. A 40 kHz frekvenciájú jel könnyen előállítható mikrokontroller hardverrel. Az érzékelőtől származó visszavert jel az ADC-be lép, az ADC-engedély 4 mV, ami elegendő ahhoz, hogy elolvassa az adatokat az érzékelőből, és a további komponensekre nincs szükség.

Az ultrahangos érzékelő által benyújtott tábla megjelenése


Ez az érzékelő a legegyszerűbb megoldás, ezért számos hátránya van: egy ultrahangos vevőkészülék kis rezgése helytelen méréshez vezethet. Mivel az elküldött impulzus nem modulált, és nem kódolt, az idegen ultrahangos frekvenciaforrások befolyásolhatják a mérést, és mindez hibás eredményekhez vezethet (a méréseken túlmutató kimenet).

Feliratok a képen:

ultrahangos burst - ultrahangos impulzus;
Mechanikus echo (szoftver által eltávolított) - mechanikus echo (szoftverszoftver);
A távoli objektum által visszaverődő ultrahangos hullám egy ultrahangos hullám, amely tükröződik a távoli objektumból.

Oszcilloszkóposztály Ár: Vízszintesen - 1 ms / ügy, függőlegesen - 5 MV / eset.

A mechanikus visszhangot programosan kizárják a késedelem bevezetésével. A visszavert hullám, amelynek amplitúdója körülbelül 40 mV-ot kapunk 9,5 ms után egy küldött impulzus után. Tekintettel arra, hogy a hangsebesség 340 m / s, kapunk:

0,0095 / 2 × 340 \u003d 1,615 m.

A valóságban - a szoba mennyezete a 172 cm-es érzékelőtől távol volt, az LCD kijelzőn debugok Megjelenik a 170 cm érték.

Letöltések

Forráskód a projekthez a mikrokontroller PIC16F877A (Compiler Mikroc) -

Néhány megjegyzés:
Az ultrahangos rangsorfinder létrehozásához szükséges összes elemet a chipidype-ban értékesítik, körülbelül 500-900R-nak fizetnek (nem emlékszem pontosan - pontosan - sok pénz volt, nem számított :-). (test, squeakers, egyéb csatlakozók)
Néhány megjegyzés az ultrahang tartománykereső rendszerén:
1. A cookie-k bármilyen, a különböző feladatok jobb különböző ... a feladatomhoz - annál inkább a méretek jobbak, az 50 szög.
2. Megpróbálhat csak egy viszonylag drága AD822-et használni, és az olcsóbb szálak összehasonlító helyén (egyszerűen nem volt semmi más)
3. A MEGA-ban 40 kilohertz létrehozásához használhat egy időzítőt, ezért fel kell vennie egy másik rezonátort. (Csak 16 és 12 voltam. Ezek nem alkalmasak)
4. A levegőben lévő hangsebesség valójában a hőmérséklettől függ - ha a pontosság nagyon fontos (nem érdekel), akkor fontolja meg
5. MEGJEGYZÉS, HOGY A KÉSZÜLÉKEK KÉSZÜLÉKÉBEN - A Sakes nem érinti a műanyagot - az egyik személy azt mondta, hogy amikor mega-tuning ( ez a rendszer Képes és erre) A kénből a mikrofonhoz való hangot az esetre továbbítják, jobb, ha meg kell újítani
6. A MEGA ON C (ERESZABÁLLAPOT) legegyszerűbb firmwaresének példája megtekinthető
7. A programozó jobb az STK200 / 300 használatához, az Avreal - a szoftver és a rendszer apróra vágható
8. Az elme a firmware-ben nyomon követnie kell a "csomag" kezdetét és végét, a példában, csak a kezdet (pontosság növekszik kifejezetten) .. Befejezhetem.
9. A jelenet szereti a 40 kHz-t - egy kicsit az irányba egyáltalán nem ... valószínűleg az igazság a kézikönyvben írják ezt a rezonant :-)
10. A ponapihan tranzisztorok radiátorának diagramjában - több volt, mint 12 - Velkom - azt mondta, hogy hangosabban (számít). Három oknál fogva nem tette meg: az első 24 volt, meg kell találni valahol máshol, a második jelenlegi verzióban, amikor felállítja a rhizisztort, így látja a falat 4 méterre, azaz. Nem vagyok ott, ahol tapasztalhatom, és nincs szükség. Nos, a harmadik oka ugyanaz, amit ugyanaz a személy azt mondta, hogy a tétek hajlamosak meghalni ezen a feszültségen
11. ÁLTALÁNOS TANÁCS: Megtalálhatja az összes ellenállást és kondenzátort a tápegység nem működő egységében az ATX számítógépről (ők minden valahol 1/8 gyapjú) - Pénztakarékos!
12. A Hibás vélemény, hogy a HeartBe által közzétett ultrahangot valahogy hallgathatja Sobami-t és más teremtményeket, rosszul befolyásolja őket: a kutyám éjszaka jött, és a sajtolás előtt esett.
13. Továbbá - így csak az üzenettel - Mega és más 8bites vezérlők az ATMLA-tól - tökéletesen üldözik .. A bal 16 munka helyett a bal 16 munkahelyen van, normálisan.
14. A fenti R5 eltávolításakor a Kila (10, 50, 100) nagyon nagy nyereség lesz, és valószínűleg szükségük lesz egy kürtre, de a mérések tartománya nagymértékben nő.
15. Ahelyett, hogy megszünteti a ruporokat (nagy R5), lásd fent, frissítheti a firmware-t, hogy nem várna egy hasznos jelre a kezdeti pillanatban. De akkor lehetetlen a távolságok körülbelül 10 cm és kevesebb távolságra mérni.

A Tanácsnak való megjegyzése 8 - Sárga jelezte az MK ultrahangos távolságmérő megszakításának pillanatát a recepción, valójában ugyanazon pillanatra korlátozható, várjon egy kicsit, és tegye a következő mérést, a következő csomagot Az impulzus - és a repülési idő időpontja az első küldött impulzusból származó idő (vagy az utóbbi nem fontos) az első elfogadott.
A második opció piros - pontosabban van jelölve - mivel az impulzusok csomagja általában nem teljes mértékben elért (lehet, hogy nem az első három vagy utolsó impulzus), a kép szerint egyértelmű, hogy "lapított" A szélek körül, bár az impulzusok tökéletes téglalapja elment - így: a pont az, hogy a csomag közepén maradjon a helyén, annak ellenére, hogy a szélek már nem lehet komparátor. Tehát a pontosság több .. (Milmeters kell gondolkodnia) attól függ, hogy figyelembe vették-e az ultrahangos távolságmérő firmware-jét a középső vagy csak a csomag kezdete, amikor visszaállt.

Az ultrahangos Arduino távérzékelők nagyon igények a robotos projektekben, mivel viszonylagos egyszerűsége, elegendő pontosság és rendelkezésre állása miatt. Használhatók olyan eszközökként, amelyek segítenek az akadályok körüli keresztkéréshez, a tételek méretét, szimulálja a szoba térképét, és jelezze az objektumok közelítését vagy eltávolítását. Az ilyen eszköz egyik gyakori változata egy távérzékelő, amelynek kialakítása egy Ultrahangos RangeFinder HC SR04. Ebben a cikkben megismerjük a távérzékelő elvét, több lehetőséget vállalunk az Arduino-fizetésekhez, az interakciós rendszerhez és a vázlatokhoz való csatlakozáshoz.

Az a képesség, ultrahangos érzékelő, hogy meghatározza azt a távolságot, hogy az objektum alapul Sonar elve - küldésével ultrahang nyaláb, és megszerzésére annak reflexió késéssel, határozza meg a készülék, amely tárgyak jelenlétét, és a távolság a számukra. A vevő által generált ultrahangos jelek, amelyek tükröződnek az akadályból, visszatérünk egy bizonyos ideig. Ez az időintervallum, amely jellemzővé válik, hogy segítsen meghatározni az objektum távollétét.

Figyelem! Mivel a működés elvét ultrahangon alapul, ez az érzékelő nem alkalmas a hangelnyelő objektumok távolságának meghatározására. A mérések optimális lapos sima felületű tárgyak.

Érzékelő Leírás HC SR04

Az Arduino távérzékelő érintés nélküli típusú eszköz, és nagy pontosságú mérést és stabilitást biztosít. A mérési távolság tartománya 2-400 cm. Nem rendelkezik jelentős hatással az elektromágneses sugárzás és a napenergia. A HC SR04 Arduino modul tartalmaz egy vevőt és távadót is.

Az ultrahangos HC SR04 rangurefinder ilyen műszaki paraméterekkel rendelkezik:

  • Tápfeszültség 5V;
  • T OKA - 15 mA munka paraméter;
  • Az aktuális teljesítmény passzív állapotban< 2 мА;
  • Panorámás szög - 15 °;
  • Érzékszervi felbontás - 0,3 cm;
  • Mérési szög - 30 °;
  • Pulzusszélesség - 10-6 s.

Az érzékelő négy kimenettel van felszerelve (standard 2, 54 mm):

  • Pozitív típusú - + 5V hatalom érintkezése;
  • Trig (t) - a kimeneti jel kimenet;
  • Echo (r) - kimeneti jel kimenet;
  • GND - Visszavonás "Föld".

Hol lehet vásárolni egy SR04 modul az Arduino

A távolságérzékelő meglehetősen közös komponens, és könnyen megtalálható az online áruházakban. A legolcsóbb lehetőségek (40-60 rubel / darab) hagyományosan a jól ismert helyen.

HC-SR04 távérzékelő modul Arduino számára Az ultrahangos HC-SR04 érzékelő másik lehetősége megbízható beszállítóban
SR05 Ultrahangos HC-SR05 Távérzékelők (javított funkciók) HC-SR05 HY-SRF05 modul UNO R3 MEGA2560 számára megbízható beszállító miatt

Az Arduino-val való kölcsönhatás rendszere

Adatok beszerzése érdekében ilyen intézkedéseket kell végrehajtania:

  • Adja meg a kimeneti trig pulzust 10 micros időtartamával;
  • Az ARDUINO-hoz csatlakoztatott Ultrahangos Rannellor HC SR04-ben a 40 kHz-es frekvenciájú 8 impulzusos jelkonverzió átalakul, amelyet az emitteren keresztül továbbítanak;
  • Amikor az impulzusok elérik az akadályt, akkor befolyásolják, és az R vevő elfogadja, amely biztosítja a bemeneti jel jelenlétét az ECHO kimeneten;
  • A vezérlő oldalán a fogadott jelet a formulák segítségével le kell fordítani a távolságra.

Ha az impulzus szélességét 58.2-ig osztjuk meg, centiméterben kapunk adatokat, amikor 148-mal oszlik meg.

Csatlakoztassa a HC SR04-et az Arduino-hoz

Csatlakoztassa az ultrahangos távoli érzékelőt aRDUINO panel. nagyon egyszerű. A kapcsolat diagramja az ábrán látható.

A GND kimenet csatlakoztatása az Arduino-táblán, csatlakoztassa az 5V-os tápkutyát. A trig és az echo kimenetek az Arduino-hoz csatlakoznak a digitális csapokhoz. Csatlakozási lehetőség merész táblával:

Könyvtár a HC SR04 használatához

A HC SR04 távérzékelővel való munkavégzés megkönnyítése az ARDUINO-n található, az új könyvtárat használhatja. Nincs probléma a ping hozzáféréssel, és új funkciókat ad hozzá.

A könyvtár jellemzői a következők:

  • A különböző ultrahangos érzékelőkkel való együttműködés képessége;
  • Lehet dolgozni egy távérzékelővel csak egy PIN-kódban;
  • Az echo ping hiányában 1 másodpercig nem lag;
  • A könnyű hibajavítás érdekében beépített digitális szűrő van;
  • A maximális pontos számítási távolság.

Letöltés Bibilot News

Pontosságmérési távolság HC SR04 érzékelővel

Az érzékelő pontossága több tényezőtől függ:

  • levegő hőmérséklete és páratartalma;
  • távolságok az objektumhoz;
  • az érzékelőhöz képest (a sugárzási diagram szerint);
  • az érzékelő modul elemeinek minőségi teljesítménye.

Az ultrahangos érzékelő működésének elvének alapja a levegőben szaporodó akusztikus hullámok tükröződésének jelensége. De ahogyan a fizika során ismert, a levegőben lévő hangszaporodás sebessége a levegő tulajdonságaitól függ (elsősorban a hőmérsékleten). Az érzékelő, a kibocsátóhullámok és a visszatérés előtti mérési idő nem ismeri fel, hogy melyik környezetben terjednek és átlagértéket vesznek ki a számításokhoz. Valódi körülmények között a léghőmérséklet-tényező miatt a HC-SR04 hibás 1-3-5 cm.

Az objektum távolsági tényezője fontos, mert A szomszédos tárgyakról való visszaverődés valószínűsége növekszik, és a jel maga is elhalványul a távolból.

A pontosság javítása érdekében helyesen kell elküldeni az érzékelőt: tegye azt, hogy a téma a sugárzási táblázat kúpjába kerüljön. Egyszerűen tegye, a "szem" HC-SR04 közvetlenül a témára kell néznie.

A hibák és a mérési hibák csökkentése érdekében a következő műveleteket általában elvégzik:

  • az értékek átlagolódnak (többször mérjük, eltávolítjuk a töréseket, majd megtaláljuk az átlagot);
  • az érzékelők segítségével (például,), a hőmérsékletet meghatározzák, és korrekciós együtthatókat készítenek;
  • az érzékelő a szervomotorra van felszerelve, amellyel "forgatjuk a fejet" a sugárzási diagram balra vagy jobbra történő mozgatásával.

Példák a távoli érzékelő használatára

Tekintsünk egy példát egy egyszerű projektre az Arduino UNO kártyával és a HC SR04 távérzékelővel. A vázlatban megkapjuk a távolság értékét az elemekhez, és megjelenítjük őket a Port Monitorban a közegben Arduino IDE. Könnyedén megváltoztathatja a vázlatot és a kapcsolódási sémát, hogy az érzékelő jelzi az elem közelítését vagy távollétét.

Az érzékelő csatlakoztatása Arduino-hoz

Vázlat írásakor a következő lehetőség az érzékelő kapcsolatának meghatározásához használta:

  • VCC: + 5V
  • Trig - 12 pin
  • Echo - 11 PIN
  • Föld (GND) - Föld (GND)

Minta vázlata

Elkezdjük dolgozni az érzékelővel azonnal a relatív komplex opcióból - külső könyvtárak használata nélkül.

Ebben a vázlatban végezzük el az ilyen intézkedések sorrendjét:

  • Rövid impulzus (2-5 mikroszekundum) Fordítja a távérzékelőt az echolocation üzemmódba, amelyben 40 kHz frekvenciájú ultrahangos hullámokat küldünk a környező térre.
  • Várjuk, amíg az érzékelő elemzi a visszavert jeleket, és a késleltetés meghatározza a távolságot.
  • A távolságértéket kapjuk. Ehhez várunk, amíg a HC SR04 visszhangzik az ECHO-val. Meghatározzuk az impulzus időtartamot az impulzus funkcióval, amely visszaadja az időt, mielőtt megváltoztatná a jel szintjét (a mi esetünkben, amíg az impulzus hátramenet megjelenik).
  • Miután megkaptuk az időt, a centiméterek közötti távolságra fordítjuk azáltal, hogy az értéket az állandó értékre osztjuk (az SR04 érzékelő számára, ez 29.1 a jel "ott", akár a "vissza" jel, amely 58.2 .

Ha a távolságérzékelő nem olvasja el a jelet, akkor a kimeneti jelátalakítás soha nem fogja elfogadni a rövid impulzus értéket - alacsony. Mivel néhány érzékelő, a késleltetési idő a gyártótól függően változik, ajánlott a megadott vázlatok használata, hogy manuálisan állítsa be értékét (a ciklus elején).

Ha a távolság több mint 3 méter, ahol a HC SR04 rosszul dolgozik, akkor a késleltetési idő jobb, ha több mint 20 ms, azaz. 25 vagy 30 ms.

#Define pin_trig 12 #define pin_echo 11 hosszú időtartam, cm; Void Setup () (// inicializálja a serial.begin serial.begin (9600) interakciót; 2-5 mikroszekundum impulzus időtartama. Digitalwrite (PIN_TRIG, LOW); DELECTMICROSECONDS (5); Digitalwrite (PIN_TRIG, HIGH); / Kiállítás magas szint Jel, körülbelül 10 microseconds várakozásra vár. Ezen a ponton az érzékelő 40 kHz frekvenciájú jeleket küld. DelingMicRoseConds (10); Digitalwrite (PIN_TRIG, Alacsony); // az echolocator akusztikus jelének késleltetési ideje. Időtartam \u003d impulzus (pin_echo, magas); // most továbbra is átalakítani az időt a távolságra a CM \u003d (időtartam / 2) / 29.1; Serial.print ("távolság az objektumhoz:"); Serial.print (cm); Serial.println ("lásd"); // késleltetés a késedelem helyes működéséhez (250); )

Vázlat az új könyvtár segítségével

Most nézzük meg a Sketch verziót az újindulatú könyvtár segítségével. A kód jelentősen kitört, mert Minden korábban leírt művelet rejtve van a könyvtárban. Mindaz, amit meg kell tennie, hogy újindulatú osztály objektumot hozzon létre egy PIN-kód megadásával, amellyel a távérzékelőt csatlakoztatjuk és objektum-módszereket használunk. Példánkban a ping_cm () használatára van szükség centiméter távolság eléréséhez.

#Inlude. #define pin_trig 12 #define pin_echo 11 #define max_distance 200 // konstans a maximális távolság meghatározásához, mi lesz helyesnek tekintendő. // Hozzon létre egy objektumot, amelynek módszereit ezután a távolság megszerzéséhez használja. // Mivel paraméterek Küldje el a PIN-kód számát, amelyhez az újítás Sonar érzékelő (PIN_TRIR, PIN_ECHO, MAX_DISTICE) visszhangja és trigő kimenetei vannak csatlakoztatva; Void beállítás () (// inicializálja az interakciót egy soros porton 9600 serial.begin (9600) sebességgel;) void hurok () (// kezdő késedelem a helyes munkához. Késleltetés (50); // Érték a távoli érzékelőből, és mentse el egy változó unsigned Int távolság \u003d sonar.ping_cm (); // Nyomtassa ki a távolság a serial.print port monitor (távolság); serial.println ("cm");)

Példa egy Ultrahangos Rangerfinder HC SR04 csatlakoztatására egy PIN-kóddal

A HC-SR04 csatlakoztatása az Arduino-hoz egy PIN-kód segítségével hajtható végre. Ez az opció hasznos, ha nagy projektet dolgozol, és nincs szabad csapok. A Csatlakozáshoz csak a TRIGA ECHO névjegyek között kell telepítenie a 2.2K minősítésével, és csatlakoztassa az Arduino-val való kapcsolatot.

#Inlude. #Define pin_ping 12 // pin az Arduino-val összekapcsolt és visszhangzó csapok a #define max_distance 200 // a maximális távolság, hogy képesek vagyunk ellenőrizni (400-500 cm). Newping Sonar (PIN_PING, PIN_PING, MAX_DISTANCE); // a csapok és a maximális üregbeállítás () (serial.begin (9600); // megnyitott protokollt az adatokkal és a 115200 bites / s átviteli frekvenciával.) Void Loop () (késleltetés (50); // 50 ms A generált hullámok közötti késleltetés. 29 ms - A minimális megengedett érték aláírás nélküli Int distancem \u003d szonár.ping (); // Jel létrehozása, az ISS (USA) időtartamának paraméterének fogadása. Serial.Print ("Ping:" ); Serial.print (távolságok / us_roundtrip_cm); // az időparaméter átalakítása a távolsági értékben és a kimenetben (0 megfelel a kimenetnek megengedett határérték) Serial.println ("cm"); )

Rövid következtetések

Az ultrahangos távolsági érzékelők meglehetősen egyetemesek és pontosak, ami lehetővé teszi számukra, hogy a legtöbb amatőr projekthez használják. A cikk a rendkívül népszerű HC SR04 érzékelőt írja le, amely könnyen csatlakoztatható az Arduino-tábla (ehhez azonnal két szabad csapot kell biztosítania, de van egy kapcsolat opció és egy PIN-kód). Számos érzékelő van az érzékelővel való együttműködéshez. ingyenes könyvtárak (A cikk csak az egyiket írja le, újdonságot), de nélkülük is - a belső érzékelővezérlővel való interakció algoritmusa meglehetősen egyszerű, megmutattuk ebben a cikkben.

Alapuló saját tapasztalatAzt állíthatjuk, hogy a HC-SR04 érzékelő egy centiméteren belüli pontosságot mutat 10 cm-ről 2 m távolságra. Rövidebb és hosszú távolságok, erős interferencia lehetséges, ami erősen függ a környező elemektől és a felhasználási módtól. De a legtöbb esetben a HC-SR04 tökéletesen megzavarja munkáját.

HC-SR04 Az egyik leggyakoribb és legolcsóbb robotikus kereső. Lehetővé teszi, hogy mérje meg a távolságokat 2 cm-től 4m-ig (talán több), 0,3-1 cm-es tisztességes pontossággal. Kijáratnál digitális jel, amelynek időtartama arányos az akadályoktól való távolsággal.

Ultrahangos távolságmérő

Ezt az érzékelőt már régóta vásárolták, és szinte elfelejtették a dobozában. De ugyanabban a projekten belül eltávolították a fehér fényt, és a megismertetés alapján, és a voltmérő díja meglehetősen kompakt tartományos kereső.

Ultrahang Ranger HC-SR04

Érzékelő jellemzői:

Táplálkozás - 5V.
Aktuális fogyasztású - kevesebb, mint 2ma
Hatékony megtekintési szög - 15g
Mért távolság - 2 cm - 5m
Pontosság - 3mm
Az érzékelő dokumentációjából

A HC-SR04 működés elve

Működés elve

A modulnak 4 kimenete van, amelyek közül kettő étkezés - föld és + 5V, és két további adat. A modul felmérése a következő módon történik: az impulzust 10 μs időtartamával küldjük el. A tartományosító 8 ultrahangos 40 kHz-es impulzus parcellát generál. Amely, amely a legtöbb felületről tükrözi, térjen vissza, ha nem hallanak az úton. Közvetlenül a jelzés indítása után elkezdünk várni egy válaszjel egy visszhang kimenettel, 150μs-tól 25 ms-ig terjedő időtartamra, ami arányos az objektum távolságával. Pontosabban, az érzékelőtől az akadályoktól és hátra. Ha nincs válasz (az érzékelő nem hallja az echo-t) - akkor a jel visszatér 38 ms hosszúra. Az objektum (akadályok) távolsága a következő egyszerű képlet alapján kerül kiszámításra:

Ha: L a távolság centiméterben az objektumhoz, és F az impulzus hossza az ECHO kimenetén.
Ajánlott felmérési idő az érzékelő 50 ms vagy 20Hz.

A modul első tesztjei egy digitális oszcilloszkóp segítségével végeztek, amely a modulból és a kézikönyvben válaszolt, gyorsan lezárja a + táplálkozás indítását, megpróbálta megkapni a 10 MX impulzust. Fél eseten kiderült [:)].

Tervezés

Az érzékelő közös anóddal van csatlakoztatva, egy kicsit módosított, hogy dolgozzon vele (eltávolította a felesleges osztó kondenzátorral és hozzáadott kimenetet az RA3-tól). A Voltmeter - PIC16888 5 verziójától mikrokontrollert alkalmaztunk, egy rangsoros firmware-rel.

Ultrahangos HC-SR04 Távolsági érzékelő (és hasonló modulok) ultrahangos hullámokat használhat az objektum távolságának meghatározásához.

Általánosságban elmondható, hogy meg kell találnunk a távolságot az objektumhoz, mert maga az érzékelő egyszerűen figyelembe veszi azt az időt, amely eljut, hogy elkapja a visszhangot a rájuk küldött hanghullámokból. Ez így történik:

  1. A modul hanghullámokat küld, ugyanakkor táplálja a feszültséget egy speciális IDU visszhangba.
  2. A modul elkapja a visszavert jelet, és eltávolítja a feszültséget a PIN-kódból.

Ez minden, ami ultrahangos rangsorot tesz. Meg tudjuk határozni a távolságot, mert tudjuk, hogy mennyi időt vesz igénybe a hangból, hogy az utazást a modulról és vissza (azáltal, hogy mennyi ideig tartott a PIN-visszhang feszültség alatt), valamint ismerjük a hangsebességet a levegő. De nem fogunk sokat menni a részletekre, és hagyjuk, hogy Arduino végezze el az összes számítást.

By the way, annak ellenére, hogy az ultrahangos érzékelők működésének elvét ugyanaz, nem mindegyikük ugyanazt a kimenetet eredményezi az IDU visszhangon lévő feszültségnek. Tehát, ha van egy modul, mint a HC-S04, akkor figyeljen a negyedik lépésre, ahol leírják lehetséges problémák, és ellenőrizze, talán a modul a listában van. Ha nincs ott, akkor foglalkoznia kell sajátoddal.

1. lépés: Vasszerelvény a saját kezével

A szerelvény nagyon egyszerű (összegyűjti mindent a feszültségből):

  1. Pár 5V az Arduino-tól VCC PIN-vel a modulon
  2. Csatlakoztassa a GND-t az Arduino-ről GND-vel a modulon
  3. Csatlakoztassa a 7 digitális pólót az Arduino-on a modullal
  4. Párosít digitális modul 8 az ARDUINO-on PIN-ECHO-val a modulon

2. lépés: A HC-SR04 modul programozása

A program eredményeinek megtekintéséhez soros monitorot kell futtatnia az Arduino-n. Ha nem ismeri ezt a funkciót, most itt az ideje megnyitni, és többet megtudhat róla - ez egy nagyszerű dolog, ami segít a kód hibakeresésére. Az Arduino interfészen nézze meg a jobb sarkot, ott talál egy gombot, amely fut a soros monitoron, úgy néz ki, mint egy nagyító, kattintson rá, és a monitor megnyílik (vagy válassza az Eszközök / soros monitor lehetőséget, vagy nyomja meg a Ctrl + gombot Shift + M).

Itt van egy vázlat munkaprogram:

// elején vázlat az aruino -
// meghatározza a konstansokat (a konstansok nem változnak, és ha megpróbálják felülbírálni őket, forduljon a fordítás során)
CONST INT triggerpin \u003d 7; // állandóan létrehozza a "triggerpin" nevet, és hozzárendeli a 7 digitális pólót
CONST INT ECHOPIN \u003d 8; // állandóvá teszi az "Echopin" nevet, és előírja a digitális 8 csapot
// A változók meghatározása (változók változhatnak és általában változhatnak a program során, tartalmazhatnak számított értékeket)
int Időtartam \u003d 0; // létrehoz egy "Időtartam" nevű változót az impulzus által visszaküldött érték tárolásához, kezdetben az érték "0" értékre van állítva
Int távolság \u003d 0; // létrehoz egy változót az érzékelő előtt található objektum távolságaként számított érték tárolására, kezdetben az érték "0"
Void Setup () // Ebben a részben konfigurálhatja a programhoz szükséges díjat és más paramétereket.
{
Serial.begin (9600); // inicializálja a következetes kommunikációt az USB-n keresztül az Arduino és a számítógép között, szükségünk lesz rá
// meghatározza a PINS módjait
Pinmode (triggerpin, kimenet); // "triggerpin" lesz használva a kimenetre, a PIN-kódot a "Határozza meg a változók" szakaszokban
Pinmode (echopin, bemenet); // "echopin" kerül felhasználásra, hogy belépjen, a PIN-kódot a "Határozza meg a változók" szakaszban
) // befejezési beállítás
// mindent, amit fentebb írtak, a program csak egyszer olvassa el - indítás vagy visszaállítás esetén (reset)
Void Loop () // A hitelrész programkódja olvasható és megismétlődik, amíg a tápfeszültség ki van kapcsolva, vagy nem fog visszaállítani
{
Digitalwrite (triggerpin, magas); // az ultrahangos hullámok táplálása a HC-SR04 modulból
Késedelem (5); // kis szünet, szükség van arra, hogy a modulfunkció helyes legyen (csökkentheti ezt az értéket, a többi programom 1-es értéken működik)
Digitalwrite (triggerpin, alacsony); // leállítja a HC-SR04 modulból származó ultrahangos hullámokat
Időtartam \u003d impulzus (echopin, magas); // Különleges funkció, amely lehetővé teszi, hogy meghatározzák az időtartam időtartamát, amelyben a végső visszhang feszültségét a legutóbbi befejezett ultrahangos takarmány-ciklusban szállították
Késedelem (10); // ismét egy kis szünet. A stabilitáshoz szükséges, túl rövid szünet nem ad eredményt
Távolság \u003d (időtartam / 2) / 58; // Transzformációs időtartam a távolságra (az "Időtartam" értékre kerül, 2-re oszlik, majd ezt az értéket 58 ** -kal osztja el ** Centiméterekhez
Késedelem (500); // Egy másik szünet a stabilitáshoz - játszhat az értékkel, de elronthatja a program munkáját, ezért az 500-at alapértelmezés szerint használja
Serial.print (távolság); // elküldi a távolság kiszámított értékét a soros monitorhoz
Serial.println ("cm"); // hozzáadja a "cm" szót a távolságérték után, és fordítja a kocsit a soros monitoron az új sorba
Serial.println (); // hozzáad egy üres karakterláncot a soros monitoron (az egyszerű olvasáshoz)
) // ciklus vége

_________________________________________________

Tehát, miután elolvastam az utasításokat, rájöttem, hogy a program vázlata nem felel meg az egyszerűség megértésének megértéséhez. Ezért ugyanazt a vázlatot írom, könnyű megjegyzésekkel.

// hc-sc04 ultrahangos távolsági érzékelő modul
CONST INT triggerpin \u003d 7; // trigger 7
CONST INT ECHOPIN \u003d 8; // echo 8
int Időtartam \u003d 0; // tárolja az értéket az impulzusból
Int távolság \u003d 0; // tárolja a számított távolság értékét
Void Setup ()
{
Serial.begin (9600);
Pinmode (triggerpin, kimenet); // meghatározza a PASS módokat
Pinmode (echopin, bemenet);
}
Void hurok ()
{
Digitalwrite (triggerpin, magas); // ultrahang küldése
Késedelem (5); // A szükséges parancs konfigurálva van (de nem alacsonyabb, mint 10 mmloscts)
Digitalwrite (triggerpin, alacsony); // modul leállítja az ultrahangot
Időtartam \u003d impulzus (echopin, magas); // meghatározza, hogy mennyi ideig szolgált a feszültség a PIN ECHO-hoz
Késedelem (10); // a szükséges parancs konfigurálva van, de tiszta
Távolság \u003d (időtartam / 2) / 58; // tollal a távolság a CC-ben az objektumhoz
Késedelem (500); // A stabilitás szüneteltetése, a csökkenés megszakíthatja a program menetét, jobb, ha az
Serial.print (távolság); // elküldi a soros monitoron tárolt aktuális értéket
Serial.println ("cm"); // a távolság után azonnal megjeleníti a "cm" szót
Serial.println (); // létrehoz egy üres karakterláncot a soros monitorban (az egyszerű olvasáshoz)
}

Az utasításokhoz fájlokat is alkalmazok.ino

Fájlok

  1. HCSR04BAREBONES.INO - Ez a fájl nagyon kommentált, és tartalmaz néhány információt a HC-SR04 modulról, valamint egy összeszerelési információra.
  2. Barboeslight.ino - modul kis mennyiség Hozzászólások

Itt van a tanácsom. Tudom, hogy a kód működik, de mielőtt a fájlokat az utasításhoz csatolná, mindent átírok, és a soros monitor folyamatosan megmutatta a "0 cm" -t. A probléma az égett modulban volt, és a helyettesítése korrigálta a helyzetet.

Nézd meg, hogyan reagál a program, ha úgy dönt, hogy a késleltetési parancsok értékével játszik. Tapasztalt módon azt találtam, hogy a késleltetési értékek csökkenése vagy a 0-ra való egyenlőség a programot egy nem működő államnak vezetheti.

Miután konfigurálta az eszközt, minden korlátozott a képzeletedre. Ellenőrizheti, hogy a rögzített objektumok ugyanolyan távolságban vannak, és mozdulatlanul maradnak. Akkor használja a monitort, hogy értesítést kapjon, hogy néhány tárgy elhalad az érzékelő, stb

A rendszert arra használták fel, hogy felhasználhassuk, hogy megállapítsuk, hogy az összes objektum az érzékelőn túl van távolítva 60 cm-nél nagyobb távolságra. A projekt három diódát és egy csapást használt. Ha minden elem további 60 cm, zöld dióda égett. Ha valami 60 cm-nél kisebb, zöld dióda gáz, és a piros világít. Ha az objektum egy ideig közel maradt, akkor a második piros dióda világít, és a csikorgás elkezdett szüntelni. Amikor az objektumot 60 cm-en eltávolították, a lelkek összenyomódtak, a vörös diódák Gasley voltak, és a zöld újra világít. Nem akadályozta meg az összes hamis riasztást, de a legtöbb esetben dolgozott, amikor egy madár vagy kíváncsi fehérje repült az érzékelő felett.

4. lépés: Híres problémák

Ha az ultrahangos modulod modelljét ezen a ponton látja, akkor az alábbi levél. Remélem, megtalálja a problémát, és eldöntheti.

  1. US-105.
  2. Dyp-me007tx

US-105 modul

Az Ultrahangos US-105 modul a GPIO kimenetet használja a PIN ECHO-hoz, amely más számításokat jelent a távolság meghatározásához. Ha a GPIO-t visszahúzza az Echo-hoz, a PIN-kódot a feszültség alatt nem tartják a hullám alatt. Ehelyett, ha tükröződő ultrahangot kapunk, egy adott feszültséget a visszhangsejthez szállít, amely arányos az ultrahangos hullám által megkövetelt idővel, hogy menjen és visszatérjen az érzékelőhöz. Ezzel a modultal ez a kód működik:

// Oltrahangos modul kódja US-105 UNIDNED INT ECHOPIN \u003d 2; unsigned int trigpin \u003d 3; aláíratlan hosszú idő_echo_us \u003d 0; // len_mm_x100 \u003d hossz * 100 unsigned hosszú len_mm_x100 \u003d 0; aláíratlan hosszú len_integer \u003d 0; // unsigned int str_fraction \u003d 0; Void Setup () (serial.begin (9600); Pinmode (echopin, bemenet); Pinmode (trigpin, kimenet);) Void Loop () (digitalwrite (trigpin (trigpin, magas); DelingMicroseConds (50); Digitalwrite (Trigpin, Alacsony); ; Time_echo_us \u003d impulzus (echopin, magas); ha ((time_echo_us 1)) (len_mm_x100 \u003d (time_echo_us * 34) / 2; len_integer \u003d len_mm_x100 / 100; len_frakcionum \u003d len_mm_x100% 100; serial.print ("tartomány:"); Serial.print (len_integer, dec); serial.print ("."); Ha (Len_Fraction)< 10) Serial.print("0"); Serial.print(Len_Fraction, DEC); Serial.println("mm"); delay(1000); } // Конец программы

Dyp-me007tx modul

// OLTRASONIC MODUL DYP-ME007TX / * Csatlakozási utasítások * 5V-os utasítások az Arduino-ról a VCC-ről a * GNG modulról az Arduino-ból a GND-ről a * OUT modul modulra a modulról a Digital Pine 7-re Rxpin 7 #define txpin 7 SoftwareSerial myserial (rxpin, txpin); Hosszú mili \u003d 0; Byte mybuffer \u003d (0); Byte bitpos \u003d 0; Void Setup () (serial.begin (9600), myserial.begin (9600);) void hurok () () (bitpos \u003d 0, míg (myserial.available ()) (ha (bitpos< 4) { mybuffer = mySerial.read(); } else break; } mySerial.flush(); mili = mybuffer << 8 | mybuffer; Serial.print("Distance: "); Serial.print(mili / 25.4); Serial.print (" inches"); Serial.println(); delay(500); }

Tetszett a cikket? Oszd meg