Navrhněte zařízení pro měření vzdálenosti s modulem HC-SR04. Implementujte korekci rychlosti zvuku v závoslosti na teplotě okolí s využitím vnitřního teplotního čidla mikrokontroléru. Dle potřeby doplňte číslicovou filtraci výsledků.
Ultrazvukový modul HC-SR04 umožňuje bezkontaktní měření vzdálenosti v rozsahu 2cm - 400cm s přesností dosahující 3mm. Modul obsahuje ultrazvukový vysílač, přijímač a řídící obvod. Spuštění měření se provádí převedením 10us řídícího pulzu. Modul automaticky vyšle osm 40kHz pulzů a následně detekuje odražené pulzy. Po detekci modul předá informaci o délce trvání návratu vyslaných pulzů v podobě vysoké úrovně o stejné délce trvání jako návrat pulzů na výstup. Z doby trvání a z rychlosti zvuku poté vypočítáme výslednou vzdálenost.
Obr.1 Modul HC-SR04
Protože na použité vývojové desce chybí senzor teploty byl použit senzor externí. Pro tento účel byl použit modul se senzorem BOSCH BMP180. Tento modul dokáže měřit jak teplotu, tak i barometrický tlak. Měření barometrického tlaku se dá využít například k měření vertikálního stoupání. Naměřené údaje o teplotě a barometrickém tlaku jsou poté posílány přes I2C sběrnici. Tento modul dosahuje přesnosti až na 1°C.
Obr.2 Modul BOSCH BMP180
Jako řídící obvod byl použit vývojový kit FRDM-KL25Z od firmy NXP, na kterém je osazen 32-bitový mikrokontrolér Kinetis MKL25Z128 od firmy Freescale Semiconductor. Takt tohoto mikrokontroléru je 48 MHz. Tento mikrokontrolér je také použit pro komunikaci s počítačem.
Obr. Vývojový kit FRDM-KL25Z
Moduly byly pomocí vodičů připojeny k vývojové desce, včetně napájecích vodičů. Není tedy potřeba externí napájení. Toto zapojení bylo zvoleno kvůli využití hardwarové podpory komunikačního rozhraní I2C. Zapojení komunikačních vodičů je následující:
HC-SR04 ⇔ FRDM-KL25Z
TRIG ——— PTA13 (PWM)
ECHO ——– PTD5 (PWM)
BOSCH BMP180 ⇔ FRDM-KL25Z
SCL ——————— PTE1 (SLC I2C1)
SDA ——————— PTE0 (SDA I2C1)
Program byl napsán ve vývojovém prostředí https://developer.mbed.org/. Toto prostředí bylo použito, protože je zde několik dostupných knihoven pro každý použitý modul.
Ve funkci main dochází napřed k inicializaci proměnných potřebných. Poté dochází v nekonečné smyčce k postupnému čtené dat z obou modulů a následného výpočtu vzdálenosti a filtraci. Naměřená data se posílají skrz rozhraní USB do počítače.
int main(void) { BMP180 bmp180(PIN_SDA,PIN_SCL); bmp180.Initialize(); HCSR04 distance_sensor(TRIG_PIN, ECHO_PIN); float pressure; float temp; float echo_time_us; float distance; float dis_filter = 0.1; float v; float lamda = 0.9; while(1) { bmp180.ReadData(&temp,&pressure); //čtení teploty a tlaku echo_time_us = (float)distance_sensor.echo_duration(); //zjištění doby návratu pulzů v us v = 331.57+(0.607*temp); //výpočet rychlosti zvuku distance = ((0.001*echo_time_us)*v)/2; //výpočet vzdálenosti dis_filter = lamda*dis_filter+((1-lamda)*distance); //filtrace naměřených hodnot serial.printf("Vzdalenost: %8.2f mm \r\n", dis_filter); //odeslání do PC } }
Tato funkce slouží k obsluze modulu HC-SR04. Jelikož tento modul obsahuje vlastní řídící obvod je potřeba pouze přivést na vstup startovací pulz o délce 10us a poté změřit výstupní pulz. To lze udělat za použití vnitřního časovače.
long HCSR04::echo_duration() { timer.reset(); //resetování timeru z předchozího měření trig=0; // nulování Trig pinu wait_us(2); // wait trig=1; // nastavení Trig pinu wait_us(10); trig=0; // nulování Trig pinu while(!echo); // čekání na start výstupního pulzu timer.start(); //spusť timer while(echo); //čekej dokud neskončí výstupní pulz timer.stop(); //zastav timer return timer.read_us(); //vrať hodnotu timeru }
Na následujícím videu je vidět ukázka funkce proměření vzdálenosti.
Cílem projektu bylo realizovat ultrazvukové měření vzdálenosti s pomocí vývojového kitu FRDM-KL25Z, modulu pro ultrazvukové měření vzdálenosti HC-SR04 a teplotního čidla BOSCH BMP180. Všechny body zadání se podařilo splnit a měření vzdálenosti ultrazvukem s korekcí rychlosti šíření zvuku pomocí teploty je plně funkční. Dalšími možnostmi rozvoje projektu jsou například napsaní obslužné aplikace pro počítač, či přidání zobrazovacího displeje. Zařízení by se tak obešlo bez použití PC.
— Jaroslav Kvasnička 2016/11/25 20:29