GPS трекер на основе Arduino и технологии Lora


Знание местоположения определенных вещей/объектов в настоящее время является достаточно актуальной задачей. Наиболее часто для решения этой задачи используется технология GPS, которая широко используется для отслеживания местоположения автомобилей, судов, людей, животных и т.п. Для любого подобного отслеживающего местоположение устройства (трекера, в англ. Tracker) одними из наиболее важных характеристик является диапазон работы устройства и время его непрерывной работы от батареи. С этой точки зрения наилучшим решением для применения в трекерах местоположения является технология LoRa – устройства на ее основе отличаются крайне низким энергопотреблением и способностью работать на достаточно большие расстояния.

Внешний вид GPS трекера на основе платы Arduino и технологии Lora

В данной статье мы рассмотрим GPS трекер на основе платы Arduino и Lora модулей. Данный трекер (отслеживающее местоположение устройство) будет состоять из передатчика, который будет считывать информацию о местоположении с помощью GPS модуля NEO-6M и передавать ее с помощью модуля Lora, и приемника, который будет принимать эту информацию и отображать ее на ЖК дисплее 16x2. Если вы не знакомы с технологией LoRa и протоколом LoRaWAN, то перед прочтением данной статьи рекомендуем изучить статью о подключении модуля Lora к плате Arduino. Также в более кратком варианте суть этой технологии освещена в статье про связь плат Arduino на расстоянии 3 км с помощью модулей Lora.

Для уменьшения сложности и стоимости изготовления нашего проекта мы не будем использовать шлюз LoRa. Вместо этого мы будем использовать связь точка-точка (peer to peer communication) между передатчиком и приемником. Но если вам нужен глобальный радиус действия вашего устройства (то есть по всему земному шару) вы можете использовать вместо приемника шлюз (Gateway) LoRa.

Статья переведена с иностранного сайта и этот проект разработали энтузиасты из Индии – в их стране разрешенным рабочим диапазоном для работы модулей LoRa является диапазон 433 МГц, поэтому в данном проекте использованы модули LoRa этого диапазона. Если же вы живете в России, то в нашей стране разрешенным рабочим диапазоном для работы модулей LoRa является диапазон 866 МГц, поэтому если вы планируете использовать данный проект трекера в России, то вам необходимо будет заменить в нем используемые модули LoRa на модули частотного диапазона 866 МГц. Если же вы не из Индии, и не из России, то вам перед сборкой данного проекта рекомендуется уточнить в сети Интернет разрешенный диапазон для работы устройств на основе технологии LoRa в вашей стране.

Необходимые компоненты

  1. Плата Arduino Uno – 2 шт. (купить на AliExpress).
  2. Шилд (плата расширения) Lora для Arduino (Arduino Lora Shield) – 2 шт. Печатная плата для данного шилда приведена далее в статье.
  3. SX1278 433MHz LoRa Module – 2 шт. (купить на AliExpress).
  4. GPS модуль NEO-6M (купить на AliExpress).
  5. ЖК дисплей 16x2 (купить на AliExpress).
  6. Соединительные провода.

Схема шилда LoRa для Arduino

Чтобы упростить взаимодействие платы Arduino с модулем LoRa мы для данного проекта разработали специальный шилд (плату расширения) LoRa (LoRa Arduino Shield). Он состоит из модуля LoRa SX1278 433MHz и регулятора напряжения 3.3V на основе микросхемы LM317. Но вы можете реализовать данный проект без изготовления данного шилда, используя непосредственные соединения между компонентами данного шилда и платой Arduino. Но использование данного шилда LoRa будет особенно удобным если вы, к примеру, захотите развернуть Mesh сеть (самоорганизующаяся радиосеть с автоматической ретрансляцией/маршрутизацией между ее узлами) на основе технологии LoRa. Схема шилда LoRa для платы Arduino представлена на следующем рисунке.

Схема шилда LoRa для платы Arduino

Шилд с помощью разъема DC jack подключается к питающему напряжению 12V, затем это напряжение с помощью регулятора напряжения на основе микросхемы LM317 понижается до стабилизированного напряжения 3.3V. Его также можно использовать для питания платы Arduino через ее контакт Vin, а затем стабилизированное напряжение 5V с Arduino использовать для питания ЖК дисплея на плате шилда. Значение выходного напряжения с выхода регулятора LM317 устанавливается с помощью подбора номиналов резисторов R1 и R2, в сети интернет есть даже соответствующие калькуляторы расчета сопротивлений этих резисторов.

Внешний вид изготовленной конструкции шилда LoRa для Arduino показан на следующем рисунке.

Внешний вид изготовленной конструкции шилда LoRa для Arduino

Поскольку модуль LoRa потребляет очень мало энергии его можно запитать непосредственно с контакта 3.3V платы Arduino, но мы в данном проекте решили использовать внешний регулятор напряжения на основе микросхемы LM317 поскольку он более надежный чем встроенный в плату Arduino регулятор. Шилд также содержит потенциометр для регулировки яркости ЖК дисплея. Соединения модуля LoRa с платой Arduino точно такие же, которые мы использовали в предыдущей статье на данную тематику.

Изготовление печатной платы шилда LoRa

В редакторе для проектирования печатной платы у нас получился следующий ее чертеж, показанный на следующем рисунке.

Чертеж печатной платы для нашего проекта

Gerber файлы для этой печатной платы вы можете скачать по следующей ссылке:

Download Gerber File for Arduino LoRa Shield

Для заказа изготовления печатной платы выполните следующую последовательность шагов.

Шаг 1. Перейдите на сайт https://www.pcbgogo.com/?code=t, зарегистрируйтесь на нем если вы там еще не зарегистрированы. Затем на вкладке PCB Prototype введите размеры своей печатной платы, число ее слоев и число требуемых вам экземпляров печатной платы. Введенные нами параметры показаны на следующем рисунке.

Ввод основных параметров печатной платы на сервисе PCBGOGO

Шаг 2. После заполнения всех этих полей нажмите на кнопку Quote Now. Далее вам предстоит ввести еще несколько параметров требуемой вам печатной платы, но в большинстве случаев вы можете оставить их такими, какими их предлагает сервис по умолчанию. Обратите только внимание на цену и время изготовления. В нашем случае сервис выдал время изготовления 2-3 дня и стоимость $5. Можно выбрать предпочтительный способ доставки вам печатной платы.

Ввод дополнительных параметров печатной платы на сервисе PCBGOGO

Шаг 3. Теперь заключительным шагом загрузите Gerber файлы в сервис и оплатите стоимость заказа. Перед изготовлением платы сервис PCBGOGO проверяет вашу печатную плату на корректность – это делает взаимодействие с сервисом исключительно дружественным.

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

Сборка конструкции проекта

После получения посылки с печатной платой мы приступили к сборке проекта. После припаивания всех необходимых компонентов у нас получилась конструкция следующего вида:

Внешний вид приемной части нашего GPS трекера

Вместе передатчик и приемник для нашего проекта выглядят следующим образом:

Внешний вид передатчика и приемника нашего проекта

Как вы можете видеть из представленного рисунка, только шилд для приемника (он слева на рисунке) имеет контакты для подключения ЖК дисплея, передатчик состоит, в основном, из модуля LoRa. К передатчику мы будем подключать GPS модуль.

Подключение GPS модуля к передатчику LoRa

В нашем проекте мы использовали GPS модуль NEO-6M. Данный модуль отличается низким энергопотреблением и малые размеры, что делает его удобным для применения в переносных устройствах. Все проекты на нашем сайте с использованием GPS модулей вы можете посмотреть по этой ссылке.

GPS модуль NEO-6M работает с напряжением 5V и взаимодействует с платой Arduino в нашем проекте по последовательному каналу связи со скоростью 9600 бод. Его контакт питания мы подключаем к контакту +5V платы Arduino, а контакты Rx и Tx подключаем к контактам D4 и D3 платы Arduino соответственно.

Внешний вид подключения GPS модуля к передающей части нашего трекера

Контакты D4 и D3 в программе будут сконфигурированы как контакты последовательного порта связи. При подаче питания GPS модуль NEO-6M сразу выполняет поиск доступных спутников и после этого начинает передавать на свой выход информацию в формате NMEA. Более подробно об этом формате и о принципах работы с GPS модулем можно прочитать в этой статье – GPS часы на Arduino Uno. Но в этом проекте мы упростим себе взаимодействие с GPS модулем с помощью использования библиотеки TinyGPS++. Также необходимо скачать и добавить в Arduino IDE и библиотеку для работы с модулем LoRa (если у вас ее еще нет). Обе эти библиотеки можно скачать по следующим ссылкам:

Download TinyGPS++ Arduino Library
Download Arduino LoRa Library

По приведенным ссылкам вы скачаете библиотеки в виде ZIP файл, их можно добавить в Arduino IDE с помощью команды Sketch -> Include Library -> Add.ZIP library.

Объяснение программ для Arduino

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

Объяснение программы для передатчика

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

Первым делом в программе нам необходимо подключить используемые библиотеки: библиотеку для работы с протоколом SPI, библиотеку для работы с модулем LoRa, библиотеку TinyGPS++ и библиотеку последовательной связи (SoftwareSerial). GPS модуль подключен к контактам 3 и 4 платы Arduino, поэтому объявим переменные для работы с ними.

Внутри функции void setup() мы инициализируем последовательную связь с монитором последовательной связи, а также мы используем команду “gpsSerial” для установления связи с нашим GPS модулем NEO-6M. Как мы уже говорили, мы в проекте использовали модули LoRa, работающие на частоте 433 МГц (для вашей страны могут понадобиться модули другого частотного диапазона), поэтому при их инициализации мы использовали параметр 433E6, представляющий собой частоту 433 МГц.

Внутри функции loop мы проверяем передает ли нам GPS модуль какие либо данные. Если передает, то мы считываем их и декодируем их с использованием функции gps.encode. Далее мы проверяем с помощью функции gps.location.isValid() действительно ли мы получили корректные данные местоположения.

Если мы получили корректные данные местоположения, то мы можем начинать передачу принятых значений широты и долготы. С помощью функции gps.location.lat() мы извлекаем из принятых GPS данных значение широты, а с помощью функции gps.location.lng() мы извлекаем значение долготы. Поскольку потом мы будем выводить эти значения на экран ЖК дисплея, то чтобы перевести курсор дисплея на 2-ю строку, мы вместе с этими значениями широты и долготы передаем на приемную сторону символ “c”.

Объяснение программы для приемника

Передатчик будет передавать нашему приемнику значения широты и долготы, мы должны принять эти данные и вывести их на экран ЖК дисплея. В программе для приемника нам необходимо подключить библиотеку для работы с модулем LoRa и библиотеку для работы с ЖК дисплеем, а также сообщить плате Arduino, к каким ее контактам подключен ЖК дисплей. Также необходимо инициализировать и модуль LoRa аналогично тому, как мы это делали в программе для передатчика.

Внутри функции loop мы будем "слушать эфир" на предмет присутствия в нем данных от нашего передающего модуля LoRa и их размера (объема) с помощью функции LoRa.parsePacket(). Принятые данные мы будем сохранять в переменной “packetSize”. Если пакеты приняты успешно, то мы продолжим считывать их в виде символов и печатать их на экране ЖК дисплея. Также мы будем проверять принимаемую информацию на предмет наличия символа “c” – при его обнаружении мы будем переводить курсор дисплея на вторую строку.

Тестирование работы проекта

После того как аппаратные части проекта будут готовы вы можете загрузить в них соответствующие коды программ и запитать их с помощью адаптера на 12V или USB кабеля. Когда на передатчик будет подано питание, вы заметите что синий светодиод на GPS модуле начнет мигать – это будет означать что модуль осуществляет поиск спутников. Когда питание будет подано на приемник, на ЖК дисплее высветится приветственное сообщение. Когда передатчик будет передавать информацию, приемник будет ее принимать и отображать на экране ЖК дисплея как показано на следующем рисунке.

Тестирование работы нашего GPS трекера

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

Просмотр местоположения нашего устройства на Google картах

Более подробно работу проекта можно посмотреть на видео, приведенном в конце статьи.

Исходный код программы (скетча)

Программа для передатчика

Программа для приемника

Видео, демонстрирующее работу проекта

(1 голосов, оценка: 5,00 из 5)
Загрузка...
4 504 просмотров

Комментарии

GPS трекер на основе Arduino и технологии Lora — 5 комментариев

  1. А есть ли возможность этот проект сделать с 8 дюймовым экраном на котором бы был указатель направления на другое устройство. А другое устройство обозначено точкой. И был счетчик примерноное расстояние до объекта.

    Подскажите пожалуйста кто может такое реализовать.

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

  2. Подскажите, пожалуйста, собрал передатчик и приёмник, подключаю, в мониторе порта выдаёт "LoRa failed. Starting LoRa failed!" что делать?

    • Обычно либо модуль неисправен при такой ошибке, либо контакт плохой или неправильно модуль подключен. И правильную ли вы частоту передаете в функцию LoRa.begin()?

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

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