суббота, 31 марта 2012 г.

ПАК GPS+Эхолот логгер



     GPS                  Эхолот                          Карта глубин

Предисловие

В последнее время в нашу жизнедеятельность стремительно вошли такие системы, как: GPS-навигация, картография, рыбопоисковая эхолокация.  GPS-навигацией и картографией многие пользуются при путешествиях на автомобиле, пешем туризме, на охоте и рыбалке. Рыбопоисковыми эхолотами пользуются рыболовы. Активные датчики глубины (Active Transducer) используются на катерах и яхтах.

Многие карты дорог,  городов, топо-карты, карты глубин больших водоемов доступны для использования в GPS-навигации, но иначе  дело обстоит с картами глубин внутренних водоемов - озер и рек, которые в первую очередь могут быть полезны для рыболовов. Таких карт просто нет или их очень трудно достать или использовать.

Таким образом, возникла идея создать комплекс для накопления данных о местоположении и глубине для последующего изготовления собственных карт глубин часто посещаемых водоемов!


Проект "Создание программно-аппаратного комплекса для исследования глубин внутренних водоемов"

Основные задачи комплекса: сохранение синхронных данных о местоположении и глубине в распространенном формате на SD-карту, вывод в реальном времени мультиплексированных NMEA-данных * от GPS и Эхолота на внешнее устройство по различным интерфейсам связи.

* Здесь и далее подразумевается стандарт NMEA-0183!
NMEA 0183 Information Sheet Issue 3.pdf от Actisence (или еще ссылка, популярное изложение электрической спецификации стандарта, способы подключения устройств - Talkers, описание мариновских NMEA-сообщений, на английском).
Описание NMEA протокола. Реализация в приемниках Garmin и GlobalSat. (в поисковиках можно найти много дополнительных ссылок по NMEA-сообщениям GPS-приемников).

Варианты реализации комплекса:
  1. С применением GPS-приемника, Эхолота и Ноутбука.
  2. С применением GPS-приемника, Эхолота и МК *  блока типа Arduino.

Для кого этот проект: проект заинтересует в первую очередь  рыболовов (троллингисты привет!), но сам комплекс может использоваться и в профессиональной деятельности.

Уровень сложности проекта: любительский для повторения, но некоторые аспекты требуют углубленного изучения.

Проект ведется своими силами.


Основные этапы реализации проекта:
  1. Изыскания. Поиск информации о подобных решениях в Интернет. Поиск соответствующего оборудования и программного обеспечения. Поиск и изучение технической документации и стандартов. Посещение форумов по данной тематике.
  2. Приобретение или создание оборудования и программного обеспечения.
  3. Изготовление прототипа программно-аппаратного комплекса (ПАК). Настойка, отладка и тестирование в лабораторных условиях. Выбор оптимальной конфигурации оборудования и программного обеспечения.
  4. Изготовление рабочего комплекса для использования в полевых условиях. Тестирование комплекса на водоеме. Первичное накопление данных Latitude/Longitude/Depth.
  5. Обработка данных программным обеспечением (ПО), получение первичных результатов - карт глубин, 3D-моделей дна.
  6. Работа над ошибками.
  7. Накопление больших объемов данных.
  8. Обработка данных и получение окончательных результатов.
  9. Использование  результатов при последующих посещениях водоемов.

Реализация комплекса


I.  Первый вариант комплекса с использованием Ноутбука

Состав комплекса
:
  1. Эхолот с NMEA-выходом с передачей данных в стандарте RS-232 (или активный датчик глубины с NMEA-выходом).
  2. GPS-приемник (в роли приемника выступает смартфон Nokia 6110 Navigator с передачей NMEA-данных по Bluetooth при помощи программы ExtGPS, есть вариант под Andriod!).
  3. Ноутбук, к нему подключен эхолот через USB-RS232 переходник и GPS-приемник по Bluetooth.
  4. ПО на  Ноутбуке для: мультиплексирования NMEA-данных (GPSGate Client), записи треков c данными о глубине (OziExplorer), построения в реальном времени модели дна (DrDepth).
  5. Дополнительное ПО для апостериорной обработки накопленных данных и создания карт глубин и 3D-моделей дна (GlobalMapper, Surfer, DrDepth, ReefMaster).
Недостатки комплекса:
  1. Ноутбук - высокое энергопотребление, автомобильный аккумулятор - это слишком  для использования в ПВХ лодке (хотя...).
  2. Ноутбук - проблемы с влагозащитой оного.
  3. Ноутбук - большие габариты, вес.
  4. Ноутбук - дополнительные кабели и преобразователи напряжения питания, в лодке получается целая паутина из проводов.
Таким образом, главное устройство в первом варианте становится главной проблемой!

Тем, кто заинтересовался реализацией такого варианта комплекса, могу посоветовать Military Notebooks. Проблемы с влагозащитой и тряской отпадут. На некоторых моделях встроен GPS-приемник.

Фото реализации первого варианта комплекса:

Комплектующие будущего комплекса.


Распайка кабеля эхолота, питание и данные.


Tx эхолота к Rx DB9(2), GND к GNG DB9(5)


USB-RS232 конвертер MasterKit, куплен в радиомагазине.
Питание от USB хоста.


Питание на 2 устройства куплено в автомагазине.
Переделано под контакты аккумулятора.
Контакт в прикуриватель достался эхолоту (на верхнем снимке).


Шнуры питания и данных в сборе.

GPSGate Client мультиплексирует NMEA-данные COM-портов от GPS и Эхолота,
может направить MUX NMEA-данные на n виртуальных COM-портов для
параллельной работы нескольких навигационных программ на PC.

DrDepth может создавать 3-D модель дна и линии глубины в реальном времени.
Понимает формат файла трека OziExplorer.

OziExplorer умеет записывать данные глубины  в поле для данных альтитуды,
полученные txt-треки можно обработать ПО  для построения карт глубин или 3D-моделей дна.

Немного поработав напильником и паяльником получаем эту красоту.
(без изоленты тоже не обошлось :)

Собственно сабж. Пора в поля!


II. Второй вариант комплекса с использованием МК блоков типа Arduino

Осознав всю сложность тестирования и использования созданного комплекса в полевых условиях на ПВХ лодке, я решил устремить свой взор в сторону МК устройств... и случайно на одном форуме в теме про NMEA-мультиплексоры обнаружил упоминание о МК блоке Arduino Mega. После краткого ознакомления с характеристиками данного блока и сопутствующих шилдов (Shield) у меня появилось стойкое убеждение создать компактный комплекс с низким энергопотреблением и массой возможностей по расширению функционала на МК блоках серии Arduino или подобных.

Минимальный состав комплекса:
  1. МК блок Iteaduino Mega V1.0 (ATmega 2560) с четырьмя UART, один UART используется под USB на плате. МК выполняет функции NMEA-фильтра и NMEA-мультиплексора данных от GPS и Эхолота, осуществляет запись синхронных данных о местоположении и глубине в заданном формате на SD-карту, выводит MUX NMEA-данные на USB (и/или UART).
  2. Эхолот с NMEA-выходом с передачей данных в стандарте RS-232 (или активный датчик глубины с NMEA-выходом). Для подключения этих устройств к UART МК потребуется конвертер сигналов RS232-TTL (на микросхеме MAX232 / MAX3232).
  3. GPS Shield V1.0 (+Micro SD интерфейс) - очень удобный комбайн, рекомендую! Активная GPS антенна. (в данном GPS Shield используется модуль GlobalSat EB-365, который передает константные данные Lat, Lon, Speed при низких скоростях передвижения. ВНИМАНИЕ! Это можно исправить, отключив в модуле режим Static Navigation для GPS-модулей с чипом SiRF StarIII; в новом варианте комплекса используется GROVE модуль GPS на чипе u-blox NEO-6М).
  4. Дополнительное ПО для обработки накопленных данных, как и в первом варианте ПАК.
Достоинства комплекса:
  1. Доступность комплектующих для массового потребителя. Простота повторения.
  2. Возможность (пере)программирования МК на языке высокого уровня C++ под свою реализацию комплекса (Open Source). Заливка программного кода (скетчей) из среды разработки по USB. Не нужен программатор!
  3. Компактность, малый вес.
  4. Низкое энергопотребление. Широкий диапазон напряжений питания.
  5. On-board GPS - избавляемся от лишних проводов.
  6. On-board SD   - независимое сохранение данных.
  7. Возможность вывода MUX NMEA-данных на внешнее устройство по USB (например: Ноутбук, как в первом варианте ПАК, КПК) или на другое NMEA-устройство по RS-232.
  8. Расширение/изменение возможностей комплекса под свои  потребности (например: беспроводные решения, подключение на вход дополнительных датчиков, TFT/LCD-дисплеи, солнечные панели и т.п.). Типа радиоэлектронный конструктор на базе МК!
Требования к комплексу:
  • Требования озвучены в достоинствах.
  • Дополнительное требование - надежная герметичность корпуса устройства, кабельных вводов, коннекторов, слотов и т.п.
Блок-схема комплекса:


Функциональные возможности комплекса:
  • GPS-модуль подключается к UART1. Эхолот подключается к UART2. Читаем NMEA-данные с обоих UART почти в синхронном режиме, т.е. не ждем NMEA-предложения от одного устройства целиком. Новая версия программы: GPS, Эхолот или MUX NMEA-данные от обоих устройств можно подключить к любому UART (UART1 или UART2).
  • Комплекс может работать как обычный GPS-логгер (трекер), когда не используется эхолот. Тогда вместо данных глубины будет участвовать альтитуда (высота над уровнем моря).
  • Вывод MUX NMEA-данных на UART0 (USB). К USB может быть подключен ПК (ноутбук) для тестирования комплекса в период настройки или для работы с навигационным ПО в период эксплуатации комплекса.
  • UART3 остается свободным для последующего расширения функциональных возможностей комплекса. Например, можно выводить на него  MUX NMEA-данные, а можно подключить Serial LСD или другие устройства.
  • NMEA-данные, поступающие от GPS и эхолота, проходят проверку по контрольной сумме - фильтр по контрольной сумме, если таковая присутствует в NMEA-предложении. Если проверка не пройдена, то это NMEA-предложение отбрасывается и не участвует в дальнейшей обработке, оно не поступает на внешнее устройство по USB и не будет записано на SD-карту.
  • На поступающие NMEA-данные могут быть наложены дополнительные NMEA-фильтры: свой фильтр на данные GPS, свой фильтр на данные эхолота, фильтр на вывод данных по USB, фильтр на обработку и запись на SD-карту. Это может пригодиться для уменьшения потока данных, проходящих через комплекс и, как следствие, уменьшения временных и вычислительных ресурсов комплекса. Например, программа DrDepth заранее настраивается на определенные NMEA-предложения от GPS и эхолота и остальные ей просто не нужны, следовательно, мы можем поставить соответствующий NMEA-фильтр на вывод данных по USB.
  • Запись на SD-карту: запись происходит в трек-файл формата OziExplorer, после обязательных полей для  OziExplorer можно записывать дополнительные поля с любыми приходящими от устройств данными. Например, для построения температурной карты водоема можно записывать в трек данные от термодатчика эхолота. Или параметр HDOP, для последующего анализа и удаления первых точек трека. Данные глубины записываются в поле для данных альтитуды. Трек легко просмотреть на карте, проанализировать и отредактировать в OziExplorer. Данный формат файла понимают многие программы: DrDepth, Global Mapper, Surfer.
  • Формат имени директории и имени файла: YYYYMMDD\DDhhmmss.plt , где: дата и время - текущие дата и время начала работы комплекса (первых синхронных данных).
  • В имени директории и файла можно использовать: либо UTC, либо локальное время региона. Аналогично и для полей даты и времени в файле трека.
  • При записи данных на SD применяется еще один фильтр - GPS FixData, по качеству принимаемых данных от GPS. В трек записываются данные только с признаком GPS FixData.
  • При записи данных на SD реализован механизм контроля синхронности поступающих данных от GPS и эхолота, на тот случай, когда одно из устройств перестает передавать данные, передает их с низкой точностью (GPS FixData) или с ошибками (контрольная сумма).
  • Для прореживания точек при записи в трек могут использоваться два алгоритма: с указанием минимальной дистанции между географическими координатами и минимальной разницы глубины, и с адаптивной дистанцией, зависящей от скорости передвижения и минимальной разницы глубины (эта возможность удалена, зачем заведомо терять такую ценную информацию о глубине!?).
  • Реализован механизм определения точек разрыва трека, когда пропадают данные от устройств, они низкой точности или с ошибками.
  • Новый файл (директория) формируется каждый раз при включении и рестарте комплекса или при вставке SD-карты в работающий комплекс.
  • SD-карту можно снимать и вставлять во время работы комплекса. После вставки карты произойдет ее инициализация и настройка комплекса из файла настроек, записанного на SD, будет создан новый файл трека, пойдет запись данных в трек.
  • Индикация основных процессов работы комплекса реализована на светодиодах: индикация инициализации SD-карты или ее отсутствия, индикация чтения файла настроек или его отсутствия, индикация процесса чтения поступающих данных от UART1 и UART2 (GPS и Эхолот), индикация процесса вывода данных на UART0 и UART3 (USB и Bluetooth), индикация процесса записи синхронных данных в трек на SD, индикация GPS FixData и пропадание сигнала GPS. Предусмотрена возможность использования пищалки для озвучивания процесса записи синхронных данных в трек на SD.
  • Основные настраиваемые параметры комплекса могут быть установлены из INI-файла, который должен находиться в корневой директории SD-карты, иначе будут использованы значения, установленные в программе.


Тестирование комплекса:

Тест длительной записи данных на SD-карту:

Тест длился больше 12 часов, в стационарном положении в помещении, эхолот в режиме симуляции. Запись на SD в txt-файл в формате трека OziExplorer + дополнительные поля данных. Период записи точек ~1с.

Результаты:
  • Размер файла: 3.24 Мб.
  • Количество путевых точек: 43509.
  • Замечено много "выбросов" GPS, с которыми предстоит бороться (фильтровать).



Тестирование комплекса при поездке на автомобиле:

Тест проводился без эхолота, вместо данных глубины в алгоритм подставлялись данные высоты (альтитуды). Настройка ограничения записи точек: дистанция между точками >= 5 м, разность глубин (высоты) >= 1 м, запись на SD происходит по срабатыванию одного из этих условий.

Результаты:
  • При остановке на перекрестках нет лишних точек. Плавная линия трека на круговых перекрестках.
  • На малой скорости по лесной дороге запись  шла через несколько секунд – прореживание точек. На трассе ограничение в 5м срабатывало каждую секунду (72 км/ч это уже 20 м/с).
  • Надо сделать второй алгоритм - адаптивный, который будет вычислять дистанцию записи точек в зависимости от скорости движения.
  • Первый трек 100 км пути, 6000 точек. Второй трек 90 км пути, 5100 точек.


Тестирование комплекса при низких скоростях передвижения:

Тест проводился без эхолота в пешем режиме передвижения.

Результаты:
Выяснилось, что при скорости передвижения ниже "пороговой" для GPS-модуля GlobalSat EB-365 (~ 1.0 - 1.3 м/с), GPS выдает константные значения Lat / Lon и скорость равную нулю !? При этом все три сообщения GLL, GGA и RMC с признаком GPS FixData! При превышении пороговой скорости GPS-модуль начинает выдавать реальные данные и комплекс работает правильно.

В чем проблема? Что за порог скорости?

Если проблему не получится решить, то данный GPS Shield придется исключить из комплекса, заменить на другой или использовать GPS от смартфона через Bluetooth (GPS в смартфоне пишет треки и с меньшими скоростями передвижения).

ВНИМАНИЕ! Это можно исправить, отключив в GPS-модуле режим Static Navigation (особенность изначальной настройки GPS-модулей с чипом SiRF StarIII).

Тестирование комплекса на водоеме

В конце мая удалось выбраться на рыбалку, накатали немного треков. Как и предвидел, при троллинге на скорости 3.2 - 4.0 Км/ч трек не записывался (см. проблему GPS-модуля выше), только странные точки ровно через 200 м!? А при переходах с места на место на больших скоростях, все отлично записалось. Треки обработал в программе DrDepth, что-то даже получилось :)

На ЮГ идем с низкой скоростью, фиксируются точки ровно через 200 м!?
Кстати, на Африку чем-то похоже J

Вдоль берега накатали очень плотно, получилось похоже на конечный результат.
Результатом может быть: как цветная карта, так и просто изолинии с числовыми метками глубины.
Результат можно наложить на растровую карту или спутниковый снимок или преобразовать в
векторный формат для устройств типа Garmin.

На замену шилда с GPS-модулем GlobalSat EB-365 заказал GROVE модуль GPS на чипе u-blox NEO-6МSD card Shield V3.0 с GROVE контактами. GROVE - Модуль Serial Bluetooth для использования внешнего Bluetooth-GPS или для возможности отправки навигационных данных комплекса на внешнее устройство (смартфон, таблетку и т.д.). 

Новый вариант комплекса представлен в статье ниже.


Первый результат

Что тут говорить, вот результат проделанной работы.
Представлен пример 3D-модели дна глубоководного участка озера.
Площадь обследования - несколько десятков квадратных километров, глубины до 40 метров.
Красиво!
Самодельные растровые карты озер в Oziexplorer PC

Растровая карта глубин с наложением на спутниковую подложку.
На карте: линии глубины с отметками глубины в метрах, интервалы
глубин окрашены цветом, серыми линиями показаны треки, черные
области - еще не обследованные места, красная сетка - 100 м, синяя - 1 км.

Подсветка при создании карты для придания карте рельефности.
В центре карты "Пик Коммунизма" - 5м, за который раньше
часто цепляли снасти, теперь обходим мимо 😊


Фото реализации второго варианта комплекса на МК:

Вкусняшки J

Старый знакомый из первого варианта комплекса...

...выводит NMEA-данные в стандарте RS-232 (Tx - синий провод),
еще потребуется земля (GND - черный провод) и питание - красный.

Пришлось разобрать свой "черный ящик" из первого варианта комплекса
для подключения к эхолоту дата-кабеля с конвертером RS232-TTL.
Дата кабель - как временный вариант для изучения и тестирования в домашних условиях.

Вот и пригодился дата-кабель от телефона Siemens ME45 (фирменный DCA-500),
к его DB9(Tx) подключаем Tx провод от эхолота,
на TTL выходе дата-кабеля это уже будет Rx (Pin6, см. ниже),
не забываем подключить землю от эхолота к DB9(GND).

Разъем дата-кабеля к телефону с TTL уровнями, нас интересуют Rx (Pin6), Tx(Pin5), GND(Pin1), PWR(Pin4).
Tx вроде как и не нужен, т.к. в эхолот ничего не передаем, но пока не подключил его к Tx  Iteaduino
данные не приходили на UART (глюк какой-то) !?

Распиновка телефонного разъема дата-кабеля DCA-500.

Вкусняшки воссоединились.
Обращаю внимание на то, что у GPS Shield есть возможность перекидывать Rx/Tx пины
на разные пины Iteaduino,  что мне и пригодилось, т.к. программу я разрабатывал заранее и
в коде посадил GPS на UART1, а эхолот на UART2. Перемычками пересадил GPS на UART1.

Питание для дата-кабеля берем от Iteaduino, я подал 5V.
Пока не пришла GPS-антенна, подключил обычный TV-кабель,
кинул конец на окно - работа GPS стала возможной.

Общий вид прототипа.

Старый знакомый , б/у от UPS: 12V, 7 Ah, Pb-гелиевый (или кислотный). Рекомендую!
Заряжать можно зарядным устройством для автомобильных аккумуляторов, меньшим током.
 На рыбалке используется для питания эхолота и смартфона с GPS.
В рабочей версии комплекса будет питать весь комплекс.

Тестирование связки GPS-МК-ПК-OziExplorer в домашних условиях.
Созвездие спутников просто атаковало меня  J  

Записал трек на SD-карту в формате OziExplorer.

Путевые точки этого трека. Все точно, как в аптеке!
 (похоже работа режима Static Navigation в SiRF StarIII)
Эхолот не был подключен, поэтому в поле Alt нули.

Рассыпуха для RS232-TTL конвертера и светодиодной индикации.
Микросхема - MAX232 CPE в DIP16 корпусе. Конденсаторы для ее обвязки - керамика, 0.1uF.

MAX232

Схема  RS232-TTL конвертера на MAX232.
(я использовал все неполярные конденсаторы)

RS232-TTL конвертер на MAX232. Давненько не паял микрухи...

... но все отлично получилось.

Вешаю конвертер на питание 5В Iteaduino.

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

Забыл подключить землю к DB9 :(

Кабель от эхолота тоже временно пришлось переделать.

Соединил RS232-TTL конвертер с пинами Tx2/Rx2 Iteaduino.

Подключил светодиоды на цифровые пины МК через резисторы номиналом 1K.
Индикация следующих процессов: чтение входящих данных из UART1,
чтение входящих данных из UART2, запись данных на SD-карту,
 вывод данных на UART0 (USB).

Гирлянда замигала всеми цветами J

Пришла активная GPS-антенна, теперь дело пойдет веселее.

Проверка работы комплекса в роли мультиплексора NMEA-данных.
MUX NMEA выводились прямо на USB-интерфейс Iteaduino,
а затем просматривались на SerialMonitor в среде разработки Arduino IDE.
NMEA-предложения: $GPxxx - от GPS, а $SDxxx - от эхолота.

"Сижу за решеткой в темнице сырой..."
Эх, корпус так долго не приходит.

Наконец пришел герметичный корпус фирмы GAINTA.
Модель G2104С, размеры 120 x 80 x 55, класс защиты IP-65.
В комплекте винты для крепления крышки и неопреновый уплотнитель.

Решил использовать такие гермовводы для тонких кабелей 3-5 мм.
Класс защиты IP-67.

SMA разъем для GPS-антенны.
Родной разъем пришлось отрезать для пропуска кабеля
антенны через гермоввод.

Гермовводы установлены.

Отверстия для крепежа на плате Iteaduino сделаны в неподходящих местах.
Одни очень близко к радиоэлементам на плате и к отверстиям для пайки,
другие непонятно где. Пришлось попотеть с креплением платы.

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

Уплотнитель на месте. Отверстия для крепежа вне зоны герметизации.

Комплекс в сборе.
Кабель от эхолота, кабель питания, GPS-антенна.

Тестирование комплекса на водоеме.
Ура!



III. Новый вариант комплекса на МК с использованием GPS u-blox NEO-6M и SD Shield

Из-за неприемлемого режима работы GPS-модуля GlobalSat EB-365 на низких скоростях, пришлось подыскивать новый GPS-модуль. Выбор пал на модуль u-blox NEO-6M (DataSheet), и, как оказалось, выбор был сделан удачно. Данный модуль обновляет навигационные данные c  частотой до 5 Гц, имеет несколько интерфейсов: UART, USB, SPI, I2C, работает с протоколами NMEA и UBX и имеет кучу других вкусностей. А самое главное - модуль выдает навигационные данные при низких скоростях передвижения! По модулям u-blox на сайте производителя доступна обширная документация. Имеется фирменная программа u-center для изучения и настройки модулей u-blox, даже есть возможность навигации с использованием картографии Google Earth. Все супер!

Состав комплекса:
  1. Эхолот с NMEA-выходом с передачей данных в стандарте RS-232 (или активный датчик глубины с NMEA-выходом). Для подключения этих устройств к UART МК потребуется конвертер сигналов RS232-TTL (на микросхеме MAX232 / MAX3232).
  2. МК блок Iteaduino Mega V1.0 (ATmega 2560) с четырьмя UART, один UART используется под USB на плате. МК выполняет функции NMEA-фильтра и NMEA-мультиплексора данных от GPS и Эхолота, осуществляет запись синхронных данных местоположения и глубины в заданном формате на SD-карту, выводит MUX NMEA-данные на USB (и Bluetooth).
  3. GROVE - Модуль GPS (с мини антенной) на чипе u-blox NEO-6М.
  4. SD card Shield V3.0 с GROVE разъемами интерфейсов UART и I2C .
  5. GROVE - Модуль Serial Bluetooth для вывода навигационных данных комплекса на внешнее устройство (смартфон, планшет и т.п.).

Блок-схема комплекса:




Дополнительные функциональные возможности комплекса:
  • изменение частоты работы GPS-модуля: 1, 2, 4, 5 Гц - повышает точность привязки данных глубины к GPS-координатам (синхронизация данных, об этом см. ниже).
  • изменение скорости передачи данных UART GPS-модуля - позволяет установить большие скорости передачи данных для нормальной работы комплекса при режимах работы GPS-модуля с частотами выше 1 Гц.
  • вывод MUX NMEA-данных комплекса на внешнее устройство через Serial Bluetooth (в стадии тестирования) - беспроводное подключение устройств с картографическими навигационными программами.

Фото реализации третьего варианта комплекса на МК:

Новые вкусняшки J
 GROVE - модуль GPS, GROVE - модуль Serial Bluetooth,
SD card Shield, GROVE кабель.

Все удачно поместилось в гермокорпус.

Теперь GPS-антенна внутри корпуса, меньше проводов - это плюс.
(а может и минус, т.к. антенна должна быть как можно выше и ничем не экранироваться)

Сабж.

Сабж готов к рыбалке.

Программа u-center от u-blox.
Использование Google Earth.

Программа u-center от u-blox.
Просмотр GPS-данных по протоколам NMEA и UBX.

Программа u-center от u-blox.
Просмотр статистических GPS-данных.


IV. Новый вариант комплекса на МК с использованием Serial Bluetooth и RS232 Shield

Состав комплекса:
  1. Эхолот с NMEA-выходом с передачей данных в стандарте RS-232 (или активный датчик глубины с NMEA-выходом). Для подключения этих устройств к UART МК потребуется конвертер сигналов RS232-TTL (на микросхеме MAX232 / MAX3232).
  2. МК блок Iteaduino Mega V1.0 (ATmega 2560) с четырьмя UART, один UART используется под USB на плате. МК выполняет функции NMEA-фильтра и NMEA-мультиплексора данных от GPS и Эхолота, осуществляет запись синхронных данных местоположения и глубины в заданном формате на SD-карту, выводит MUX NMEA-данные на USB (и Bluetooth).
  3. GROVE Модуль GPS (с мини антенной) на чипе u-blox NEO-6М (wiki, правда теперь выпускают на модуле SIM28, протокол UBX этим модулем не поддерживается!).
  4. SD card Shield V3.0 с GROVE разъемами интерфейсов UART и I2C (wiki).
  5. GROVE Модуль Serial Bluetooth для вывода навигационных данных комплекса на внешнее устройство (смартфон, планшет и т.п.) (wiki).
  6. Новичок: RS232 Shield с площадкой для прототипирования и DB9 разъемом (wiki).

Этот вариант был разработан под заказ, постарался сделать конструкцию товарного вида.

Основные изменения в конструкции:
  • использование RS232 Shield: избавление от "соплей" самодельного RS232-TTL конвертера и резисторов, LED BAR с резисторами и контактные колодки распаяны на площадке для прототипирования.
  • использование модуля Serial Bluetooth.
  • использование геркона для сброса МК (reset) с целью записи трека в новый файл.
  • использование LED BAR индикатора (красный, желтый, зеленые).

Монтажная схема комплекса:

Дополнительные рисунки к схеме:
Используемые пины Iteaduino Mega 2560.

Пины и интерфейсы SD Shield.

Пины и интерфейсы RS232 Shield.


Фото-сессия (понеслась):

Такой вот бутерброд из трех шилдов J
Плюсы RS-232 Shield: два варианта подключения Эхолота по RS-232,
удалось разместить LED BAR с резисторами
и контактные колодки для питания комплекса.
Плюсы SD-card Shield: слот под SD и microSD,
GROVE разъемы пригодятся для подключения питания к
GROVE GPS и GROVE Bluetooth.
К SD слоту проще будет добираться.
Первый способ подключения Эхолота к RS-232 Shield.
Второй способ подключения Эхолота к RS-232 Shield.
Разводка питания от аккумулятора к комплексу и Эхолоту.
Разъем DB9 - временный вариант.
GPS прикручен к плате МК.
LED BAR - индикатор процессов комплекса.
Монстр! Брутальный видок J
Да, минимизация не помешала бы.
Ужас! Но а кому в Зимнюю Олимпиаду легко!?
Все ресурсы туда, вот винтиков и не осталось.
Тестирование передачи NMEA GPS по BT.
А тут и Эхолот присоединился.
Тестирование передачи NMEA одновременно по BT и USB.
Укладка в корпус.
Последние приготовления.
Проверка доступа к SD слоту.
Геркон сброса комплекса для записи трека в новый файл.
Файлы при создании именуются по текущему времени,
которое берется из NMEA GPS.
Готов к отправке в дальние края!
"Будет вечно Карелия сниться..."
Может останешься со мной?


Ошибки измерений вносимые комплексом

В этом разделе описаны ошибки измерений и способы их устранения, которые  известны мне.

1) Ошибка привязки данных о глубине к географическим координатам из-за асинхронности поступления данных от GPS и Эхолота в комплекс.

На рисунке приведены два примера: первый - работа GPS на частоте 1 Гц, второй - с частотой 2 Гц. 

Из рисунка видно, что данные от двух устройств поступают в комплекс с задержкой dT. Значение dT непостоянно и может быть с разным знаком. Двигаясь с определенной скоростью, мы за время dT пройдем определенный путь, следовательно измеренная глубина будет не в той географической точке, которую мы получим от GPS. Ошибка max(dL) зависит от скорости движения и прямопропорциональна ей.

Пример 1: частота измерений Эхолота - 1 Гц, частота измерений GPS - 1 Гц, следовательно max(dT) = 1 c, скорость движения - 7.2 км/ч (2 м/с). Получаем max(dL) = 2 м.

Пример 2: частота измерений Эхолота - 1 Гц, частота измерений GPS - 1 Гц, следовательно max(dT) = 1 c, скорость движения - 3.6 км/ч (1 м/с). Получаем max(dL) = 1 м.

Пример 3: частота измерений Эхолота - 1 Гц, частота измерений GPS - 2 Гц, следовательно max(dT) = 0.5 c, скорость движения - 3.6 км/ч (1 м/с). Получаем max(dL) = 0.5 м.

В данном комплексе величина dT известна на каждом измерении (сохранении пары). Значение dT вычисляется по процессорному времени в миллисекундах и записывается в дополнительное поле в файл трека OziExplorer.

Пути уменьшения ошибки:
  • Увеличение частоты измерений GPS. Чем больше частота измерений GPS, тем меньше  max(dT) и max(dL), т.е. точка измерения глубины ближе к точке измерения GPS.
  • Т.к. значение dT записывается в файл трека, то есть возможность проводить апостериорную обработку данных на ПК с целью вычисления более точных географических координат измерения глубины (скорость движения тоже записывается в файл трека, истинный курс можно вычислить по паре точек в треке).


2) Ошибка привязки данных о глубине к географическим координатам из-за задержки между измерением координат в GPS-модуле и поступлением их в комплекс.

Данная проблема всесторонне описана в ветке форума на сайте geodesist.ru.

У меня только один комментарий: в моем комплексе нужно учесть тот факт, что подобная задержка присутствует и при передаче NMEA-данных с эхолота. Плюс к этому, проблема асинхронности поступления данных от обоих устройств может вносить бОльшую ошибку измерения и маскировать ошибку из-за задержки поступления данных.

Пути уменьшения ошибки:
  • В сообщении на форуме описано несколько вариантов решения проблемы с задержкой.
  • Отключение ненужных NMEA-сообщений на GPS-модуле, переход на бинарные протоколы GPS-модулей, увеличение скорости передачи данных в интерфейсах передачи данных. Т.о. можно свести эту задержку к одному порядку с задержкой поступления данных от эхолота. Дальше остается решить проблему асинхронности поступления данных (см. выше).


3) Вычисления с плавающей точкой.

На платформе Arduino предусмотрены два типа данных для работы с числами с плавающей точкой: float и double. Но казус в том, что тип двойной точности - double занимает в памяти всего 4 байта, как и тип float, т.е. имеет ту же точность. Тип double поддерживается в Arduino для совместимости с другими платформами.

В комплексе числа с плавающей точкой применяются при преобразовании географических координат из формата "dddmm.mmmm", в котором приходят данные в NMEA-сообщении, в формат "ddd.dddddd". На этом этапе получаем погрешность вычисления координат.

Пути уменьшения ошибки:
  • Можно перейти на другую платформу, где тип double будет реально двойной точности.
  • Можно записывать в трек данные о координатах в формате "dddmm.mmmm", как они приходят в NMEA-сообщении и делать апостериорную обработку данных на ПК, но тогда в комплексе придется отказаться от формата файла OziExplorer.



Несколько вариантов подбора X-duino блоков под имеющееся у вас оборудование для создания комплекса с минимальной конфигурацией:

У вас должен быть  Эхолот с NMEA-выходом (типа этого) с передачей данных в стандарте RS-232 (или активный датчик глубины с NMEA-выходом (типа этих)). Для подключения этих устройств к UART потребуется конвертер сигналов RS232-TTL (на микросхеме MAX232 / MAX3232).

  Вход данных:
  1. У вас есть GPS-устройство (приемник или навигатор) с NMEA-выходом по RS-232 или USB. Для подключения устройства к UART потребуется соответствующий конвертер. Тогда вам следует приобрести: Iteaduino Mega V1.0 (ATmega 2560) и SD Card Shield.
  2. У вас есть GPS-устройство (приемник или навигатор) с передачей NMEA-данных по Bluetooth. Тогда вам следует приобрести: Iteaduino Mega V1.0 (ATmega 2560), Bluetooth Shield и SD Card Shield. (Например, свой смартфон Nokia 6110 Navigator с программой ExtGPS я мог применить в этом варианте).
  3. У вас нет GPS-устройства или нет возможности получить с него NMEA-данные - мой вариант комплекса. Тогда вам следует приобрести Iteaduino Mega V1.0 (ATmega 2560) и GPS Shield V1.0 (+Micro SD интерфейс) + Активную GPS антенну (в новом варианте: GROVE - Модуль GPS (с мини антенной)SD card Shield V3.0).
  Выход данных:
  1. USB: вывод MUX NMEA-данных по USB будет по-умолчанию в моем варианте комплекса. Следующие пункты зависят от конкретной конфигурации комплекса.
  2. RS-232: если остался свободный UART, то через конвертер сигналов RS232-TTL MUX NMEA-данные можно вывести на морское NMEA-оборудование или любое другое устройство с интерфейсом RS-232.
  3. Bluetooth: если остался свободный UART, то используя  Bluetooth Shield (если он не используется для входа данных),  MUX NMEA-данные можно вывести на любое устройство с  Bluetooth (КПК, смартфон, ноут, таблетку).
  4. Wi-Fi (пока не изучал, но думаю проблем не будет).
В минимальных конфигурациях комплекса для индикации состояния системы можно использовать светодиоды . Для топовых конфигураций можно установить TFT/LCD-дисплей.

Все зависит от связки: цена - возможности комплекса - потребности пользователя!



Полезные материалы по проекту:

Платформа Arduino (AVR):

Платформа Leafmaple (ARM STM32):
Конвертер RS232-TTL или как подключить NMEA-устройства к МК:
Некоторые результаты создания карт глубин и 3D-моделей дна из Интернет:
  • DrDepth: примеры с сайта разработчика программы (ссылка).
  • DrDepth: модель дна (ссылка).
  • http://www.rusfishing.ru (требуется регистрация для просмотра вложений).

Форумы по данной тематике, которые натолкнули меня на создание первого варианта комплекса:
Форумы по батиметрии:
Ссылки на активные датчики глубины фирмы CruzPro Ltd:
Сайты разработчиков ПО для навигации и моделирования:
(Продолжение следует)

37 комментариев:

  1. Здорово, красиво, но... если руки не оттуда растут и с трудом отличу транзистор от конденсатора, а цели такие же, только глубины для создания модели дна от 10 до 200 метров. Какое оборудование посоветуете, и как реализовать? В основном - море.

    ОтветитьУдалить
    Ответы
    1. 1) Ваш диапазон глубин не влияет на выбор варианта комплекса, влияет только на выбор самого эхолота. Мой по спецификации должен добивать до 274м (http://www.garmin.ru/eholoty-cat/fishfinder-300c.html). Если рыбопоисковик не нужен, то активный датчик глубины, смотрите ссылку в статье, там есть и до 300м, и стоить будет намного дешевле, прайс у них на сайте есть.

      2) Если не дружите с радиоэлектроникой, то можно попробовать первый вариант с ноутбуком, плавсредство ваше позволяет, раз в море. Там паять почти ничего не надо, ну разве что выход Tx/GND эхолота к преобразователю USB-RS232 для подключения к ноутбуку по USB и подать питание от аккумулятора на эхолот, думаю, с этим каждый справится (добавил фото про это).
      GPS с USB (например, GlobalSat BU-353, выбирать вам). Т.о., у вас оба устройства вяжутся к ноутбуку по USB. Дальше дело установки и настройки ПО на ноутбуке.

      3) Если бы второй вариант комплекса был в производстве и доступен для приобретения, то, естественно, я бы рекомендовал второй вариант. Приобрели, подключили эхолот (GPS уже в комплексе) и в море, на SD треки копите, на NMEA-мониторах или LCD самого комплекса навигационную информацию видите!

      Удалить
    2. Спасибо за ответ. Мне более подходит второй вариант. Возможно ли будет попросить о помощи в приобретении и сборке необходимого набора? Благодаря вам, я начинаю понимать, что же мне надо..

      Удалить
    3. Конечно, обращайтесь! (вспоминаю себя год назад)

      1) Помощь в приобретении - что подразумеваете?
      Мой начальный вариант комплекса: там прямые ссылки на устройства, которые я себе заказал: Iteaduino Mega V1.0 (ATmega 2560), GPS Shield V1.0 (+Micro SD интерфейс), Активная GPS антенна.

      2) По сборке вопросы задавайте.

      P.S. Второй комплекс находится на стадии прототипирования, т.е. по моему Плану реализации проекта - пункт №3. Сейчас ожидаю Активную GPS-антенну. Дорабатываю программный код, обдумываю функционал комплекса...работы пока хватает.

      Но Основные задачи комплекса достигнуты: сохранение данных на SD-карту в формате трек-файла OziExplorer, вывод в реальном времени MUX NMEA-данных на USB.

      Удалить
    4. В принципе, в Arduino варианте тоже ничего паять не надо, RS233-TTL конвертер можно найти готовый. Остальное все можно подключить проводами, но такой вариант прокатит только для прототипа, на водных просторах с вибрацией от мотора и качке неизвестно как поведут себя контактные разъемы на платах.

      Удалить
  2. Добавил фото в первый вариант комплекса.
    Добавил варианты интерфейсов вывода данных во второй вариант.
    Добавил ссылки на активные датчики глубины CruzPro Ltd и их цены.

    ОтветитьУдалить
  3. Добавил фото проверки в OziExplorer записанных на SD-карту треков.

    Дело близится к завершению, осталось совсем немного: обдумать работу с INI-файлом для чтения настраиваемых параметров, работу светодиодов для отображения процессов чтения и записи данных, сделать RS232-TTL конвертер для Эхолота, самое главное - продумать и сделать влагозащитный корпус для всего этого.

    ОтветитьУдалить
  4. Добавил фото по завершению прототипа комплекса.

    В выходные можно провести тестирование программной части комплекса с выездом на автомашине. Вместо глубины подставлять в алгоритм альтитуду.

    ОтветитьУдалить
  5. Первый тест: 12 часов записи данных на SD-карту.
    Описал в статье.

    ОтветитьУдалить
  6. Второй тест. Тестирование комплекса при поездке на автомобиле.
    Добавил.

    ОтветитьУдалить
  7. Функциональные возможности комплекса.
    Добавил.

    ОтветитьУдалить
  8. Новая версия программы: GPS, Эхолот или MUX NMEA-данные от обоих устройств можно подключить к любому UART (UART1 или UART2).

    ОтветитьУдалить
  9. Вопрос - а если мой эхолот будет работать по протоколу NMEA 2000, это не будет большой проблемой? В этом месяце буду заказывать эхолот.Основная задача, кроме поиска рыбы в море, еще писать глубины и профиль дна, с последующим моделированием.

    ОтветитьУдалить
    Ответы
    1. Для данного комплекса будет проблемой, т.к. NMEA-2000 это совершенно другой стандарт, он использует другой протокол передачи данных -> нужен другой софт и другая программа на МК.
      В статье красным помечено, что используется NMEA-0183!

      Удалить
  10. Третий тест. Тестирование комплекса при низких скоростях передвижения.

    Появилась серьезная проблема с работой GPS-модуля.
    Описал в статье.

    ОтветитьУдалить
  11. Пришел корпус. Комплекс собран. Протестирован на водоеме.
    Добавил фото.

    Сейчас идет анализ работы комплекса, записанных треков. Работа над ошибками и проблемами.

    ОтветитьУдалить
  12. Здравствуй Garry, я хотел собрать аппарат..который будет считать количество рыб с помощью эхолота. Могу ли я это сделать?..+ использовать Ардуино...я хотел всю информацию записывать на SD карту(информация о рыбе,координаты,время и т.д) Спасибо.

    ОтветитьУдалить
    Ответы
    1. Добрый день.
      Эхолот выдает данные глубины (NMEA DBT и DPT) до дна - мощный отраженный от дна сигнал. Как получить с рыбопоискового эхолота данные о помехе со слабым сигналом (рыба, топляк и т.п.) в толще воды через NMEA мне не ведомо. Можно самому анализировать отраженный сигнал, но данной темой не занимался, данное устройство упоминается на форуме http://www.rusfishing.ru/forum/showthread.php?t=8139 , автор Arsun, можете задать вопрос там.
      Если получится выводить данные о помехе (например в новом своем NMEA-сообщении), то такой комплекс становится подобен моему.

      Мне не понятна цель вашего мероприятия. Для чего требуется подсчет рыб да еще с фиксацией их координат и времени?

      Удалить
  13. Добавил тестирование комплекса на водоеме. Результат в программе DrDepth.

    ОтветитьУдалить
  14. На замену шилда с GPS-модулем GlobalSat EB-365 заказал GROVE модуль GPS на чипе U-Blox Neo-6М, SD card Shield V3.0 с GROVE контактами. GROVE - Модуль Serial Bluetooth для использования внешнего Bluetooth-GPS или для возможности отправки навигационных данных комплекса на внешнее устройство (смартфон, таблетку и т.д.).

    Разработка комплекса продолжается!

    ОтветитьУдалить
  15. Начато описание нового комплекса с использованием GPS-модуля U-Blox Neo-6M и модуля Serial Bluetooth.

    ОтветитьУдалить
    Ответы
    1. ... и представлен результат работы комплекса - 3D-модель дна глубоководного участка озера.

      Удалить
  16. Создание комплекса, можно сказать, завершено!

    Сейчас идет накопление больших объемов данных - треков с водоемов. Для каждой следующей поездки на рыбалку используется результат предыдущих поездок - растровая карта глубин с наложением спутниковой карты местности. Масштаб карты приблизительно = 1:6000 (в 1см 60м).

    К закрытию сезона осталось реализовать работу комплекса с Bluetooth да "отшлифовать" программный код комплекса.

    P.S.
    Если кому-то интересно, то задавайте вопросы и пишите письма!

    ОтветитьУдалить
  17. Работа проделана огромная, позвольте добавить пару комментариев. Что-то уже реализовано вами, но, думаю, небольшая систематизация не помешает.
    1. Наука называется "гидрография", процесс - "батиметрическая съемка" (bsthymetric survey), ключевое слово для поиска различной документации - "батиметрия". Выбор размера сетки профилей в зависимости от масштаба карты и точности приборов - всё давно расписано.
    Профильный форум: http://geodesist.ru/forum/forums/Гидрография-и-подводные-съемки.55/
    2. Для оптимальной съемки делается сетка перпендикулярных профилей. Соответственно нужен софт для хождения по этой сетке. Эта методика позволяет выловить задержки сигнала (latency, в ваших исследованиях проходит под термином "асинхронность").
    3. Влияние latency на батиметрической карте выглядит как изобаты пилообразной формы. Форма пилы четко повторяет последовательность хождения профилей в противоположных направлениях.
    4. Самое сложное в съемке, как вы уже заметили - синхронизация данных. Вопреки расхожему мнению, время, идущее в NMEA, не является точным. Это время показывает в какой момент произведено измерение координаты, а в программу строка приходит с некоторым запозданием (зависит от приемника, количества сообщений NMEA, даже от baudrate).
    С эхолотом еще сложнее - у него нет точных часов. Поэтому обычно идет привязка данных к системному (компьютерному) времени, а уже в процессе обработки данные сводятся воедино. Мои заметки на эту тему: http://geodesist.ru/forum/threads/obs-и-nav.5446/page-2#post-81473
    Подбирая расхождение времени между устройствами, добиваются "сбивки крестов", т.е. одинаковых измерений глубин в пересечениях. Пилообразные изобаты при этом сглаживаются сами собой.
    5. Если нет возможности ставить GPS-антенну строго над излучателем - по-хорошему надо записывать истинный курс; для малых судов счислимый из $GPVTG не годится. Зная курс судна и координату антенны, вычисляется координата излучателя (офсет, offset). Но, наверное, антенну поставить над излучателем проще.
    6. При измерениях в открытых водах (море, залив) данные эхолота предварительно корректируются на прилив, только после этого можно подгонять latency, сверять кресты и строить изобаты.

    ОтветитьУдалить
    Ответы
    1. Спасибо за замечания и советы. Ознакомлюсь.
      Ссылки добавлю в статью.

      Удалить
  18. Описал ошибки вносимые комплексом:
    (1) и (2) Ошибка привязки данных о глубине к географическим координатам.
    (3) Вычисления с плавающей точкой.

    ОтветитьУдалить
  19. Для себя решил проблему синхронизации очень просто.
    Связка у меня такая, Gps приемник( )с выходом uart, через конвертер уровней напряжений max 232, подключаем на ВХОД эхолота. И уже с ВЫХОДА эхолота, берем данные в комплексе (позиция, глубина) и направляем в любое устройство( нетбук, кпк, блютуз донгл).
    Примечание: использовал GPS-приемник (http://www.wondeproud.com/product_6_2_1.html),только настроил на скорость 4800 бод. Эхолот Humminbird 717,все это дело подключалось через шнурок с переходником к нетбуку или к блютуз свистку HC-05 Bluetooth .
    А в общем считаю , что целесообразнее делать так: Ездишь на лодке, собираешь данные на карту памяти с эхолота и GPS используя( http://www.drdepth.se/extras_log.php?l=gb ).
    Дома данные обрабатываешь в DrDepth-рисуешь карту, и заливаешь, или в автонавигатор с Ozi CE( в полиэтиленовом герметичном пакете ), или в эхолот (если позволяет эхолот), или в КПК (drdepth,ozi ce ), или на нетбук (windows)(drdepth,ozi,sas planet,google earth).

    ОтветитьУдалить
    Ответы
    1. Да, просто еще один вариант сопряжения двух устройств - GPS и Эхолота.
      OpenLog подойдет в вашем случае, когда ваш Эхолот (или GPS) может объединить NMEA потоки), а что делать тем, у кого Эхолот и GPS выдает данные только наружу?

      Удалить
  20. Этот комментарий был удален автором.

    ОтветитьУдалить
  21. KaternikSPB
    Вот это молодца....
    Только недавно напал на Arduino.
    Аппаратная часть раскрыта, а о программах то ничего нет.
    :-))
    А без программ - это бездушные железки.
    Вопрос:
    Для снятия данных с GPS модуля в формате NMEA для Mega 2560 какую использовали библиотеку ?

    ОтветитьУдалить
    Ответы
    1. Сам читаю (пишу в) UART без библиотеки, универсальный парсер NMEA-сообщений не нужен, там все просто.
      Пишите на почту, все объясню-покажу.

      Сейчас создано еще 2 варианта на разном железе: один на заказ сделал с использованием Bluetooth на вывод MUX NMEA, второй - для себя, а то все на соплях было сделано. Нет времени выложить фотосессии с описанием.

      С программой помогу, если соберете железо из последних двух вариантов.

      Удалить
    2. Уточню последнюю фразу: последние 2 варианта - это те, которые еще не выложил.

      Удалить
    3. > Пишите на почту, все объясню-покажу.
      Как вам написать на почту ? - Адрес закрыт.

      Удалить
    4. Тут кликните на мое имя, зайдете в профиль, там есть ссылка "Адрес эл. почты", если навести курсор, то внизу браузера появится адрес, если кликнуть на ссылку, то запустится почтовая программа.

      Удалить
  22. В раздел "Сайты разработчиков ПО для навигации и моделирования" красным добавил комментарий по DrDepth, добавил ссылку на архив сайта DrDepth.
    Добавил ссылку по новой программе ReefMaster.

    ОтветитьУдалить
  23. Начал выкладывать новый материал:
    IV. Новый вариант комплекса на МК с использованием Serial Bluetooth и RS232 Shield

    ОтветитьУдалить
  24. Добавил примеры созданных растровых карт для OziExplorer.

    ОтветитьУдалить