V tomto tutoriálu budeme diskutovat a navrhnout obvod pro měření vzdálenosti. Tento obvod byl vyvinut propojením ultrazvukového senzoru „HC-SR04“ s mikrokontrolérem AVR. Tento senzor používá techniku zvanou „ECHO“, což je něco, co získáte, když se zvuk odrazí zpět po nárazu na povrch.
Víme, že zvukové vibrace nemohou pronikat pevnými látkami. Co se tedy stane, když zdroj zvuku generuje vibrace, cestuje vzduchem rychlostí 220 metrů za sekundu. Tyto vibrace, když se setkají s naším uchem, je popisujeme jako zvuk. Jak již bylo řečeno, tyto vibrace nemohou projít pevnými látkami, takže když dopadnou na povrch jako zeď, odrazí se zpět stejnou rychlostí ke zdroji, kterému se říká echo.
Ultrazvukový senzor „HC-SR04“ poskytuje výstupní signál úměrný vzdálenosti na základě echa. Senzor zde generuje zvukové vibrace v ultrazvukovém rozsahu po spuštění, poté čeká na návrat zvukových vibrací. Nyní na základě parametrů, rychlosti zvuku (220 m / s) a času potřebného k tomu, aby se ozvěna dostala ke zdroji, poskytuje výstupní puls úměrný vzdálenosti.
Jak je znázorněno na obrázku, nejdříve musíme spustit senzor pro měření vzdálenosti, což je VYSOKÝ logický signál na spouštěcím kolíku senzoru po dobu delší než 10uS, poté je senzorem zaslána zvuková vibrace, po ozvěně poskytuje senzor signál na výstupním kolíku, jehož šířka je úměrná vzdálenosti mezi zdrojem a překážkou.
Tato vzdálenost se vypočítá jako vzdálenost (v cm) = šířka pulzního výstupu (v uS) / 58.
Zde musí být šířka signálu zachycena v násobcích uS (mikrosekunda nebo 10 ^ -6).
Požadované komponenty
Hardware: ATMEGA32, Napájení (5v), AVR-ISP PROGRAMÁTOR, JHD_162ALCD (16x2LCD), kondenzátor 1000uF, rezistor 10KΩ (2 kusy), snímač HC-SR04.
Software: Atmel studio 6.1, progisp nebo flash magic.
Schéma zapojení a pracovní vysvětlení
Zde používáme PORTB pro připojení k datovému portu LCD (D0-D7). Každý, kdo nechce pracovat s FUSE BITS v ATMEGA32A, nemůže používat PORTC, protože PORTC obsahuje speciální typ komunikace, který lze deaktivovat pouze změnou FUSEBITS.
V okruhu pozorujete, že jsem vzal pouze dva ovládací piny, což dává flexibilitu lepšího porozumění. Kontrastní bit a READ / WRITE se často nepoužívají, aby mohly být zkratovány na zem. LCD se tak dostane do režimu nejvyššího kontrastu a čtení. Abychom mohli odpovídajícím způsobem odesílat znaky a data, musíme pouze ovládat piny ENABLE a RS.
Připojení, která se provádí pro LCD, jsou uvedena níže:
PIN1 nebo VSS k zemi
PIN2 nebo VDD nebo VCC na + 5V napájení
PIN3 nebo VEE k zemi (poskytuje maximální kontrast nejlepší pro začátečníky)
PIN4 nebo RS (výběr registru) na PD6 uC
PIN5 nebo RW (čtení / zápis) na zem (přepnutí LCD do režimu čtení usnadňuje uživateli komunikaci)
PIN6 nebo E (povolit) na PD5 uC
PIN7 nebo D0 až PB0 uC
PIN8 nebo D1 až PB1 uC
PIN9 nebo D2 až PB2 uC
PIN10 nebo D3 až PB3 uC
PIN11 nebo D4 až PB4 uC
PIN12 nebo D5 až PB5 uC
PIN13 nebo D6 až PB6 uC
PIN14 nebo D7 až PB7 uC
V obvodu, který vidíte, jsme použili 8bitovou komunikaci (D0-D7), není to však povinné a můžeme použít 4bitovou komunikaci (D4-D7), ale se 4bitovým komunikačním programem se stává trochu složitější. Jak je znázorněno ve výše uvedené tabulce, připojujeme 10 pinů LCD k řadiči, ve kterém 8 pinů jsou datové piny a 2 piny pro ovládání.
Ultrazvukový senzor je čtyřkolíkové zařízení, PIN1- VCC nebo + 5V; PIN2-TRIGGER; PIN3 - ECHO; PIN4 - UZEMNĚNÍ. Spouštěcí kolík je místo, kde dáme spoušť, abychom řekli senzoru, aby změřil vzdálenost. Echo je výstupní pin, kde dostaneme vzdálenost ve formě šířky pulzu. Echo pin je zde připojen k řadiči jako externí zdroj přerušení. Abychom dostali šířku výstupního signálu, je echo pin senzoru připojen k INT0 (přerušení 0) nebo PD2.
1. Spuštění senzoru vytažením spouštěcího kolíku alespoň na 12uS.
2. Jakmile se ozvěna zvýší, dostaneme externí přerušení a spustíme čítač (umožňující čítač) v ISR (Interrupt Service Routine), který se provede ihned po spuštění přerušení.
3. Jakmile echo opět poklesne, vygeneruje se přerušení, tentokrát zastavíme čítač (deaktivujeme čítač).
4. Takže pro pulz vysoké až nízké na echo pin jsme spustili čítač a zastavili ho. Tento počet je aktualizován do paměti pro získání vzdálenosti, protože nyní máme v počtu šířku ozvěny.
5. Budeme dělat další výpočty v paměti, abychom dostali vzdálenost v cm
6. Vzdálenost se zobrazuje na 16x2 LCD displeji.
Pro nastavení výše uvedených funkcí nastavíme následující registry:
Výše uvedené tři registry mají být nastaveny odpovídajícím způsobem, aby nastavení fungovalo, a budeme o nich krátce diskutovat, MODRÁ (INT0): tento bit musí být nastaven vysoko, aby se umožnilo externí přerušení0, jakmile je tento pin nastaven, budeme cítit logické změny na PIND2 kolíku.
BROWN (ISC00, ISC01): tyto dva bity jsou upraveny pro příslušnou logickou změnu na PD2, kterou lze považovat za přerušení.
Jak již bylo řečeno, potřebujeme přerušení, abychom zahájili počítání a zastavili ho. Takže nastavíme ISC00 jako jeden a dostaneme přerušení, když je logika LOW až HIGH na INT0; další přerušení, když je logika HIGH to LOW.
ČERVENÁ (CS10): Tento bit slouží pouze k povolení a zakázání čítače. I když to funguje spolu s dalšími bity CS10, CS12. Neděláme zde žádné přednastavení, takže si s nimi nemusíme dělat starosti.
Zde je třeba si pamatovat několik důležitých věcí:
Používáme vnitřní hodiny ATMEGA32A, které jsou 1MHz. Žádné přednastavení zde, neděláme rutinu generování přerušení porovnávání shody, takže žádné složité nastavení registru.
Hodnota počítání po počítání je uložena v 16bitovém registru TCNT1.
Zkontrolujte také tento projekt pomocí arduino: Měření vzdálenosti pomocí Arduina
Vysvětlení programování
Práce senzoru pro měření vzdálenosti je vysvětlena krok za krokem v níže uvedeném programu C.
#include // header to enable data flow control over pins #define F_CPU 1000000 // telling controller Crystal frequency attached #include