Вы хотите точно и легко измерять расстояния? Не смотрите дальше! В этой статье блога мы исследуем увлекательный мир расчета расстояний с помощью ультразвуковых датчиков. Являетесь ли вы энтузиастом робототехники, любителем электроники или просто интересуетесь, как работают эти датчики, мы предоставим вам всю необходимую информацию. Мы углубимся в различные методы и предоставим примеры кода, которые помогут вам начать работу. Итак, давайте начнем это звуковое путешествие!
Метод 1: измерение импульса/времени пролета (ToF)
Метод импульса/времени пролета — один из наиболее распространенных способов расчета расстояний с помощью ультразвуковых датчиков. Он включает в себя измерение времени, необходимого ультразвуковому импульсу для прохождения от датчика до целевого объекта и обратно. Вот фрагмент кода в Arduino:
const int trigPin = 2;
const int echoPin = 3;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
int distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
delay(1000);
}
Метод 2: измерение фазы
Метод измерения фазы использует сдвиг фазы ультразвуковой волны для определения расстояния. Измерив разность фаз между передаваемым и принимаемым сигналами, мы можем рассчитать расстояние до целевого объекта. Вот пример использования библиотеки NewPing с Arduino:
#include <NewPing.h>
#define TRIGGER_PIN 2
#define ECHO_PIN 3
#define MAX_DISTANCE 200
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
Serial.begin(9600);
}
void loop() {
delay(50);
unsigned int distance = sonar.ping_cm();
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
}
Метод 3: Частотная модуляция (FM) Непрерывная волна (CW)
Метод непрерывной волны FM включает в себя непрерывную передачу ультразвуковой волны на изменяющейся частоте и анализ возвращенного сигнала для определения расстояния. Этот метод более сложен, но может обеспечить более высокую точность. Вот пример использования Python и библиотеки RPi.GPIO на Raspberry Pi:
import RPi.GPIO as GPIO
import time
TRIGGER_PIN = 23
ECHO_PIN = 24
GPIO.setmode(GPIO.BCM)
GPIO.setup(TRIGGER_PIN, GPIO.OUT)
GPIO.setup(ECHO_PIN, GPIO.IN)
def distance_measurement():
GPIO.output(TRIGGER_PIN, True)
time.sleep(0.00001)
GPIO.output(TRIGGER_PIN, False)
pulse_start = time.time()
while GPIO.input(ECHO_PIN) == 0:
pulse_start = time.time()
pulse_end = time.time()
while GPIO.input(ECHO_PIN) == 1:
pulse_end = time.time()
pulse_duration = pulse_end - pulse_start
distance = pulse_duration * 17150
distance = round(distance, 2)
return distance
try:
while True:
dist = distance_measurement()
print("Distance: {} cm".format(dist))
time.sleep(1)
finally:
GPIO.cleanup()
В этой статье мы рассмотрели три популярных метода расчета расстояния с помощью ультразвуковых датчиков. Независимо от того, выберете ли вы метод измерения импульса/времени пролета, измерения фазы или метод непрерывной волны FM, каждый подход имеет свои преимущества и может быть реализован с использованием различных микроконтроллеров или плат разработки, таких как Arduino и Raspberry Pi. Итак, приступайте к экспериментам с ультразвуковыми датчиками для точного измерения расстояний в ваших проектах!