Arduino для BAIT BOAT...

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:

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

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

Filipp23
Probelzaelo:

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

Он выражается: при снятии сигнала команда не сразу фиксируется, то есть например я хочу дать команду на вкл LED1 поднимаю стик в верх а он вместо того чтобы зафиксировать мою команду начинает то включать то выключать. приходиться несколько раз давать команду.

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

После подачи команды на включение( отключение) нужно ввести паузы, чтоб хватало времени убрать команду.
То есть, к примеру ,после
digitalWrite (6,HIGH);
пишем
delay(1500); // полторы секунды защитный интервал
и так после всех четырех команд digitalWrite.
Сейчас у вас цикл очень короткий и пока вы переместили стик в крайнее положение и вернули в среднее происходит несколько включений-выключений светодиода, для вас это выглядит как переключение случайным образом ( дребезг).

Probelzaelo
Filipp23:

например я хочу дать команду на вкл LED1 поднимаю стик в верх а он вместо того чтобы зафиксировать мою команду начинает то включать то выключать.

Для начала, есть подозрение что у тебя переключения происходят у самой границы, когда стик находится у самого края?
Если есть сервотестер, попробуй подавать комманды с него. У него заметно шире диаппазон ШИМ чем у пульта. Либо вариант 2 сразу изменить точки переключения.

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

После подачи команды на включение( отключение) нужно ввести паузы, чтоб хватало времени убрать команду.
То есть, к примеру ,после
digitalWrite (6,HIGH);
пишем
delay(1500); // полторы секунды защитный интервал
и так после всех четырех команд digitalWrite.
Сейчас у вас цикл очень короткий и пока вы переместили стик в крайнее положение и вернули в среднее происходит несколько включений-выключений светодиода, для вас это выглядит как переключение случайным образом ( дребезг).

Сергей большое спасибо помогло. Теперь стик на управление светом отрабатывает как надо.

Probelzaelo:

Для начала, есть подозрение что у тебя переключения происходят у самой границы, когда стик находится у самого края?
Если есть сервотестер, попробуй подавать комманды с него. У него заметно шире диаппазон ШИМ чем у пульта. Либо вариант 2 сразу изменить точки переключения.

К сожалению сервотестера нет, а о каких точках идет речь?

Probelzaelo
Filipp23:

о каких точках идет речь

Речь была о моментах включения Val1>1850 и Val1<1250, но врядли бывают передатчики с более узким диаппазоном. Но на самом деле нужный диаппазон от 1250 до1850 перекрывают все, практически гарантировано. Тем более Сергей уже предложил простой и совершенно рабочий вариант.

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

после
digitalWrite (6,HIGH);
пишем
delay(1500); // полторы секунды защитный интервал

Есть один неприятный эффект при таком варианте кода. Ваша программа эти полторы секунды будет “висеть”. Если это не критично, то такой вариант приемлем.

Probelzaelo
appolinari:

неприятный эффект при таком варианте кода. Ваша программа эти полторы секунды будет “висеть”.

Если у контроллера нет других задач то пусть висит… Если что можно время сократить. либо выбрать другой вариант для отработки “паузы”

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

Есть один неприятный эффект при таком варианте кода.

Я б для себя такой код в целом вообще не писал.
Но вопрос был в том что изменить ( добавить) в этом коде.
Это решение на поверхности и в данном случае вполне рабочее.
А вообще задача может быть выполнена тысячей способов…