AirOwl: Monitorización de calidad del aire en tiempo real para respirar mejor
Componentes y suministros
| Arduino 101 | × | 1 |
| Sensor de polvo ZH03A | × | 1 |
| Adafruit Flora RGB Neopixel LEDs - Pack de 4 | × | 1 |
| Cables jumper (genéricos) | × | 10 |
| Resistencia 10k ohm | × | 3 |
Aplicaciones y servicios en línea
- Blynk (vía BLE)
- Arduino IDE
Sobre este proyecto
AirOwl es un dispositivo de monitorización de calidad del aire en tiempo real. Se usa para monitorizar la calidad del aire, obtener datos del sensor y mostrar la salida en la app Blynk usando BLE del Arduino/Genuino 101. Un proyecto que nos ayuda a saber ¡Qué respiramos!
Las actividades humanas afectan al medio ambiente. Decidimos hacer un dispositivo que ayude a conocer el entorno y actuar en consecuencia.
La imagen siguiente muestra el AirOwl funcionando en Arduino 101.
La calidad del aire se puede conocer a través de 3 factores:
1) App Blynk (BLE)
2) Color de los ojos de AirOwl
- Si el color de los ojos es Verde, estás en un entorno seguro.
- Si el color es Azul, hay que tener cuidado.
- Si el color es Rojo, hay peligro.
3) Monitor Serial
Para los esquemáticos y diseño del AirOwl visita: https://github.com/anithp/AirOwl_Genuino101
Tras revisar los esquemáticos, conecta el circuito.
Un diagrama básico del proyecto se muestra a continuación.
Hoja de datos del sensor de polvo para más información: https://goo.gl/17Vgeg
Ahora empecemos a construir:
Después de hacer las conexiones según los esquemáticos, sube el código (asumiendo que tienes las librerías requeridas instaladas).
Para más información consulta: https://docs.blynk.cc/
Configuración de Blynk
- Instala Blynk desde Play Store / App Store
- Crea una cuenta.
- Crea un New Project en Blynk.
- Selecciona la placa y dale un nombre al proyecto.
- Tras seleccionar la placa, pulsa Create.
- Se enviará la clave de autenticación a tu email registrado. También puedes reenviarla desde ajustes.
- Se abrirá una ventana con un espacio de trabajo en blanco.
- Pulsa en Add y añade BLE y 3 Gauge.
- Tras seleccionar gauge, en el espacio de trabajo pulsa en cada gauge y asigna los pines V1, V2, V3 respectivamente.
- El espacio de trabajo final se verá así:
- Mantén el Arduino 101 conectado a la alimentación y luego selecciona el icono Bluetooth en el espacio de trabajo para configurar Bluetooth (mantén el Bluetooth del móvil ACTIVADO).
- Ve al espacio de trabajo principal y inicia la simulación del proyecto.
Los datos se mostrarán en la ventana de Blynk.
Para quien quiera prototipar esto en protoboard, el siguiente esquema es para ti, espero que haga tu experiencia con AirOwl genial.
Los datos también se pueden ver en el monitor serial.
Esquemático del PCB:
Archivo de placa:
Vista 3D del PCB:
Todos los archivos de estas imágenes se encuentran en el enlace de GitHub mencionado abajo.
https://github.com/anithp/AirOwl_Genuino101
Ahora puedes usar AirOwl y saber qué respiras, ¡espero que ayude!
Gracias :)
Código
- Air_owl
Air_owl C/C++
/* Copyright (C) 2017 Anith Patel and Sohil Patel. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". */
#include<BlynkSimpleCurieBLE.h>
#include<CurieBLE.h>
#define BLYNK_SERIAL Print //escribir datos para blynk
byte data[24];//refer hoja de datos del sensor de polvo
unsigned int PM1 = 0; //inicializar valores para material particulado
unsigned int PM25 = 0;
unsigned int PM10 = 0;
unsigned int count = 0;
const int PIN1 = 3;
const int PIN2 = 5;
const int PIN3 = 6;
char auth[] = "Auth key"; //pegar auth key de Blynk
BLEPeripheral blePeripheral;
void setup() {
blePeripheral.setLocalName("Airowl"); //configurar BLE para blynk
blePeripheral.setDeviceName("Airowl");
blePeripheral.setAppearance(384);
Blynk.begin(blePeripheral, auth);
blePeripheral.begin();
Serial1.begin(9600); //inicialización comunicación uart
Serial.begin(9600);
pinMode(PIN1, OUTPUT); //configuración led
pinMode(PIN2, OUTPUT);
pinMode(PIN3, OUTPUT);
}
void loop() {
Blynk.run(); //llama a blynk
blePeripheral.poll();
Serial.println("Concentration of PM1 is:"); //imprime en monitor serial
Serial.println(PM1/count);
Serial.println("Concentration of PM25 is:");
Serial.println(PM25/count);
Serial.println("Concentration of PM10 is:");
Serial.println(PM10/count);
delay(500);
WriteData(); //llama a función writedata
if ((PM1+PM25+PM10)/3 <= 100){
LedColor(0, 255, 0);
delay(500);
} else if ((PM1+PM25+PM10)/3 <= 300 && (PM1+PM25+PM10)/3 > 100){
LedColor(255, 0, 0);
delay(500);
} else{
LedColor(0, 0, 255);
delay(500);
}
//lógica para el led data
}
void LedColor(int red, int blue, int green){
analogWrite(PIN1, red);
analogWrite(PIN2, blue);
analogWrite(PIN3, green);
}
void getWinsenData(void) //función para obtener datos del sensor
{
//para entender esta lógica consulta la hoja de datos del sensor
byte i = 0;
int checksum = 0;
Serial1.flush();
while (Serial1.available()) {
data[i] = Serial1.read(); //leer datos seriales del sensor
if (i <= 21) //condición para lectura del sensor
checksum += data[i];
if (i == 23) {
if (checksum == ((256 * data[22]) + data[23])) {
if (data[0] == 66) {
if (data[1] == 77) {
if (i == 23) {
PM1 += ((data[4] * 256) + data[5]); //recupera y almacena datos PM1
PM25 += ((data[6] * 256) + data[7]); //recupera y almacena datos PM2.5
PM10 += ((data[8] * 256) + data[9]); //recupera y almacena datos PM10
count++;
Serial1.flush(); //esperar transmisión de datos seriales
break;
}
}
}
} else {
break;
}
}
i++;
delay(10);
}
}
void WriteData() //enviar datos a blynk
{
getWinsenData(); //llama a getWinsendata
Blynk.virtualWrite(V1, PM1/count); //escribir datos en Blynk
Blynk.virtualWrite(V2, PM25/count);
Blynk.virtualWrite(V3, PM10/count);
delay(1000);
}
Piezas personalizadas y cajas
AirOwl
https://github.com/IndiaOpenDataAssociation/AirOwl
Esquemáticos
AirOwl Genuino 101
https://github.com/anithp/AirOwl_Genuino101
Proceso de manufactura
- Botones de Apoyo para Plantillas (Jig Feet Buttons): Cómo Aseguran tus Plantillas y Mejoran la Eficiencia
- Domina la fabricación de PCB: Consejos esenciales para éxito en prototipado
- Guía Esencial de Bombas Sumergibles: Características, Operación e Instalación
- Bombas Centrífugas: Características Clave, Aplicaciones y Ventajas
- Descubra el Valor Real de su Negocio: Guía para Fabricantes Pequeños y Medianos
- Tornillos de punta (toe clamps) explicados: características, beneficios y cómo elegir el adecuado
- Motores AC vs DC: Diferencias Clave y Cómo Elegir el Adecuado
- Financiación de Equipos 101: Ahorra Dinero, Reduce Riesgo y Asegura tu Negocio
- Mantenimiento predictivo: Eficiencia y reducción de riesgos con insights basados en datos
- 7 Librerías React Esenciales que Todo Desarrollador Debe Dominar
- Moldeo de fibra de carbono: Claves esenciales para la fabricación moderna