Перейти к содержимому

Коммутация элементов для построения GPS-логгера с ublox на SD-карту.


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 28

#1 nkk

nkk

    Продвинутый пользователь

  • Участник
  • PipPipPip
  • 54 сообщений

Отправлено 04 Март 2016 - 13:28

Привет! Хочу записывать данные с GPS (которые впоследствии сможет распарсить GPSBabel) на SD-карту.
Имеется GPS-модуль "GY-NEO6MV2", успешно шлет NMEA-сообщения (подключал к Orange Pi PC, но неудачно спалил оранжу питание, да и высокая мощность и габариты компа меня не устраивали).
Планирую подключить к этому, этому или этому (еще не выбрал) так:
Прикрепленный файл  1.png   15,8К   29 Количество загрузок:
(резисторы 1.8к вверху и 3.3к внизу).

Подскажите, пожалуйста, будет ли работать, как быть с питанием и какие версии (5-ти или 3.3-х вольтные) плат лучше брать?
Если 3.3, то резисторы не понадобятся?
Прикрепленный файл  e71A3LL1w9k1.jpg   68,93К   34 Количество загрузок:

Питать планирую от двух аккумуляторов 18650, подключенных последовательно: 6-8.4В

Напряжение могу понижать через модуль KIS-3R33S, но в описании Arduino сказано, что можно подавать на вход RAW - как лучше?
... или на RAW подавать напряжение с аккумуляторов а на VCC карты и GPS-модуля подавать 5В через KIS?

А еще, говорят, можно как-то напряжение измерять, если это так, хотелось бы мигать светодиодом при достижении 6.2В на аккумуляторах и при 6В отключать устройство.

#2 neox-inside

neox-inside

    Пользователь

  • Участник
  • PipPip
  • 19 сообщений

Отправлено 04 Март 2016 - 17:22

Просмотр сообщенияnkk сказал:

А еще, говорят, можно как-то напряжение измерять, если это так, хотелось бы мигать светодиодом при достижении 6.2В на аккумуляторах и при 6В отключать устройство.

Средствами ардуино, до пяти вольт можно только узнать.

int sensorValue = analogRead(A0);
float voltage = sensorValue * (5.0 / 1023.0);

Сообщение отредактировано.


#3 nkk

nkk

    Продвинутый пользователь

  • Участник
  • PipPipPip
  • 54 сообщений

Отправлено 04 Март 2016 - 21:51

neox-inside, спасибо, можно попробовать подключить стабилитрон, как мне подсказали в предыдущей теме, последовательно к выводу и прибавлять его номинал к показанию.

Короче, как я понял, надо заказывать и щупать всё своими руками, мультиметром и постараться не спалить ничего.

Сообщение отредактировано.


#4 Naevus

Naevus

    Продвинутый пользователь

  • Участник
  • PipPipPip
  • 1 838 сообщений

Отправлено 05 Март 2016 - 11:39

Не надо стабилитрон (хотя - почему бы и нет?)
Вольтметр: http://digitrode.ru/...na-arduino.html
Только два момента: резисторы нужны точные (можно заменить калибровкой) и с минимальным температурным коэффициентом (если устройство уличное)
Насчет калибровки... поскольку вам нужно напряжение до десятых, то обязательно читать: http://tim4dev.com/a...true-voltmeter/

Про питание - подаем на raw, c +5 будет 5в. НО ток, который оттуда можно снять зависит от версии платы (и, наверняка, от жадности китайцев сделавших стабилизатор). Очень полезно поискать свою плату тут (хотя бы будет на что ориентироваться): http://www.pighixxx....noutspg/boards/

Вообще сайт в закладки для ардуиностроителей! Там же есть примеры "типовых" соединений (например sd карточек).

с пина 3.3 можно снимать и 3.3. Как правило - сама ардуина работает с 3-вольтовой периферией. Вопрос в периферии - не помрет ли она от 5в сигналов. Возможно имеет смысл взять переходник 3.3-5. Но если сигналы односторонние - наверное достаточно и резисторов.

ps Стабилизаторы линейные я бы не стал использовать для устройства на батарейках. Оставьте одну батарею (ну иди две параллельно), а до 5в (если периферия не станет работать напрямую от батареи) повышать dcdc преобразователем от повербанка (не раз обозревались). Если к нему в пару взять плату заряда с защитой (в тех же обзорах. Да и у китайцев они часто парами продаются. Цена - не больше1 бакса за пару), то избавитесь от головняка с балансировкой при зарядке.

Сообщение отредактировано.


#5 nkk

nkk

    Продвинутый пользователь

  • Участник
  • PipPipPip
  • 54 сообщений

Отправлено 06 Март 2016 - 13:32

Периферия - GPS-модуль - может работать и от 5В, и от 3.3В, хотя, мне показалось, при питании от 5В, он быстрее начинает выдавать позицию.

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

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

#6 Naevus

Naevus

    Продвинутый пользователь

  • Участник
  • PipPipPip
  • 1 838 сообщений

Отправлено 06 Март 2016 - 14:09

Просмотр сообщенияnkk сказал:

при понижении напряжения на батарее, повышающая будет потреблять больше тока, - и защита срабатывающая по току, отключает батарею
Хм. Не знал о такой подставе.
тогда, поскольку все умеют от 5в - делайте как намечали изначально - последовательно 2 батареи + понижайка до 5в. Только понижайку импульсную берите, а не пассивную КРЕНку. ну и вольтметр как по ссылкам.

#7 nkk

nkk

    Продвинутый пользователь

  • Участник
  • PipPipPip
  • 54 сообщений

Отправлено 07 Март 2016 - 17:03

Просмотр сообщенияNaevus сказал:

Не знал о такой подставе
приедет через месяц - перепроверю, возможно, это у меня вырубалась повышайка из-за перегрева - питал Orange Pi PC, а там от 400 мА 5В
aliexpress.com/item//32615930404.html - нашел еще дешевле плату заряда с защитой ($0.4)

Просмотр сообщенияNaevus сказал:

понижайку импульсную берите, а не пассивную КРЕНку.
KIS-3R33S, вроде, импульсная, OPI на нем работало пару месяцев, у ардуины, вроде, ток на порядок меньше (и частота в 30 раз ниже :D)... Но от 6 до 5 Вольт понижать, наверное, не следует, а настроить ее на 3.3В; говорят, эта понижайка довольно точная (хотя у меня она выдает 4.7В) - http://www.aliexpres...2479410953.html

Узнать бы еще какой ток потребляет GPS-модуль

Сообщение отредактировано.


#8 nkk

nkk

    Продвинутый пользователь

  • Участник
  • PipPipPip
  • 54 сообщений

Отправлено 13 Март 2016 - 12:47

Просто создал новый "скетч", выбрал ATmega168,
подключил из меню библиотеку SD:
#include <SD.h>
нажал [Проверить]
В результате получил сообщение:
Скетч использует 7 792 байт (54%) памяти устройства. Всего доступно 14 336 байт.
Глобальные переменные используют 937 байт (91%) динамической памяти, оставляя 87 байт для локальных переменных. Максимум: 1 024 байт.
Недостаточно памяти, программа может работать нестабильно.
Стало быть, данный проц не тащит.
Не понятно, почему пишется "может работать", разве нельзя точно вычислить объем выделяемой под переменные памяти и выводить "может-не-может" только при наличии динамических переменных в коде? За такие слова на экзаменах по философии а или на защите могут и докопаться, и правильно сделают!

Прискорбно, что об это мне инфы не попадалось, в том числе и в описании библиотеки на сайте arduino, так и на форуме не ответили.

При выборе Atmega328, и последующей "пересборке":
Скетч использует 5 732 байт (18%) памяти устройства. Всего доступно 30 720 байт.
Глобальные переменные используют 800 байт (39%) динамической памяти, оставляя 1 248 байт для локальных переменных. Максимум: 2 048 байт.

Заказал оба проца, первый, может, еще куда пригодится, если сможет.

Сообщение отредактировано.


#9 nkk

nkk

    Продвинутый пользователь

  • Участник
  • PipPipPip
  • 54 сообщений

Отправлено 14 Март 2016 - 22:22

Итак, скрейтч, будь он неладен, готов; прошу знающих посмотреть и отписаться!
код на github

Прикрепленный файл  2.png   28,33К   16 Количество загрузок:
CH340 - usb-to-ttl - к компьютеру;
как организовать питание SD-карты, пока не понятно, может, такой же делитель поставить?

Кнопка срабатывает через треть секунды после отпускания:
- для переоткрытия файла, если удержание было от пол- до пяти секунд;
- для "выключения", если удержание было более пяти секунд.

Светодиод мигает при глюках чтения/записи и загорается после "выключения".

При пересоздании файла, как и при начальной инициализации, создается файл с именованием `#.gps`, где # - номер по порядку в 16-ричном виде, имеющиеся файлы не затираются.

При "выключении" файл закрывается и запускается delay() на час - чобы можно было отключить вручную питание без последствий.

Хотелось бы ЕЩЕ ДО ПРИБЫТИЯ товара найти и исправить глюки и, возможно, что-то сделать со временем.

Сообщение отредактировано.


#10 Naevus

Naevus

    Продвинутый пользователь

  • Участник
  • PipPipPip
  • 1 838 сообщений

Отправлено 17 Март 2016 - 11:13

Вопрос про сн340 - оно что, еще и к компьютеру будет подключено на постоянку? Или это только для прошивки?

#11 nkk

nkk

    Продвинутый пользователь

  • Участник
  • PipPipPip
  • 54 сообщений

Отправлено 19 Март 2016 - 16:50

Просмотр сообщенияNaevus (17 Март 2016 - 11:13) писал(а):

Вопрос про сн340 - оно что, еще и к компьютеру будет подключено на постоянку? Или это только для прошивки?
только для прошивки и тестирования после прошивки.

CH340 - usb-to-ttl - уже пришел и я с его помощью настроил GPS-модуль на вывод только RMC- и GGA- сообщений, (достаточно для позиции, скорости и высоты), поэтому для тестирования нет необходимости привязываться к компьютеру.
Также, настроил интерфейс GPS-модуля на частоту 4800 бод и вывод координат с интервалом раз в 5 секунд, надеясь таким образом сэкономить место на накопителе; через 4 часа лог составит чуть больше 1МБ.

Еще "беда": GPS на ровном месте с балкона выдает такую запись положения:
Прикрепленный файл  Снимок.GIF   146,42К   12 Количество загрузок:
не знаю, глюк ли это конкретного модуля, или особенность работы на конкретном месте, или особенность работы дешевых GPS-модулей.

П.С.
записанный трекк впоследствии обрабатывается такой командой:
gpsbabel -w -r -t -i nmea -f 0.gps -x simplify,crosstrack,error=0.001k -o gpx -F track.gpx
после чего размер становится в 5 раз меньше, но это только для данного трека, записанного с одной точки.
Еще не выбрал себе какой-то конкретный способ "оптимизации" трека перед публикацией, тут можно найти еще способы.

Сообщение отредактировано.


#12 Naevus

Naevus

    Продвинутый пользователь

  • Участник
  • PipPipPip
  • 1 838 сообщений

Отправлено 19 Март 2016 - 21:29

Запись прикольная, но у меня в машине регистратор иногда так же ведет себя - надо оставить на балконе на полчаса минимум, чтобы он (модуль) спутники переловил все. Тогда может получше будет.
По потимизации - я думаю, ардуина достаточно мощности имеет, чтобы оптимизировать данные "на лету". (если я правильно понял что делает оптимизация).
Так же, например, на лету можно избавиться от глюка с положением - например, записывая трек по средневзвешенному значению последних 5 точек (тут выбирается количество точек в зависимости от частоты поступления данных и от предполагаемой максимальной скорости объекта)

С питанием не совсем понял вопроса. У sd питание 3,3? Вот чем было обусловлено решение выбора ардуины мини? Почему не нано? В нано есть выход 3,3в, есть вход миниусб, есть набортный СН340.... куча геморой ушла бы. Цена за это всего лишь небольшое увеличение габаритов платы.

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

#13 nkk

nkk

    Продвинутый пользователь

  • Участник
  • PipPipPip
  • 54 сообщений

Отправлено 20 Март 2016 - 12:36

Под "оптимизацией" я понимаю процесс преобразования данных с GPS-модуля в GPX-формат перед публикацией трека.
На ардуино можно парсить NMEA-строки или, предварительно настроив GPS-модуль, данные UBX-протокола, и записывать их в формат GPX, есть 2 аргумента этого не делать:
2) формат GPX - не последовательный, в случае глюка, мы получим битый XML-файл; NMEA-сообщения же дописываются в конец файла и уже содержат проверку корректности, в случае ошибок будут просто проигнорированы конвертером;
1) это лишняя работа, ведь можно это выполнить с помощью стороннего софта - GPSBabel - с ардуино я все равно не смогу опубликовать трек, значит сохранение его на компе - необходимый этап, а раз так, то можно конвертировать на компе =)
Публикуется трек на сервисе mapmyride, из PHP-скрипта, курлом с имитацией браузера и кукисов, так что предварительно запустить одну команду - не проблема. BAT-файл, запускающий скрипт, ассоциируется с расширением файла и для меня, как пользователя, всё сводится к даблклику по файлу после подключения SD-карты к компу... Ранее я такое уже проделывал с KMZ, через неделю я даже забыл, где лежит php-скрипт и как он работает =)

Просмотр сообщенияNaevus сказал:

Почему не нано?
Скорее всего, потому что на момент заказа, я не имел представления об особенностях подключения SD-карты, и особенностях схем питания устройств, а СН340 уже был заказан за 2 недели до этого (для подключения GPS-модуля к компьютеру)... А вчера я узнал, что при подключении GPS-модуля к источнику питания 3V3, он выдает только текстовые сообщения со ссылкой на сайт производителя (хотя в настройках включены только RMC и GGA), так что питать его надо только от 5V.

Ах, да, заказано это (Atmega168, 5V) и это (Atmega328, 5V) и положен глаз на это (Atmega328, 3.3V), есть непонимание работы устройств по уровням сигналов =(

Просмотр сообщенияNaevus сказал:

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

Сообщение отредактировано.


#14 Naevus

Naevus

    Продвинутый пользователь

  • Участник
  • PipPipPip
  • 1 838 сообщений

Отправлено 20 Март 2016 - 15:11

Я думаю - ваши опасения насчет уровня сигналов слишком преувеличины.
стандартная "5-вольвтовая" ардуина понимает по лог1 - напряжение выше 3в, а под лог0 - напряжение меньше 3в. Поэтому - проблемы с приемомом данных не будет 100%

Возможны проблемы с передачей данных - всетаки на передачу лог1 - это 5в. Но тут все зависит от перефирии - сможет она пережить 5в на входе или нет. В большинстве случаев - достаточно резисторов (а иногда и без них будет рабоатать, но все зависит от перефирии). как я говорил - проблемы будут только тогда, когда одна линия используется и для передачи и для приема (тогда резистор на передачу гасит 5 до 3.3в, но он же на прием гасит 3,3 до меньше 3в - т.е. ардуина перестает видеть единицы!). В таких случаях спасет двунаправленный конвертер 3,3-5.

По поводу того что заказывать - сам так поступал полгода назад - заказывал все, на что обзоры встретил. Правда мне повезло - у меня результатом оказалось пяток нано плат... Но сработал закон подлости - когда у меня на машине полетело реле поворотов - в штатный корпус могла бы запросто войти мини, но не нано :)...

ps у меня в проекте метеостанции (см крайний обзор) модуль 3,3в, перефирия - датчики температуры и влажности - 5в, датчик давления 3.3в, экраны все 5в, датчик движения 3,3 (питается от 5 - но там своя заморочка, он не подключается к процессору)... Все работает. (ну почти - вчера отвалился уличный датчик влажности - надо лезть паять нормально, но некогда пока).

#15 nkk

nkk

    Продвинутый пользователь

  • Участник
  • PipPipPip
  • 54 сообщений

Отправлено 20 Март 2016 - 17:33

Просмотр сообщенияNaevus сказал:

стандартная "5-вольвтовая" ардуина понимает по лог1 - напряжение выше 3в, а под лог0 - напряжение меньше 3в.
спасибо, буду знать, жаль, сразу не узнал, наверное, плохо читало описание.

Всего два устройства:
1) GPS-приёмник, подключенный по UART, с него только читаем и ничего в него не пишем (даже RX<-TX с него на выводил на картинке);
2) SD-карта, подключается по SPI, там на передачу используются отдельные линии - http://www.pighixxx....sd-card-simple/ ;
1%-резисторы только что купил на базаре, обошлись 20 штук за $0.23 (6грн), жаль не нашлось выводных - набрал SMD-шниых, буду к плате припаивать, может, так даже надежнее выйдет...
Аййй, надо было такой или такой модуль заказывать и не париться!!111

Сообщение отредактировано.


#16 Naevus

Naevus

    Продвинутый пользователь

  • Участник
  • PipPipPip
  • 1 838 сообщений

Отправлено 20 Март 2016 - 19:46

Просмотр сообщенияnkk сказал:

спасибо, буду знать, жаль, сразу не узнал, наверное, плохо читало описание
Ну я наоборот - и не задумывался об этом - это как с ком-ттл - для совместимости компорты (из последних) принимали 0в за лог1, и 5в - за лог0 (в нормальном режиме - эти сигнаы -12 и +12, если ничего не путаю).
А про 3,3 узнал - прошел тут недавно курсы по ардуине на куросере - рекомендую, кстати. Впечатление двоякое: местами пол-лекции разжевывают какая ножка у светодиода длиннее. А местами предлагают настроить ПИ-Д регулятор факультативно... Но в целом курс понравился.... Так вот - там про 3в было в контрольных задачах. потому и запомнил :)

Да и, кстати, я же ссылку выше давал на пигхикс - не просмотрели? Там же типовые схемы подключения перефирии, в т.ч. СД-шки есть (то то я удивляюсь что вас все еще волнует эта тема)

В общем, как понял, проблемы с сигналами быть в принципе не должно.

Про оптимизацию "на лету" имел ввиду, чтобы не писать на карту точку, если она не сместилась.. Хотя, как понимаю, экономия места не главная задача :)
Зато вот если писать координаты по средневзвешенному (про это тоже на курсах была лекция) - то избавишься от дергания координат.

#17 nkk

nkk

    Продвинутый пользователь

  • Участник
  • PipPipPip
  • 54 сообщений

Отправлено 20 Март 2016 - 21:01

Просмотр сообщенияNaevus сказал:

я же ссылку выше давал на пигхикс - не просмотрели?
смотрел по SD-карте, но там меня смутило питание 3.3V.
Спаял на разъеме от бракованного кардридера, выглядит страшно:
Прикрепленный файл  IMGP3119.jpg   179,98К   16 Количество загрузок:
кардридер был рассчитан на 4 типа карточек, с одной стороны разъемы я отпаял и на их место припаиваю контакты интерфейса, с другой остались разъемы для SD и MicroSD.

Сообщение отредактировано.


#18 nkk

nkk

    Продвинутый пользователь

  • Участник
  • PipPipPip
  • 54 сообщений

Отправлено 21 Март 2016 - 12:00

Просмотр сообщенияNaevus сказал:

сн340 - оно что, еще и к компьютеру будет подключено на постоянку?
Кстати! Если убрать SoftwareSerial и использовать аппаратный порт, то можно сэкономить 1720 байт памяти и 167 байт глобальных переменных.

Прикрепленные файлы


Сообщение отредактировано.


#19 Naevus

Naevus

    Продвинутый пользователь

  • Участник
  • PipPipPip
  • 1 838 сообщений

Отправлено 21 Март 2016 - 15:48

Просмотр сообщенияnkk сказал:

Если убрать SoftwareSerial и использовать аппаратный порт, то можно сэкономить 1720 байт памяти и 167 байт глобальных переменных.
Ну в принципе логично. 2кб - совсем неплохо.

#20 nkk

nkk

    Продвинутый пользователь

  • Участник
  • PipPipPip
  • 54 сообщений

Отправлено 25 Март 2016 - 14:45

Заменил использование отдельного светодиода на встроенный и вынес код пересоздания/закрытия файла в отдельную функцию.

Переписал код обработки нажатия кнопки с использованием функции pulseIn() - https://gist.github....e630c/revisions
Не уверен, как он будет работать внутри обработчика прерывания: pulseIn() работает с тем же пином, на который установлен обработчик прерывания.
Попробую это отдельно потестить, когда плата приедет.

void setup() {
  attachInterrupt(0, itrpt2, FALLING);
}
void itrpt2() {
  int tmPress = pulseIn(2, HIGH, 8000000);
  if (tmPress > 5000) {
    halt();
  } else if (tmPress > 300) {
    remkLogFile();
  }
}

Сообщение отредактировано.