Оглавление:

Модуль слежения за велосипедистами: 5 шагов
Модуль слежения за велосипедистами: 5 шагов

Видео: Модуль слежения за велосипедистами: 5 шагов

Видео: Модуль слежения за велосипедистами: 5 шагов
Видео: Слежение за солнцем . Solar Tracker. Heliostat . 2024, Июль
Anonim
Модуль слежения за велосипедистами
Модуль слежения за велосипедистами

Этот модуль слежения за велосипедистами представляет собой модуль, который автоматически обнаруживает аварии во время гонки и обнаруживает механическую поломку путем прикосновения к сенсорному датчику. Когда происходит одно из этих событий, модуль отправляет событие в базу данных на Raspberry Pi через LoRa. Это событие будет отображаться на ЖК-дисплее и на веб-сайте. Вы также можете найти на веб-сайте конкретную велогонку с событиями и добавить велогонки или велосипедистов в базу данных. Я сделал этот проект, потому что очень интересуюсь велоспортом и Интернетом вещей, поэтому совмещение этих двух предметов было для меня очень захватывающим.

Прежде чем вы сможете сделать модуль слежения за велосипедистами, вам нужно собрать свои материалы. Вы можете найти инструменты и расходные материалы в списках ниже, или вы можете загрузить BOM (Build Of Materials).

Запасы:

  • оргстекло (56 мм X 85 мм)
  • 10 X 2M болты 10 мм и гайки
  • 10 X 3M болты 10 мм и гайки
  • 2 болта 3M 50 мм и гайки
  • PLA-нить для 3D-печати вашего ЖК-корпуса
  • термоусадка
  • Кабели между мужчинами и женщинами
  • Базовая печатная плата
  • Мужские заголовки
  • Raspberry Pi 3b +
  • SD-карта на 16 ГБ
  • ЖК-экран Sparkfun 4X20
  • Емкостной сенсорный датчик
  • Зуммер
  • 3-осевой акселерометр + гироскоп
  • Модуль GPS
  • Доска SODAQ Mbili
  • Модуль LoRa WAN
  • Аккумулятор 3,7 В 1000 мАч
  • Блок питания Raspberry Pi 3b +

Инструменты:

  • Оловянный припой
  • Паяльник
  • Щипцы
  • Отвертки
  • Головоломка
  • Дрель
  • 2,5 и 3,5 сверла
  • Зажигалка / термофен

Если вам нужно купить все принадлежности, вам понадобится бюджет в размере 541,67 евро. Этот проект очень дорогой, потому что я использовал комплект для разработки LoRa rappid, который стоит 299 евро (у меня была возможность использовать этот комплект из моей школы). Вы всегда можете использовать обычный Arduino и сэкономить много денег, но тогда программы будут другими.

Шаг 1: Схема фрицинга

Схема фрицинга
Схема фрицинга
Схема фрицинга
Схема фрицинга

Первый шаг - построить схемы. Для этого проекта у нас есть 2 электрические схемы, одна с Raspberry Pi, а другая с платой SADAQ Mbili. Начнем со схемы Raspberry Pi.

Схема Raspberry Pi Fritzing:

Схема Raspberry Pi довольно проста, единственное, что мы подключаем к Pi, - это ЖК-дисплей Sparkfun 4X20. Дисплей работает с последовательной связью, SPI или I2C. Какой протокол связи вы используете, зависит от вас. Я использовал протокол SPI, потому что он очень простой. Если вы используете SPI, как я, вам потребуются следующие подключения:

  • ЖК-дисплей VCC VCC Raspberry Pi
  • GND LCD GND Raspberry Pi
  • SDI ЖК-дисплей MOSI (GPIO 10) Raspberry Pi
  • SDO ЖК-дисплей MISO (GPIO 9) Raspberry Pi
  • SCK ЖК-дисплей SCLK (GPIO 11) Raspberry Pi
  • CS ЖК-дисплей CS0 (GPIO 8) Raspberry Pi

На схеме Fritzing вы увидите, что ЖК-дисплей имеет размер 2X16. Это потому, что я не нашел LCD 4X20 на фризе. Однако все связи здесь одни, так что это не имеет особого значения.

Схема SODAQ Mbili Fritzing:

К плате SODAQ Mbili мы подключим 4 электронных компонента, поэтому эта электрическая схема также очень проста. Начнем с подключения емкостного сенсорного датчика. Этот выходной контакт датчика будет ВЫСОКИМ при прикосновении к датчику, в противном случае - НИЗКИМ. Это означает, что вывод OUT - это цифровой выход, который мы можем соединить с цифровым входом платы Mbili. Подключения следующие:

  • Сенсорный датчик OUT D5 Mbili
  • Датчик касания VCC 3.3V Mbili
  • GND Датчик касания GND Mbili

Второй компонент - гироскоп Triple acces +. Я использовал плату GY-521, которая использует протокол I2C для связи с платой Mbili. Обратите внимание, что контакт AD0 платы GY-521 должен быть подключен к VCC платы Mbili! Это связано с тем, что на плате Mbili есть часы с тем же адресом I2C, что и GY-521. Подключив вывод AD0 к VCC, мы изменим адрес I2C GY-521. Подключения следующие:

  • VCC GY-521 3.3V Mbili
  • GND GY-521 GND Mbili
  • SCL GY-521 SCL Mbili
  • SDA GY-521 SDA Mbili
  • AD0 GY-521 3.3V Mbili

После этого подключим зуммер. Я использую стандартный зуммер, который издает звук при наличии тока. Это означает, что мы можем просто подключить зуммер к цифровому выводу на плате Mbili. Подключения следующие:

  • + Зуммер D4 Mbili
  • - Зуммер GND Mbili

И последнее, но не менее важное: подключим модуль GPS. Модуль GPS обменивается данными через RX и TX. Подключения следующие:

  • VCC GPS 3.3V Мбили
  • GND GPS GND Mbili
  • TX GPS RX Мбили
  • RX GPS TX Мбили

Шаг 2: нормализованная база данных

Нормализованная база данных
Нормализованная база данных

Второй шаг - разработать нормализованную базу данных. Я разработал свой ERD на Mysql. Вы увидите, что моя база данных написана на голландском языке, я объясню таблицы здесь.

Таблица "ploeg":

Этот стол представляет собой стол для велосипедных клубов. Он содержит идентификатор велосипедного клуба и название велосипедного клуба.

Стол Реннерс:

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

Таблица plaatsen:

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

Таблица wedstrijden:

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

Таблица gebeurtenissen:

В этой таблице хранятся все происходящие события. Это означает, что когда велосипедист попал в аварию или получил механическую поломку, событие будет сохранено в этой таблице. Первичный ключ таблицы - это идентификатор. Таблица также содержит дату и время события, широту местоположения, долготу местоположения, LoRaID велосипедиста и тип события (авария или механическая поломка).

Таблица wedstrijdrenner:

Эта таблица необходима для связи "многие ко многим".

Шаг 3. Зарегистрируйте модуль LoRa

Зарегистрируйте свой модуль LoRa
Зарегистрируйте свой модуль LoRa

Прежде чем вы сможете начать с кода, вам необходимо зарегистрировать свой модуль LoRa в шлюзе LoRa. Я использовал телекоммуникационную компанию в Бельгии под названием «Proximus», которая организует связь для моего модуля LoRa. Данные, которые я отправляю своим узлом LoRa, собираются на веб-сайте AllThingsTalk. Если вы также хотите использовать AllThingsTalk API для сбора ваших данных, вы можете зарегистрироваться здесь.

После регистрации на AllThingsTalk вам необходимо зарегистрировать свой узел LoRa. Для этого вы можете выполнить следующие действия или посмотреть на картинку выше.

  1. В главном меню выберите "Устройства".
  2. Щелкните "Новое устройство".
  3. Выберите свой узел LoRa
  4. Заполните все ключи.

Теперь все готово! Все данные, которые вы отправляете с помощью узла LoRa, появятся в вашем конструкторе AllThingsTalk. Если у вас возникнут проблемы с регистрацией, вы всегда можете обратиться к документации AllThingsTalk.

Шаг 4: Код

Код
Код
Код
Код
Код
Код
Код
Код

Для этого проекта нам понадобится 5 языков программирования: HTML, CSS, Java Script, Python (Flask) и язык Arduino. Сначала я объясню программу Arduino.

Программа Arduino:

В начале программы я объявляю некоторые глобальные переменные. Вы увидите, что я использую SoftwareSerial для соединения с моим GPS. Это потому, что плата Mbili имеет только 2 последовательных порта. Вы можете подключить GPS к Serial0, но тогда вы не сможете использовать терминал Arduino для отладки. По этой причине я использую SoftwareSerial.

После глобальных переменных я объявляю некоторые функции, которые упрощают чтение программы. Они считывают координаты GPS, издают звуковой сигнал, отправляют значения через LoRa,…

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

После блока настройки идет основная программа. В начале этого основного цикла я проверяю, активен ли сенсорный датчик. Если это так, я включаю зуммер, получаю данные GPS и отправляю все значения через LoRa или Bluetooth на Raspberry PI. После сенсорного датчика зачитываю значения акселерометра. С помощью формулы я вычисляю точный угол осей X и Y. Если эти значения слишком велики, можно сделать вывод, что велосипедист разбился. Когда происходит сбой, я снова включаю зуммер, получаю данные GPS и отправляю все значения через LoRa или Bluetooth на Raspberry PI.

Вы, наверное, думаете: «Почему вы пользуетесь bluetooth и LoRa?». Это потому, что у меня были проблемы с лицензией на модуль LoRa, который я использовал. Поэтому, чтобы программа работала для моей демонстрации, мне пришлось какое-то время использовать Bluetooth.

2. Бэкэнд:

Задняя часть немного сложна. Я использую Flask для своих маршрутов, которые доступны для интерфейса пользователя, я использую socketio для автоматического обновления некоторых страниц интерфейса пользователя, я использую контакты GPIO для отображения сообщений на ЖК-дисплее и получения сообщений через Bluetooth (не требуется, если вы используете LoRa), и я использую потоки и таймеры, чтобы регулярно читать AllThinksTalk API и запускать флеш-сервер.

Я также использую базу данных SQL для хранения всех входящих аварий, считывания личных данных велосипедистов и данных гонок. Эта база данных подключена к серверной части и также работает на Raspberry Pi. Я использую класс Database.py для взаимодействия с базой данных.

Как вы знаете из схемы Fritzing, ЖК-дисплей подключен к Raspberry Pi по протоколу SPI. Чтобы облегчить задачу, я написал класс «LCD_4_20_SPI.py». С помощью этого класса вы можете изменять контрастность, менять цвет подсветки, писать сообщения на экране,…. Если вы хотите использовать Bluetooth, вы можете использовать класс SerialRaspberry.py. Этот класс управляет последовательной связью между модулем Bluetooth и Raspberry Pi. Единственное, что вам нужно сделать, это подключить модуль Bluetooth к Raspberry Pi, подключив RX к TX и наоборот.

Маршруты для внешнего интерфейса записываются с помощью правила @ app.route. Здесь вы можете создать свой собственный маршрут для вставки или получения данных в базу данных или из нее. Убедитесь, что у вас всегда есть ответ в конце маршрута. Я всегда возвращаю объект JSON во внешний интерфейс, даже если произошла ошибка. Вы можете использовать переменную в URL-адресе, поместив ее вокруг.

Я использую socketio для веб-страницы с ошибками гонки. Когда Raspberry Pi получает сбой, я отправляю сообщение во внешний интерфейс через socketio. Затем интерфейсная часть знает, что они должны снова прочитать базу данных, потому что произошел новый сбой.

Вы увидите, что в моем коде связь LoRa установлена в команде. Если вы хотите использовать LoRa, вам необходимо запустить таймер, который многократно отправляет запрос к AllThinksTalk API. Из этого API вы получите значения датчиков (GPS, время, тип сбоя), которые отправляет конкретный узел LoRa. Эти значения можно использовать для вставки сбоя в базу данных.

3. Конец вайи:

Лобный конец состоит из 3-х языков. HTML для текста веб-сайта, CSS для разметки веб-сайта и JavaScript для связи с серверной частью. У меня есть 4 страницы сайта для этого проекта:

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

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

У меня есть отдельный файл CSS и файл JavaScript для каждой страницы. Каждый файл JavaScript использует выборку для получения данных из базы данных через серверную часть. Когда скрипт получает данные, HTML изменяется динамически. На странице, где вы можете найти аварии и механические поломки, вы найдете карту, на которой произошли все события. Я использовал листовку, чтобы показать эту карту.

Вы можете посмотреть весь мой код здесь, на моем Github.

Шаг 5: Постройте конструкции

Постройте конструкции
Постройте конструкции
Постройте конструкции
Постройте конструкции
Постройте конструкции
Постройте конструкции

Прежде чем мы сможем начать строительство, убедитесь, что у вас есть все материалы из спецификации или со страницы «Инструменты + расходные материалы».

Raspberry Pi + ЖК-дисплей

Начнем с корпуса Raspberry Pi. Вы всегда можете напечатать футляр на 3D-принтере, это тоже была моя первая идея. Но поскольку мой дедлайн подходил к концу, я решил привести простой пример. Я взял стандартный корпус от Raspberry Pi и просверлил в нем отверстие для проводов от моего ЖК-дисплея. Для этого вам достаточно выполнить следующие простые шаги:

  1. Просверлите отверстие в крышке корпуса. Я сделал это с помощью 7-миллиметрового сверла сбоку от крышки. Вы можете видеть это на картинке выше.
  2. Возьмите провода от ЖК-дисплея и наденьте термоусадочную головку на провода.
  3. Воспользуйтесь зажигалкой или термофеном, чтобы уменьшить усадку головки.
  4. Протяните провода с термоусадочной головкой через отверстие в корпусе и снова подключите их к ЖК-дисплею.

Теперь, когда вы готовы с корпусом для Raspberry Pi, вы можете начать с корпуса для ЖК-дисплея. Я напечатал на 3D-принтере корпус для своего ЖК-дисплея, потому что нашел его в Интернете по этой ссылке. Мне оставалось лишь немного изменить высоту корпуса. Если вы считаете, что у вас хорошо получается рисовать, вы можете экспортировать файлы и начать печать. Если вы не знаете, как выполнять 3D-печать, следуйте инструкциям по 3D-печати с помощью Fusion 360.

Строительство SODAQ MBili

На самом деле я не делал доводов в пользу платы SODAQ Mbili. Я использовал стекло из плексигласа, чтобы разместить свои компоненты без кожуха вокруг конструкции. Если вы хотите сделать это также, вы можете выполнить следующие действия:

  1. Подпишите на оргстекле размеры платы SODAQ Mbili. Размеры: 85 мм X 56 мм.
  2. Вырежьте оргстекло лобзиком.
  3. Поместите электронные компоненты на оргстекло и подпишите отверстия карандашом.
  4. Просверлите отверстия, которые вы только что подписали, и отверстия для стоек с помощью сверла 3,5 мм.
  5. Закрепите все электронные компоненты на оргстекле с помощью 10-миллиметровых болтов и гаек 3M.
  6. Последний шаг - установить оргстекло над платой Мбили. Вы можете сделать это с помощью стоек, но я использовал два болта 3M 50 мм и 8 гаек 3M, чтобы закрепить оргстекло над платой.

Рекомендуемые: