Оглавление:

Захватите коробку: 8 шагов
Захватите коробку: 8 шагов

Видео: Захватите коробку: 8 шагов

Видео: Захватите коробку: 8 шагов
Видео: Коробка передач с двойным сцеплением. Устройство и принцип работы 2024, Ноябрь
Anonim
Захватить коробку
Захватить коробку
Захватить коробку
Захватить коробку

Capture The Box - это командная игра, в которую можно играть с друзьями по соседству.

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

Эта игра использует GPS для определения местоположения коробки и RFID-метки для идентификации игроков. Дополнительный LDR может быть добавлен для согласования интенсивности точечного матричного дисплея с процентным соотношением света в области.

Запасы

Микроконтроллеры и компьютеры

  • Raspberry Pi
  • Arduino (Mega) Я выбрал Arduino Mega вместо обычного Uno, потому что у него намного больше контактов. Это необходимо, потому что мы используем щит Dragino LoRa, который оставил бы нам слишком мало цифровых контактов при использовании UNO. СОВЕТ: Лучше использовать подлинный, потому что китайские клоны не всегда работают должным образом.

Датчики и модули

  • 4 модуля с точечной матрицей MAX7219 Подключение DOUT к DIN, CS к CS, CLK к CLK…
  • Светозависимый резистор (10 кОм) + резистор (10 кОм)
  • Модуль GPS NEO-7M (или аналогичный) Я использую VMA430 от Velleman
  • RFID-модуль RC522 + некоторые RFID-значки / карты

Для использования LoRa (беспроводная технология)

Драгино Лора Щит

Дополнительные датчики и модули

ЖК-дисплей для отображения IP-адреса Raspberry Pi

Для создания тестовой установки

Макетная плата и кабели Dupont (мужчина-мужчина

Дополнительно (корпус)

  • Паяльник
  • Старый ящик для инструментов
  • Материалы для 3D-печати
  • Несколько тонких деревянных досок
  • Некоторые болты и гайки (которые можно вставить в отверстия Arduino). Мои винты имеют диаметр около 3 мм.

Ориентировочную цену можно найти в спецификации (ведомости материалов), приведенной ниже.

Шаг 1. Настройка Raspberry Pi

Raspberry Pi - это сердце проекта.

Он будет запускать интерфейс, бэкэнд и базу данных. Он также будет отвечать за связь между серверной частью и Arduino.

Чтобы использовать Raspberry Pi, нам нужно сделать следующее:

Часть 1: Установите Raspbian на Raspberry Pi

Учебник о том, как это сделать, можно найти здесь:

Часть 2: Установка Raspbian на Raspberry Pi Настройка домашнего Wi-Fi.

Это можно сделать с помощью wpa_passphrase "YourNetwork" "YourSSID" >> /etc/wpa_supplicant/wpa_supplicant.conf

Перезагрузите Pi, и вы должны увидеть IP-адрес при вводе ifconfig.

Часть 3: Установите веб-сервер и базу данных

После того, как ваш Pi запущен и работает, лучше всего сменить пароль. Это можно сделать с помощью команды passwd.

Как только это будет сделано, продолжайте и установите Apache, PHP, MariaDB и PHPMyAdmin.

Apache, PHP sudo apt install apache2 -y sudo apt install php libapache2-mod-php -y

MariaDB sudo apt install mariadb-server mariadb-client -y sudo apt install php-mysql -y sudo systemctl restart apache2.service

PHPMyAdminsudo подходит для установки phpmyadmin -y

Не забудьте установить безопасный пароль MySQL.

Часть 4: Установка необходимых библиотек Python

Для бэкэнда нам понадобятся библиотеки. Их можно установить с помощью команды pip3.

pip3 установить mysql-connector-python

pip3 установить flask-socketio

pip3 установить flask-cors

pip3 установить geventpip3 установить gevent-websocket

pip3 установить ttn

Шаг 2: Размещение электроники

Расположение электроники
Расположение электроники
Расположение электроники
Расположение электроники

Чтобы этот проект заработал, нам нужно подключить всю электронику.

Щит LoRa легко устанавливается на место. Просто совместите контакты с контактами на Arduino.

Остальные подключения описаны в моей схеме Fritzing. Что можно скачать здесь:

Шаг 3: проектирование базы данных

Проектирование базы данных
Проектирование базы данных

Чтобы иметь возможность хранить все данные игры и датчиков, я сделал несколько таблиц:

Измерение и датчик Измерения датчиков, которые можно найти в таблицах датчиков. Он содержит ссылку на датчик, значение измерения (например, координаты: 51.123456; 3.123456) и дополнительный идентификатор игры (если игра была активна во время измерения).

speler Имена игроков и UID их значка RFID. Добавлен необязательный модератор поля, этот человек может изменить игру (например, остановить ее раньше времени).

Spel - информация об игре (время начала и окончания).

spel_has_speler Отношение между Spel и Speler. Здесь игроки назначаются на игру.

bezit В этой таблице сохранен счет. Он содержит идентификатор игры, идентификатор игрока, время, когда он украл коробку, и время, когда он ее потерял (когда кто-то украл ее или когда игра закончилась). Вычитая время начала из времени окончания, вы можете подсчитать, сколько очков он получил в результате захвата.

Экспорт базы данных можно найти на моем GitHub (https://github.com/BoussonKarel/CaptureTheBox)

Откройте sql в PHPMyAdmin / MySQL Workbench и запустите его. Теперь база данных должна быть импортирована.

Шаг 4: Настройка учетной записи в TTN

Шаг 1: Зарегистрируйтесь в TTN и создайте заявку

Зарегистрируйте учетную запись на TheThingsNetwork, затем перейдите в Консоль> Добавить приложение.

Выберите имя для своего приложения и нажмите «Добавить приложение».

Шаг 2. Зарегистрируйте устройство

Когда вы подали заявку, перейдите в раздел «Зарегистрировать устройство».

Выберите идентификатор устройства, это может быть все, что вы хотите (если это случай змеи), и нажмите «Зарегистрироваться».

Щелкните значок «Создать» под «EUI устройства», чтобы TTN сгенерировал его для вас.

Шаг 3. Запишите свои учетные данные

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

Перед копированием нажмите кнопку «Переключить» и убедитесь, что пользовательский интерфейс пользователя для разработчиков и пользовательский интерфейс приложения в первую очередь LSB.

Ваш ключ приложения должен оставаться MSB FIRST (не меняйте это).

Эти ключи понадобятся вам на следующем этапе: настройка Arduino.

Шаг 4. Запишите ключ доступа к приложению

Теперь нам понадобится еще один ключ для настройки MQTT на Raspberry Pi.

Перейдите в свое приложение и прокрутите вниз до пункта «Ключи доступа».

Это понадобится вам на этапе Backend.

Шаг 5: настройка Arduino

Код Arduino также можно найти на моем GitHub в разделе Arduino (https://github.com/BoussonKarel/CaptureTheBox)

Этот код разделен на несколько вкладок, чтобы он был организован.

main.ino Основной код: объявления контактов, setup () и loop ()

0_LoRa.ino - Этот код обрабатывает обмен данными с использованием LoRa.

Он помещает данные тегов LDR, GPS и RFID в массив из 13 байтов и отправляет их в TheThingsNetwork.

1_LDR.ino Используя analogRead (), он измеряет величину напряжения на светозависимом резисторе.

Затем это значение преобразуется в процент света (0 - ничто, 100 - фонарик мобильного телефона).

2_GPS.ino Использует последовательную связь с использованием TX1 и RX1 (Serial1).

Он использует сообщения NMEA (точнее, сообщения $ GPRMC), чтобы определить широту и долготу ящика.

3_RFID.ino Используя библиотеку MFRC522, этот код сканирует новые RFID-метки. Когда они есть, они сохраняются как RFID_lastUID.

4_DotMatrix.inoЭтот код используется для инициализации и установки отображения точечной матрицы. Он содержит определения для анимации загрузки и т. Д.

Настройка

Прежде чем вы сможете загрузить этот код в свой Arduino, вам необходимо установить несколько библиотек.

Библиотека Arduino-LMIC от matthijskooijman (https://github.com/matthijskooijman/arduino-lmic)

Библиотека MFRC522 для считывателя RFID (https://github.com/miguelbalboa/rfid)

Теперь перейдите на main.ino и измените DEVEUI, APPEUI и APPKEY на те, которые вы скопировали на последнем шаге.

Шаг 6: настройка серверной части

Бэкэнд для этого проекта можно найти на моем GitHub в разделе RPI> Backend (https://github.com/BoussonKarel/CaptureTheBox).

Как это работает?

  1. Каждые 10 секунд код ищет активную игру. Если она найдена, она сохраняется в переменной с именем huidigSpel (currentGame).
  2. Если установлен режим Serial, между Arduino и Pi используется кабель. Pi опрашивает значения LDR и GPS. Arduino отвечает форматом JSON. RFID-теги отправляются всякий раз, когда они представлены. Этот режим использовался исключительно для целей разработки и больше не нужен.
  3. Если установлен режим LoRa, создается клиент MQTT, который запускает обратный вызов всякий раз, когда TTN получает данные LoRa. Он содержит данные LDR, GPS и RFID.
  4. Интерфейс может получать данные с помощью конечных точек API. Большая часть данных извлекается с помощью huidigSpel.id. Данные возвращаются в формате JSON с помощью jsonify ().

Измените настройки. Перейдите на secretts.py и введите имя вашего приложения LoRa и свой Acces Key (вы записали ранее).

Перейдите в config.py и введите учетные данные своей базы данных (например, пароль, имя пользователя…)

Настройка его как службы Попробуйте запустить app.py, как только вы убедитесь, что он работает, мы можем использовать его как службу. Это автоматически запустит код в фоновом режиме, когда вы загрузите свой пи.

Для этого скопируйте ctb_service.service в /etc/systemd/system/ctb_service.service. sudo cp ctb_service.service /etc/systemd/system/ctb_service.service

Теперь включите его, используя systemctl enable ctb_service.service

Если вам нужно внести некоторые изменения в код, вы можете легко остановить его с помощью systemctl stop (он снова запустится при перезагрузке) или disable is (остановить его автоматический запуск) с помощью systemctl disable.

Если вам нужно просмотреть журналы (из-за ошибок), вы можете использовать journalctl -u ctb_service.service.

Более подробную информацию об услугах можно найти здесь:

Шаг 7: Настройка внешнего интерфейса

Как обычно, интерфейс можно найти на моем GitHub в разделе RPI> Frontend (https://github.com/BoussonKarel/CaptureTheBox)

Вставьте это в папку / var / html вашего Raspberry Pi.

Он содержит все необходимые веб-страницы для игры.

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

Шаг 8: Добавление обсадной колонны

Добавление обсадной колонны
Добавление обсадной колонны
Добавление обсадной колонны
Добавление обсадной колонны

Для этого я использовал старый чемодан с инструментами и следующие материалы / техники:

  • 3D печать
  • Пена для удержания аккумулятора на месте
  • Переработанные деревянные доски
  • Горячий клей
  • Винты и гайки

Что вы будете делать со своим кейсом - ваш выбор! Я дам вам свободу творчества.

Для вдохновения добавил несколько фотографий своего (готового) кейса.

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