Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
V tomto malém projektu bych vám chtěl ukázat, jak můžete s Arduinem vytvořit jednoduchý radar doma. Na internetu je mnoho podobných projektů, ale všechny používají k měření vzdálenosti ultrazvukový senzor. V tomto projektu používám pro měření vzdálenosti infračervený senzor.
Mým cílem je vytvořit s ním velmi jednoduchý a levný systém LIDAR a implementovat mapovací zařízení.
Zásoby
- Arduino (použil jsem Maple Mini)
- Ostrý snímač vzdálenosti (použil jsem Sharp GP2Y0A02YK0F)
- Micro Servo (9g)
- Breadboard, dráty
- Volitelně: odpor 4,7 k, kondenzátor 100 nF
Krok 1: Ultrazvukový VS infračervený senzor
Hlavní rozdíl mezi ultrazvukovými a infračervenými senzory vzdálenosti spočívá v tom, že ultrazvukový senzor měří vzdálenost v širším rozsahu. Proto není schopen přesně lokalizovat polohu překážky. To znamená, že měří vzdálenost nejbližšího objektu, který se nachází v rozsahu úhlu ~ +-30 °.
Samozřejmě to neznamená, že je snímač Sharp lepší. Někdy může být tato vlastnost velmi užitečná (například ji používají drony k měření výšky od země). Správná volba zcela závisí na požadavcích vašeho projektu.
Krok 2: Schéma
Spojení mezi díly je velmi jednoduché. Vyberte výstup PWM a analogový vstup na desce Arduino a k těmto kolíkům připojte snímače vzdálenosti Servo a Sharp. Za tímto účelem jsem použil následující kolíky:
- PA0: Analogový vstup pro snímač vzdálenosti Sharp
- PA9: PWM výstup pro servo
Někdy může mít Sharp IR senzor hlučný výstup, proto na něj musíte vložit jednoduchý nízkoprůchodový filtr. Ke snížení šumu na analogovém pinu jsem použil odpor 4,7k a kondenzátor 100nF. Kromě toho jsem také filtroval naměřenou hodnotu v kódu tím, že jsem ji několikrát přečetl a vypočítal průměr.
Krok 3: Charakteristika senzoru
Použitý infračervený snímač vzdálenosti má bohužel nelineární charakteristiku. To znamená, že k získání vzdálenosti nestačí vynásobit naměřenou hodnotu ADC konstantní hodnotou a přidat k ní další konstantní hodnotu.
Ačkoli datový list senzoru poskytuje charakteristiku, dávám přednost tomu, abych to měřil sám v konkrétním projektu (mohlo by to záviset na použitém napětí). Za tímto účelem jsem vytvořil páry z naměřené hodnoty ADC a vzdálenosti na každých 10 cm. (Můj senzor dokázal změřit správnou vzdálenost od 12 cm).
Tyto dvojice jsem v kódu použil k získání správné vzdálenosti pomocí lineární interpolace.
Na konci dokumentu najdete jednoduchý kód Arduino pro měření hodnoty ADC během charakteristického měření.
Krok 4: Sériová komunikace
K odeslání naměřených hodnot úhlové vzdálenosti do PC jsem použil sériovou komunikaci. Protože musím odeslat více bajtů a různé typy zpráv, navrhl jsem jednoduchý komunikační protokol.
Tento procotol umožňuje definovat různé typy zpráv obecným způsobem. V tomto projektu jsem použil 2 typy zpráv:
- Parametry: Používá se k odesílání parametrů do PC aplikace, definované na Arduinu jako maximální vzdálenost a počet překážek v kole.
- Překážka: Používá se k odeslání detekované překážky. Je identifikován úhlem serva a měřenou vzdáleností. Pozice x-y bude vypočítána počítačovou aplikací.
Krok 5: Aplikace Qt
Pro komunikaci s Arduinem a kreslení naměřených bodů jako radar jsem vytvořil PC aplikaci v Qt (C ++). Přijímá některé parametry (definované na Arduinu) a body změřené vzdálenosti.
Můžete si také stáhnout aplikaci a její zdrojový kód.
Krok 6: Zdrojový kód Arduino
Některé paremetry v horní části kódu můžete přizpůsobit pomocí maker.
Pamatujte, že pokud změníte charakteristiku snímače vzdálenosti Sharp, budete muset upravit hodnoty pole distAdcMap !
- InfraRadar.c: radarový kód. Zkopírujte a vložte do projektu Arduino.
- InfraRadarMeasurement.c: Kód pro charakteristické měření. Zkopírujte a vložte do projektu Arduino. Pomocí sériové konzoly zkontrolujte hodnoty ADC.