Ultrasonic shield

Shield slouží k měření vzdálenosti pomocí odrazu akustického signálu od měřeného objektu. Shield využívá známý ultrazvukový senzor HYSRF04 od čehož se odvíjí i vlastnosti měřiče. Rozsah detekce sje udáván v rozmezí 2 až 400 cm, v praxi je zejména spodní hranice posunutá výše (cca 20 cm). Závisí od softwarevé implementace řídicího programu. Detekční úhel je měnší než 15 stupňů.

Hardware

Zapojení X konektoru

X01

X03

X05

X07

X09

X11

X13

X15

USR

VBUS

ECHO

X00

X02

X04

X06

X08

X10

X12

X14

3V3

GND

TRIG

3.3 V

GND

  • ECHO - pin pro potvrzení spuštění měření a detekci jejího dokončení

  • TRIG - pin pro spuštění měření

  • 5V - detekce 5 V napájení ze step-up regulátoru

  • 3V - detekce 3.3 V napájení pro step-up regulátor

Schema

Software

#include "byzance.h"

/*
* Test_ultrazvuk
* napajeni MUSI byt +5V0, na +3V3 to nefunguje
*/

// seriovka
Serial pc(SERIAL_TX, SERIAL_RX);

// ultrazvuk TRIG na X06
DigitalOut trig(X02);

// ultrazvuk ECHO na X04 (jsou tam pripadne i timery T3CH3, T1CH2N)
DigitalIn echo(X03);

// timer
Timer timer;

DigitalOut ledRed(X00);
DigitalOut ledGrn(X01);

// vzdalenost v cm
int distance_cm;

bool measuring = 0;

int getDistance(void);


void loop() {

distance_cm = getDistance();

if(distance_cm > 400 || distance_cm < 1){
pc.printf("Out of range\n");
} else {
pc.printf("Distance = %d cm\n", distance_cm);
}

Thread::wait(1000);
}


/**
* Vysle 10us pulz na TRIG a meri sirku pulzu vracenou na ECHO
* @param none
* @return prepocitana vzdalenost v cm
*
*/
int getDistance(void){

// 10 microsecond pulse
trig = 1;
wait_us(10);
trig = 0;

// reset timer
timer.reset();

while(!echo){
// waiting too long for rising edge
if(timer.read_ms()>100) return 0;
}

// reset timer
timer.reset();

while(echo){
// waiting too long for falling edge
if(timer.read_ms()>100) return 0;
}
//timer.stop();

return timer.read_us()/58; // prepocet na vzdalenost v cm
}

Last updated