Arduino для BAIT BOAT...

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:

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

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

Filipp23
appolinari:

Если это не критично, то такой вариант приемлем.

Приветствую всех. По поводу кода это вообще не критично так как мне надо что бы происходил вкл и выкл без всяких проблем, а длительность задержки не играет не какой роли. Насчет того что бы написать код по другому, я не умею, по этому он такой как есть ( то есть собран из кодов найденных в интернете) , если есть желание у кого то помочь правильно его написать то от помощи не откажусь, но и за эту подсказку большое спасибо Сергею.
Еще хотелось бы спросить как побороть в моем коде дрожание сервы, или это не получиться? серва самая обычная MG90 9g

appolinari

Сильно в код не вчитывался, но думаю, что вам стоит попробовать погонять серву в отдельном коде. Без входного сигнала, чтобы понять откуда идёт ошибка. Если сервы будут работать без дрожания, значит проблема в вашем коде. Если дрожание останется, то виноваты либо сервы либо библиотека.

Probelzaelo
Filipp23:

Еще хотелось бы спросить как побороть в моем коде дрожание сервы, или это не получиться? серва самая обычная MG90 9g

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