Arduino для BAIT BOAT...
Нужно.
А у меня встречный вопрос.
У кого то есть информация о том как себя поведет один и тот же пьезо элемент в воздухе и в воде?
Интересует как изменится, вернее какой окажется диаграмма направленности луча и уплывет ли куда то частота резонансная?
А фото платы датчика в высоком разрешении не делали?
Если в ближние дни найду где то в продаже запасной датчик, разберу…
качество сильно сжимается при загрузке…
вставляй ссылку на сторонний ресурс типа радикала, а там оригинал хоть в 4к
вставляй ссылку на сторонний ресурс типа радикала,
Лучше на yandex.
Лучше на yandex.
Да, на радикале спам-мусора полно … отзываю свой совет)) Но смысл думаю понятен.
Лучше на yandex.
или в облако от mail.ru
Не помню кто именно уже давал ссылочку не будет лишним повторить тут, ссылка на патент на затею, и как работает “фишфиндер”, основные решения и тп. может оказаться полезно.
ссылку давал я, но он к лаки не подходит. Плюс сейчас они меняют протокол. Некоторые новые приемники не видят старых датчиков и наоборот
Плюс сейчас они меняют протокол. Некоторые новые приемники не видят старых датчиков и наоборот
они просто защищаются от “подделок” вернее друг от друга. меняют длину первого, стартового импульса например и все. есть варианты с частотой 315,433,916мгц. все остальное пока еще неизменно.
Всем привет. Собрал для себя на просторах интернета скетч для заливки его в ардуину, в скетче все функции отрабатывают как мне надо, но есть так называемый дребезг сигнала, что не очень хорошо. Помогите пожалуйста от него избавиться на программном уровне. Так как я сам не программист не могу понять как запихнуть защиту от дребезга в собранный мной скетч.
#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); //Сервомашинка2pinMode (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;
}}
Суть работы ардуинки такова , один канал работает как серворазделитель , а другой канал отвечает за включение и выключение габаритов и фары.
есть так называемый дребезг сигнала, что не очень хорошо.
Давай разберемся для сначала, что за дребезг, в чем именно он выражается?
Давай разберемся для сначала, что за дребезг, в чем именно он выражается?
Он выражается: при снятии сигнала команда не сразу фиксируется, то есть например я хочу дать команду на вкл LED1 поднимаю стик в верх а он вместо того чтобы зафиксировать мою команду начинает то включать то выключать. приходиться несколько раз давать команду.
После подачи команды на включение( отключение) нужно ввести паузы, чтоб хватало времени убрать команду.
То есть, к примеру ,после
digitalWrite (6,HIGH);
пишем
delay(1500); // полторы секунды защитный интервал
и так после всех четырех команд digitalWrite.
Сейчас у вас цикл очень короткий и пока вы переместили стик в крайнее положение и вернули в среднее происходит несколько включений-выключений светодиода, для вас это выглядит как переключение случайным образом ( дребезг).
например я хочу дать команду на вкл LED1 поднимаю стик в верх а он вместо того чтобы зафиксировать мою команду начинает то включать то выключать.
Для начала, есть подозрение что у тебя переключения происходят у самой границы, когда стик находится у самого края?
Если есть сервотестер, попробуй подавать комманды с него. У него заметно шире диаппазон ШИМ чем у пульта. Либо вариант 2 сразу изменить точки переключения.
После подачи команды на включение( отключение) нужно ввести паузы, чтоб хватало времени убрать команду.
То есть, к примеру ,после
digitalWrite (6,HIGH);
пишем
delay(1500); // полторы секунды защитный интервал
и так после всех четырех команд digitalWrite.
Сейчас у вас цикл очень короткий и пока вы переместили стик в крайнее положение и вернули в среднее происходит несколько включений-выключений светодиода, для вас это выглядит как переключение случайным образом ( дребезг).
Сергей большое спасибо помогло. Теперь стик на управление светом отрабатывает как надо.
Для начала, есть подозрение что у тебя переключения происходят у самой границы, когда стик находится у самого края?
Если есть сервотестер, попробуй подавать комманды с него. У него заметно шире диаппазон ШИМ чем у пульта. Либо вариант 2 сразу изменить точки переключения.
К сожалению сервотестера нет, а о каких точках идет речь?
о каких точках идет речь
Речь была о моментах включения Val1>1850 и Val1<1250, но врядли бывают передатчики с более узким диаппазоном. Но на самом деле нужный диаппазон от 1250 до1850 перекрывают все, практически гарантировано. Тем более Сергей уже предложил простой и совершенно рабочий вариант.
после
digitalWrite (6,HIGH);
пишем
delay(1500); // полторы секунды защитный интервал
Есть один неприятный эффект при таком варианте кода. Ваша программа эти полторы секунды будет “висеть”. Если это не критично, то такой вариант приемлем.
неприятный эффект при таком варианте кода. Ваша программа эти полторы секунды будет “висеть”.
Если у контроллера нет других задач то пусть висит… Если что можно время сократить. либо выбрать другой вариант для отработки “паузы”
Есть один неприятный эффект при таком варианте кода.
Я б для себя такой код в целом вообще не писал.
Но вопрос был в том что изменить ( добавить) в этом коде.
Это решение на поверхности и в данном случае вполне рабочее.
А вообще задача может быть выполнена тысячей способов…
Если это не критично, то такой вариант приемлем.
Приветствую всех. По поводу кода это вообще не критично так как мне надо что бы происходил вкл и выкл без всяких проблем, а длительность задержки не играет не какой роли. Насчет того что бы написать код по другому, я не умею, по этому он такой как есть ( то есть собран из кодов найденных в интернете) , если есть желание у кого то помочь правильно его написать то от помощи не откажусь, но и за эту подсказку большое спасибо Сергею.
Еще хотелось бы спросить как побороть в моем коде дрожание сервы, или это не получиться? серва самая обычная MG90 9g
Сильно в код не вчитывался, но думаю, что вам стоит попробовать погонять серву в отдельном коде. Без входного сигнала, чтобы понять откуда идёт ошибка. Если сервы будут работать без дрожания, значит проблема в вашем коде. Если дрожание останется, то виноваты либо сервы либо библиотека.