Distribuidor automático de tarjetas: 7 pasos
Distribuidor automático de tarjetas: 7 pasos
Anonim
Distribuidor automático de tarjetas
Distribuidor automático de tarjetas

Elegí un distribuidor de tarjetas inteligentes como mi primer proyecto porque me gusta jugar a las cartas. Lo que más me disgusta es repartir cartas. Tienes que recordar para cada juego cuántas cartas recibe cada persona. Eso se vuelve confuso cuando conoces muchos juegos de cartas. Mi proyecto también ayudará a las personas que tienen problemas para distribuir tarjetas, como las personas mayores y las personas que padecen Parkinson.

Suministros

  • 1 Raspberry Pi (usé una Raspberry Pi 4)
  • Tarjeta SD (se recomiendan 16 GB)
  • 1 pieza Outbread para Raspberry Pi (pieza en T)
  • 2 placas de prueba
  • 1 módulo de fuente de alimentación para protoboard, 5V y 3V3
  • 1 pantalla LCD
  • 1 potenciómetro
  • 1 MPU6050 (acelerómetro y giroscopio)
  • 1 transistores NPN
  • 1 expansor de E / S PCF8574N
  • 1 motor paso a paso
  • 1 placa de ruptura ULN2003 para controlar el motor paso a paso
  • 1 sensor ultrasónico HC-SR04
  • 1 motores de 5 V CC
  • 1 diodos
  • 6 resistencias de 470 ohmios
  • 4 resistencias de 10K Ohm
  • Cable eléctrico para conectar todo

Útil para tener al hacer:

  • Soldador
  • Soldar
  • Dremel o sierra de calar (algo para cortar madera y plástico abs)

Software:

  • Masilla
  • Banco de trabajo MySQL
  • Generador de imágenes de disco Win32
  • Editor de código (recomiendo Visual Studio Code)
  • WinSCP
  • Imagen de Raspbian

Paso 1: preparación de Rasperry Pi

Primero debemos preparar la Raspberry Pi antes de hacer cualquier otra cosa. Porque todo estará funcionando del Pi por lo que esta es una de las piezas más importantes del distribuidor de tarjetas.

Instalación:

Descargue la imagen de Raspbian de

  1. Descarga el archivo ZIP
  2. Extraiga el archivo ZIP donde pueda encontrarlo fácilmente
  3. Abra Win32 Disk Imager y seleccione la imagen extraída
  4. Seleccione la tarjeta SD en el menú desplegable y haga clic en escribir
  5. Una vez finalizado el proceso de escritura, puede cerrar Win32 Disk Imager

Ahora tenemos que hacer algunas cosas más antes de que podamos conectarnos al Pi

  1. Navegue a la carpeta de inicio en la tarjeta SD
  2. Abra el archivo cmdline.txt
  3. Agregue 'ip = 169.254.10.1' al final de la línea separada por un espacio
  4. Guardar y salir del archivo
  5. Cree en el mismo directorio un archivo llamado ssh y elimine la extensión (esto habilitará ssh en el primer arranque para que podamos conectarnos a la Pi)
  6. Expulse de forma segura la tarjeta SD y colóquela en el Pi

Ahora podemos conectarnos al Pi:

  1. Tome un cable ethernet e inserte un extremo en el Pi y el otro extremo en su computadora
  2. Masilla abierta
  3. Ingrese 169.254.10.1 en el campo Nombre de host
  4. Asegúrese de que SSH esté seleccionado y el puerto sea 22
  5. Haga clic en abrir
  6. Si recibe una advertencia, puede continuar e ignorarla.
  7. El nombre de usuario es pi y la contraseña es frambuesa

Configuración e instalación de software:

Abra raspi-config con el siguiente comando:

sudo raspi-config

Seleccione la quinta opción: Opciones de interfaz

Habilitar SPI e I2C

Deshabilite las siguientes cosas en la tercera opción: Opciones de arranque:

  • Pantalla de bienvenida
  • Elija cli para el inicio y no el escritorio

Configuración wifi:

Wifi es útil para navegar fácilmente al sitio web. Asegúrese de tener sus credenciales wifi cerca.

Para configurar wifi necesitamos algunas cosas:

Agregue su wifi usando este comando y cambie SSID y PASSWORD a su información:

sudo wpa_passphrase "SSID" "CONTRASEÑA" >> /etc/wpa_supplicant/wpa_supplicant.conf

Ejecute este comando para reconfigurar su wifi:

sudo wpa_cli

Seleccione la interfaz correcta:

interfaz wlan0

Reconfigure la interfaz:

reconfigurar

Verifique si la reconfiguración fue exitosa con este comando:

ip a

Si ve una dirección IP en la interfaz wlan0, entonces todo está configurado.

Actualización del sistema operativo

Actualice el sistema operativo con estos 2 comandos:

actualización de sudo apt

actualización completa de sudo apt

Configurando MariaDB:

Instalación del servidor web Apache:

sudo apt install apache2 -y

Instalación del servidor MariaDB:

sudo apt install mariadb-server -y

Ahora necesitamos reiniciar:

sudo reiniciar

Se recomienda asegurar la instalación de MariaDB. Puede hacerlo ejecutando este comando:

sudo mysql_secure_installation

Primero se le pedirá la contraseña de root actual, pero la instalación predeterminada no tiene una, así que presione Intro.

A continuación, se le preguntará si desea establecer una contraseña de root, escriba y. ¡Asegúrese de recordar la contraseña!

  • Ingrese y para eliminar usuarios anónimos
  • Ingrese y para deshabilitar el inicio de sesión de root de forma remota
  • Ingrese y para eliminar las bases de datos de prueba y acceder a ellas
  • Ingrese y para recargar privilegios

¡Su instalación de MariaDB debería ser segura!

Ahora podemos crear un nuevo usuario:

Ingrese al shell mysql con este comando:

sudo mysql

Cree un usuario con el nombre de usuario mysql y una contraseña (su_contraseña) los siguientes comandos:

crea el usuario mysql @ localhost identificado por 'your_password';

conceda todos los privilegios sobre *. * a mysql @ localhost;

PRIVILEGIOS DE FLUSH;

Salga del shell mysql con este comando:

Salida;

Paquetes de Python:

Python ya debería estar instalado a menos que elija la versión Lite:

sudo apt instalar python3-pip

Necesitamos una buena cantidad de paquetes de Python, puedes instalarlos todos con el siguiente comando:

pip3 instalar mysql-connector-python flask-socketio flask-cors gevent gevent-websocket

Ahora tenemos que reiniciar una vez más

sudo reiniciar

Paso 2: Configurar Visual Studio Code y MySQL Workbench

Conexión a Pi con MySQL Workbench:

Abra MySQL Workbench

Haga una nueva conexión al Pi con la siguiente información:

  • Nombre de la conexión: Raspi
  • Método de conexión: TCP / IP estándar a través de SSH
  • Nombre de host SSH: dirección IP del Pi

Puede obtener la dirección IP con este comando:

ip a

  • Nombre de usuario SSH: pi
  • Nombre de host de MySQL: 127.0.0.1
  • Puerto del servidor MySQL: 3306
  • Nombre de usuario: mysql

Haga clic en Aceptar e ingrese la contraseña para el usuario pi y luego ingrese la contraseña para el usuario mysql.

Configuración del código de Visual Studio:

Abrir código de Visual Studio

Instale estas 2 extensiones:

  • Remoto - SSH
  • Remoto - SSH: Edición de archivos de configuración

Presione Visual Studio Code F1 y escriba ssh

Elija SSH remoto: agregue un nuevo host SSH

Complete ssh pi @ dirección IP

En el siguiente paso presione enter

La conexión ahora está hecha al Pi. Puede conectarse al Pi presionando F1 y seleccionando conectarse a host remoto.

Ingrese la contraseña para que Visual Studio Code tenga acceso al Pi.

Una cosa más: instale la extensión de Python en la máquina remota para que pueda ejecutar y depurar el código fácilmente.

Paso 3: Diagrama de Fritzing

Diagrama de Fritzing
Diagrama de Fritzing
Diagrama de Fritzing
Diagrama de Fritzing
Diagrama de Fritzing
Diagrama de Fritzing

En este paso explicaré el circuito.

Los esquemas de arriba están hechos con Fritzing.

Motor de corriente continua:

Conecte GPIO 18 a la base del colector, el pin del medio en un transistor npn. Conecte la tierra del motor al colector del transistor y la potencia del motor a 5V. Conecte la tierra del transistor a la línea de tierra. Conecte el diodo en la barrera sobre el motor para que bloquee la corriente para que no fluya directamente al transistor.

Motor paso a paso:

Conecte el motor paso a paso a la placa de control. En el tablero de control hay en un lado pines para conectar 5V y tierra. Los otros pines son pines de control. Estos pines controlan los imanes dentro del motor para que pueda girar. Conecte estos pines a GPIO 12, 16, 20 y 21 en la Raspberry Pi.

HC-SR04 Ultrasónico:

Este sensor puede medir distancias de unos 4,5 metros utilizando sonido.

Conecte el pin VCC a 5V, el pin de disparo a GPIO 25, el pin de eco con una resistencia de 470 Ohm a GPIO 24 y la tierra con una resistencia de 470 Ohm a tierra.

MPU6050:

Conecte el pin VCC a 3V3, el suelo a tierra, scl al scl en el Pi y el sda al sda en el Pi. Para este sensor utilizo I2C para controlarlo. Puedes leer más sobre esto aquí. Aquí hay una explicación básica: El Pi es el maestro y el MPU6050 es el esclavo. A través de la línea scl, el Pi controla los tiempos y la línea sda se utiliza para enviar datos del maestro al esclavo o del esclavo al maestro. Solo el maestro puede iniciar la transferencia de datos.

Resistencia dependiente de la luz:

Para obtener lecturas correctas del LDR, utilizo un chip MCP3008. Esto asegura que las lecturas del ldr sean estables y se conviertan correctamente de señales analógicas a digitales.

Conecte 3V3 a un lado del ldr con una resistencia de 10K Ohm entre él. Entre el ldr y la resistencia, conecte un cable al canal 0 del MCP3008. Luego, conecte el otro lado del ldr al suelo.

Pantalla LCD:

Puede usar la pantalla LCD sin un PCF8574, pero debido a que los pines GPIO en el Pi son limitados, uso un PCF8574 para guardar algunos pines GPIO. También puede utilizar un registro de desplazamiento, pero yo prefiero un PCF8574. Puede controlar el PCF8574 con el protocolo SMbus, pero escribí mi propia clase para controlarlo. El potenciómetro controla el contraste.

Pines de pantalla LCD:

  • VSS a tierra
  • VDD a 5V
  • V0 al pin variable del potenciómetro
  • RS a GPIO 13
  • R / W a tierra porque solo escribo en la pantalla y no leo
  • E a GPIO 19
  • DB0 a P0 del PCF
  • DB1 a P1
  • DB2 a P2
  • DB3 a P3
  • DB4 a P4
  • DB5 a P5
  • DB6 a P6
  • DB7 a P7
  • LED + a 5V
  • LED- a tierra

Pines PCF8574:

  • A0 a tierra
  • A1 a tierra
  • A2 a tierra
  • Tierra a tierra
  • VCC a 5 V
  • SDA a GPIO 27
  • SCL a GPIO 22 con resistencia de 330 Ohm

Es posible que no tenga LED + y LED- dependiendo del tipo de pantalla que tenga. LED + y LED- es para la luz de fondo.

Conecte el lado positivo del potenciómetro a 5 V y la tierra a tierra.

¡Asegúrate de usar resistencias pull-up!

Paso 4: Código en Github

Puedes encontrar todo el código necesario en mi Github.

Carpeta proyecto1:

Esta carpeta contiene todo el código del backend. En la carpeta Klasses están todas las clases para controlar el hardware.

Los repositorios de carpetas contienen 2 archivos: Database.py y DataRepository.py. Database.py mantiene la conexión a la base de datos y maneja consultas. DataRepository.py contiene todas las consultas necesarias para el sitio.

App.py es el archivo principal del backend. Este archivo se inicia automáticamente cuando arranca el Pi.

Config.py contiene algunas configuraciones para conectarse a la base de datos. Asegúrese de completar estos archivos con su propia información.

Puede colocar esta carpeta en cualquier lugar de su directorio personal.

Carpeta html:

Esta carpeta contiene todos los archivos del sitio, el frontend.

  • La carpeta contiene los archivos para el diseño del sitio.
  • Fuentes contiene las fuentes utilizadas en el sitio.
  • El script contiene todos los archivos Javascript para hacer que el sitio sea dinámico.

Esta carpeta debe estar en la carpeta / var / www / html

Puede copiar un archivo o carpeta con este comando:

sudo mv / ruta / al / directorio / actual / ruta / al / destino / directorio

Para navegar al sitio, escriba en su navegador la dirección IP que se muestra en la pantalla LCD.

Paso 5: Estructura de base de datos normalizada

Estructura de base de datos normalizada
Estructura de base de datos normalizada

En este paso vamos a importar la base de datos.

  1. Conéctese a su Raspberry Pi con MySQL Workbench
  2. Haga clic en Servidor -> Importación de datos
  3. Seleccione Importar archivo autónomo
  4. En la carpeta Database-export from Github hay un archivo sql llamado dump_project1.sql
  5. Busque este archivo y haga clic en iniciar importación

Eso es todo. El Pi ahora puede acceder a la base de datos si tiene la información correcta.

Paso 6: Caso para el distribuidor de tarjetas

Caso para el distribuidor de tarjetas
Caso para el distribuidor de tarjetas
Caso para el distribuidor de tarjetas
Caso para el distribuidor de tarjetas
Caso para el distribuidor de tarjetas
Caso para el distribuidor de tarjetas

En este paso explicaré qué utilicé para la carcasa y cómo monté todo.

Para el caso utilicé 2 cajas de ABS:

- 265 x 185 x 95 mm

- 171 x 121 x 80 mm

Los agujeros que hice en las cajas

Un orificio para la pantalla LCD, 3 orificios para los cables de alimentación, uno para los cables del motor paso a paso, el motor de CC y el sensor ultrasónico.

En la caja más pequeña hice un agujero para los cables de los componentes y un agujero para que pasaran las tarjetas. En la parte superior hice el agujero más grande para que puedas colocar cartas de juego en el dispositivo.

Monté el motor de CC con un soporte y un poco de cinta adhesiva de doble cara. Hice una tabla de madera para colocar las cartas con un agujero para que la rueda disparara una carta.

Elegí plástico ABS porque es liviano, por lo que el motor paso a paso puede girarlo fácilmente. La madera puede ser muy pesada y el motor paso a paso podría tener problemas con esto. Para cortar los agujeros utilicé un taladro con brocas diseñadas para metal y una Dremel. Cortar los agujeros más grandes requirió mucho más trabajo y una sierra de calar sería mejor.

Paso 7: Programa como servicio

Es realmente útil que el código comience después de que se inicie la Pi. Para eso vamos a hacer un servicio.

Cree un nuevo archivo llamado smartcard.service con el siguiente comando:

sudo nano /etc/systemd/system/smartcard.service

Esto tiene que ir al archivo:

[Unidad]

Descripción = backend de tarjeta inteligente Después = network.target [Servicio] ExecStart = / usr / bin / python3 -u app.py WorkingDirectory = / home / pi / project1 StandardOutput = heredar StandardError = heredar Reiniciar = siempre Usuario = pi [Instalar] WantedBy = multiusuario.target WorkingDirectory es la ruta a la carpeta donde se encuentra el programa

¡Ahora tienes tu propia tarjeta inteligente!