Подключение дальномера к Orange Pi / Raspberry Pi и им подобным

Берём апельсинку и ултразвуковой дальномер HC-SR04. Если апельсинки у Вас нет, ничего страшного, подойдёт и малинка (Raspberry Pi).
Сразу хочу отметить, что номера GPIO и WiringPi отличаются. Чтобы понять что и куда подключать, введём команду:

sudo gpio readall


Результат на картинке ниже. Там Вы увидите 2 столба: wPi и Physical, то есть WiringPi и реальный.



В результате wPi=0, а Physical=11; wPi=1, а Physical=12 и тому подобное. Чтобы подключить датчик, я воспользовался пинами 12 и 16, питание, конечно, 5 Вольт.



Советую сделать вольтаж по-меньше от Trig. Для этого поставьте делитель напряжение с двумя резисторами. Смотрите следующую картинку.



Но если Вы не поставите делитель, работать тоже будет, я тестил на своей Orange Pi.


Далее исходники программы на С/С++.


#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;
}


Если Вы всё сделали правильно, то должны увидеть это:




07.09.2019 в 23:39, Просмотров: 5203

дальномер






Предложить пост

Поиск



По всему сайту
По тэгам
По тэгам и заголовкам

Боковое меню

  • Карта сайта
  • RSS-каналы
  • Обратная связь
  • Пользователи



    Рейтинг@Mail.ru