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: