Arduino для BAIT BOAT...

Probelzaelo
Musgravehill:

Предполагаю, что первые 8 импульсов - это глубина. Вторые 8 - температура.

А я таки думаю что первые восемь просто “пилот” вторые 8 это байт данных - измеренная температура, а глубина скорее всего передается шириной паузы, но нужно проверять. Какой именно модельки твой подопытный датчик?

Musgravehill
Probelzaelo:

А я таки думаю что первые восемь просто “пилот” вторые 8 это байт данных - измеренная температура, а глубина скорее всего передается шириной паузы, но нужно проверять. Какой именно модельки твой подопытный датчик?

Модель эхолота - “GENMAN FFW718” с Алиэкспресса “russian menu language FFW718 Wireless Portable Dot Matrix Fish Finder Sonar Radio big LCD display”.
Т.е. клон Lucky. Нашел про клон: arm-fishing.ru/?page_id=401

Передатчик как на фото выше.
Приемник в виде модуля припаян на штырях к “материнской” плате.
Данные снимал с приемника.
------------------
Пауза между пачками большая, сравнима с шириной всей пачки.
Я посчитал, 0.4 метра звук проходит за 0.27 мс - как раз похоже на ширину импульса.
Жаль, в квартире нет бочки на 200л и глубиной 1.5 метра для опытов…
--------
Вот полезное сообщение rcopen.com/forum/f68/topic285298/2

Есть подвижка. Saleae Logic показывает некий разумный поток. Дело за малым - понять где что закодировано.

Musgravehill

Интересна центральная пачка импульсов.
Она всегда стартует с импульса 6.729 мс
Но потом в воде за ней следует длинный импульс и куча мелких хвостов.
А без воды, но с замкнутыми контактами получается только стартовый импульс 6.729 мс и тишина. Эха нет - нет и длинного импульса с хвостом.


Панкратов_Сергей

Можно предположить что длинная пауза и следующая за ним

Musgravehill:

Она всегда стартует с импульса 6.729 мс

есть определение начала пачки.
Далее идут отраженные импульсы, без всякой обработки 0.82 мс- это как раз 40 см с множеством переотражений ( но отсечение идет только первых поступивших 8-ми). Только отсчет почему то не от начала первой пачки, а от конца ( то есть вначале идет наиболее далекое определенное отражение), хотя так логично для отображения если рисовать начинать с более глубокого пробитого уровня.
Если так предположить- то тот промежуток что отдан под первую пачку, плохо видно- но около 60 мс- определяем максиму 90 метров прохождения импульса УЗ, то есть 45 метров глубины. А сколько заявлено? ( нашел- 40 метров- так и должно быть)
Далее пачка температуры, 8 бит, к примеру в 394 посту это 11000011

Musgravehill
Панкратов_Сергей:

Только отсчет почему то не от начала первой пачки, а от конца

Похоже, вы правы!
Стартовый импульс всегда 6.7 мс.
Потом длинный импульс 20…60 мс в моем ведре (запас под большие глубины?).
И далее хвост из 10-11 импульсов ~0.3-0.6 мс

Получается, хвост из коротких импульсов - это серия замеров эха.
0.6 мс * 1500м\с \ 2 = 0.45 м

Я сделал на Ардуинке приблуду для анализа. При случае возьму её на пруд и посмотрю, что покажет.

DesperAlex

Скидываю фотки одного проекта может чем помогут, полностью информацию не получил, у автора не остались данные

20 days later
Панкратов_Сергей
Musgravehill:

Я сделал на Ардуинке приблуду для анализа. При случае возьму её на пруд и посмотрю, что покажет.

Борис, далее не пытали?
А фото платы датчика в высоком разрешении не делали?

Musgravehill
Панкратов_Сергей:

Борис, далее не пытали?

Пока до пруда не добрался. Огородный сезон(
Плату датчика не сфотографировать - она внутри поплавка-уточки, который запаян. Заглядывал внутрь через батарейный отсек.

Есть мысли… FRSky передает телеметрию на пульт. Можно передать GPS и глубину. Есть проект эмуляции датчиков S.Port (для подключения к приемнику frsky X- и S- серий) на Arduino. GPS стандартно, а глубину под видом напряжения\высоты\температуры, например.
Лог телеметрии пишется на SD-карту в пульте в формате csv.

Probelzaelo

А у меня встречный вопрос.
У кого то есть информация о том как себя поведет один и тот же пьезо элемент в воздухе и в воде?
Интересует как изменится, вернее какой окажется диаграмма направленности луча и уплывет ли куда то частота резонансная?

Панкратов_Сергей:

А фото платы датчика в высоком разрешении не делали?

Если в ближние дни найду где то в продаже запасной датчик, разберу…

Kosta23rus
Панкратов_Сергей:

Нужно.

качество сильно сжимается при загрузке…
микрухи затерты, эхолот с датчиком оригинальный !


MaikG3
Kosta23rus:

качество сильно сжимается при загрузке…

вставляй ссылку на сторонний ресурс типа радикала, а там оригинал хоть в 4к

MaikG3
Панкратов_Сергей:

Лучше на yandex.

Да, на радикале спам-мусора полно … отзываю свой совет)) Но смысл думаю понятен.

yus12

ссылку давал я, но он к лаки не подходит. Плюс сейчас они меняют протокол. Некоторые новые приемники не видят старых датчиков и наоборот

Probelzaelo
yus12:

Плюс сейчас они меняют протокол. Некоторые новые приемники не видят старых датчиков и наоборот

они просто защищаются от “подделок” вернее друг от друга. меняют длину первого, стартового импульса например и все. есть варианты с частотой 315,433,916мгц. все остальное пока еще неизменно.

1 month later
Filipp23

Всем привет. Собрал для себя на просторах интернета скетч для заливки его в ардуину, в скетче все функции отрабатывают как мне надо, но есть так называемый дребезг сигнала, что не очень хорошо. Помогите пожалуйста от него избавиться на программном уровне. Так как я сам не программист не могу понять как запихнуть защиту от дребезга в собранный мной скетч.

#include <Servo.h>
Servo servo1;
Servo servo2;
int Val;

int Val1;
boolean vLED1 = false;//Hilfsvariable wird zusammen mit der LED auf “true” gesetzt, wenn if-Bedingung erfüllt wurde. Am Ende des loop-teils werden, wenn das Einganssignal in der “Mittelstellung” ist, alle Hilfsvariablen wieder auf “false” gesetzt. Somit kann die LED wieder umgeschaltet werden.
boolean vLED2 = false;//
int iLED1;
int iLED2;

void setup ()
{
pinMode(2, INPUT); //Вход канал1
servo1.attach(4); //Сервомашинка 1
servo2.attach(5); //Сервомашинка2

pinMode (6, OUTPUT); //Выход на реле света1
pinMode (7, OUTPUT); //Выход на реле света2
pinMode (3, INPUT); //Вход канал3
}

void loop (){
Val = pulseIn(2, HIGH, 75000);
if (Val<1500) servo1.write(map(Val, 1000,1500,0,90 )); //Упровление сервой
if (Val>1500) servo2.write(map(Val, 1500,2000,0,90 ));

Val1 = pulseIn(3,HIGH,75000);//Ließt Eingangssignal
iLED1 = digitalRead(6);//Ließt Status von LED1
iLED2 = digitalRead(7);

//if-Bedinung für LED1
if (Val1>1850 && Val1<1950 && iLED1==LOW && vLED1 == false){//Wenn Eingangssignal zwischen 1228 und 1242, Ausgang an LED1 aus und der Status des Ausgangs in diesem loop-durchgang noch nicht verändert wurde, dann
digitalWrite (6,HIGH);//schalte Ausgang an
vLED1 = true;//Setze Hilfsvariable auf true. Nächste if-bedinung stimmt somit nicht mehr (bis Eingangssingal in “Mittelstellung” und die LED bleibt an.
}
if (Val1>1850 && Val1<1950 && iLED1==HIGH && vLED1 == false){//Gleich wie oben, bloß umgekehrt zum ausschalten der LED
digitalWrite (6,LOW);
vLED1 = true;
}
//if-Bedinung für LED2
if (Val1>1024 && Val1<1250 && iLED2==LOW && vLED2 == false){
digitalWrite (7,HIGH);
vLED1 = true;
}
if (Val1>1024 && Val1<1250 && iLED2==HIGH && vLED2 == false){
digitalWrite (7,LOW);
vLED1 = true;
}
//if-Bedinung zum Zurücksetzen der Hilfsvariablen bei Mittelstellung des Eingangssignals
if (Val1>1490 && Val1<1600){
vLED1 = false;
vLED2 = false;
}

}

Суть работы ардуинки такова , один канал работает как серворазделитель , а другой канал отвечает за включение и выключение габаритов и фары.

Probelzaelo
Filipp23:

есть так называемый дребезг сигнала, что не очень хорошо.

Давай разберемся для сначала, что за дребезг, в чем именно он выражается?