Tabla de contenido:

Fuente de agua sin contacto: 9 pasos (con imágenes)
Fuente de agua sin contacto: 9 pasos (con imágenes)

Video: Fuente de agua sin contacto: 9 pasos (con imágenes)

Video: Fuente de agua sin contacto: 9 pasos (con imágenes)
Video: Esos cambios de actitud repentinos 😂 #jcandsondra #humor #gringa 2024, Mes de julio
Anonim
Fuente de agua sin contacto
Fuente de agua sin contacto

Al final de mi primer año como estudiante de MCT, se me asignó la tarea de hacer un proyecto que contuviera todas las habilidades que había adquirido en los cursos durante todo el año.

Estaba buscando un proyecto que verificara todos los requisitos establecidos por mis maestros y al mismo tiempo fuera divertido para mí. Cuando buscaba un sujeto, no pude evitar sentirme inspirado por Covid-19 (esto fue justo antes de que se produjera un brote en todo el mundo). Elegí una fuente / dispensador de agua sin contacto, ya que ofrecería una forma de beber agua sin tocar algunos botones antes de que saliera el agua.

Este proyecto utiliza un sensor de distancia para detectar si se ha colocado una taza o vaso debajo de la salida de agua, la fuente procederá a producir agua durante 60 segundos (100 ml / minuto). Esto es para hacerlo más consistente porque detectar si el vidrio se ha retirado resultó ser una tarea demasiado difícil / lenta, por lo que se instaló un temporizador. Después de que su vaso se haya llenado con 100ml de agua puede esperar 5 segundos y si el vaso aún está frente al sensor de distancia procederá a llenar en otro momento (esto significa que también hay un tiempo de espera de 5 segundos entre el llenado de dos elementos).

Suministros

Componentes

- 1x RaspberryPi (utilicé la cuarta versión, pero las versiones anteriores podrían funcionar también) - 1x transistor S8050 o 1x transistor PN2222 también podrían funcionar - 1x fotoresistor - 1x HC-SR04 (sensor de distancia ultrasónico) - 1x RFID-RC522- 3x diferente LED de colores (azul, amarillo, rojo) - 1x LCD1602- 1x Zumbador activo- 1x PCF8574- 1x MCP3008- 1x Bomba de agua (se utilizó una bomba peristáltica de 12v, enlace a este artículo)

- 1x fuente de alimentación CC (12v, 600mAh) - 1x bloque de alimentación con 3 puntos - 3 placas de pruebas (probablemente podría usar menos) - T-cobbler para pines GPIO de RaspberryPi - T-cobbler cable (para conectar pi y cobbler)

Materiales y herramientas utilizados

- Un taladro con las siguientes brocas:

- 4 mm (para perforar previamente los orificios para los tornillos) - 15 mm (para perforar los orificios para el sensor de distancia)

- Cualquier destornillador- 30 tornillos de 45mm de largo- 6 tornillos de 20mm- 2 bisagras para la puerta- Una placa de MDF de unos 130cm por 80cm- Un par de limas

Paso 1: Montaje del circuito

Montaje del circuito
Montaje del circuito
Montaje del circuito
Montaje del circuito
Montaje del circuito
Montaje del circuito

Para el circuito tenemos 2 sensores, un sensor de distancia y un fotorresistor. El sensor de distancia se usa para detectar si se ha puesto una taza dentro del alcance de la fuente de agua y, opcionalmente, agregué un fotorresistor, este se usa para detectar si la carcasa ha sido abierta por alguien que no debe abrirla. Además de eso, tenemos un lector de RFID que se puede usar para autenticar a un mecánico que necesita abrir la caja para rellenar el depósito de agua o por algún otro problema mecánico.

Para los elementos activos tenemos el LCD1602, zumbador activo y una bomba peristáltica, el LCD se usa para mostrar el estado como si la caja está abierta o la bomba está funcionando así como se mostrará la dirección IP del dispositivo, el zumbador es Se utiliza para emitir un sonido alarmante cuando se abre el estuche sin que alguien lo autorice.

He agregado la placa de pruebas y las vistas esquemáticas del circuito a continuación.

Paso 2: Configurar nuestro RaspberryPi

Para configurar nuestro RaspberryPi, descargaremos el software de imágenes del sitio de Raspberry, con esto puede descargar la versión de Raspbian que desee y crear una imagen de su SDCARD para usted. Una vez que esta herramienta haya hecho su trabajo, puede abrir la SDCARD en el Explorador de Windows, podrá ver la partición de arranque de su RaspberryPi. Aquí encontraremos un archivo llamado cmdline.txt (no abra este archivo en el bloc de notas, ábralo en Notepad ++ o cualquier otro IDE). Agregaremos ip = 169.254.10.1 al final de este archivo para asegurarnos de que podamos conectarnos a nuestro dispositivo a través de Ethernet (asegúrese de no agregar ningún ENTERS al final de su archivo o tendrá problemas).

Ahora puede poner su SDCARD en su RaspberryPi e iniciarlo, conectar el Pi a su computadora y usar Putty para conectarse a su Pi a través de SSH. Utilizo el siguiente comando para conectarme a mi Pi en lugar de usar Putty. "ssh [email protected]" puede que se agote el tiempo de espera, así que tenga paciencia y espere a que se inicie la Pi. Una vez que se nos solicite una contraseña, completaremos la contraseña predeterminada de "frambuesa". Asegúrese de cambiar esta contraseña después de iniciar sesión para evitar que cualquier persona con malas intenciones acceda a su Raspberry Pi.

Ahora configuraremos nuestro Pi para que proporcione la funcionalidad necesaria para nuestro código. Use "sudo raspi-config" para abrir el menú de configuración y aquí iremos a Opciones de interfaz.

Debajo de aquí activaremos las siguientes opciones: - SPI- I2C

Siga esta guía para configurar una conexión inalámbrica a Internet en su Pi, una vez que lo haya hecho con éxito, podremos instalar nuestros paquetes requeridos.

Paquetes: (ejecute los comandos en el orden en que se indican aquí)

Lo siguiente para obtener las últimas actualizaciones para nuestro Pi- sudo apt update && apt upgrade -y

Instale nuestro servidor MySQL y servidor web- sudo apt install mariadb-server apache2

Usaré MySQL Workbench para configurar la base de datos más adelante en esta guía, si no usa esto y prefiere phpmyadmin, puede instalarlo con el siguiente comando, puede usar cualquier otro cliente MySQL, así como puede importar correctamente la base de datos.- sudo apt install phpmyadmin

Después de haber hecho todo lo anterior, necesitamos crear un usuario para nuestra base de datos. Use "sudo mysql -u root" para iniciar sesión en su servidor MySQL, aquí crearemos un usuario llamado db_admin con su contraseña respectiva, mantenga esta contraseña se anotó en algún lugar para más adelante en las instrucciones. OTORGAR TODOS LOS PRIVILEGIOS EN *. * A "db_admin" @ "%" IDENTIFICADO POR "yourPasswordHere" CON OPCIÓN DE OTORGAMIENTO;

Utilice el comando "\ q" para salir del terminal MySQL.

Paquetes de Python: todavía necesitamos instalar algunos paquetes de Python antes de continuar, ejecute el siguiente comando para asegurarse de que todo esté allí para una experiencia impecable.

sudo pip3 instalar Flask Flask-Cors Flask-SocketIO gevent gevent-websocket greenlet spi SPI-Pyspidev

Además de los siguientes paquetes de Python de conexión MySQL, sudo apt install python3-mysql.connector -y

Si todo salió bien, ahora puede visitar su Pi en su navegador web con la siguiente dirección

Paso 3: configurar el backend

Configurar el backend
Configurar el backend

Aquí voy a explicar cómo puede configurar el backend usted mismo, primero descargue el archivo rar desde abajo, descomprímalo en algún directorio temporal. Conéctese a su RaspberryPi con FileZilla o WinSCP con las siguientes credenciales:

IP: 169.254.10.1 Usuario: piPassword: raspberry (si cambió la contraseña hágalo aquí también)

A continuación, puede proceder a transferir los archivos que ha desbloqueado a cualquier directorio que desee en el directorio de inicio del usuario pi. En aras de la simplicidad, asumiremos en esta configuración que hemos cargado todos nuestros archivos en el directorio de documentos.

¡Mantenga su programa FTP abierto para el siguiente paso!

Ahora abra su símbolo del sistema nuevamente con su conexión SSH porque necesitaremos hacer algunos cambios en el servidor web para que el frontend pueda comunicarse con el backend. Vamos a abrir el archivo de configuración predeterminado de Apache2 y modificarlo ligeramente: sudo nano /etc/apache2/sites-available/000-default.conf

Agregue las siguientes líneas debajo de DocumentRoot en el archivo de configuración que acabamos de abrir: ProxyPass / api / https://127.0.0.1:5000/api/ProxyPassReverse / api /

Puedes echar un vistazo a la imagen adjunta como ejemplo.

Paso 4: Configuración de la interfaz

Antes de transferir nuestros archivos, tendremos que hacer algo antes de que podamos comenzar a transferir nuestros archivos frontend. Abra el símbolo del sistema con la conexión SSH que realizó anteriormente y use el siguiente comando para cambiar al usuario raíz de nuestra RaspberryPi: "sudo su -"

Después de esto, podemos cambiar la contraseña de nuestro usuario root con el siguiente comando: "passwd" Esto le pedirá que ingrese una nueva contraseña, después de haber hecho esto, puede volver a su programa FTP e iniciar sesión con sus credenciales de root:

IP: 169.254.10.1 Usuario: root Contraseña:

Descargue el archivo rar desde abajo y descomprímalo en una carpeta temporal, puede mover estos archivos a su RaspberryPi al siguiente directorio / var / www / html /, una vez que lo haya hecho, puede visitar la interfaz en http: / /169.254.10.1, todavía no puede interactuar porque el backend aún no se está ejecutando, más adelante en esta guía le mostraré cómo hacerlo.

Paso 5: Importación de la base de datos para nuestro proyecto

Importación de la base de datos para nuestro proyecto
Importación de la base de datos para nuestro proyecto
Importación de la base de datos para nuestro proyecto
Importación de la base de datos para nuestro proyecto

Abra su programa de administración de servidor MySQL favorito y conéctese a su Raspberry Pi con las credenciales que creamos en el Paso 2.

Descargue el volcado de la base de datos desde abajo e impórtelo como lo haría normalmente, MySQL workbench iría a Archivo> Abrir script SQL y seleccione el volcado de la base de datos que descargó, luego presione CTRL + MAYÚS + ENTER y el script SQL debería ejecutarse y la estructura para la base de datos debe crearse.

Agregué las credenciales que usé para mi RaspberryPi como un ejemplo a continuación, así como varias imágenes de la estructura de la base de datos, puede echarle un vistazo e intentar tener una idea general de cómo funciona todo.

Paso 6: Puesta en marcha de nuestro proyecto

Poniendo en marcha nuestro proyecto
Poniendo en marcha nuestro proyecto
Poniendo en marcha nuestro proyecto
Poniendo en marcha nuestro proyecto

Antes de que podamos iniciar nuestro proyecto, necesitamos cambiar las credenciales de la base de datos en el archivo config.py, si siguió las instrucciones exactamente como dice esta guía, puede encontrarlas en /home/pi/Documents/Backend/src/config.py aquí debe cambiar las credenciales de la variable db_config para que coincidan con las que creamos anteriormente para nuestra base de datos. Agregué un ejemplo de lo que verá en este archivo a continuación.

Después de eso, agregaremos un archivo.service, este archivo se asegurará de que nuestro proyecto comience cuando se inicie RaspberryPi, asegúrese de cambiar el directorio de donde instaló los archivos de backend. Utilice el siguiente comando para crear el archivo de servicio: sudo nano /etc/systemd/system/dispenser.service Esto creará un archivo de servicio y copiará y pegará el siguiente código en este archivo.

[Unidad] Descripción = Water DispenserAfter = mysql.service

[Servicio] Tipo = simpleRestart = alwaysRestartSec = 1User = piExecStart = / usr / bin / python3 /home/pi/Documents/Backend/index.py

[Instalar] WantedBy = multi-user.target

Modifique la línea donde dice /home/pi/Documents/Backend/index.py donde instaló sus archivos de backend, si no lo hace correctamente, ¡el proyecto no se iniciará correctamente! Agregaré un archivo de ejemplo a continuación.

Después de haber hecho eso y salir del editor de texto, podemos habilitar el servicio con los siguientes comandos: - sudo systemctl daemon-reload- sudo systemctl enable dispenser- sudo systemctl start dispenser

Y como extra podemos ejecutar: sudo systemctl status dispenser Esto mostrará alguna información sobre nuestro servicio, si está activo o no,…

Paso 7: el caso

El caso
El caso
El caso
El caso
El caso
El caso
El caso
El caso

Felicidades, casi estamos allí, agregaré algunas imágenes que mostrarán con precisión las dimensiones que usé para mi proyecto, usé placas de MDF de 18 mm de grosor, opcionalmente puede usar un grosor diferente. Mi carcasa se puede utilizar como guía para diseñar la tuya o puedes recrear lo que hice. (Si usas un grosor diferente de MDF mis dibujos ya no te permitirán hacer mi diseño, ¡asegúrate de adaptarlo!) Los paneles que hice: - 2 paneles de 32cm por 42cm (paneles laterales) - 1 panel de 24cm por 32cm (placa inferior) - 2 paneles de 16cm por 24cm (placa frontal donde se aloja el LCD y placa adyacente) - 1 panel de 28cm por 24cm (placa central vista desde el frente) - 1 panel de 30cm por 24cm (placa superior)

Paso 8: admire el producto final

Admira el producto final
Admira el producto final
Admira el producto final
Admira el producto final

Ha llegado al final y, con suerte, ha logrado hacer realidad todo el asunto. Si solo eres un transeúnte leyendo, también bienvenido, ¡gracias por leer hasta el último paso!

Gasté mucha sangre, sudor y lágrimas en este proyecto, así que te agradecería que dejaras un comentario, ¡cualquier crítica para mejorarlo es bienvenida!

Paso 9: los problemas

Pondría el proyecto en su estado actual como un prototipo funcional que puede ver muchas más mejoras.

La base de código del backend está estructurada de tal manera que se puede establecer perfectamente una relación maestro-esclavo en la que una fuente actuaría como la interfaz principal y todas las demás fuentes enviarían datos y cambios sobre la API REST del maestro. También hay restos de un sistema de tokens API en el código, ya que estaba destinado a implementarse, pero se cortó más adelante debido a limitaciones de tiempo.

He subido mi código a mi servidor de Gitlab y allí puede ver el código completo:

Recomendado: