Коммутация элементов для построения GPS-логгера с ublox на SD-карту.
#1
Отправлено 04 Март 2016 - 13:28
Имеется GPS-модуль "GY-NEO6MV2", успешно шлет NMEA-сообщения (подключал к Orange Pi PC, но неудачно спалил оранжу питание, да и высокая мощность и габариты компа меня не устраивали).
Планирую подключить к этому, этому или этому (еще не выбрал) так:
1.png 15,8К 31 Количество загрузок:
(резисторы 1.8к вверху и 3.3к внизу).
Подскажите, пожалуйста, будет ли работать, как быть с питанием и какие версии (5-ти или 3.3-х вольтные) плат лучше брать?
Если 3.3, то резисторы не понадобятся?
e71A3LL1w9k1.jpg 68,93К 36 Количество загрузок:
Питать планирую от двух аккумуляторов 18650, подключенных последовательно: 6-8.4В
Напряжение могу понижать через модуль KIS-3R33S, но в описании Arduino сказано, что можно подавать на вход RAW - как лучше?
... или на RAW подавать напряжение с аккумуляторов а на VCC карты и GPS-модуля подавать 5В через KIS?
А еще, говорят, можно как-то напряжение измерять, если это так, хотелось бы мигать светодиодом при достижении 6.2В на аккумуляторах и при 6В отключать устройство.
#2
Отправлено 04 Март 2016 - 17:22
Средствами ардуино, до пяти вольт можно только узнать.
int sensorValue = analogRead(A0); float voltage = sensorValue * (5.0 / 1023.0);
Сообщение отредактировано.
#3
Отправлено 04 Март 2016 - 21:51
Короче, как я понял, надо заказывать и щупать всё своими руками, мультиметром и постараться не спалить ничего.
Сообщение отредактировано.
#4
Отправлено 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
Отправлено 06 Март 2016 - 13:32
Платы и повышающие, и понижающие, и зарядные, ранее покупал, щупал и еще заказал.
Если подключить батарею через плату заряда с защитой и далее через повышающую плату, то
при понижении напряжения на батарее, повышающая будет потреблять больше тока, - и защита срабатывающая по току, отключает батарею (как мне показалось, она там только по току и срабатывает).
Тогда мониторить напряжение не придется, но нужно будет писать на SD-карту так, чтобы отключение питания, произошедшее в произвольный момент времени, не привело к потере данных... Ну, или, хотя бы, можно было бы восстановить их.
#6
Отправлено 06 Март 2016 - 14:09
тогда, поскольку все умеют от 5в - делайте как намечали изначально - последовательно 2 батареи + понижайка до 5в. Только понижайку импульсную берите, а не пассивную КРЕНку. ну и вольтметр как по ссылкам.
#7
Отправлено 07 Март 2016 - 17:03
aliexpress.com/item//32615930404.html - нашел еще дешевле плату заряда с защитой ($0.4)
Узнать бы еще какой ток потребляет GPS-модуль
Сообщение отредактировано.
#8
Отправлено 13 Март 2016 - 12:47
подключил из меню библиотеку 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
Отправлено 14 Март 2016 - 22:22
код на github
2.png 28,33К 17 Количество загрузок:
CH340 - usb-to-ttl - к компьютеру;
как организовать питание SD-карты, пока не понятно, может, такой же делитель поставить?
Кнопка срабатывает через треть секунды после отпускания:
- для переоткрытия файла, если удержание было от пол- до пяти секунд;
- для "выключения", если удержание было более пяти секунд.
Светодиод мигает при глюках чтения/записи и загорается после "выключения".
При пересоздании файла, как и при начальной инициализации, создается файл с именованием `#.gps`, где # - номер по порядку в 16-ричном виде, имеющиеся файлы не затираются.
При "выключении" файл закрывается и запускается delay() на час - чобы можно было отключить вручную питание без последствий.
Хотелось бы ЕЩЕ ДО ПРИБЫТИЯ товара найти и исправить глюки и, возможно, что-то сделать со временем.
Сообщение отредактировано.
#10
Отправлено 17 Март 2016 - 11:13
#11
Отправлено 19 Март 2016 - 16:50
Naevus (17 Март 2016 - 11:13) писал(а):
CH340 - usb-to-ttl - уже пришел и я с его помощью настроил GPS-модуль на вывод только RMC- и GGA- сообщений, (достаточно для позиции, скорости и высоты), поэтому для тестирования нет необходимости привязываться к компьютеру.
Также, настроил интерфейс GPS-модуля на частоту 4800 бод и вывод координат с интервалом раз в 5 секунд, надеясь таким образом сэкономить место на накопителе; через 4 часа лог составит чуть больше 1МБ.
Еще "беда": GPS на ровном месте с балкона выдает такую запись положения:
Снимок.GIF 146,42К 13 Количество загрузок:
не знаю, глюк ли это конкретного модуля, или особенность работы на конкретном месте, или особенность работы дешевых GPS-модулей.
П.С.
записанный трекк впоследствии обрабатывается такой командой:
gpsbabel -w -r -t -i nmea -f 0.gps -x simplify,crosstrack,error=0.001k -o gpx -F track.gpxпосле чего размер становится в 5 раз меньше, но это только для данного трека, записанного с одной точки.
Еще не выбрал себе какой-то конкретный способ "оптимизации" трека перед публикацией, тут можно найти еще способы.
Сообщение отредактировано.
#12
Отправлено 19 Март 2016 - 21:29
По потимизации - я думаю, ардуина достаточно мощности имеет, чтобы оптимизировать данные "на лету". (если я правильно понял что делает оптимизация).
Так же, например, на лету можно избавиться от глюка с положением - например, записывая трек по средневзвешенному значению последних 5 точек (тут выбирается количество точек в зависимости от частоты поступления данных и от предполагаемой максимальной скорости объекта)
С питанием не совсем понял вопроса. У sd питание 3,3? Вот чем было обусловлено решение выбора ардуины мини? Почему не нано? В нано есть выход 3,3в, есть вход миниусб, есть набортный СН340.... куча геморой ушла бы. Цена за это всего лишь небольшое увеличение габаритов платы.
Вариант с резисторами нормально сработает для постоянной нагрузки (если нагрузка сильноточная, то при расчете делителя надо учитывать и сопротивление нагрузки). А вот для sd может оказаться что потребление будет неравномерное - наверняка в момент записи будут пики, которые могут просадить напряжение до неработоспособности. А глюк питания в момент записи - совсем не айс (физически ничо не умрет, но логическая структура карточки может быть серьезно нарушена). Впрочем - возможно я просто престраховываюсь. А возможно - достаточно будет поставить электролит для гашения пиков потребления
#13
Отправлено 20 Март 2016 - 12:36
На ардуино можно парсить NMEA-строки или, предварительно настроив GPS-модуль, данные UBX-протокола, и записывать их в формат GPX, есть 2 аргумента этого не делать:
2) формат GPX - не последовательный, в случае глюка, мы получим битый XML-файл; NMEA-сообщения же дописываются в конец файла и уже содержат проверку корректности, в случае ошибок будут просто проигнорированы конвертером;
1) это лишняя работа, ведь можно это выполнить с помощью стороннего софта - GPSBabel - с ардуино я все равно не смогу опубликовать трек, значит сохранение его на компе - необходимый этап, а раз так, то можно конвертировать на компе =)
Публикуется трек на сервисе mapmyride, из PHP-скрипта, курлом с имитацией браузера и кукисов, так что предварительно запустить одну команду - не проблема. BAT-файл, запускающий скрипт, ассоциируется с расширением файла и для меня, как пользователя, всё сводится к даблклику по файлу после подключения SD-карты к компу... Ранее я такое уже проделывал с KMZ, через неделю я даже забыл, где лежит php-скрипт и как он работает =)
Ах, да, заказано это (Atmega168, 5V) и это (Atmega328, 5V) и положен глаз на это (Atmega328, 3.3V), есть непонимание работы устройств по уровням сигналов =(
Сообщение отредактировано.
#14
Отправлено 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
Отправлено 20 Март 2016 - 17:33
Всего два устройства:
1) GPS-приёмник, подключенный по UART, с него только читаем и ничего в него не пишем (даже RX<-TX с него на выводил на картинке);
2) SD-карта, подключается по SPI, там на передачу используются отдельные линии - http://www.pighixxx....sd-card-simple/ ;
1%-резисторы только что купил на базаре, обошлись 20 штук за $0.23 (6грн), жаль не нашлось выводных - набрал SMD-шниых, буду к плате припаивать, может, так даже надежнее выйдет...
Аййй, надо было такой или такой модуль заказывать и не париться!!111
Сообщение отредактировано.
#16
Отправлено 20 Март 2016 - 19:46
А про 3,3 узнал - прошел тут недавно курсы по ардуине на куросере - рекомендую, кстати. Впечатление двоякое: местами пол-лекции разжевывают какая ножка у светодиода длиннее. А местами предлагают настроить ПИ-Д регулятор факультативно... Но в целом курс понравился.... Так вот - там про 3в было в контрольных задачах. потому и запомнил
Да и, кстати, я же ссылку выше давал на пигхикс - не просмотрели? Там же типовые схемы подключения перефирии, в т.ч. СД-шки есть (то то я удивляюсь что вас все еще волнует эта тема)
В общем, как понял, проблемы с сигналами быть в принципе не должно.
Про оптимизацию "на лету" имел ввиду, чтобы не писать на карту точку, если она не сместилась.. Хотя, как понимаю, экономия места не главная задача
Зато вот если писать координаты по средневзвешенному (про это тоже на курсах была лекция) - то избавишься от дергания координат.
#17
Отправлено 20 Март 2016 - 21:01
Спаял на разъеме от бракованного кардридера, выглядит страшно:
IMGP3119.jpg 179,98К 18 Количество загрузок:
кардридер был рассчитан на 4 типа карточек, с одной стороны разъемы я отпаял и на их место припаиваю контакты интерфейса, с другой остались разъемы для SD и MicroSD.
Сообщение отредактировано.
#20
Отправлено 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(); } }
Сообщение отредактировано.