определения дистанции между двумя объектами
- Войдите на сайт для отправки комментариев
Добрый день уважаемые гуру и форумчане.
Я далёк от программирования, но потребовалось некое оборудование для определения дистанции между двумя объектами. Я решил попробовать при помощи ардуино и радиомодулей сваять такое простенькое устройство.
Поблуждав по интернету и различным сообществам конкретики так и не нашёл. Может быть здесь мне что-то подскажут?
Что я использовал:
Передатчик: Ардуино про мини, радиомодуль. Светодиод установлен в разрыв для визуального наблюдения такта исходящего сигнала.
Использованный программный код:
#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
Не нашел потому что такое нельзя сделать за вменяемые деньги.
По крайней мере, пока не прочитаете раздел "Песочница" и не зададите свой вопрос правильно.
Спасибо.