Оглавление:

Настольный футбол для Интернета вещей на Raspberry Pi: 11 шагов
Настольный футбол для Интернета вещей на Raspberry Pi: 11 шагов

Видео: Настольный футбол для Интернета вещей на Raspberry Pi: 11 шагов

Видео: Настольный футбол для Интернета вещей на Raspberry Pi: 11 шагов
Видео: Photon — миниатюрный контроллер для «интернета вещей». Железки Амперки 2024, Июль
Anonim
Настольный футбол для Интернета вещей на Raspberry Pi
Настольный футбол для Интернета вещей на Raspberry Pi

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

В основной настройке используется существующий настольный футбол, подключенный к Raspberry Pi, который может выполнять все следующие задачи:

  • Использует контакты GPIO для управления ИК-светодиодами / приемниками и матричными модулями 8x8
  • Запускает веб-сайт Flask с использованием nginx
  • Запускает базу данных MySQL / MariaDB для хранения данных

Чтобы воссоздать этот проект, вам потребуются следующие навыки:

Бэкэнд:

  • Понимание HTML / CSS / Javascript для клиента сайта
  • Понимание Python с Flask / Flask-SocketIO / Jinja2 для серверной части веб-сайта
  • Базовые знания MySQL
  • Знайте, как запустить веб-сервер

Прототип

  • Базовые знания о том, как подключить электрическую цепь
  • Пайка
  • Базовое понимание того, как писать скрипт на Python
  • Работа с Linux (Raspbian)
  • Набраться терпения, потому что потребуется много времени на отладку.

Шаг 1: материалы

Вот список всех необходимых частей для стола:

  • Raspberry Pi Model 3 (с корпусом)
  • T-Cobbler для подключения Pi к макетной плате
  • Настольный футбол (я использовал очень старый стол, похожий на этот. Должен быть готов просверлить в нем отверстия)
  • Модуль точечной матрицы MAX7219 Arduino (2)
  • ИК-светодиодные излучатели (2+, потому что ломаются, как этот)
  • ИК-приемники (2+, потому что тоже ломаются, как этот)
  • Базовый беспаечный макет
  • Много-много проволоки (зависит от размера стола для настольного футбола)
  • штекерные соединители (30+)
  • розетки (10+)
  • Резисторы 100-220 Ом (4+)
  • паяльные материалы
  • проволочные ремни
  • Держатели светодиодов
  • немного дерева / шурупов на случай, если вы хотите переместить мяч в желоб

Общая стоимость этого проекта полностью зависит от стоимости вашего настольного футбола (дорого). Помимо стола, материалы будут стоить максимум 150 евро.

Шаг 2: электрическая схема

Электрическая схема
Электрическая схема
Электрическая схема
Электрическая схема
Электрическая схема
Электрическая схема

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

Сначала я попытался реализовать светодиодную матрицу 8x8 со сдвиговым регистром 74HC595 (первое изображение) и массивом транзисторов, но из-за большого количества проводов и очень низкого выхода я переключился на модуль точечной матрицы MAX7219, потому что он занимает всего 5 проводов и напрямую управляется шина SPI.

Схема, которую я в конечном итоге использовал, нарисована с помощью Fritzing. Обратите внимание, что ИК-светодиоды и приемники могут быть подключены к любому из ваших бесплатных контактов GPIO.

ИК-приемники и светодиод должны быть прямо напротив друг друга, а верхняя часть светодиода должна быть направлена в сторону приемника. Потому что мы хотим смоделировать прямой луч, который может быть прерван движением мяча, и в этом случае произойдет изменение состояния строки DATA приемника с 0 на 1.

Шаг 3: Кодирование датчиков

Кодирование датчиков
Кодирование датчиков

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

В настоящее время я все еще работаю над проектом, но как только все будет сделано, весь проект будет доступен в моем профиле github.

Код для датчиков состоит из 3 классов, которые запускаются в фоновом потоке на моем сервере Flask (что будет объяснено позже):

  1. Класс цели (ссылка) - этот файл инициализирует все отдельные компоненты, которые можно вызвать, вставив правильное устройство / шину SPI и номер контакта.
  2. Класс Matrix (ссылка) - это основной класс для включения модуля MAX7219.
  3. Класс светодиода и приемника (ссылка) - это основной класс для включения инфракрасного прерывающего луча с использованием отдельных потоков для снижения нагрузки на процессор RPi.

Светодиод и приемник работают на частоте 38 кГц, и приемники всегда ожидают, что импульс на 50% вверх и на 50% будет работать правильно.

Шаг 4: Подготовка и размещение датчиков

Подготовка и размещение датчиков
Подготовка и размещение датчиков
Подготовка и размещение датчиков
Подготовка и размещение датчиков
Подготовка и размещение датчиков
Подготовка и размещение датчиков

Теперь подготовим ИК-светодиод и приемник. На картинке в таблице вы можете найти места, где должны быть размещены RPi и датчики.

Но для начала нужно подготовить проводку:

  1. Убедитесь, что вы измерили количество провода, необходимого от места нахождения RPi / макетной платы до места расположения датчика.
  2. Припаяйте контакты ИК-приемника к одному концу провода (COM / GND / V +)
  3. Припаяйте штекерные соединители на другом конце провода.

Теперь подготовим таблицу:

  1. Сделайте базовый чертеж (по рисунку) того, где сверлить. Очень важно, чтобы 2 отверстия были выровнены друг напротив друга, потому что это будет место расположения балки.
  2. Просверлить отверстия
  3. Если у вас есть держатели для светодиодов (ссылка), вы можете поместить их в отверстие, чтобы сделать его более прочным.
  4. Вставьте + заклейте светодиод + приемник с обеих сторон
  5. Закрепите провода + прикрепите их к дереву, чтобы они не пересекались слишком сильно
  6. Вставьте штыри на макетной плате в соответствии с ранее предоставленной схемой.

Шаг 5: Подготовка и установка матричного модуля

Подготовка и установка матричного модуля
Подготовка и установка матричного модуля

Далее мы собираемся подключить 2 модуля светодиодной матрицы

Примечание:

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

Чтобы подготовить провода:

  1. Измерьте провод от макета к верхней части стола.
  2. Припаяйте несколько гнездовых разъемов к первому концу провода.
  3. Припаяйте штекерные разъемы к другому концу провода.

Размещение матрицы:

  1. Вытащите матрицу через отверстие сверху.
  2. Оберните + скотчем провода внутри на дереве, чтобы избежать пересечения
  3. Вставьте штыри на макетной плате в соответствии с ранее предоставленной схемой.

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

Шаг 6. Создание Интернета вещей

Создание Интернета вещей
Создание Интернета вещей

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

Однако, если вы хотите подключить свой стол к Интернету, следующие несколько шагов должны быть правильными.

В следующих нескольких шагах мы рассмотрим следующее:

  • Настройка Raspberry Pi
  • Создание базы данных для хранения
  • Создание сайта
  • Размещение в сети

На этом этапе, если вы знакомы с git, я рекомендую вам создать репозиторий на GitHub / GitLab, чтобы отслеживать ваши файлы. Если вы этого не сделаете, вы можете создать папку с такой же структурой, как на картинке.

Полный проект скоро будет доступен на GitHub. Однако временный rar-файл со всеми необходимыми файлами доступен.

Шаг 7: Подключение Raspberry Pi

Далее мы собираемся настроить среду raspberry pi, для этого вам необходимо выполнить следующие шаги:

  • Подключитесь через SSH к Rasberry Pi (вы можете использовать PuTTY)
  • Создайте папку (пример проекта mkdir) и перейдите в эту папку с помощью команды cd
  • Создайте виртуальную среду Python в этой папке с помощью команды python3 -m venv --system-site-packages env
  • Активируйте виртуальный интерпретатор с помощью команды source / env / bin / activate
  • Установите пакеты из файла requirements.txt с помощью команды python -m pip install package-name.
  • Перенесите файлы из ранее предоставленного файла project_example.rar через SSH в папку вашего проекта.

Теперь вы сможете запустить полный проект на своем Raspberry Pi. Я советую вам использовать Python IDE, например PyCharm, который позволяет вам использовать вас для отладки с вашего удаленного интерпретатора через SSH и при необходимости напрямую загружать изменения.

Шаг 8: Настройка базы данных

Настройка базы данных
Настройка базы данных

Теперь вам нужно настроить очень простую базу данных на основе этой модели.

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

После этого вы можете экспортировать дамп своей базы данных и загрузить его на свой RPi, а затем выполнить его с помощью sudo mariadb <pathtofile / file.sql

Шаг 9: Создание веб-сайта

Создание веб-сайта
Создание веб-сайта
Создание веб-сайта
Создание веб-сайта
Создание веб-сайта
Создание веб-сайта

Затем вы можете проанализировать (и использовать) код из файла project_example.rar.

Главный файл - это Flask.py, который является основой этого проекта:

  • Запускает приложение Flask-SocketIO, которое обрабатывает серверную часть веб-сайта.
  • Создает соединение между базой данных и Flask
  • Обеспечивает проверку входа в систему и регистрацию пользователя
  • Предоставляет необходимый код о том, как играть в игру, использует socketio для обновления веб-сайта в реальном времени во время игры.
  • Помещает результаты игры в базу данных

В папках static и templates вы можете найти HTML / CSS / JS, которые обеспечивают интерфейсную часть веб-сайта. Не стесняйтесь изменять их по своему усмотрению.

Шаг 10: подключение к всемирной паутине

Чтобы подключить наш сайт к сети, мы будем использовать nginx и uwsgi. В примере проекта вы можете найти необходимые файлы в папке conf.

Прежде всего вам необходимо обновить следующие данные в этих файлах:

  • В uwsgi-flask.ini вам нужно изменить путь параметра virtualenv к вашему интерпретатору
  • В project1-flask.service вам необходимо обновить часть файла [Service], указав свои учетные данные и пути к связанным файлам.
  • В файле nginx вам нужно обновить сервер и местоположение / путь к связанному с ним сокету.

Затем вам нужно заменить файл веб-сервера nginx по умолчанию на расположение вашего файла конфигурации nginx, ниже приведен пример команд Linux для этого.

  • мне @ my-rpi: ~ / project1 $ sudo cp conf / nginx / etc / nginx / sites-available / project1
  • мне @ my-rpi: ~ / project1 $ sudo rm / etc / nginx / sites-enabled / defaul t
  • мне @ my-rpi: ~ / project1 $ sudo ln -s / etc / nginx / sites-available / project1 / etc / nginx / sites-enabled / project1
  • мне @ my-rpi: ~ / project1 $ sudo systemctl перезапустить nginx.service

Наконец, вам нужно добавить настраиваемые службы в папку systemd, это пример того, как это сделать:

  • me @ my-rpi: ~ / project1 $ sudo cp conf / project1 - *. service / etc / systemd / system /
  • мне @ my-rpi: ~ / project1 $ sudo systemctl daemon-reload
  • мне @ my-rpi: ~ / project1 $ sudo systemctl start project1- *
  • мне @ my-rpi: ~ / project1 $ sudo systemctl status project1- *

Если вы хотите, чтобы веб-сервер запускался при загрузке вашего raspberry pi, вам нужно использовать команду sudo systemctl enable project1 - *. Service.

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

Шаг 11: Завершение

Завершение
Завершение

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

Я потратил на это бесчисленное количество часов за 2,5 недели. Несмотря на то, что все было немного поспешно, я все еще горжусь тем, чего я достиг. На этапе сборки я столкнулся с бесчисленными ошибками / ошибками / неисправными датчиками, поэтому не расстраивайтесь, если все не работает с первой попытки.

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

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

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