naza2frsky - адаптер смартпорта для FrSky за 3$

alezz
slava135:

В этом и странность, при подключении к u-Center - все нормально. Значит данные есть. А тут - хоть тресни.

возможно u-Center какие-то команды дает. Подключать от gps модуля только провод передачи и не подключать приема пробовал? В принципе gps модуль можно сконфигурировать под ublox (временно) и попробовать как работает с naza2frsky в таком режиме, протокол ublox я лично проверял, там было все ок. Ну а потом вернуть конфигурацию чтобы с автопилотом работало

slava135

Тоже такая мысль была - попробовал только RX. Работает.
Может порт глючить? Читал есть еще 2 порта RX. Как на них перебросить для пробы?

alezz

на атмега328р (ардуино мини, ардуино нано) увы только один хардварный последовательный порт. Для подключения к смартпорту я использовал софтварный (программный) порт, т.е. эмуляцию, его можно назначить почти на любом цифровом входе. Т.е. теоретически можно оба интерфейса на программные порты повесить, но у них свои ограничения, например по буферу или прерываниям - возможны конфликты. Я точно таким извратом заниматься не буду, проще ардуино мини купить новую. Кстати, если у тебя ардуино нано, были случаи когда запаянная на плате ftdi-шка действительно подсаживала порт RX, людям приходилось резать дорожку. Где-то в этой теме такие случаи были описаны

slava135

Мини Про. Понял. Попробую найти новую. Код по идее должен работать, там уже только переменные проверить. А вот почему не читает - нужно копать.
Спасибо за помощь. Разберусь с портом, может тогда дальше вопросы появятся.

alezz
slava135:

Мини Про

Ну тогда очень сомнительно что виновата ардуинка т.к. через этот же порт она шьется и шьется, как я понял, успешно. Кстати я снова ошибку нашел, она не критична, работать должно было и с ней, но для порядка выкладываю

slava135

Данные пошли. Заменил uint8_t c = GPS_Serial.read(); на int c = GPS_Serial.read();

Теперь нужно разобраться с корректностью данных

alezz
slava135:

Данные пошли. Заменил uint8_t c = GPS_Serial.read(); на int c = GPS_Serial.read();

ну странно конечно

slava135:

Теперь нужно разобраться с корректностью данных

раз данные пошли, обрати внимание на пост выше 😉

slava135

Танцы с бубном 😃
Да, посмотрел. попробую данные покрутить и до ума довести.
Как я понял высота показывается над уровнем моря и что бы высчитать реальную высоту нужно отнять домашнюю точку?

alezz
slava135:

Как я понял высота показывается над уровнем моря и что бы высчитать реальную высоту нужно отнять домашнюю точку?

Имхо это уже косметика, да можно после строки

gps_altitude = gps.f_altitude();

добавить строку

if ((home_altitude == 0) && (sat_visible > 5)) home_altitude = gps_altitude;

slava135

Странные координаты получаю 344.5128E 534.5516N
Для Москвы должны быть 37 и 55

Что то не так в разборе при выводе?

alezz
slava135:

Странные координаты получаю 344.5128E 534.5516N
Для Москвы должны быть 37 и 55
Что то не так в разборе при выводе?

обрати внимание как для ublox координаты считаются

latitude = (int32_t)(get_ubx_latitude()*10000000);
longitude = (int32_t)(get_ubx_longitude()*10000000);

возможно и для nmea такая операция нужна

slava135

Ок. Попробую. А то пытаюсь понять для чего /6 😦

slava135

Настроил. Вроде бы показывает. Нужно было /60.
Проверил только в статике. Получится сегодня проверю в поле.
Так же добавил расчет удаления от домашней точки. Тоже нужно в поле проверить.

slava135

Где можно найти описание (коды) данных датчиков, например:
#define FR_ID_ACCX 0x0700 //ACCX_FIRST_ID
#define FR_ID_ACCY 0x0710 //ACCY_FIRST_ID
#define FR_ID_ACCZ 0x0720 //ACCZ_FIRST_ID

можно ли сделать свои названия или они читаются по коду?

alezz

на новых прошивках тараниса, OpenTX 2.1.X, особо на коды внимания можно не акцентировать т.к. все в самой аппе можно настроить, включая названия. А вообще известные коды перечислены в frskysport.h

slava135

Понял. Высота почему то -9999987.0. Домашняя высота не верно фиксируется?
Строка if ((home_altitude == 0) && (sat_visible > 5)) home_altitude = gps_altitude;

Обыскал весь интернет что бы сделать формулу дистанции, нашел, собрал, а потом нашел, что и в библиотеке TinyGPS она уже есть готовая.
Освежил знания в тригонометрии 😃

alezz

дистанцию тоже зря делал, насколько помню таранис сам считает.
По высоте. ну выведи сначала чистый gps_altitude потом чистый home_altitude и посмотри 😃

slava135

Пытался. почему то home_altitude 100000, ну и соответственно …

проверил.
Высота по gps гуляет сильно от 350 до 190. По этому наверно и точка фиксируется на большей высоте а затем падает. Пробую на балконе. может быть из за этого или есть другая причина такого гуляния?

alezz
slava135:

проверил.
Высота по gps гуляет сильно от 350 до 190. По этому наверно и точка фиксируется на большей высоте а затем падает. Пробую на балконе. может быть из за этого или есть другая причина такого гуляния?

GPS в принципе хреновато высоту показывает, нужно минимум 6 спутников для точности в десяток метров. Если спутников меньше погрешность 300м - легко, так что балкон не показатель. Тем более для старенького, младшего ublox 6й серии

slava135

Облетал. координаты отработал хорошо, даже удаление в принципе неплохо. Проблема осталась с высотой. При чем в логе высота по gps - отрабатывает нормально. Вся проблема в первичной записи высоты в ячейку. Может сильно рано пишется. Хочу попробовать добавить внешнее прерывание, типа фиксация стартовой точки, когда высота GPS стабилизируется. Погрешность конечно будет, но не минус всю дорогу. 😃
Скорость показывает неверно. 5-6 к/ч. видимо нужно коэффициент подобрать.
Вариометр тоже =0. Я так понимаю по формуле это разница между уже считаной высотой и новым считыванием. Может разнести их дальше в процедуре?

alezz

по моему главное это координаты 😃
По поводу высоты, да можно добавить счетчик чтобы брало не первое измерение после фиксации 6 спутников, а например 10е. Или брать среднее арифметическое первых 10 измерений. Но повторяю значительно минимизировать проблемы с высотой можно только перейдя на более современный уровень, например на gps модуль с ublox 8, на ublox 6 погрешность будет присутствовать постоянно, не смотря на всех костыли
Скорость возможно выводится в м/с
Вариометр все та же песня про высоту 😃 Нужно в логе смотреть как меняется соседние значения высоты и сравнить с тем что выдает вариометр. Возможно умножить на 100, чтобы разница была не в метрах а в сантиметрах

Можешь выложить вариант с правильными координатами? Я в основной проект внесу изменения и выложу сюда, авось кому пригодится