Měření vzdálenosti pomocí senzoru Raspberry Pi a HC-SR04 nebo US-015
Prezentované senzory umožňují měření vzdálenosti pomocí ultrazvuku. Senzor vysílá vlnu, která se k ní vrací po odrazu od překážky. Výpočtem času mezi odesláním a přijetím pulzu můžete určit vzdálenost mezi senzorem a objektem.
Budete potřebovat následující položky:
Spojení s Raspberry Pi
Připojte obě zařízení podle uvedené tabulky
GPIO Raspberry Pi | Senzor vzdálenosti |
---|---|
5 V | VCC |
GND | GND |
GPIO 4 | Trig |
GPIO 1 | Echo |
Schéma zapojení ultrazvukového senzoru s Raspberry Pi.
Servis
Abychom mohli použít GPIO piny na Raspberry Pi, potřebujeme knihovnu, která nám to umožní. Pro tento účel používáme wiringPi. Popis toho, jak stáhnout a nainstalovat jej lze nalézt zde. Stačí zkopírovat následné příkazy. Nakonec k ověření instalace:
gpio readall
Po tomto příkazu bychom měli vidět níže uvedenou tabulku:
Nyní napíšeme jednoduchý program. Vytvoříme soubor us_015.cpp
nano us_015.cpp
Soubor by měl obsahovat následující program:
#include#include #include pomocí jmenného prostoru std; int CM; dlouho; int trig = 4; int echo = 1; void measure_odleglosci (); int pulseIn (int pin, int level); int main (neplatný) { wiringPiSetup (); pinMode (trig, OUTPUT); pinMode (echo, INPUT); cout << "Test snímače vzdálenosti" << endl << endl; zatímco (1) { distance_measure (); // měření vzdálenosti cout << "Vzdálenost:"; // zobrazí výsledky na obrazovce ve smyčce každých 200 ms cout << CM << "cm" << endl; zpoždění (200); } návrat 0; } void measurementment_odleglosci () { digitalWrite (trig, HIGH); // nastavení vysokého stavu na 10 uS - impuls $ delayMicroseconds (10); digitalWrite (trig, LOW); TIME = pulseIn (echo, HIGH); CM = TIME / 58; // šířka odraženého pulzu v uS děleno p $} int pulseIn (int pin, int level) // funkce měřící čas k dosažení daného $ {struct timeval tn, t0, t1; dlouhé mikroskopy; gettimeofday (& t0, NULL); mikro = 0; while (digitalRead (pin)! = level) {gettimeofday (& tn, NULL); if (tn.tv_sec> t0.tv_sec) micros = 1000000L; else mikro = 0; micros + = (tn.tv_usec - t0.tv_usec); pokud (mikro> 10 000) vrátí 0; } gettimeofday (& t1, NULL); while (digitalRead (pin) == level) {gettimeofday (& tn, NULL); if (tn.tv_sec> t0.tv_sec) micros = 1000000L; else mikro = 0; micros = micros + (tn.tv_usec - t0.tv_usec); pokud (mikro> 10 000) vrátí 0; } if (tn.tv_sec> t1.tv_sec) micros = 10 000 000L; else mikro = 0; micros = micros + (tn.tv_usec - t1.tv_usec); zpětné mikroskopy; }
Poté uložte změny do souboru a zavřete jej. K sestavení vytvořeného souboru použijeme příkaz:
g ++ -Wall -o us_015.o us_015.cpp -lwiringPi
Provoz programu
Pro výpočet vzdálenosti k objektu je doba odezvy dělena 58 (podle dokumentace). Proč tolik? Tato hodnota je odvozena ze vzorce:
ČAS / [1 / (0,34 / 2) / 10]
- hodnota v hranatých závorkách je 58:
- 0,34 - rychlost vlny vm / ms (340 m / s) dělená 2 (protože vlna obíhala oběma směry).
- Navíc vše dělitelné 10 převádí milimetry na centimetry
Program spusťte pomocí následujícího příkazu:
sudo ./us_015.o
Výsledek programu lze zobrazit na monitoru:
Screenshot monitoru.