Геопозиционирование на ардуино.

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Геопозиционирование на ардуино.

#1

Сообщение rw6cm » 29.07.2016{, 09:04}

Данная тема, о возможностях реализовать с помощью программы FLProg,
проектов, связанных с позиционированием объектов на местности и в пространстве.

.
Ссылки на посты этой темы с блоками Code-Professional.Показать
1. Примеры работы блока компаса на модуле GY511.

2. GPS в FLProg.

3. Пример GPS навигации в FLProg

Актуальные блоки Code-Professional этой темы в основном будут находится Здесь
Ссылки на посты аналогичных темПоказать
Последний раз редактировалось rw6cm 02.08.2016{, 09:51}, всего редактировалось 1 раз.

com
Капитан
Сообщения: 831
Зарегистрирован: 31.05.2018{, 22:12}
Репутация: 83
Откуда: Санкт-Петербург
Имя: Ринат

Геопозиционирование на ардуино.

#121

Сообщение com » 11.03.2020{, 10:42}

rw6cm, Замечательный блок! При тестировании выяснилось, что дрейф оси Z мало зависит от времени, а вот от температуры очень даже . Неудобно вводить коэффициент в настройках блока, так как для изменения приходится каждый раз компилировать и загружать проект по новой. Мой коэффициэнт -0,488, дрейф приблизительно составил 0.1 за одну минуту, хотя зачастую и больше. если на датчик осторожно подуть, показания ползут в обратную сторону. Пробывал поставить коэффициэнт -0.4885, но тут уж дуня стала тормозить, не справляется.
В общем такая просьба, если не трудно, то вывести настройку коэффициэнта оси Z отдельным входом, что бы оперативно менять. А так же вывести данные с внутреннего датчика температуры, тогда, вероятно, будет дополнительная возможность корректировать показания оси Z

com
Капитан
Сообщения: 831
Зарегистрирован: 31.05.2018{, 22:12}
Репутация: 83
Откуда: Санкт-Петербург
Имя: Ринат

Геопозиционирование на ардуино.

#122

Сообщение com » 11.03.2020{, 13:22}

Сделал таблицу дрейф оси Z . Последние показания в период между 21-22 минут, слегка дул на датчик с расстояния около 50 см, помахал ладошкой создавая ветерок, изменение в 0.1. Градус?
Вложения
дрейф Z.txt
(10.66 КБ) 86 скачиваний

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Геопозиционирование на ардуино.

#123

Сообщение rw6cm » 17.03.2020{, 09:45}

com писал(а):
11.03.2020{, 10:42}
просьба, если не трудно
Если решите проблему серьезной погрешности оси Z в динамике,
то помогу Вам в этой мелочной тонкости )))
Win10-64, FLProg (portable)

com
Капитан
Сообщения: 831
Зарегистрирован: 31.05.2018{, 22:12}
Репутация: 83
Откуда: Санкт-Петербург
Имя: Ринат

Геопозиционирование на ардуино.

#124

Сообщение com » 17.03.2020{, 12:28}

rw6cm, Спасибо конечно :) .
Чипик не простой, мне не одолеть. Слишком много в нем всевозможных настроек, к тому же кажый модуль нужно предварительно калибровать. В рускоязычном сегменте это даже не обсуждается, у буржуинов говорят, но на буржуйском :D . Попробывал залить в уно скетч для калибровки, что то там показал, но в результате уно превратился в полукирпич. Сейчас он, хочет прошивается, хочет нет. Те же скетчи другие унки грузятся нормально. Наверное загрузчик надо перепрошить.
Итог: модуль не одолел, уно в отпуске.

Sanbi4
Рядовой
Сообщения: 76
Зарегистрирован: 30.10.2019{, 17:58}
Репутация: 3
Имя: Сергей

Геопозиционирование на ардуино.

#125

Сообщение Sanbi4 » 07.04.2020{, 15:44}

Всем привет! у меня такой вопрос по датчику. имею GY-25, основан на той же микросхеме, что и GY-521, плата другая только.

Вот в чем вопрос: мне нужно принимать углы отклонения с 2х датчиков, по I2C подключить оба не получится, так как имеют одинаковые номера (смотрел сканированием шины I2C). Вижу выход один - использовать UART для обоих датчиков. Но не могу разобраться как принимать данные с них по юарту. подскажите! Даташит во вложении

Вопрос снимается, нашел информацию, как поменять адрес по i2c на mpu6050
Вложения
GY25_MANUAL_EN.pdf
(126.41 КБ) 81 скачивание
Последний раз редактировалось Sanbi4 08.04.2020{, 15:23}, всего редактировалось 1 раз.

Sanbi4
Рядовой
Сообщения: 76
Зарегистрирован: 30.10.2019{, 17:58}
Репутация: 3
Имя: Сергей

Геопозиционирование на ардуино.

#126

Сообщение Sanbi4 » 08.04.2020{, 15:22}

rw6cm писал(а):
01.08.2019{, 02:43}
Проект на гироскопе GY-521 (MPU-6050) с фильтром Kalman для осей Х,У
Предыдущий, в посту выше, в новых версиях IDE не работает.
GY-521 в проекте ниже при включении фиксирует свое положение, отклоняясь включает светодиод,
вернувшись в обратное положение выключает.
FLProg v5.3.0 IDE 1.8.9
gy521 XY_Kolman.flp
Блок и библиотека ЗДЕСЬ
Здравствуйте, блок хорошо работает. Но можно Вас попросить сделать такой же блок, но на 0х69 адрес, чтобы оба блока в проекте работали? мне нужно подцепить 2 датчика и с них снимать угол отклонения

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Геопозиционирование на ардуино.

#127

Сообщение rw6cm » 11.04.2020{, 02:27}

Sanbi4,
Sanbi4 писал(а):
08.04.2020{, 15:22}
сделать такой же блок, но на 0х69 адрес, чтобы оба блока в проекте работали?
Именно тот что по ссылке не стал переделывать, там библиотека не очень для этих целей.
Сделал на библиотеке из последних постов. И ту пришлось не много изменить.
Как будут работать два модуля вместе проверить не могу (только один датчик)
Возможно придется опрашивать их по INT-у. В настройке блоков ставим адрес 68 и 69. (в проекте уже стоят)
Вам остается на модуле GY521 с адресом 69 установить AD0 на +3.3в, или через 3к на +5в.
С модулями GY25 не понятно (по фото), как разведена нога 9 на чипе. похоже она сидит на корпусе под чипом.
Надо прозвонить, и возможно придется сдувать микруху . В общем пробуйте.
2gy521XYZ _XY.flp
(205.63 КБ) 127 скачиваний
MPU6050_tockn.zip
(5.07 КБ) 109 скачиваний
Win10-64, FLProg (portable)

Sanbi4
Рядовой
Сообщения: 76
Зарегистрирован: 30.10.2019{, 17:58}
Репутация: 3
Имя: Сергей

Геопозиционирование на ардуино.

#128

Сообщение Sanbi4 » 18.05.2020{, 16:08}

rw6cm, Здравствуйте, отчетик по блоку:
1, по адресам датчики определяются.
2, если брать значение с X,Y,Z непосредственно - то значения постоянно увеличиваются. На выводах Калмана - значения нормальные.
3. не возможно получить точный угол отклонения. я датчик поворачиваю на 90 град, а показания примерно 75-80 град. (значение при нуле учтено)

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Геопозиционирование на ардуино.

#129

Сообщение rw6cm » 18.05.2020{, 22:24}

Sanbi4,
Датчик надо калибровать. и это надо делать периодически.
Калман работает в пределах 90* , ближе к 90 точность хромает.
Win10-64, FLProg (portable)

Sanbi4
Рядовой
Сообщения: 76
Зарегистрирован: 30.10.2019{, 17:58}
Репутация: 3
Имя: Сергей

Геопозиционирование на ардуино.

#130

Сообщение Sanbi4 » 19.05.2020{, 11:06}

rw6cm, вы, неаверно, не поняли о чем я. во вложении график значения угла по одной оси Х. Датчик закреплен не подвижно. Как видим, значения угла всегда увеличиваются. На осях Y и Z - картина такая же. При резете контроллера - график начинает расти от нуля.

Без этих значений я не могу добиться правильных показаний при повороте датчика на 90град в одной плоскости (по одной оси)
Вложения
график датчика.jpg

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Геопозиционирование на ардуино.

#131

Сообщение rw6cm » 20.05.2020{, 23:15}

Sanbi4 писал(а):
19.05.2020{, 11:06}
неаверно, не поняли о чем я
Прекрасно понял.
Дрейф ноля проблема всех этих датчиков. В первую очередь зависит от его качества.
так же от качества питания (цифровой шум). на сколько правильно подобран температурный режим.
В общем надо добиться калибровкой наиболее точных и стабильных показаний.
После чего можно применять дополнительные фильтра.
Но при длительной непрерывной работе ошибка все равно будет набегать.
Периодический сброс надо предусматривать.
Win10-64, FLProg (portable)

Sanbi4
Рядовой
Сообщения: 76
Зарегистрирован: 30.10.2019{, 17:58}
Репутация: 3
Имя: Сергей

Геопозиционирование на ардуино.

#132

Сообщение Sanbi4 » 21.05.2020{, 13:25}

вот сделал 2 блока для MPU6050, все 3 оси работают. на выход нужен фильтр ставить. позже доделаю блоки для возможности корректировки показаний. использованы библиотеки Wire.h , I2Cdev.h , MPU6050.h.

калибровку производил скетчем IMU_Zero. (https://github.com/ElectronicCats/mpu60 ... U_Zero.ino), в скетче указано, где поменять адрес датчика, по умолчанию 0х68.

Думаю, надо калибровку при старте программы, попробую интегрировать.

ps. похоже в датчиках нет энергонезависимой памяти для хранения калибровки, пока питание на датчиках есть - все показывают без ошибок. но стоит снять питание и подать - показания уезжают.
Вложения
Гироскоп_MPU6050_(0x69)_(CODE).ubi
(59.33 КБ) 171 скачивание
Гироскоп_MPU6050_(0x68)_(CODE).ubi
(58.88 КБ) 131 скачивание
MPU6050.zip
(99.34 КБ) 148 скачиваний
jrowberg-i2cdevlib-c08960d.zip
(752.8 КБ) 149 скачиваний
i2cdevlib-master.zip
(746.4 КБ) 113 скачиваний

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Геопозиционирование на ардуино.

#133

Сообщение rw6cm » 13.09.2021{, 22:53}

Спасибо AstroGraf, заинтересовал выделить время этой теме.
Предлагаю примеры работы блока компаса на модуле GY511.
Блок проверен в работе с Arduino, ESP8266, ESP32.
Простой пример работы компаса
Компас GY511.zip
(121.79 КБ) 84 скачивания
Пример блока калибровки
Калибровка GY511.zip
(80.37 КБ) 77 скачиваний
Пример проекта с встроенной калибровкой.
Gy511_Nano_Calibrate.zip
(134.13 КБ) 85 скачиваний
Блок с описанием и библиотекой можно скачать Здесь
Win10-64, FLProg (portable)

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Геопозиционирование на ардуино.

#134

Сообщение rw6cm » 27.09.2021{, 12:36}

GPS в FLProg

Рассмотрим работу и нюансы, связанные с работой GPS в программе FLProg.
Большинство модулей GPS по деф. передают данные в формате NMEA 0183 через UART.
Мульти блок сделанный и описанный в следующем посте, рассчитан на работу именно с этим форматом.
Поэтому подойдет практически под все модули GPS.
У меня в наличии модуль BN 357. Это ГЛОНАСС+GPS модуль. Примерно как NEO-M8.
Примеры в теме будут рассмотрены для BN 357.
Передача данные в формате NMEA 0183Показать
Краткое представление что такое NMEA 0183.
Передача данных с модуля идет текстом в виде строк.
Начало строки $ конец строки *, за ней контрольная сумма.
$GNRMC,073114.00,A,2237.56240,N,11401.59614,E,1.329,21.11,020916,,,A,V*37
Содержимое всех строк пакета данных, надо смотреть в даташите производителя
на конкретную модель модуля GPS.
Описание BN357.pdf
(366.06 КБ) 47 скачиваний
Каждая строка состоит из 5-буквенного идентификатора сообщения, пример: GNRMC.
Идентификатор понадобится для блока FLProg
Первые две буквы — идентификатор источника сообщения,
это «GP» — GPS, «GL» — ГЛОНАСС, «GA» — Галилео, «GN» — ГЛОНАСС+GPS и т. п.
Следующие три буквы — идентификатор формата сообщения. Список их большой.
Рассмотрим один из них. RMC – Рекомендованный минимальный набор GPS данных.
Примерно этот набор данных есть во всех модулях.
Данные, количество, вид, последовательность в строке – стандартизирована (зависит от версии NMEA).
Если какие-то данные отсутствуют (зависит от модели и режима gps), на их месте стоят запятые.
По запятым определяем номер позиции данных в строке. Это понадобится для блока FLProg.
Рассмотрим строку из модуля BN 357.
GNRMC,073114.00,A,2237.56240,N,11401.59768,E,1.329,21.11,020916,,,A,V
Значение позиций строки:
0. GNRMC, - идентификатор
1. 7 часов 31 минут 14 секунд 00 Санти секунд, - время UTC
2. «A» достоверно, («V» предупреждение) - статус
3. 22° 37.56240', - широта
4. N, - северная
5. 114° 01.59768', - долгота
6. Е, - восточная
7. 1.329 узлов, - скорость (морских миль 1852 м/ч)
8. 21.11 градуса, - курс движения
9. 2 сентября (20)16 года
10. магнитное склонение не указано
11. направление магнитного склонения не указано
12. A, - индикатор режима
13. V, - Индикатор состояния навигации
Эта строка, а также другие строки, разбираются, и приводятся к нужному типу (виду) данных, с помощью библиотеки TinyGPSPlus.
Которая используется в мульти блоке GPS.
Больше информации NMEA 0183 можно посмотреть на wiki
Нюансы при создании проекта GPS в FLProg.Показать

Первое с чем столкнется начинающий пользователь при создании проекта с GPS навигацией,
Это добиться точности определения позиции. К примеру модуль BN 357 должен рассчитывать
координаты с точностью +-2м. Но по факту мы в нее не попадаем. Что же мешает этому?
Рассмотрим модуль BN 357,
он выдает координаты вида 114 градусов 1 минута 59768 с 5-ю десятичными знаками от минуты, (пример долготы).
Преобразовываем это в чистые градусы с десятичными долями.
ddd mm.mmmmm=(ddd + mm.mmmmm/60)=ddd.dddddd
Получаем 114.026628
Примерную точность этой координаты можно судить по десятичной части из расчета:

градусы дистанция
1 = 100 км
0.1 = 10 км
0.01 = 1 км
0.001 = 100 м
0.0001 = 10 м
0.00001 = 1 м
0.000001 = 1 дм
Теоретически мы можем добиться точности +-10 см, но практически без, удачного расположения спутников,
хорошего модуля GPS, хорошем состоянии атмосферы, и возможно дополнительных корректирующих наземных станций,
добиться таких результатов не получится.
Но чтобы быть уверенным на 100% в метровой точности,
математические расчеты должны быть с запасом до дециметров (т.е градусы с 6-ю знаками после запятой).
Теперь рассмотрим простой пример проекта навигации на ардуино Уно/Мега в FLProg.
У нас есть сохраненные координаты местности точным поверенным навигатором,
допустим та же долгота 114.026602 градуса. Здесь надо учесть еще одну тонкость.
ДАТУМы (взятых с других модулей или топо-карт) должны быть одинаковые с вашим модулем GPS. Иначе мы даже в сотку не попадем.
В примерах для этого будем использовать координаты, сохраненные этим же модулем.
Но и здесь есть нюансы. Не факт, что состояние атмосферы и расположение спутников в момент снятия данных было наилучшее.
Поэтому для более точных координат точки, надо снимать данные несколько раз, в разное время.
Или оставить на сутки изделие, снимая регулярно показания расстояния и курса, чтобы вычислить среднее значение,
во круг которого будет дрейфовать позиция.
И так, нам надо ввести долготу в проект, что бы ардуина привела нас точно на нее. И вот здесь первые грабли )
FLProg округляет float до третьего знака. Как бы мы не старались, через константу, переменную, массив,
получаем 114.027 что в данном случае не допустимо.
Остается вариант передавать данные долготы текстом, и конвертировать в float непосредственно перед расчетными блоками.
Но и здесь невезуха точность повысилась всего на один разряд 4 знака.
Тех, кто живет на долготе с однозначным числом градусов, повезет больше,
т.к точность float на 8-ми битных контроллерах ардуино, находится в пределах 7-8ми знаков
(114.0266, считается все число и точка тоже).
Получается мы не можем надеяться на высокую точность навигатора сделанного на Унке.

Возьмем для этих целей ESP32. Все же 32 бита контроллер это не 8.
Проверим что будет получаться на ней. И опять невезуха.
Нужен тип Double, но его нет в FLProg. Придется сделать свой блок конвертора в Double.
Проверяем.
Точность float_Double в esp32.png
Точность float_Double в esp32.flp
(594.42 КБ) 61 скачивание
И вот оно счастье… теперь можно делать расчеты, не боясь вводить астрономические константы ))
Главное здесь знать, какие блоки, ПБ, и их библиотеки в FLProg могут работать с типом Double,
не то переконвертят опять на float.
Теперь есть с чем сравнивать. Можно вернутся к Унке, и попробовать добиться той же точности.
Возьмем координаты, отделим целую часть от дробной, рассчитаем каждую, и сложим.
Конечно этим мы увеличим и без того нагрузку на проц, но здесь интересна сама возможность этого,
нежели практическое применение. Оказалось, и Унка может с этим справляться. Не так, как esp, но все же.
(пример проекта ниже постом)
Правда говоря при испытаниях результат касаемо точности не был ярко выражен, (те же +-2м как и на esp)
но шаг позиции стал все же мельче, по сравнению с не делимым числом.
Здесь бы сравнить на более точных модулях, но у меня нет таковых.

Вся эта вводная информация – мой путь при создании алгоритма этого блока.
Расписано что бы было понятно почему именно так сделан блок.
Возможно мое видение всего этого в чем-то и ошибочно.
Необходимые блоки для примеров можно найти Здесь
Win10-64, FLProg (portable)

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Геопозиционирование на ардуино.

#135

Сообщение rw6cm » 27.09.2021{, 12:38}

Пример GPS навигации в FLProg .

Сложности использования модуля GPS, (судя по вопросам) в основном возникают с навигацией.
Рассмотрим простой проект, связанный с навигацией, используя мульти блок GPS NMEA Parser .
В проекте используется Уно, модуль BN 357 (настройки заводские), дисплей HD44780 2004.
Описание примераПоказать
Модуль GPS подключается тремя проводами:
Общий минус, +5В, и достаточно одного соединения с Tx GPS к Rx Уно.
Работает через serial UART. Не используйте софтовый UART (почему? будет постом ниже)
Во время прошивки, провод Tx->Rx отсоединяем.
Схема проекта
GPS навигатор на Uno.png
Вид изделия
IMG_5901.JPG
Из мульти блока берутся блоки «координаты» и «курс».
Есть один отдельный блок, сделанный для расчета расстояния и курса к выбранной цели.
На дисплей выводится информация о расстоянии, нужного курса до цели, а также курс в котором мы движемся.
В движении надо удерживать, совпадающими оба курса, и будете идти в направлении выбранной цели.
Цель запоминается нажатием кнопки, в предварительно выбранном месте (позиции).
Математика вся в блоках. Ошибки расчетов сведены к минимуму.
Все остальное зависит от вашего желания развиваться дальше.
Проект:
Навигация GPS.zip
(182.25 КБ) 151 скачивание
Актуальные блоки из примера Здесь
FLProg 7.3.8
Win10-64, FLProg (portable)

Аватара пользователя
rw6cm
Полковник
Сообщения: 2283
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 334
Имя: Владимир

Геопозиционирование на ардуино.

#136

Сообщение rw6cm » 27.09.2021{, 12:38}

резерв
Win10-64, FLProg (portable)

vitko112
Рядовой
Сообщения: 11
Зарегистрирован: 18.04.2020{, 22:56}
Репутация: 2
Имя: Виктор

Геопозиционирование на ардуино.

#137

Сообщение vitko112 » 02.09.2022{, 18:44}

Добрый вечер! Вопрос по блоку определения координат - можно ли получать значения широты и долготы не виде "string", а виде "float"? И если это возможно, что надо изменить в данном блоке? Благодарю.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Геопозиционирование на ардуино.

#138

Сообщение Dryundel » 02.09.2022{, 19:34}

vitko112 писал(а):
02.09.2022{, 18:44}
можно ли получать значения широты и долготы не виде "string", а виде "float"?
Так конвертируй и будет тебе счастье.

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Геопозиционирование на ардуино.

#139

Сообщение Rovki » 02.09.2022{, 19:43}

Dryundel писал(а):
02.09.2022{, 19:34}
vitko112 писал(а):
02.09.2022{, 18:44}
можно ли получать значения широты и долготы не виде "string", а виде "float"?
Так конвертируй и будет тебе счастье.
сложновато будет 55,755831°, 37,617673° — градусы....6 знаков после запятой :smile427:
Электронщик до мозга костей и не только

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Геопозиционирование на ардуино.

#140

Сообщение Dryundel » 02.09.2022{, 20:43}

Rovki писал(а):
02.09.2022{, 19:43}
сложновато будет 55,755831°, 37,617673° — градусы....6 знаков после запятой
Мда... Точно.
Ардуинка не справится, да и ESP наверное тоже. (Не проверял)
А для мелких расстояний точность актуальна будет.
Надо парсить в long , а вот как дальше, надо думать. В расчетах азимута обычно синусы косинусы, а они только до 360 считают. :smile37:
vitko112, а Вам для чего?

Ответить

Вернуться в «Обучающие примеры работы в FLProg»