Ultragarsinis atstumo matuoklis (HC-SR04)

Veikia aido principu. Paleidžia 20 mikrosekundžių (1/1 000 000 sekundės dalis) ultragarso impulsą ir klausosi kol išgirs aidą. Tada išmatuoja kiek praėjo laiko kol išgirdo aidą ir tada suskaičiuoja atstumą. 1 cm garsas pirmyn atgal keliauja 58 mikrosekundes.

#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
 
/*
gcc -Wall -o ultra ultra.c -lwiringPi -std=c11
sudo ./ultra
*/
 
const int TRIG = 12; //pin for trigering sound
const int ECHO = 16; //pin for listening for echo
 
void setup() {
    //wiringPiSetup();
    wiringPiSetupGpio();
    pinMode(TRIG, OUTPUT);
    pinMode(ECHO, INPUT);
 
    //TRIG pin must start LOW
    digitalWrite(TRIG, LOW);
    delay(100);
}
 
long travelTime2;
 
double getCM() {
    //Send trig pulse
    digitalWrite(TRIG, HIGH);
    delayMicroseconds(20);
    digitalWrite(TRIG, LOW);
 
    //Wait for echo start
    while(digitalRead(ECHO) == LOW);
 
    //Wait for echo end
    long startTime = micros();
    while(digitalRead(ECHO) == HIGH);
    long travelTime = micros() - startTime;
    travelTime2 = travelTime;
 
    double distance = travelTime / 58.0; //Get distance in cm
 
    return distance;
}
 
int main(void) {
    printf("Hit Ctrl+c to stop\n");
    setup();
    while (1) {
        printf("Distance: %4.0fcm, Travel Time: %6d microseconds \r", getCM(), (int)travelTime2);  fflush(stdout);
    }
    return 0;
}

Demonstracija kaip veikia gyvai: