Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2016:sr04-meas

Ultrazvukové měření vzdálenosti

Zadání

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ů.


Hardware

HC-SR04

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.

https://microcontrollerelectronics.com/distance-sensing/

  Obr.1 Modul HC-SR04

BOSCH BMP180

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.

http://www.chinalctech.com/index.php?_m=mod_product&_a=view&p_id=686

  Obr.2 Modul BOSCH BMP180

FRDM-KL25Z

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.

https://developer.mbed.org/platforms/KL25Z/

  Obr. Vývojový kit FRDM-KL25Z

Zapojení

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)


Software

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.

Funkce main

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
 
    }
}

Funkce echo_duration

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
 
}

Ukázkové video

Na následujícím videu je vidět ukázka funkce proměření vzdálenosti.


Závěr

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

2016/sr04-meas.txt · Poslední úprava: 2016/11/30 20:26 autor: Jaroslav Kvasnička