определения дистанции между двумя объектами

Андрей152
Offline
Зарегистрирован: 26.12.2020

Добрый день уважаемые гуру и форумчане.

Я далёк от программирования, но потребовалось некое оборудование для определения дистанции между двумя объектами. Я решил попробовать при помощи ардуино и радиомодулей сваять такое простенькое устройство.

Поблуждав по интернету и различным сообществам конкретики так и не нашёл. Может быть здесь мне что-то подскажут?

Что я использовал:

Передатчик: Ардуино про мини, радиомодуль. Светодиод установлен в разрыв для визуального наблюдения такта исходящего сигнала.

Использованный программный код:

#include <iarduino_RF433_Transmitter.h>                   // Подключаем библиотеку для работы с передатчиком FS1000A

iarduino_RF433_Transmitter radio(2);                     // Создаём объект radio для работы с библиотекой iarduino_RF433, указывая номер вывода к которому подключён передатчик

int                        data[100];                       // Создаём массив для передачи данных

void setup(){

    radio.begin();                                        // Инициируем работу передатчика FS1000A (в качестве параметра можно указать скорость ЧИСЛО бит/сек, тогда можно не вызывать функцию setDataRate)

    radio.setDataRate     (i433_1KBPS);                   // Указываем скорость передачи данных (i433_5KBPS, i433_4KBPS, i433_3KBPS, i433_2KBPS, i433_1KBPS, i433_500BPS, i433_100BPS), i433_1KBPS - 1кбит/сек

    radio.openWritingPipe (5);                            // Открываем 5 трубу для передачи данных (передатчик может передавать данные только по одной из труб: 0...7)

}                                                         // Если повторно вызвать функцию openWritingPipe указав другой номер трубы, то передатчик начнёт передавать данные по вновь указанной трубе

void loop(){

    data[0] = analogRead(A1);                             // считываем показания Trema слайдера с вывода A1 и записываем их в 0 элемент массива data

    data[1] = analogRead(A2);                             // считываем показания Trema потенциометра с вывода A2 и записываем их в 1 элемент массива data

    radio.write(&data, sizeof(data));                     // отправляем данные из массива data указывая сколько байт массива мы хотим отправить

    delay(1000);                                            // пауза между пакетами

}

 

Периёмник: Ардуино уно, радиомодуль. Светодиоды установлены между «-» питания и Data для визуального наблюдения такта приходящего сигнала.

Использованный программный код должен определить время прерывания сигнала при удалении друг от друга датчиков с последующим переводом в расстояние:

const int trigPin = 3;

const int echoPin = 4;

// defines variables

long duration, cm;

int distance, Pdistance;

void setup() {

Serial.begin(9600); // Starts the serial communication

pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output

pinMode(echoPin, INPUT); // Sets the echoPin as an Input

}

 

void loop() {

// Сначала генерируем короткий импульс длительностью 2-5 микросекунд.

 

  digitalWrite(trigPin, LOW);

  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);

 

  // Выставив высокий уровень сигнала, ждем около 10 микросекунд. В этот момент датчик будет посылать сигналы с частотой 40 КГц.

  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);

Pdistance=distance;

Calc();

distance = duration *0.034;

if (Pdistance==distance || Pdistance==distance+1 || Pdistance==distance-1  )

{

Serial.print("Измеренное Расстояние: ");

Serial.print(cm);

Serial.println(" см.");

}

//Serial.print("Расстояние: ");

//Serial.println(distance/2);

delay(100);

}

void Calc()

{

duration=0;

Trigger_US();

while (digitalRead(echoPin)==HIGH);

delay(100);

Trigger_US();

duration = pulseIn(echoPin, HIGH);

}

void Trigger_US()

{

// Fake trigger the US sensor

digitalWrite(trigPin, HIGH);

delayMicroseconds(2);

digitalWrite(trigPin, LOW);

}

 

Но даже время прерывания приходящего сигнала не могу никак оформить и/или найти нечто подобное в интернете. Всё, что попадается – это лишь тахометры, спидометры и прерывание на кнопках.

На одном форуме (http://arduino.ru/forum/programmirovanie/izmerenie-vremeni-preryvaniya?page=1) кое что нашёл, но к сожалению получается ерунда. Выводятся в монитор значения от случайной наводке от тела, в прочем от замыкания контакта «Data» к D3 то же самое, и ни с увеличением расстояний, ни с повторными замыканиями ни чего не происходит.

Очень прошу откликнуться и помочь.https://yadi.sk/d/AHU7etAILGPXmg

rkit
Онлайн
Зарегистрирован: 23.11.2016

Не нашел потому что такое нельзя сделать за вменяемые деньги.

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Андрей152 пишет:
Может быть здесь мне что-то подскажут?
Нет, не подскажут.

По крайней мере, пока не прочитаете раздел "Песочница" и не зададите свой вопрос правильно.

Андрей152
Offline
Зарегистрирован: 26.12.2020

Спасибо.