Obsah:
2025 Autor: John Day | [email protected]. Naposledy zmenené: 2025-01-13 06:58
V tomto malom projekte by som vám chcel ukázať, ako môžete doma s Arduinom vytvoriť jednoduchý radar. Na internete je veľa podobných projektov, ale všetky používajú na meranie vzdialenosti ultrazvukový senzor. V tomto projekte používam na meranie vzdialenosti infračervený senzor.
Mojím cieľom je vytvoriť s ním veľmi jednoduchý a lacný systém LIDAR a implementovať mapovacie zariadenie.
Zásoby
- Arduino (použil som Maple Mini)
- Ostrý snímač vzdialenosti (použil som Sharp GP2Y0A02YK0F)
- Mikro servo (9 g)
- Breadboard, drôty
- Voliteľné: odpor 4,7 k, kondenzátor 100 nF
Krok 1: Ultrazvukový VS infračervený snímač
Hlavný rozdiel medzi ultrazvukovými a infračervenými snímačmi vzdialenosti spočíva v tom, že ultrazvukový snímač meria vzdialenosť v širšom rozsahu. Preto nie je schopný presne lokalizovať polohu prekážky. To znamená, že meria vzdialenosť najbližšieho objektu, ktorý sa nachádza v rozsahu uhlov ~ +-30 °.
To samozrejme neznamená, že snímač Sharp je lepší. Niekedy môže byť táto vlastnosť veľmi užitočná (napríklad ju používajú drony na meranie výšky od zeme). Správna voľba úplne závisí od požiadaviek vášho projektu.
Krok 2: Schéma
Spojenie medzi časťami je veľmi jednoduché. Vyberte výstup PWM a analógový vstup na doske Arduino a k týmto kolíkom pripojte snímače vzdialenosti Servo a Sharp. Na tento účel som použil nasledujúce kolíky:
- PA0: Analógový vstup pre snímač vzdialenosti Sharp
- PA9: PWM výstup pre servo
Infračervený snímač Sharp môže mať niekedy hlučný výstup, preto naň musíte vložiť jednoduchý dolnopriepustný filter. Na zníženie šumu na analógovom kolíku som použil odpor 4,7 k a kondenzátor 100 nF. Okrem toho som tiež filtroval nameranú hodnotu v kóde tak, že som ju niekoľkokrát prečítal a vypočítal priemer.
Krok 3: Charakteristika snímača
Použitý infračervený snímač vzdialenosti má bohužiaľ nelineárnu charakteristiku. To znamená, že na získanie vzdialenosti nestačí vynásobiť nameranú hodnotu ADC konštantnou hodnotou a pridať k nej ďalšiu konštantnú hodnotu.
Napriek tomu, že údajový list senzora poskytuje charakteristiku, radšej ho zmeriam sám v konkrétnom projekte (môže to závisieť od použitého napätia). Za týmto účelom som urobil páry z nameranej hodnoty ADC a vzdialenosti na každých 10 cm. (Môj senzor dokázal merať správnu vzdialenosť od 12 cm).
Tieto páry som použil v kóde na získanie správnej vzdialenosti pomocou lineárnej interpolácie.
Na konci dokumentu nájdete jednoduchý kód Arduino na meranie hodnoty ADC počas charakteristického merania.
Krok 4: Sériová komunikácia
Na odoslanie nameraných hodnôt uhlovej vzdialenosti do PC som použil sériovú komunikáciu. Pretože musím odosielať viac bajtov a rôzne typy správ, navrhol som jednoduchý komunikačný protokol.
Tento prokotol umožňuje genericky definovať rôzne typy správ. V tomto projekte som použil 2 typy správ:
- Parametre: Používa sa na odosielanie parametrov do PC aplikácie, definovaných na Arduine ako maximálna vzdialenosť a počet prekážok v kole.
- Prekážka: Používa sa na odoslanie zistenej prekážky. Je identifikovaný uhlom serva a meranou vzdialenosťou. Pozícia x-y bude vypočítaná počítačovou aplikáciou.
Krok 5: Aplikácia Qt
Aby som komunikoval s Arduinom a kreslil namerané body ako radar, vytvoril som aplikáciu pre PC v Qt (C ++). Prijíma niektoré parametre (definované na Arduine) a body nameranej vzdialenosti.
Môžete si tiež stiahnuť aplikáciu a jej zdrojový kód.
Krok 6: Zdrojový kód Arduino
Niektoré paremetre v hornej časti kódu môžete prispôsobiť pomocou makier.
Upozorňujeme, že ak zmeníte charakteristiku snímača vzdialenosti Sharp, budete musieť upraviť hodnoty poľa distAdcMap !
- InfraRadar.c: Kód radaru. Skopírujte ho a prilepte do svojho projektu Arduino.
- InfraRadarMeasurement.c: Kód pre charakteristické meranie. Skopírujte ho a prilepte do svojho projektu Arduino. Na kontrolu hodnôt ADC použite sériovú konzolu.