| |

AirPi – Sensor de calidad del aire

Por TijlDeLandtsheer

Introducción: AirPi – Sensor de calidad del aire

AirPi - Air Quality Sensor

¿Alguna vez te has preguntado por qué te da dolor de cabeza? ¿Y si esto se debe a una mala calidad del aire? Con este dispositivo puedes comprobar si ese es el caso. Este dispositivo mide el valor de CO2, el valor de TVOC, la temperatura y la humedad. Puedes ver la calidad del aire en vivo en la pantalla LCD y observar una indicación clara si se vuelve peligrosa. De esta forma puedes abrir las ventanas a tiempo.

Si ingresas la dirección IP —que se muestra al encender el dispositivo— en tu navegador, se abrirá el sitio web. Podrás ver mucha información sobre el ambiente interior, junto con gráficas de los últimos minutos / horas. También hay una indicación en vivo, además de información y consejos en el panel.

Este proyecto fue realizado por un estudiante de Howest Kortrijk, NMCT (New Media and Communication Technology).

Paso 1: Materiales

Materials

Esto es todo lo que compré para realizar este proyecto. Es un proyecto relativamente económico, dependiendo del costo de la impresión 3D. Si puedes imprimirla en la escuela, podría salir muy barato. De lo contrario, depende de dónde la imprimas y del material que uses. Notarás que compré muchas cosas al mayoreo, simplemente porque es difícil encontrar resistencias o LEDs individuales, y así resulta aún más barato. Si tienes tiempo, puedes pedir la mayoría de los artículos en aliexpress.com; el envío puede tardar un poco, pero de esta forma puedes limitar tus gastos.

Sin la impresión, el dinero que gasté en este proyecto fue de 81,80 €.

Estos son los materiales que necesitas:

Circuito:

  • Raspberry Pi 3
  • Tarjeta SD de 8GB (mínimo)
  • Sensor de calidad del aire CCS811
  • Sensor de temperatura y humedad DHT22
  • Potenciómetro (contraste de la LCD)
  • LCD 16×2
  • Cables de conexión hembra a hembra
  • LED verde y rojo
  • Resistencias (2x470ohm y 1 de 4700ohm)

Carcasa:

  • Impresión 3D
  • Tornillos
  • Pegamento de dos componentes (u otro pegamento caliente)
  • Herramienta para hacer roscas

Solo si vas a usar una PCB:

  • Cautín
  • Flux (facilita el trabajo)
  • Estaño
  • PCB de experimentación de 2x4cm

Archivos adjuntos

Paso 2: Conexiones

Connections

Conecta los cables como se muestra arriba. Puedes ver el circuito eléctrico en el archivo de fritzing. No es un circuito muy complicado, pero si quieres hacerlo tan pequeño como el mío, definitivamente querrás conseguir una PCB de experimentación. El cableado sería el mismo, salvo que GND y Vin se conectarían a la PCB. Los sensores se conectan con cables jumper hembra, o macho mediante soldadura. No olvides soldar la resistencia en el sensor DHT22.

También recomiendo usar cables cortos; 10 cm deberían ser suficientes. De lo contrario, la caja se llenaría de cable aún más. No necesitas cables muy largos, ya que el tamaño de la impresión se hizo lo más pequeño posible.

Archivos adjuntos

Paso 3: Impresión 3D

3D-print

La primera idea que me vino a la mente cuando pensaba en una carcasa fue una impresión 3D, ya que mi papá había impreso varios otros objetos que él mismo diseñó. Juntos creamos este diseño y pensamos en cada aspecto. Debía enfriarse lo suficiente, todo debía poder atornillarse en su lugar y, si no, poder encajarse a presión.

Incluso dibujamos cada componente para comprobar que todo cupiera. El archivo está disponible para todos y nos encantaría recibir comentarios. Quedamos muy satisfechos con el resultado.

Archivos adjuntos

Paso 4: Código

El código de este proyecto se puede encontrar en Github. Si usaste otros pines (por ejemplo, otro pin GPIO para los LEDs), tendrás que ajustar esas variables. Se van a ejecutar dos scripts de python: web.py para el sitio web y sensor.py para leer los sensores y actualizar la base de datos. Importaremos la clase LCD desde lcd.py.

Con una Raspberry Pi ya configurada puedes empezar. Antes que nada, necesitarás actualizar y mejorar todos los paquetes:

sudo apt-get update && sudo apt-get upgrade

Después de eso necesitarás instalar los siguientes paquetes:

sudo apt install -y python3-venv python3-pip python3-mysqldb mariadb-server uwsgi nginx uwsgi-plugin-python3 

Ahora crea un entorno virtual:

me@my-rpi:~ $ python3 -m pip install --upgrade pip setuptools wheel virtualenv
me@my-rpi:~ $ mkdir project1 && cd project1
me@my-rpi:~/project1 $ python3 -m venv --system-site-packages env
me@my-rpi:~/project1 $ source env/bin/activate
(env)me@my-rpi:~/project1 $ python -m pip install mysql-connector-python argon2-cffi Flask Flask-HTTPAuth Flask-MySQL mysql-connector-python passlib

Hecho esto, puedes clonar el código de mi GitHub dentro de tu entorno virtual. Esto se puede hacer de varias maneras.

En el directorio conf encontrarás cuatro archivos que tendrás que ajustar si es necesario. Sin duda tendrás que cambiar el usuario y el directorio home (homedirectory) en cada archivo. El archivo ini de uWSGI debería estar bien siempre que no hayas cambiado mi código; asegúrate de cambiar el usuario y el virtualenv si es necesario.

Dado que el sensor CCS811 fue pensado originalmente para el arduino, este no puede comunicarse por el bus i2c a la velocidad de la Raspberry Pi. Tendrás que reducir la velocidad a una tasa de baudios de 10000 (yo usé 9600) en el archivo de configuración.

También tendrás que conseguir la librería del sensor de adafruit. Podría explicarlo aquí, pero hay una excelente guía de adafruit que explica todo esto muy bien.

Como queremos que los scripts de python se ejecuten automáticamente cuando se conecta la Raspberry, tendrás que usar los servicios. Deberían estar bien si conservaste mi código. Todo lo que necesitas hacer para que se ejecuten es habilitarlos. Antes de eso queda una última cosa.

Como usamos un servidor web nginx, tendremos que desactivar el predeterminado y reemplazarlo por nuestra propia configuración. Para ello se deben seguir estos pasos:

  • copia conf/nginx a *sites-available*
  • Elimina el enlace a la configuración predeterminada
  • Agrega un enlace a la nueva configuración
  • Reinicia nginx para guardar los cambios
me@my-rpi:~/project1 $ sudo cp conf/project1-*.service /etc/systemd/system/
me@my-rpi:~/project1 $ sudo systemctl daemon-reload
me@my-rpi:~/project1 $ sudo systemctl start project1-*
me@my-rpi:~/project1 $ sudo systemctl status project1-*

Nginx y mysql deberían estar ejecutándose en todo momento. Se inician junto con la Raspberry Pi. El script web y el script del sensor aún no.

Para hacerlo, todavía necesitas habilitar estos dos servicios con estos comandos:

sudo systemctl enable project1-flask.service
sudo systemctl enable project1-sensor.service

Paso 5: Base de datos

Database

Mi base de datos consta de tres tablas. La tabla User no tiene relación con las demás tablas. Solo se usa para iniciar sesión y otorgar acceso al sitio web. Cuando el dispositivo está encendido, el valor de CO2 y el valor de TVOC se escriben en la base de datos cada 50 segundos. La temperatura y la humedad, cada 5 minutos. De esta forma obtenemos una visión clara del pasado.

El archivo SQL se puede encontrar aquí, pero para tener la base de datos en la Raspberry Pi, debes seguir estos pasos:

Después de la instalación de los paquetes en el paso anterior, mariadb/mysql debería estar ejecutándose de inmediato. Puedes comprobarlo con esta línea:

me@my-rpi:~ $ sudo systemctl status mysql

Para crear la base de datos y los usuarios, simplemente puedes ejecutar los scripts sql del código de GitHub. Si lo hiciste correctamente, deberías ver tus tablas con este comando:

me@my-rpi:~ $ echo 'show tables;' | mysql project1 -t -u project1-admin -p

Ahora ya está todo listo; puedes probarlo sin la carcasa para asegurarte de que todo funciona. A menos que estés conectado por wifi, tendrás que conectarlo con un cable ethernet y ejecutarlo manualmente.

Paso 6: Conectarse al Wi-Fi

Abre el archivo de configuración de wpa-supplicant en nano (en realidad no importa cuál, solo asegúrate de saber usar el editor de texto).

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

Ve al final del archivo y agrega lo siguiente (reemplaza ssid-name y password-name por los tuyos):

network={
    ssid="ssid-name"
    psk="password-name"
}

Para crear una contraseña cifrada puedes usar wpa_passphrase y simplemente copiarla en el psk de wpa_supplicant.conf para hacerlo más seguro.

wpa_passphrase "ssid-name" "password-name"

Si quieres que se conecte a esta red Wi-Fi automáticamente, y hay otras en el archivo de configuración, asegúrate de cambiar la prioridad a un nivel más alto agregando esta línea a la red en el archivo de configuración:

priority=2

No olvides reconfigurar la interfaz con:

wpa_cli -i wlan0 reconfigure

Ahora ya está todo listo y conectado a una red wifi.

Paso 7: Armar todo

Putting Everything Together
Putting Everything Together
Putting Everything Together

Ya que todo está cableado y soldado, podemos pasar a la carcasa. Esta se diseñó de forma que pudieras abrirla sin cables sueltos. Esto significa que todo está sujeto a la parte inferior. Lo primero es hacer un pequeño ajuste a la Raspberry. Tiene orificios en cada esquina, pero no son tan grandes como deberían. El diámetro debe ser suficiente para que entre un tornillo de 3mm. Tuvimos que pulir los orificios para que quedaran un poco más anchos.

Lo segundo es hacer una rosca de tornillo en cada orificio. Esto puede sonar difícil, pero se hace fácilmente con las herramientas adecuadas. Recomendaría hacerlo en una ferretería local; solo pide una herramienta para hacer roscas. Como mi papá es orfebre, tenía las herramientas para hacerlo en su trabajo. Podría subir un nuevo archivo stl para que esto quede impreso más adelante, pero eso requeriría una impresora muy precisa.

El tercer paso es atornillar la pi a la parte inferior. Necesitarás 4 tornillos de 7mm de largo con un diámetro de 3 mm. Después de esto puedes encajar la placa PCB en el lugar previsto en la parte superior de la base. El sensor CCS811 se puede encajar en el lugar previsto en el lado izquierdo, y el DHT11 se puede sujetar a la placa derecha. Ambos están aislados y ventilados de forma suficiente, pero después notamos que aún se calentaba por dentro. Más sobre eso más adelante.

Luego necesitas fijar los LEDs a su tubo. Nosotros lo hicimos con pegamento de dos componentes, pero puedes hacerlo como prefieras. Asegúrate de que queden bien pegados.

Ahora puedes fijar la pantalla LCD; necesitarás tornillos del mismo diámetro que los anteriores, pero un poco más largos. Los míos eran de 1cm. Una vez atornillados los cuatro tornillos, solo queda una cosa por hacer: colocar la parte superior. Todo lo que necesitas son cuatro tornillos, del mismo diámetro y de 2cm. Ahora todo debería estar en su lugar y puedes encenderlo.

Paso 8: Encenderlo

El proceso de encendido de este proyecto es muy fácil:

  1. Conecta el cable de alimentación en el lado izquierdo de la carcasa. No es muy visible, pero puedes ver a través de las rejillas de ventilación. Una vez que le agarres el modo, ya no será un problema.
  2. Dale algo de tiempo para que arranque.
  3. La dirección IP aparecerá en la pantalla durante diez segundos. Lo único que debes hacer es asegurarte de estar conectado a la misma red e ingresar la dirección IP en la barra de direcciones de tu navegador.
  4. Ya estás en el sitio web. Aún no tienes una cuenta, así que crea una.
  5. Una vez registrado, inicia sesión.
  6. ¡Listo! Puedes ver todos los datos en la página web y la pantalla LCD muestra la calidad del aire actual.

Como el calor sube, ubicamos los sensores en la parte inferior de la carcasa. De esta forma la temperatura no tendría un gran impacto en los valores registrados. Así que, para mediciones óptimas, coloca el dispositivo en posición vertical o simplemente cuélgalo en la pared.

Artículo traducido al español. Proyecto y código originales de TijlDeLandtsheer: github.com/TijlDeLandtsheer/AirPi

Similar Posts

Deja un comentario