Tabla de contenido:

Mesa de futbolín Raspberry Pi IoT: 11 pasos
Mesa de futbolín Raspberry Pi IoT: 11 pasos

Video: Mesa de futbolín Raspberry Pi IoT: 11 pasos

Video: Mesa de futbolín Raspberry Pi IoT: 11 pasos
Video: M1 iPad Pro Setup 2024, Noviembre
Anonim
Futbolín Raspberry Pi IoT
Futbolín Raspberry Pi IoT

Bienvenido a mi versión de un futbolín pirateado, como parte de un proyecto estudiantil para la tecnología de Nuevos Medios y Comunicación. Básicamente, crecí entre futbolines y mesas de billar, así que pensé que sería genial intentar conectar uno de estos dispositivos a Internet.

La configuración principal es usar una mesa de futbolín existente conectada a una Raspberry Pi que puede realizar todas las siguientes tareas:

  • Utiliza pines GPIO para controlar los LED / receptores de infrarrojos y los módulos de matriz de puntos 8x8
  • Ejecuta un sitio web de Flask usando nginx
  • Ejecuta una base de datos MySQL / MariaDB para el almacenamiento de datos

Para poder recrear este proyecto, necesitará las siguientes habilidades:

Backend:

  • Comprensión de HTML / CSS / Javascript para el cliente del sitio web
  • Comprensión de Python con Flask / Flask-SocketIO / Jinja2 para el lado del servidor del sitio web
  • Conocimientos básicos de MySQL
  • Sepa cómo ejecutar un servidor web

Prototipo

  • Conocimientos básicos sobre cómo cablear un circuito eléctrico.
  • Soldadura
  • Comprensión básica sobre cómo escribir un script en Python
  • Trabajar con Linux (Raspbian)
  • Tener mucha paciencia porque habrá mucha depuración involucrada

Paso 1: los materiales

Aquí está la lista con todas las partes necesarias para la mesa:

  • Raspberry Pi Model 3 (con carcasa)
  • T-Cobbler para conectar el Pi a la placa de pruebas
  • Mesa de futbolín (utilicé una mesa muy antigua similar a esta. Debe estar dispuesto a perforar agujeros en ella)
  • Módulo de matriz de puntos Arduino MAX7219 (2)
  • Emisores LED IR (2+ porque se rompen, similar a este)
  • Receptores IR (2+ porque también se rompen, similar a este)
  • Placa de pruebas básica sin soldadura
  • Mucho cable (depende del tamaño del futbolín)
  • conectores macho (30+)
  • conectores hembra (10+)
  • Resistencias de 100-220 ohmios (4+)
  • materiales de soldadura
  • correas de alambre
  • Soportes LED
  • un poco de madera / tornillos en caso de que quieras enviar la bola a la cuneta

El costo total de este proyecto depende completamente del costo de su mesa de futbolín (caro). Además de la mesa los materiales serán como máximo 150 euros.

Paso 2: el circuito eléctrico

El circuito eléctrico
El circuito eléctrico
El circuito eléctrico
El circuito eléctrico
El circuito eléctrico
El circuito eléctrico

Antes de intentar soldar, ensamble todos los componentes. Le recomiendo que primero lo pruebe en una placa de prueba. Es más fácil reemplazar los componentes defectuosos antes de pasar horas soldando.

Al principio intenté implementar la matriz LED 8x8 con un registro de desplazamiento 74HC595 (primera imagen) y una matriz de transistores, pero debido a los muchos cables y la salida muy baja, cambié al módulo de matriz de puntos MAX7219 porque solo toma 5 cables y es impulsado directamente por un bus SPI.

El circuito que usé finalmente está dibujado con Fritzing. Tenga en cuenta que los LED y los receptores IR se pueden conectar a cualquiera de sus pines GPIO gratuitos.

Los receptores de infrarrojos y el LED deben estar directamente uno frente al otro y la parte superior del LED debe apuntar hacia el receptor. Porque queremos simular un rayo directo que puede romperse por el movimiento de la bola, en cuyo caso habrá un cambio de estado de la línea DATA del receptor de 0 a 1.

Paso 3: codificación de los sensores

Codificación de los sensores
Codificación de los sensores

He codificado la mayor parte de este proyecto usando Pycharm porque permite una fácil implementación SSH en su Raspberry Pi usando un intérprete remoto. No entraré en detalles sobre cómo funciona este programa, pero se puede encontrar mucha información en el sitio web de pycharm.

Actualmente todavía estoy trabajando en el proyecto, pero una vez que todo esté hecho, todo el proyecto estará disponible en mi perfil de github.

El código para los sensores consta de 3 clases que se ejecutan en un hilo de fondo en mi servidor Flask (que se explicará más adelante):

  1. La clase de objetivo (enlace): este archivo inicia todos los componentes separados, a los que se puede llamar insertando el dispositivo / bus SPI correcto y el número de pin
  2. La clase Matrix (enlace): esta es la clase principal para encender el módulo MAX7219
  3. La clase de LED y receptor (enlace): esta es la clase principal para encender el haz de interrupción de infrarrojos utilizando subprocesos separados para reducir la carga de la CPU del RPi

El LED y el receptor funcionan en una frecuencia de 38 kHz y los receptores siempre esperan que un pulso del 50% hacia arriba y el 50% hacia abajo funcionen correctamente.

Paso 4: preparación y colocación de los sensores

Preparar y colocar los sensores
Preparar y colocar los sensores
Preparar y colocar los sensores
Preparar y colocar los sensores
Preparar y colocar los sensores
Preparar y colocar los sensores

Ahora vamos a preparar el LED IR y el receptor. En la imagen de la tabla, puede encontrar las ubicaciones donde se deben colocar el RPi y los sensores.

Pero primero tenemos que preparar el cableado:

  1. Asegúrese de medir la cantidad de cable necesario desde la ubicación del RPi / placa de pruebas hasta la ubicación del sensor
  2. Suelde los pines del receptor de infrarrojos a un extremo del cable (COM / GND / V +)
  3. Suelde las piezas del conector macho en el otro extremo del cable

Ahora vamos a preparar la mesa:

  1. Haga un dibujo básico (basado en la imagen) sobre dónde perforar. Es muy importante que los 2 orificios estén alineados entre sí porque esta será la ubicación de la viga.
  2. Taladrar los agujeros
  3. Si tiene algunos soportes de LED (enlace), puede colocarlos dentro del orificio para que sea más resistente
  4. Inserte + pegue el receptor LED + en ambos lados
  5. Ate los cables + péguelos con cinta adhesiva en la madera para que no se crucen demasiado
  6. Inserte los pines macho en la placa de pruebas de acuerdo con el circuito proporcionado anteriormente

Paso 5: preparación y colocación del módulo Matrix

Preparación y colocación del módulo Matrix
Preparación y colocación del módulo Matrix

A continuación vamos a conectar los 2 módulos de matriz LED

Nota:

Como usé un futbolín viejo, ya había agujeros que subían hacia la parte superior debido a las boquillas de cigarrillos. Si no los tiene, deberá crearlos.

Para preparar los cables:

  1. Mida el cable desde la placa de pruebas hacia la parte superior de la mesa.
  2. Suelde algunos conectores hembra al primer extremo del cable
  3. Suelde algunos conectores macho al otro extremo del cable.

Colocando la matriz:

  1. Saque la matriz a través del agujero en la parte superior.
  2. Ate y pegue los cables en el interior de la madera para evitar que se crucen
  3. Inserte los pines macho en la placa de pruebas de acuerdo con el circuito proporcionado anteriormente.

En algún momento agregaré un pequeño paso de bricolaje para agregar una carcasa para el módulo de matriz, pero por ahora están desnudos.

Paso 6: Haciéndolo IoT

Haciéndolo IoT
Haciéndolo IoT

Si solo desea registrarse y mostrar las puntuaciones, puede finalizar el proyecto escribiendo un pequeño script de Python en ejecución que se repita hasta que una de las puntuaciones llegue a 9 y luego se reinicie.

Sin embargo, si desea conectar su mesa a Internet, los siguientes pasos deberían ser lo mejor para usted.

En los siguientes pasos, abordaremos lo siguiente:

  • Configurando la Raspberry Pi
  • Hacer una base de datos para almacenamiento
  • Creando el sitio web
  • Poniéndolo en línea

En este punto, si está familiarizado con git, le recomiendo que cree un repositorio en GitHub / GitLab para realizar un seguimiento de sus archivos. Si no es así, puede crear una carpeta con la misma estructura que en la imagen.

El proyecto completo estará disponible pronto en GitHub. Sin embargo, hay disponible un archivo rar temporal con todos los archivos necesarios.

Paso 7: Conexión de la Raspberry Pi

A continuación vamos a configurar el entorno raspberry pi, para ello necesitas ejecutar los siguientes pasos:

  • Conéctese a través de SSH a su Rasberry Pi (puede usar PuTTY)
  • Cree una carpeta (ejemplo de proyecto mkdir) y muévala a esta carpeta usando el comando cd
  • Cree un entorno virtual de Python en esta carpeta usando el comando python3 -m venv --system-site-packages env
  • Active el intérprete virtual con el comando source / env / bin / enable
  • Instale los paquetes de requirements.txt con el comando python -m pip install package-name
  • Transfiera los archivos del archivo project_example.rar proporcionado anteriormente a través de SSH en la carpeta de su proyecto

Ahora debería poder ejecutar el proyecto completo en su Raspberry Pi. Le aconsejo que use un IDE de Python como PyCharm que le permite usarlo para depurar desde su intérprete remoto a través de SSH y cargar directamente los cambios si es necesario.

Paso 8: configurar la base de datos

Configurar la base de datos
Configurar la base de datos

Ahora necesita configurar una base de datos muy básica, basada en este modelo.

La forma más fácil de hacerlo es crear su base de datos en el banco de trabajo MySQL, donde también puede hacer algunas pruebas.

Una vez hecho esto, puede exportar un volcado de su base de datos y cargarlo en su RPi y luego ejecutarlo con sudo mariadb <pathtofile / file.sql

Paso 9: creación del sitio web

Creando el sitio web
Creando el sitio web
Creando el sitio web
Creando el sitio web
Creando el sitio web
Creando el sitio web

A continuación, puede analizar (y usar) el código proporcionado en el archivo project_example.rar.

El archivo principal es Flask.py, que es el pan y la mantequilla de este proyecto:

  • Ejecuta una aplicación Flask-SocketIO que maneja el backend del sitio web
  • Crea una conexión entre la base de datos y Flask
  • Proporciona validación de inicio de sesión y registro de usuario.
  • Proporciona el código necesario sobre cómo jugar un juego usa socketio para actualizar el sitio web en tiempo real durante el juego
  • Coloca los resultados del juego en la base de datos

En las carpetas estática y de plantillas, puede encontrar el HTML / CSS / JS que proporciona la parte frontal del sitio web. Siéntase libre de modificarlos según sus propios gustos.

Paso 10: Conexión a la World Wide Web

Para conectar nuestro sitio web a la web usaremos nginx y uwsgi. En el ejemplo del proyecto, puede encontrar los archivos necesarios en la carpeta conf.

En primer lugar, debe actualizar lo siguiente en estos archivos:

  • En uwsgi-flask.ini, debe cambiar la ruta del parámetro virtualenv a su intérprete
  • En el project1-flask.service, debe actualizar la parte [Servicio] del archivo con sus credenciales y rutas a los archivos asociados.
  • En el archivo nginx, debe actualizar el servidor y la ubicación / ruta a su socket asociado

A continuación, debe reemplazar el archivo del servidor web nginx predeterminado con la ubicación de su archivo de configuración nginx, a continuación se muestra un ejemplo de los comandos de Linux para hacer esto

  • yo @ my-rpi: ~ / project1 $ sudo cp conf / nginx / etc / nginx / sites-available / project1
  • yo @ my-rpi: ~ / project1 $ sudo rm / etc / nginx / sites-enabled / defaul t
  • yo @ my-rpi: ~ / project1 $ sudo ln -s / etc / nginx / sites-available / project1 / etc / nginx / sites-enabled / project1
  • yo @ my-rpi: ~ / project1 $ sudo systemctl restart nginx.service

Finalmente, necesita agregar los servicios personalizados a su carpeta systemd, este es un ejemplo de cómo hacerlo:

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

Si desea que el servidor web se inicie al arrancar su raspberry pi, debe usar el comando sudo systemctl enable project1 - *. Service.

Si se hace correctamente, después de reiniciar el sistema, su sitio web debería estar ejecutándose en su dirección IP. Si desea editar uno de estos archivos de configuración, siempre debe detener el servicio, volver a cargar los archivos y usar el comando daemon-reload seguido de un inicio; de lo contrario, los cambios no serán efectivos.

Paso 11: Terminando

Terminando
Terminando

Mientras escribe la parte final de este instructivo, este pequeño proyecto escolar todavía es un trabajo en progreso.

He pasado innumerables horas haciendo esto en 2,5 semanas. A pesar de que todo se apresuró un poco, todavía estoy orgulloso de lo que he logrado. Durante la fase de ensamblaje, me he encontrado con innumerables errores / errores / sensores defectuosos, así que no se desanime demasiado si todo no funciona en el primer intento.

Lo mejor que puedes hacer es pedir o buscar ayuda en Internet, hay muchas personas con mucho más conocimiento que están muy ansiosas por ayudarte.

Por último, pero no menos importante, quiero agradecer a mis profesores de Nuevos Medios y Tecnología de la Comunicación por darme muchos consejos y ayudarme a terminar este proyecto.

Recomendado: