- 1 Как подключить ультразвуковой датчик измерения расстояния HC-SR04 к Orange Pi PC, Banana Pi или Raspberry Pi используя WiringOP, BPI-WiringPi или WiringPi соответственно
- 2 Схема подключения датчика движения HC-SR04 к Orange Pi PC, Banana Pi или Raspberry Pi с GPIO на 40 выводов
- 3 Код программы на языке C/C++
- 4 Результат
- 5 Материалы
- 6 Купить HC-SR04 на AliExpress
- 7 Купить Orange Pi PC на Aliexpress
- 8 Похожие записи
Как подключить ультразвуковой датчик измерения расстояния HC-SR04 к Orange Pi PC, Banana Pi или Raspberry Pi используя WiringOP, BPI-WiringPi или WiringPi соответственно
Сегодня мы подключим датчик измерения расстояния HC-SR04 к Orange Pi PC. Использовал апельсинку PC, так как она у меня есть. Но, данный пример можно использовать с тем же успехом на Banana Pi и Raspberry Pi, так что не расстраивайтесь. Для работы с периферией я использую: язык программирования C/C++, Python не нравится, никогда на нём не писал; Code::Blocks IDE и WiringPi. Как всё это правильно установить и настроить можно узнать переходя по ссылкам ниже.
Смотрите ещё:
HC-SR04 — ультразвуковой датчик расстояния
Установка и настройка WiringOP/WiringPi на Orange Pi PC
Установка и настройка BPI-WiringPi/WiringPi на Banana Pi
Установка и настройка Code::blocks на Banana Pi, Orange PI и Raspberry Pi под Ubuntu
Схема подключения датчика движения HC-SR04 к Orange Pi PC, Banana Pi или Raspberry Pi с GPIO на 40 выводов
Сперва разберёмся с GPIO и WiringPi, ибо номера выводов с GPIO не совпадают с номерами в WiringPi.
Сперва выполняем команду в терминале:
sudo gpio readall

В таблице мы видим два столбца: wPi и Physical, т.е. WiringPi и физический.
И так что мы видим: wPi=0, а Physical=11; wPi=1, а Physical=12 и так далее. Для начала я тоже не знал что да как, а потом случайно увидел в данной таблице, что всё очень просто и нету никаких тайн и не надо проверять методом научного тыка.
Для подключения я использовал выводы 12 и 16, питал от 5 В.

Рекомендуется уменьшить напряжение от Trig и делается это очень просто, используя делитель напряжения состоящий из двух резисторов, как указано на картинке ниже. Я же этого не делал, так как включил несколько раз и ничего апельсинке не будет.

Код программы на языке C/C++
#include <iostream>
#include <stdexcept>
#include <stdlib.h>
#include <wiringPi.h>
using namespace std;
float getDistanceCm(int TRIG, int ECHO) {
long ping = 0;
long pong = 0;
float distance = 0;
long timeout = 500000; // 0.5 сек ~ 171 м
// генерирует исключение в случае ошибки при инициализации wiringPi
if (wiringPiSetup() == -1) {
throw logic_error("WiringPi Setup ERROR");
}
// установка вывода TRIG как выход
pinMode(TRIG, OUTPUT);
// установка вывода ECHO как вход
pinMode(ECHO, INPUT);
// генерация импульса длительностью 12 мкс
digitalWrite(TRIG, HIGH);
delayMicroseconds(12);
digitalWrite(TRIG, LOW);
// ждём первый ответ датчика или тайм аут.
while (digitalRead(ECHO) == LOW && micros() < timeout);
// генерирует исключение в случае тайм аута.
if (micros() > timeout) {
throw logic_error("Out of range");
}
ping = micros();
// ждём второй ответ датчика или тайм аут
while (digitalRead(ECHO) == HIGH && micros() < timeout);
// генерирует исключение в случае тайм аута.
if (micros() > timeout) {
throw logic_error("Out of range");
}
pong = micros();
// вычисления расстояний
distance = (float) (pong - ping) * 0.017150;
return distance;
}
int main() {
int TRIG = 1;
int ECHO = 4;
cout << "Подключение дальномера HC-SR04 к Orange Pi PC." << endl;
while(true) {
try {
cout << "растояние = " << getDistanceCm(TRIG, ECHO) << "см" << endl;
} catch(exception& e) {
cout << e.what() << endl;
}
delay(500);
}
return 0;
}
Скачать проект Code::Blocks HC-SR04 Orange Pi PC.tar.gz






















































