Плавный поворот сервы на азимут. и фикс 359-0 град.
- Войдите на сайт для отправки комментариев
Сб, 05/06/2021 - 19:29
while (flag) {
GPSStatys(); // NEO-6m ackData[1] - GPS курс, ackData[2] - дистанция, ackData[3] - азимут, ackData[5] - КМ/ч
if (millis() - timeoutAV >= 50) {
timeoutAV = millis();
target_on = false;
StatCompass(); // Цыфровий компас ackData[4] - курс
}
NRF24L01();
if (recieved_data[3] > 10) {
flag = false;
motorspeed = 28;
}
if (ackData[2] > 5) {
servo2.write(map(180, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH));
servo3.write(map(0, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH));
}
if (ackData[2] < 2) {
if (is_one2) {
flag = false;
motorspeed = 28;
is_one2 = false;
}
if (recieved_data[5] == 1) {
DISTANCE_LAT = eeprom_read_float(0);
DISTANCE_LNG = eeprom_read_float(4);
if (is_one3) {
for (int twoi = 180; twoi > 30; twoi--) {
servo2.write(map(twoi, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH));
}
for (int threei = 0; threei < 150; threei++) {
servo3.write(map(threei, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH));
}
}
target_on = true;
if (GPS_ON) {
is_one2 = true;
GPS_ON = false;
}
} else {
is_one2 = true;
}
} else { // вычисление угола поворота на азимут
if ( ackData[4] > ackData[3] + 40 || ackData[4] < ackData[3] - 40) {
limitspeed = 50;
SpeedMotor();
if ( ackData[4] > ackData[3] ) { /// отклонение большое + - 40
if (is_one0) {
turn = 80;
is_one0 = false;
}
is_one1 = true;
turn++;
if (turn >= 100) {
turn = 100;
}
motor.write(map(motorspeed, 0, 255, 800, 2550));
servo1.write(map(turn, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH));
} else {
if (is_one1) {
turn = 80;
is_one1 = false;
}
is_one0 = true;
turn--;
if (turn <= 60) {
turn = 60;
}
motor.write(map(motorspeed, 0, 255, 800, 2550));
servo1.write(map(turn, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH));
}
} else if ( ackData[4] > ackData[3] + 20 || ackData[4] < ackData[3] - 20) { /// отклонение средние + - 20
limitspeed = 60;
SpeedMotor();
if ( ackData[4] > ackData[3] ) {
if (is_one0) {
turn = 80;
is_one0 = false;
}
is_one1 = true;
turn++;
if (turn >= 90) {
turn = 90;
}
motor.write(map(motorspeed, 0, 255, 800, 2550));
servo1.write(map(turn, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH));
} else {
if (is_one1) {
turn = 80;
is_one1 = false;
}
is_one0 = true;
turn--;
if (turn <= 70) {
turn = 70;
}
motor.write(map(motorspeed, 0, 255, 800, 2550));
servo1.write(map(turn, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH));
}
} else { /// отклонение малое + - 5
limitspeed = 70;
SpeedMotor();
if ( ackData[4] > ackData[3] ) {
if (is_one0) {
turn = 80;
is_one0 = false;
}
is_one1 = true;
turn++;
if (turn >= 85) {
turn = 85;
}
motor.write(map(motorspeed, 0, 255, 800, 2550));
servo1.write(map(turn, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH));
} else {
if (is_one1) {
turn = 80;
is_one1 = false;
}
is_one0 = true;
turn--;
if (turn <= 75) {
turn = 75;
}
motor.write(map(motorspeed, 0, 255, 800, 2550));
servo1.write(map(turn, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH));
}
}
}
}
На это хватило ума..
Поворот сервы ограничено 60-100 град. Нужно чтобы servo1(правильней) выравнивало угол поворота на азимут также в этом примере есть недостаток когда азимут 359-0 то кораблик кружиться на месте в одну сторону потому-что на практике азимут меняется 350-10 к примеру, и кораблик делает полный разворот. Как пофиксить незнаю.. есть у кого какие предложение ?
А предложения должны быть от нас !? Может вы ошиблись веткой ? Тут обычно предлагает заказчик... А исполнители, очень часто его посылают, потому что заказчик хочет за копейки... А вы вооще.... бесплатно !?
Предложение:
можно за доширак.
Как пофиксить незнаю.. есть у кого какие предложение ?
Учитывать историю и скорость изменения, видимо.
А предложения должны быть от нас !? Может вы ошиблись веткой ? Тут обычно предлагает заказчик... А исполнители, очень часто его посылают, потому что заказчик хочет за копейки... А вы вооще.... бесплатно !?
Дак я и сам программирую, а заказчик возможно не знает цен.. можно например вначале темы закрепить количество строк == рублей или по чем-то измерять == цену.. так и спрашиваю, а заказчик полюбому будет хотеть за копейки. "Хотеть не вредно, вредно не хотеть" как говориться. Вот оценивают например 3 задачи https://kwork.ru/software/9632118/vypolnenie-raboty-na-c-ili-java 500р. https://kwork.ru/software/355630/napishu-sketch-dlya-arduino
Предложение:
можно за доширак.
500р ? Или сколько..
Хапнуть подряд любой ценой, а потом искать таджиков для выполнения - классика жанра))
Так программист просит помощи программиста )) Или какой-то дед изучает программирование или студент пишет курсовую.. Ментор, ментор гдеже ты.. найдись.
Так программист просит помощи программиста ))
1. Помогают - котенку, когда у него коготок в батарее или занавеске застрял. Все остальное - услуга. Услуги оказывают за вознаграждение (разное) или по дружбе. Я тебя знаю, родное сердце? ;))
2. Нельзя ли в теме про кораблик использовать морские навигационные термины, а не "азимут"? У комбинации судна и объекта есть три слова: курс, пеленг и курсовой угол. Так что тебе про желаемое направление известно его пеленг или курсовой угол?
На всякий случай: Курс - угол между севером и направлением движения, Пеленг на объект - угол между севером и направлением на объект с центром в месте расположения судна, Курсовой угол (левого или правого борта) - угол между направлением движения и направлением на объект. А азимуты, они все у геодезистов. ;))
Так программист просит помощи программиста ))
1. Помогают - котенку, когда у него коготок в батарее или занавеске застрял. Все остальное - услуга. Услуги оказывают за вознаграждение (разное) или по дружбе. Я тебя знаю, родное сердце? ;))
Сейчас познакомимся пингвинчик ты мой ))) Разве на форуме не могут что-то подсказать или тут только предоставляют свои услуги.. например
Так программист просит помощи программиста ))
2. Нельзя ли в теме про кораблик использовать морские навигационные термины, а не "азимут"? У комбинации судна и объекта есть три слова: курс, пеленг и курсовой угол. Так что тебе про желаемое направление известно его пеленг или курсовой угол?
Можно и морские навигационные термины. Мне известно мой курс и пеленг на объект я не понимаю как держать через серво истинные направления на объект если есть какое либо отклонение.. и как быть с 0-359 град. например пеленг 359 град. на практике есть отклонения ветер и волны тоисть кораблик подумает сделать разворот если будет 0 град.
Сейчас познакомимся
Нет мотивации. Сорри.
Можно и морские навигационные термины. Мне известно мой курс и пеленг на объект я не понимаю как держать через серво истинные направления на объект если есть какое либо отклонение.. и как быть с 0-359 град. например пеленг 359 град. на практике есть отклонения ветер и волны тоисть кораблик подумает сделать разворот если будет 0 град.
ТЫ опять ИП с КУ перепутал. Истинный пеленг - угол между СЕВЕРОМ И ОБЪЕКТОМ. Курсовой угол - между курсом и объектом. Тебе надо держать курс на объект? И кораблик "дурит" около 0° ? Так не принимай решений об изменении курса, пока не накопится ошибка в 5° или 10° . Тебе нужно записать лог на карточку и посмотреть статистику измерений, какое получится среднее отклонение.
А азимуты, они все у геодезистов. ;))
ага и, измеряется в РУМБах )))
Сейчас познакомимся
Нет мотивации. Сорри.
Можно и морские навигационные термины. Мне известно мой курс и пеленг на объект я не понимаю как держать через серво истинные направления на объект если есть какое либо отклонение.. и как быть с 0-359 град. например пеленг 359 град. на практике есть отклонения ветер и волны тоисть кораблик подумает сделать разворот если будет 0 град.
ТЫ опять ИП с КУ перепутал. Истинный пеленг - угол между СЕВЕРОМ И ОБЪЕКТОМ. Курсовой угол - между курсом и объектом. Тебе надо держать курс на объект? И кораблик "дурит" около 0° ? Так не принимай решений об изменении курса, пока не накопится ошибка в 5° или 10° . Тебе нужно записать лог на карточку и посмотреть статистику измерений, какое получится среднее отклонение.
ИП = ИК + КУ. Оно все связано между собой ИК = ИП − КУ, КУ = ИП − ИК. Ок, попробую ограничить.. но подход не правильный всё же..
Предложение:
можно за доширак.
ОПЯТЬ !?! Ты что с голоду пухнешь и делать нечего ? Давай найду тебе работы, за доширак.
ТС, программируешь сам - программируй и спрашивай в других темах с демонстрацией напрограммированного.
Пришел сюда искать исполнителя, сразу, забудь что ты программируешь. Приготовь деньги. Твои знания тебе УЖЕ не помогли, раз ты тут :)
Предложение:
можно за доширак.
ОПЯТЬ !?! Ты что с голоду пухнешь и делать нечего ? Давай найду тебе работы, за доширак.
ТС, программируешь сам - программируй и спрашивай в других темах с демонстрацией напрограммированного.
Пришел сюда искать исполнителя, сразу, забудь что ты программируешь. Приготовь деньги. Твои знания тебе УЖЕ не помогли, раз ты тут :)
Я и не говорил что не буду платить.. наоборот сюда сюда писал чтобы за это заплатить. Но я уже сделал пример то что нужно. но не понимаю как при courseroll = 350, azimuth = 10 сделать
int courseroll = 350, azimuth = 10, delta, infopot1, infopot2; void setup() { Serial.begin(9600); delta = courseroll - azimuth; Serial.print("delta "); Serial.println(delta); if (delta > 0) { infopot1 = 80 + delta; Serial.print("infopot1 "); Serial.println(constrain(infopot1, 80, 100)); } else { infopot2 = 80 - abs(delta); Serial.print("infopot2 "); Serial.println(constrain(infopot2, 60, 80)); } } void loop() { }