sonyps4.ru

Солнечный трекер своими руками. Как сделать GPS-маячок для слежения за человеком и авто

Канал “тяп-ляп” показал, как сделать самодельный солнечный трекер для панелей. Они будут автоматически поворачивается вслед за солнцем, увеличивая КПД энергетической установки.

Понадобятся две солнечные батареи мощностью по по 3,5 ватт. На на выходе у одной более 6 вольт, что при последовательном соединении двух батарей даст более 12 вольт. На обратной стороне USB гнездо. Три выхода из трех сегментов батареи. Каждый из которых генерируют по 2 вольта. То есть при необходимости можно подключиться соответствующим образом и получить 2, 4, 6 вольт.

Следующий важный узел – два сервопривода. Один будет поворачивать солнечную батарею по горизонтальной оси, а другой по вертикальной. Эти приводы непростые, их не так просто заставить вращаться. Необходима некоторая доработка. В наборе с каждым из двигателей идут пластиковые крестовины, диски, винты для крепления. Для двигателя приобретённые кронштейны. Также в наборе крепежные винты, подшипник и диски. Контроллер заряда. Он будет принимать энергию от солнечных батарей и передавать её в аккумулятор.

Начнем работу своими руками с электронной начинки. Схема трекера для солнечной панели ниже.

Электрическая схема, плата, программа для редактирования платы: https://cloud.mail.ru/public/DbmZ/5NBCG4vsJ
Схема очень простая и легкая для повторения. Она наиболее удачная из нескольких проверенных вариантов. Но даже ей автору пришлось немножко изменить. Пришлось изменить номиналы переменных и постоянных резисторов, была спроектирована схема печатной платы.

Для начала распечатаем схему печатной платы трекера на специальной бумаге. Это лазерно-утюжная технология. Бумага имеет глянцевый вид. С обратной стороны она обычная матовая. Печатать нужно на лазерном принтере на глянцевой стороне. После контакта с утюгом надо дать остыть и бумага легко отрывается от слоя.

Перед переносом текстолит обязательно нужно обезжирить. Лучше всего использовать мелкую наждачную бумагу. Прикладываем рисунок к плате и проглаживаем горячим утюгом 2 минуты.
Теперь нужно вытравить плату трекера. Можно использовать персульфат аммония. Продается в магазинах радиотоваров. Один и тот же раствор можно использовать несколько раз. Желательно перед применением подогрев жидкости до 45 градусов. Это сильно ускорит процесс травления. Через 20 минут правление успешно завершилось. Теперь нужно снять тонер. Опять используем наждачку или ацетон.

Теперь можно проделать отверстие в плате. Можно приступать к пайке деталей.

Сердце солнечного трекера – операционный усилитель lm324n. Два транзистора типа 41c, типа 42c. Один керамический конденсатор 104. Многие детали автор разработки заменил на smd тип. Вместо диодов 5408 использованные их аналоги smd типа. Главное использовать не менее 3 ампер. Один резистор на 15 килоом, 1 на 47 килоом. Два фоторезистора. 2 подстроечных резисторов на 100 и 10 килоом. Последний отвечает за чувствительность фото датчика.

После нескольких экспериментов с ардуиной решил сделать простенький и не очень дорогой GPS-tracker с отправкой координат по GPRS на сервер.
Используется Arduino Mega 2560 (Arduino Uno), SIM900 - GSM/GPRS модуль (для отправки информации на сервер), GPS приёмник SKM53 GPS.

Всё закуплено на ebay.com, в сумме около 1500 р (примерно 500р ардуина, немного меньше - GSM модуль, немного больше - GPS).

GPS приемник

Для начала нужно разобраться с работой с GPS. Выбранный модуль - один из самых дешевых и простых. Тем не менее, производитель обещает наличие батарейки для сохранения данных о спутниках. По даташиту, холодный старт должен занимать 36 секунд, однако, в моих условиях (10 этаж с подоконника, вплотную зданий нет) это заняло аж 20 минут. Следующий старт, однако, уже 2 минуты.

Важный параметр устройств, подключаемых к ардуине - энергопотребление. Если перегрузить преобразователь ардуины, она может сгореть. Для используемого приемника максимальное энергопотребление - 45mA @ 3.3v. Зачем в спецификации указывать силу тока на напряжении, отличном от требуемого (5V), для меня загадка. Тем не менее, 45 mA преобразователь ардуины выдержит.

Подключение
GPS не управляемый, хотя и имеет RX пин. Для чего - неизвестно. Основное, что можно делать с этим приемником - читать данные по протоколу NMEA с TX пина. Уровни - 5V, как раз для ардуины, скорость - 9600 бод. Подключаю VIN в VCC ардуины, GND в GND, TX в RX соответствующего serial. Читаю данные сначала вручную, затем с использованием библиотеки TinyGPS. На удивление, всё читается. После перехода на Uno пришлось использовать SoftwareSerial, и тут начались проблемы - теряется часть символов сообщения. Это не очень критично, так как TinyGPS отсекает невалидные сообщения, но довольно неприятно: о частоте в 1Гц можно забыть.

Небольшое замечание относительно SoftwareSerial: на Uno нет хардверных портов (кроме соединённого с USB Serial), поэтому приходится использовать программный. Так вот, он может принимать данные только на пине, на котором плата поддерживает прерывания. В случае Uno это 2 и 3. Мало того, данные одновременно может получать только один такой порт.

Вот так выглядит «тестовый стенд».

GSM приемник/передатчик


Теперь начинается более интересная часть. GSM модуль - SIM900. Он поддерживает GSM и GPRS. Ни EDGE, ни уж тем более 3G, не поддерживаются. Для передачи данных о координатах это, вероятно, хорошо - не будет задержек и проблем при переключении между режимами, плюс GPRS сейчас есть почти везде. Однако, для каких-то более сложных приложений этого уже может не хватить.

Подключение
Модуль управляется также по последовательному порту, с тем же уровнем - 5V. И здесь нам уже понадобятся и RX, и TX. Модуль - shield, то есть, он устанавливается на ардуину. Причем совместим как с mega, так и с uno. Скорость по умолчанию - 115200.

Собираем на Mega, и тут нас ждет первый неприятный сюрприз: TX пин модуля попадает на 7й пин меги. На 7м пину меги недоступны прерывания, а значит, придется соединить 7й пин, скажем, с 6м, на котором прерывания возможны. Таким образом, потратим один пин ардуины впустую. Ну, для меги это не очень страшно - всё-таки пинов хватает. А вот для Uno это уже сложнее (напоминаю, там всего 2 пина, поддерживающих прерывания - 2 и 3). В качестве решения этой проблемы можно предложить не устанавливать модуль на ардуину, а соединить его проводами. Тогда можно использовать Serial1.

После подключения пытаемся «поговорить» с модулем (не забываем его включить). Выбираем скорость порта - 115200, при этом хорошо, если все встроенные последовательные порты (4 на меге, 1 на uno) и все программные работают на одной скорости. Так можно добиться более устойчивой передачи данных. Почему - не знаю, хотя и догадываюсь.

Итак, пишем примитивный код для проброса данных между последовательными портами, отправляем atz, в ответ тишина. Что такое? А, case sensitive. ATZ, получаем OK. Ура, модуль нас слышит. А не позвонить ли нам ради интереса? ATD +7499… Звонит городской телефон, из ардуины идет дымок, ноутбук вырубается. Сгорел преобразователь Arduino. Было плохой идеей кормить его 19 вольтами, хотя и написано, что он может работать от 6 до 20V, рекомендуют 7-12V. В даташите на GSM модуль нигде не сказано о потребляемой мощности под нагрузкой. Ну что ж, Mega отправляется в склад запчастей. С замиранием сердца включаю ноутбук, получивший +19V по +5V линии от USB. Работает, и даже USB не выгорели. Спасибо Lenovo за защиту.

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

Программирование
Модуль предоставляет широкие возможности передачи данных. Начиная от голосовых вызовов и SMS и заканчивая, собственно, GPRS. Причем для последнего есть возможность выполнить HTTP запрос при помощи AT команд. Придется отправить несколько, но это того стоит: формировать запрос вручную не очень-то хочется. Есть пара нюансов с открытием канала передачи данных по GPRS - помните классические AT+CGDCONT=1,«IP»,«apn»? Так вот, тут то же самое нужно, но слегка хитрее.

Для получения страницы по определенному URL нужно послать следующие команды:
AT+SAPBR=1,1 //Открыть несущую (Carrier) AT+SAPBR=3,1,"CONTYPE","GPRS" //тип подключения - GPRS AT+SAPBR=3,1,"APN","internet" //APN, для Мегафона - internet AT+HTTPINIT //Инициализировать HTTP AT+HTTPPARA="CID",1 //Carrier ID для использования. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Собственно URL, после sprintf с координатами AT+HTTPACTION=0 //Запросить данные методом GET //дождаться ответа AT+HTTPTERM //остановить HTTP

В результате, при наличии соединения, получим ответ от сервера. То есть, фактически, мы уже умеем отправлять данные о координатах, если сервер принимает их по GET.

Питание
Поскольку питать GSM модуль от преобразователя Arduino, как я выяснил, плохая идея, было решено купить преобразователь 12v->5v, 3A, на том же ebay. Однако, модулю не нравится питание в 5V. Идем на хак: подключаем 5V в пин, с которого приходит 5V от ардуины. Тогда встроенный преобразователь модуля (существенно мощнее преобразователя ардуины, MIC 29302WU) сделает из 5V то, что нужно модулю.

Сервер

Сервер написал примитивный - хранение координат и рисование на Яндекс.картах. В дальнейшем возможно добавление разных фич, включая поддержку многих пользователей, статус «на охране/не на охране», состояние систем автомобиля (зажигание, фары и пр.), возможно даже управление системами автомобиля. Конечно, с соответствующей поддержкой трекера, плавно превращающегося в полновесную сигнализацию.

Полевые испытания

Вот так выглядит собранный девайс, без корпуса:

После установки преобразователя питания и укладывания в корпус от дохлого DSL модема система выглядит так:

Припаивал провода, вынул несколько контактов из колодок ардуины. Выглядят так:

Подключил 12V в машине, проехался по Москве, получил трек:


Точки трека достаточно далеко друг от друга. Причина в том, что отправка данных по GPRS занимает относительно много времени, и в это время координаты не считываются. Это явная ошибка программирования. Лечится во-первых, отправкой сразу пачки координат со временем, во-вторых, асинхронной работой с GPRS модулем.

Время поиска спутников на пассажирском сидении автомобиля - пара минут.

Выводы

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

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

Использованные устройства

  • Arduino Mega 2560
  • Arduino Uno
  • GPS SkyLab SKM53
  • SIM900 based GSM/GPRS Shield
  • DC-DC 12v->5v 3A converter

После нескольких экспериментов с ардуиной решил сделать простенький и не очень дорогой GPS-tracker с отправкой координат по GPRS на сервер.
Используется Arduino Mega 2560 (Arduino Uno), SIM900 - GSM/GPRS модуль (для отправки информации на сервер), GPS приёмник SKM53 GPS.

Всё закуплено на ebay.com, в сумме около 1500 р (примерно 500р ардуина, немного меньше - GSM модуль, немного больше - GPS).

GPS приемник

Для начала нужно разобраться с работой с GPS. Выбранный модуль - один из самых дешевых и простых. Тем не менее, производитель обещает наличие батарейки для сохранения данных о спутниках. По даташиту, холодный старт должен занимать 36 секунд, однако, в моих условиях (10 этаж с подоконника, вплотную зданий нет) это заняло аж 20 минут. Следующий старт, однако, уже 2 минуты.

Важный параметр устройств, подключаемых к ардуине - энергопотребление. Если перегрузить преобразователь ардуины, она может сгореть. Для используемого приемника максимальное энергопотребление - 45mA @ 3.3v. Зачем в спецификации указывать силу тока на напряжении, отличном от требуемого (5V), для меня загадка. Тем не менее, 45 mA преобразователь ардуины выдержит.

Подключение
GPS не управляемый, хотя и имеет RX пин. Для чего - неизвестно. Основное, что можно делать с этим приемником - читать данные по протоколу NMEA с TX пина. Уровни - 5V, как раз для ардуины, скорость - 9600 бод. Подключаю VIN в VCC ардуины, GND в GND, TX в RX соответствующего serial. Читаю данные сначала вручную, затем с использованием библиотеки TinyGPS. На удивление, всё читается. После перехода на Uno пришлось использовать SoftwareSerial, и тут начались проблемы - теряется часть символов сообщения. Это не очень критично, так как TinyGPS отсекает невалидные сообщения, но довольно неприятно: о частоте в 1Гц можно забыть.

Небольшое замечание относительно SoftwareSerial: на Uno нет хардверных портов (кроме соединённого с USB Serial), поэтому приходится использовать программный. Так вот, он может принимать данные только на пине, на котором плата поддерживает прерывания. В случае Uno это 2 и 3. Мало того, данные одновременно может получать только один такой порт.

Вот так выглядит «тестовый стенд».

GSM приемник/передатчик


Теперь начинается более интересная часть. GSM модуль - SIM900. Он поддерживает GSM и GPRS. Ни EDGE, ни уж тем более 3G, не поддерживаются. Для передачи данных о координатах это, вероятно, хорошо - не будет задержек и проблем при переключении между режимами, плюс GPRS сейчас есть почти везде. Однако, для каких-то более сложных приложений этого уже может не хватить.

Подключение
Модуль управляется также по последовательному порту, с тем же уровнем - 5V. И здесь нам уже понадобятся и RX, и TX. Модуль - shield, то есть, он устанавливается на ардуину. Причем совместим как с mega, так и с uno. Скорость по умолчанию - 115200.

Собираем на Mega, и тут нас ждет первый неприятный сюрприз: TX пин модуля попадает на 7й пин меги. На 7м пину меги недоступны прерывания, а значит, придется соединить 7й пин, скажем, с 6м, на котором прерывания возможны. Таким образом, потратим один пин ардуины впустую. Ну, для меги это не очень страшно - всё-таки пинов хватает. А вот для Uno это уже сложнее (напоминаю, там всего 2 пина, поддерживающих прерывания - 2 и 3). В качестве решения этой проблемы можно предложить не устанавливать модуль на ардуину, а соединить его проводами. Тогда можно использовать Serial1.

После подключения пытаемся «поговорить» с модулем (не забываем его включить). Выбираем скорость порта - 115200, при этом хорошо, если все встроенные последовательные порты (4 на меге, 1 на uno) и все программные работают на одной скорости. Так можно добиться более устойчивой передачи данных. Почему - не знаю, хотя и догадываюсь.

Итак, пишем примитивный код для проброса данных между последовательными портами, отправляем atz, в ответ тишина. Что такое? А, case sensitive. ATZ, получаем OK. Ура, модуль нас слышит. А не позвонить ли нам ради интереса? ATD +7499… Звонит городской телефон, из ардуины идет дымок, ноутбук вырубается. Сгорел преобразователь Arduino. Было плохой идеей кормить его 19 вольтами, хотя и написано, что он может работать от 6 до 20V, рекомендуют 7-12V. В даташите на GSM модуль нигде не сказано о потребляемой мощности под нагрузкой. Ну что ж, Mega отправляется в склад запчастей. С замиранием сердца включаю ноутбук, получивший +19V по +5V линии от USB. Работает, и даже USB не выгорели. Спасибо Lenovo за защиту.

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

Программирование
Модуль предоставляет широкие возможности передачи данных. Начиная от голосовых вызовов и SMS и заканчивая, собственно, GPRS. Причем для последнего есть возможность выполнить HTTP запрос при помощи AT команд. Придется отправить несколько, но это того стоит: формировать запрос вручную не очень-то хочется. Есть пара нюансов с открытием канала передачи данных по GPRS - помните классические AT+CGDCONT=1,«IP»,«apn»? Так вот, тут то же самое нужно, но слегка хитрее.

Для получения страницы по определенному URL нужно послать следующие команды:
AT+SAPBR=1,1 //Открыть несущую (Carrier) AT+SAPBR=3,1,"CONTYPE","GPRS" //тип подключения - GPRS AT+SAPBR=3,1,"APN","internet" //APN, для Мегафона - internet AT+HTTPINIT //Инициализировать HTTP AT+HTTPPARA="CID",1 //Carrier ID для использования. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Собственно URL, после sprintf с координатами AT+HTTPACTION=0 //Запросить данные методом GET //дождаться ответа AT+HTTPTERM //остановить HTTP

В результате, при наличии соединения, получим ответ от сервера. То есть, фактически, мы уже умеем отправлять данные о координатах, если сервер принимает их по GET.

Питание
Поскольку питать GSM модуль от преобразователя Arduino, как я выяснил, плохая идея, было решено купить преобразователь 12v->5v, 3A, на том же ebay. Однако, модулю не нравится питание в 5V. Идем на хак: подключаем 5V в пин, с которого приходит 5V от ардуины. Тогда встроенный преобразователь модуля (существенно мощнее преобразователя ардуины, MIC 29302WU) сделает из 5V то, что нужно модулю.

Сервер

Сервер написал примитивный - хранение координат и рисование на Яндекс.картах. В дальнейшем возможно добавление разных фич, включая поддержку многих пользователей, статус «на охране/не на охране», состояние систем автомобиля (зажигание, фары и пр.), возможно даже управление системами автомобиля. Конечно, с соответствующей поддержкой трекера, плавно превращающегося в полновесную сигнализацию.

Полевые испытания

Вот так выглядит собранный девайс, без корпуса:

После установки преобразователя питания и укладывания в корпус от дохлого DSL модема система выглядит так:

Припаивал провода, вынул несколько контактов из колодок ардуины. Выглядят так:

Подключил 12V в машине, проехался по Москве, получил трек:


Точки трека достаточно далеко друг от друга. Причина в том, что отправка данных по GPRS занимает относительно много времени, и в это время координаты не считываются. Это явная ошибка программирования. Лечится во-первых, отправкой сразу пачки координат со временем, во-вторых, асинхронной работой с GPRS модулем.

Время поиска спутников на пассажирском сидении автомобиля - пара минут.

Выводы

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

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

Использованные устройства

  • Arduino Mega 2560
  • Arduino Uno
  • GPS SkyLab SKM53
  • SIM900 based GSM/GPRS Shield
  • DC-DC 12v->5v 3A converter

Несколько лет назад у меня возникла идея, разработать устройство для отслеживания местоположения объекта посредством GPS и GSM систем, я начал приобретать необходимые модули, но до реализации проекта дело так и не дошло. И вот несколько месяцев назад я снова вспомнил про эту идею и принялся за дело. В уме прорисовывались следующие идеи: устройство должно быть автономным и максимально экономичным; управление и передача данных осуществляется сетями мобильной связи GSM; определение координат с помощью системы глобального позиционирования GPS.

Для работы в сетях мобильной связи используются GSM модули, которые потребляют достаточно много энергии, если модуль будет постоянно включен, заряда батарей или аккумуляторов не хватит на продолжительную работу устройства. Поэтому я решил использовать режим работы по расписанию, в устройстве установлены часы реального времени, по заданному времени устройство просыпается и включается GSM модуль для ожидания звонка или SMS сообщения. После выполнения всех задач устройство “засыпает”. Таким образом, происходит существенная экономия энергии.

На следующей картинке приведена схема GPS-GSM трекера на микроконтроллере PIC16F690:

В устройстве используется . Микросхема DD1 (PCF8583) представляет собой , с функцией будильника. Пробуждение микроконтроллера DD2 из спящего режима в заданное время происходит по прерыванию, которое генерируется на линии INT микросхемы DD1. Меняя емкость конденсатора C2* можно подстраивать ход часов.

Для определения координат используется . Плата модуля была доработана, чтобы иметь возможность включать и выключать модуль по сигналу от микроконтроллера. Изначально модуль включался сразу после подачи питания, что не подходило для меня. На плате модуля установлен стабилизатор напряжения 3,3В в корпусе SOT-23, у которого имеется вывод управляющий стабилизатором, но он подключен напрямую к линии питания. Я разрезал дорожки и освободил вывод управления для микроконтроллера. На одном экземпляре мне не удалось сохранить стабилизатор напряжения (обломался вывод), поэтому поставил другой стабилизатор, на напряжение 3В, в таком же корпусе (DA1’ – LP2981-30DBVR). В Китае можно приобрести два вида модуля: с синей платой и большой антенной, а также с красной платой и маленькой антенной.

Микроконтроллер “общается” с обоими модулями по протоколу UART, причем для GSM модуля используется аппаратный UART встроенный в микроконтроллер, для GPS модуля реализован программный UART, скорость передачи данных составляет 9600 бит/сек, модули предварительно должны быть настроены на данную скорость.

Светодиоды HL1, HL2 индикационные, когда микроконтроллер находится в рабочем режиме, светодиод HL1 светится, при переходе микроконтроллера в “спящий” режим, светодиод гаснет. Светодиод HL2 загорается в случае появления ошибок во время работы устройства. Светодиод HL3 отображает состояние GSM модуля.

Имеется два основных режима работы: режим ожидания и режим маяка. В режиме ожидания устройство просыпается по заданному расписанию и ожидает входящего вызова, при обнаружении звонка устройство выполняет сброс вызова на второй по счету “гудок” и продолжает сбрасывать еще в течение 20 секунд, далее определяет координаты и высылает их в виде SMS сообщения абоненту, от которого поступил звонок. Время ожидания входящего вызова можно настраивать. В режиме маяка устройство периодически просыпается через заданный интервал времени, определяет координаты и высылает их абоненту.

После первого включения по умолчанию активен режим ожидания, для включения режима маяка, на устройство необходимо отправить SMS сообщение с текстом GPS-STARThhmm, где hh-часы, mm-минуты которые задают период отсылки координат. Например, если требуется получать координаты каждые полтора часа, то сообщение будет иметь вид: GPS-START0130. Координаты в этом режиме отправляются абоненту, от которого поступило сообщение. Для выключения маяка и переключения в режим ожидания необходимо отправить сообщение с текстом GPS-STOP, устройство продолжит работу по расписанию.

Устройство читает SMS сообщения на сим-карте во время каждого сеанса пробуждения, чтение выполняется после определения и отправки координат абоненту, либо после истечения времени ожидания входящего вызова в режиме ожидания (если звонок не поступил).

При отправке сообщений нужно учитывать некоторые нюансы, дело в том, что если отправить сообщение, когда устройство “спит” (GSM модуль выключен), то при последующем включении сообщение может не сразу поступить на модуль, задержка может составлять от нескольких минут до нескольких часов, в зависимости от особенностей мобильного оператора. Для этого в устройстве реализована пауза для ожидания SMS сообщений, отсчет паузы начинается после определения и отправки координат абоненту (длительность паузы можно настраивать). Таким образом, сообщения желательно отправлять на устройство во время паузы ожидания SMS или во время ожидания входящего звонка.

Есть два варианта включения режима маяка: во время очередного пробуждения устройства выполнить вызов, после получения сообщения с координатами (во время паузы ожидания SMS), отправить SMS сообщение GPS-STARThhmm. Далее устройство перейдет в режим маяка и в следующий раз проснется через промежуток времени указанный в сообщении. Второй вариант, не выполняя вызова отправить SMS сообщение GPS-STARThhmm (во время ожидания входящего звонка), прочитав сообщение, устройство определит координаты и отошлет их абоненту, после чего перейдет в режим маяка и заснет, пауза ожидания SMS сообщений в этом случае выполняться не будет.

В процессе определения координат выполняется обновление значения часов реального времени, для компенсации ухода часов из-за неточности хода. Точное значение времени извлекается из данных поступивших с GPS модуля. Кроме этого выполняется измерение напряжения питания устройства, значение которого передается в SMS сообщении с координатами. Текст сообщения с координатами выглядит следующим образом: “5511.21316,N,06117.54100,E 4,07V”. Если координаты не были получены за определенный промежуток времени, абоненту отправляется сообщение вида: “NO KOORD 4,10V”. Время ожидания координат от GPS модуля можно настраивать.

Время пробуждения устройства (расписание) и другие параметры можно задать двумя способами: предварительно записать в EEPROM память микроконтроллера при программировании, или с помощью отправки SMS сообщения на устройство.

Рассмотрим первый способ задания параметров, ниже в таблице приведены основные настройки GPS-GSM трекера и соответствующие адреса в EEPROM памяти:

Адрес EEPROM памяти Параметр Описание Значение по умолчанию
0x00 Часы Значение времени, которое записывается в часы реального времени при первом включении устройства (tek_time) 00 ч.
0x01 Минуты 00 мин.
0x02 Tgsm Время ожидания входящего звонка,

2 мин ≤ Tgsm ≤ 30мин

10 минут
0x03 Tgps Время ожидания координат от GPS модуля, 2 мин ≤ Tgps ≤ 20мин 7 минут
0x04 Tsms Время ожидания SMS сообщения,

2 мин ≤ Tsms ≤ 20мин

5 минут
0x05 UTC Часовой пояс

00ч ≤ UTC ≤ 23ч

00ч
0x06 Часы Время пробуждения устройства, (Будильник 1) 00 ч.
0x07 Минуты
0x7E Часы Время пробуждения устройства, (Будильник 61)
0x7F Минуты
0x80 Код Информация об ошибке, (Ошибка 1)
0x81 Месяц
0x82 День
0x83 Часы
0x84 Минуты
0xF3-0xF7 Информация об ошибке, (Ошибка 24)
0xF8-0xFC Информация об ошибке, (Ошибка 25)

Время для будильников нужно задавать последовательно по возрастанию начиная с 00:00 ч (точка отсчета), значение первого будильника не обязательно должно быть равным 00:00ч, время последнего будильника в EEPROM памяти, не должно превышать 23:59 ч. Остальные неиспользуемые ячейки EEPROM памяти должны иметь значение больше 23, (24 и более), при программировании микроконтроллера значение ячеек обычно устанавливается равным 0xFF (255).

Период времени указанный в SMS сообщении для режима маяка не должен превышать значения 23:59 (1439 минут), и не должен быть меньше 00:05 (5 минут). В противном случае период по умолчанию составит 1 час.

GPS модуль получает время по Гринвичу, поэтому необходимо задать часовой пояс, в соответствии регионом.
Всего в EEPROM памяти можно задать 61 значений времени для будильника в интервале 00:00-23:59 часов. Если параметры заданы некорректно, или вовсе не заданы, а также в случае выхода за пределы указанные в таблице, то будут использоваться значения по умолчанию.

Рассмотрим второй способ задания параметров с помощью SMS сообщения. При первом включении устройство в течение 5-ти минут читает SMS сообщения на сим-карте, в этот период необходимо отправить нижеприведенное сообщение или предварительно записать его на сим-карту перед включением:

NAST– – – – –[Будильник 1] –[ Будильник 2]–…–[ Будильник 11]

Пример: NAST0850–10–07–05–05–0900–1200–1500–1800–2100–2300

В таком варианте можно задать максимум 11 будильников, последовательность которых должна начинаться с точки отсчета (00:00 ч), как было сказано выше. После считывания сообщения все параметры переписываются в EEPROM память микроконтроллера, если операция прошла успешно светодиоды HL1, HL2 мигают три раза, после чего устройство засыпает. В дальнейшем настройки трекера можно оперативно менять, отправив SMS сообщение с новыми параметрами при пробуждении устройства (во время паузы ожидания SMS или во время ожидания входящего звонка), параметр учитываться не будет (используется только при первом включении трекера), но пропускать его нельзя.

Первоначальный запуск трекера я выполняю следующим образом: для примера возьмем расписание (12.00–15.00–18.00–21.00), параметр я устанавливаю равным 11.50, таким образом, после успешного принятия параметров, трекер проснется через 10 минут. После этого я звоню на него и получаю координаты, время трекера при этом обновляется по данным GPS, далее трекер будет просыпаться по расписанию.

Все SMS сообщения на СИМ карте удаляются, после каждой операции чтения, в целях освобождения места для последующих сообщений.

Если при первом включении микроконтроллер не сможет инициализировать GSM модуль или часы реального времени не будут отвечать на команды, то выполнение программы прекратится (критическая ошибка), при этом будет постоянно мигать светодиод HL2 “Ошибка”.

В дальнейшем при появлении ошибок, программа будет выполнятся дальше пропуская проблемный участок, при этом загорается светодиод HL2 “Ошибка”, который остается включенным после засыпания устройства, и гаснет при последующем пробуждении. Кроме этого микроконтроллер отправляет в реальном времени код ошибки по линии UART. Чтобы отслеживать ошибки с помощью компьютера (а также команды, отправленные на GSM модуль), к устройству можно подключить USB-UART преобразователь в точке TX’ на схеме. Ошибки выдаются в терминал в виде сообщения ERRxx, где xx-код ошибки. В точке RX’ можно отслеживать сообщения, поступающие от модуля к микроконтроллеру.

Кроме индикации, информация об ошибках сохраняется в EEPROM память микроконтроллера. Каждая ошибка занимает в памяти 5 байт (смотрите таблицу выше): первый байт содержит код ошибки (номер), второй и третий байты – дату возникновения ошибки (месяц, день), четвертый и пятый байты – время ошибки (часы и минуты). Под ошибки в EEPROM памяти выделено 128 байт начиная с адреса 0x80 (128), таким образом, микроконтроллер может хранить последние 25 ошибок.

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

Устройство собрано на двухсторонней печатной плате размером 49 x 62 мм, в основном на плате установлены smd элементы. Для питания я использую три пальчиковые батарейки. Все части устройства размещены внутри водонепроницаемого корпуса с размерами 85x58x33 мм (который был приобретен в Китае). В спящем режиме устройство потребляет 90-104 мкА, в режиме ожидания звонка 5,5мА, во время определения координат 60 мА. Один из экземпляров трекера работает у меня около 2 месяцев, при этом по расписанию просыпается 5 раз в сутки, время ожидания входящего звонка составляет 10 минут. Напряжение питания за это время снизилось примерно на 0,3В.

Приведенная в конце статьи прошивка имеет ограничение, координаты можно запросить только 10 раз, после отправки 10-го SMS сообщения с координатами, трекер заснет, и не будет просыпаться. Прошивка со снятыми ограничениями платная, обращайтесь по контактам указанным на странице “ ”, кроме этого могу собрать трекер на заказ.



Это уже вторая версия трекера. Первый позволял отслеживать объект только посредством СМС. Что, сами понимаете, не совсем удобно. Поэтому было принято решение создать вторую версию, но уже для работы с сервисами GPS-мониторинга. Не все задуманное еще реализовано, но основные функции уже работают.

Трекер каждую минуту отправляет данные на бесплатный сервер GPS-мониторинга по протоколу Wialon IPS v1.1: данные о местоположении, скорость, курс направления движения. Также реализована возможность настройки и запрос координат по СМС с любого номера.

Возможны следующие команды:

1. Настройка трекера:

$0000#SETUP#111111111111111;2222#

0000 - старый пароль или пароль по умолчанию (при первой настройке).
1111111111111111 - ID устройства который задан на сервере (произвольные 15 цифр).
2222 - Новый пароль. В дальнейшем все команды должна начинаться с него. Пароль должен совпадать с тем что задан на сервере GPS мониторинга.

В ответ приходит сообщение вида: «ID-1111111111111111; PASS-2222» с новым ID и новым паролем.

0000- ваш пароль.

В ответ приходит сообщение вида: «A;111111;222222;N3333.33333;E4444.44444;5;1»

«A» - Данные достоверны или «V» - данные устарели.
«111111» - время UTC.
«222222» - дата.
«N3333.33333» - широта.
«E4444.44444» - долгота.
«5» - скорость в км/ч.
«1» - питание от основного источника или «0» - питание от встроенного аккумулятора.

Если какие то данные не доступны то вместо них передается «NA».

3. Сигнал тревоги:

В этом случае данные о местоположении передаются на сервер с интервалом 30 сек. В ответ приходит сообщения вида: «ALARM ON». Повторная отправка команды выключает сигнал тревоги. В ответ приходит сообщения вида: «ALARM OFF».

В ответ приходит сообщения вида: «Vash balans 50.01r.»

Если в любой команде будет отправлен неправильный пароль, то в ответ приходит сообщения вида: «Password ERROR».

Теперь техническая часть.

Основа: Arduino PROMINI 3.3V 8MHz, GSM модем NEOWAY M590, GPS модуль UBLOX NEO-6M, внешняя активная антенна GPS.
Питание: DC-DC преобразователь на основе MP2307DN, контроллер заряда батареи STC4054, аккумулятор 3.7v 900mAh.

Время работы от аккумулятора 9 часов, при условии, что аккумулятор не новый.

Что касается сервера GPS-мониторинга - таких сервисов много. При желании можно работать с другим сервером, для этого в коде достаточно поменять IP-адрес и номер порта сервера. Главное, чтобы сервер поддерживал работу с протоколом Wialon IPS v1.1. Корпус сделан из ПВХ. Получился, правда, на вид не очень, но особо и не старался, все равно его будет не видно. В дальнейшем хочу добавить управление внешним устройством или каким-нибудь реле и получение каких-нибудь параметров о состоянии авто, для этого на плате предусмотрено два входа и один выход. Программно пока это не реализовано.

Затрачено было приблизительно 1500 - 2000 руб.












Все нюансы с технической и программной стороны описывать сейчас не буду. Кого заинтересует - пишите, постараюсь всем ответить. находится все необходимое: схема, исходники на СИ, hex-файл прошивки трекера (обязательно прошивать и файл для EEPROM, файл с расширением.eep), прошивка и прога для GPS, файлы ПП для Sprint-Layout, информация по протоколу Wialon IPS, и несколько фоток.



Загрузка...