GPS маячок. STM32

Автор: | 14.01.2018

Доброго времени суток, уважаемый читатель!

В предыдущих статьях мы уже познакомились с GPS и GSM/GPRS модулями, здесь и здесь. И вот после ознакомления с этими прекрасными модулями, у меня возникла мысль, почему бы их не скрестить в одном устройстве?

Так и родилась мысль о создании GPS маячка. Предлагаю начать со схемы данного устройства:


Питание модуля SIM800L осуществляется отдельным стабилизатором, так как оно должно лежать в диапазоне от 3.7 до 4.2 Вольта. GPS модуль питается от линии 5 Вольт, как и плата микроконтроллера. Осуществлять питание нашего устройства следует от линии 12 Вольт. Разумеется, схему можно изменить, чтобы иметь возможность питать маячок от батарейки 3.7 Вольт. Этим мы и займемся в одной из следующих статей.

Для обеспечения надежности приема данных модулей, в паре с ними необходимо использовать специализированные антенны. Я купил такую для GPS модуля:

И такую для модуля GPRS/GSM(не забудьте купить переходник от антенны к модулю!):

Разумеется Вы можете использовать то что у Вас под рукой, однако помните, что с плохими антеннами качество приема сигнала модулями будет отвратительным. Поэтому не стоит экономить на этом.
Перейдем к разработке прошивки устройства. Если Вы знаете что такое ОСРВ(FreeRTOS например) то лучше все таки использовать её в данном проекте. Однако, говорить о ней, не написав хотя бы обзорной статьи о её применении считаю преждевременным, поэтому сегодня мы будем писать по “простому”.

 

Читайте также  STM32 для начинающих. Урок 2. Тактирование STM32.

Итак, кратко опишу работу программы. К USART1 подключен GPS модуль. По прерыванию мы получаем один символ и сверяем его с символом конца строки. Если текущий символ не конец строки, то сохраняем его в массив. Получив символ конца строки, сохраняем его и переходим к обработке полученной строки. Делаем это специальной функцией, код которой я приведу ниже.

К USART2 подключен модуль GPRS/GSM, работу с ним производим аналогично. Функция отправки ответного СМС сообщения реализована функцией SendSIMSMS().

После запуска микроконтроллера мы должны отправить команду “AT” модулю SIM800L. В ответ он отправит “OK”. Без этой инициализации модуль может не работать! Отправку команды модулю, я организовал отдельным таймером. Если модуль нам ответил, то мы увеличиваем значение переменной статуса модуля SIM, и отключаем соответствующий таймер.

Теперь если на сим карту установленную в модуле пройдет звонок, то по окончанию звонка модуль отправит микроконтроллеру строку “NO CARRIER”. Это и будет сигналом к действию нашего маячка. Увеличиваем значение переменной статуса модуля SIM, и проверяем наличие данных с GPS приемника. Если данные уже присутствуют то присваиваем переменной модуля SIM значение равное 3, и отправляем смску с текущими координатами устройства. В ином случае ждем этих данных в течении 180 секунд и если они все таки не пришли, то отправляем соответствующее сообщение, установив значение переменной статуса модуля SIM значение равное 4. Изменение значения переменной сделано в отдельном прерывании таймера.

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

Как видно из вышесказанного, решение не является оптимальным. Здесь уж очень просится операционная система реального времени, с ее параллельностью задач, и очередями. Что ж, скоро мы освоим и её. А пока я приведу код функций GPS и UART.

Читайте также  COM порт Windows. SerialPort. C#.Продолжение.

GPS.H:

UART.H:

Читайте также  Как пользоваться мультиметром?

 

Помните что перед использованием данного устройства, следует ознакомиться с законодательством страны на которой Вы проживаете. Автор данной статьи снимает с себя всю ответственность за последствия использования данного устройства. Соблюдайте законы!
Спасибо за внимание!


Любое копирование, воспроизведение, цитирование материала, или его частей разрешено только с письменного согласия администрации MKPROG.RU. Незаконное копирование, цитирование, воспроизведение преследуется по закону!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *