Herramientas de usuario

Herramientas del sitio


personas:brolin:proyectos:agentes_calidad_aire:bitacora

Agente para monitorear la calidad del aire

¿por qué es importante?

Ideas y notas de prensa

Dispositivo

¿Variables que mide??:

  • location (lat,lon,alt): Mediante un GPS tomamos la ubicación de las muestras
  • timestamp: Esta información también proviene de los datos del GPS.
  • temperature: Obtenida de un sensor DHT-11
  • humidity: Obtenida de un sensor DHT-11
  • PM2dot5: Mide concentración de partículas de polvo. Tenemos dos sensores (Shinyei Model PPD42NS, Sharp GP2Y1010AU, PMS3003, PMS5003, PMS1003)
  • mq-XXX: Detección de gases basado en los sensores mq. http://playground.arduino.cc/Main/MQGasSensors

Firmware

Sensores de planttower PMSx003

https://www.dfrobot.com/wiki/index.php/PM2.5_laser_dust_sensor_SKU:SEN0177 https://www.dfrobot.com/wiki/index.php/Air_Quality_Monitor_(PM_2.5,_Formaldehyde,_Temperature_%26_Humidity_Sensor)_SKU:_SEN0233#Board_Overview

PMS3003

Precio U$17

#include <Arduino.h>

#define LENG 23   //0x42 + 23 bytes equal to 24 bytes -> 
//#define LENG 31   //0x42 + 31 bytes equal to 32 bytes
unsigned char buf[LENG];

int PM01Value=0;          //define PM1.0 value of the air detector module
int PM2_5Value=0;         //define PM2.5 value of the air detector module
int PM10Value=0;         //define PM10 value of the air detector module

char checkValue(unsigned char *thebuf, char leng)
{  
  char receiveflag=0;
  int receiveSum=0;

  for(int i=0; i<(leng-2); i++){
    receiveSum=receiveSum+thebuf[i];
  }
  receiveSum=receiveSum + 0x42;
 
  if(receiveSum == ((thebuf[leng-2]<<8)+thebuf[leng-1]))  //check the serial data 
    {
      receiveSum = 0;
      receiveflag = 1;
    }
  return receiveflag;
}

int transmitPM01(unsigned char *thebuf)
{
  int PM01Val;
  PM01Val=((thebuf[3]<<8) + thebuf[4]); //count PM1.0 value of the air detector module
  return PM01Val;
}

//transmit PM Value to PC
int transmitPM2_5(unsigned char *thebuf)
{
  int PM2_5Val;
  PM2_5Val=((thebuf[5]<<8) + thebuf[6]);//count PM2.5 value of the air detector module
  return PM2_5Val;
}

//transmit PM Value to PC
int transmitPM10(unsigned char *thebuf)
{
  int PM10Val;
  PM10Val=((thebuf[7]<<8) + thebuf[8]); //count PM10 value of the air detector module  
  return PM10Val;
}

void setup()
{
  Serial.begin(9600);   //use serial0
  Serial.setTimeout(1500);    //set the Timeout to 1500ms, longer than the data transmission periodic time of the sensor

}

void loop()
{
  if(Serial.find(0x42)){    //start to read when detect 0x42
    Serial.readBytes(buf,LENG);
    // for(int i=0; i< LENG; i++) {
    //   Serial.print(buf[i]);Serial.print("|");
    // }
    // Serial.println();


    if(buf[0] == 0x4d){
      if(checkValue(buf,LENG)){
        PM01Value=transmitPM01(buf); //count PM1.0 value of the air detector module
        PM2_5Value=transmitPM2_5(buf);//count PM2.5 value of the air detector module
        PM10Value=transmitPM10(buf); //count PM10 value of the air detector module 
      }
    }
  }

  static unsigned long OledTimer=millis();
    if (millis() - OledTimer >=1000)
    {
      OledTimer=millis();

      Serial.print("PM1.0: ");
      Serial.print(PM01Value);
      Serial.println("  ug/m3");

      Serial.print("PM2.5: ");
      Serial.print(PM2_5Value);
      Serial.println("  ug/m3");

      Serial.print("PM1 0: ");
      Serial.print(PM10Value);
      Serial.println("  ug/m3");
      Serial.println();
  }

}

https://community.particle.io/t/dust-sensor-pms-5003-6003-7003/24221/16
http://njiot.blogspot.com.co/2016/01/pm25-sensor-g3-pms3003.html
https://github.com/igrr/aqi-sensor-demo/blob/master/Sds011.cpp
https://github.com/sensor-web/js-station
https://www.dfrobot.com/wiki/index.php/PM2.5_laser_dust_sensor_SKU:SEN0177
https://github.com/jbanaszczyk/pms5003

Sensor Shinyei Model PPD42NS

Sensor Sharp GP2Y1010AU

1)

< FIXME Transcribir y traducir

System Connection

LED pulse input

Cautions - Vibración - Humedad


Miligramos por metro cúbico

¿Cuáles son los niveles tolerables de PM 2,5? 2)

Aunque las partículas 2,5 son quizás el mayor peligro para la salud de los ciudadanos, existe un promedio diario que es tolerable para el cuerpo humano.

  • Bueno: 0 a 12.4 microgramos por metro cúbico
  • Moderado: 12.5 a 35.4 microgramos por metro cúbico
  • Dañina a grupos sensibles: 35.5 a 55.4 microgramos por metro cúbico
  • Dañino: de 55 microgramos por metro cúbico en adelante

Veáse que el sensor en cuestión lee hasta 500 micro gramos / metro cúbico (.5mg/m3)

Código para arduino

OJO: El voltaje máximo que lee el adc del esp8266 es 1v, valores por encima de esto se leen como 1024 en la lectura del ADC

¿Es posible leer 5V a través del ADC del ESP8266?

Según esto http://www.esp8266-projects.com/2016/08/esp8266-internal-adc-2-easy-way-example.html es necesario usar un divisor de voltaje y para mayor confiabilidad usar resistencias de precisión.

También hay que tener en cuenta la curva de salida del sensor que va desde 1v hasta un poco más 3.6v

Es posible también usar un OPAMP

También, ¿Cómo es posible manejar el LED del sensor que funciona con 5v? con un transistor?

/*
 Standalone Sketch to use with a Arduino UNO and a
 Sharp Optical Dust Sensor GP2Y1010AU0F
*/
 
int measurePin = 0; //Connect dust sensor to Arduino A0 pin
int ledPower = 2;   //Connect 3 led driver pins of dust sensor to Arduino D2
 
int samplingTime = 280;
int deltaTime = 40;
int sleepTime = 9680;
 
float voMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;
 
void setup(){
  Serial.begin(9600);
  pinMode(ledPower,OUTPUT);
}
 
void loop(){
  digitalWrite(ledPower,LOW); // power on the LED
  delayMicroseconds(samplingTime);
 
  voMeasured = analogRead(measurePin); // read the dust value
 
  delayMicroseconds(deltaTime);
  digitalWrite(ledPower,HIGH); // turn the LED off
  delayMicroseconds(sleepTime);
 
  // 0 - 5V mapped to 0 - 1023 integer values
  // recover voltage
  calcVoltage = voMeasured * (5.0 / 1024.0);
 
  // linear eqaution taken from http://www.howmuchsnow.com/arduino/airquality/
  // Chris Nafis (c) 2012
  dustDensity = 0.17 * calcVoltage - 0.1;
 
  Serial.print("Raw Signal Value (0-1023): ");
  Serial.print(voMeasured);
 
  Serial.print(" - Voltage: ");
  Serial.print(calcVoltage);
 
  Serial.print(" - Dust Density: ");
  Serial.println(dustDensity); // unit: mg/m3
 
  delay(1000);
}

Conexión del sensor

Nota aplicación ti.com TIDA-00378 PM2.5 and PM10 Particle Sensor Analog Front-End for Air Quality Monitoring Reference Design | TI.com The TIDA-00378 TI Design provides an analog front-end solution for measuring PM2.5 and PM10 particle matter. The design detects the light scattered by particles suspended in air. A sample software algorithm is provided to convert the analog output of the design into a particle size and concentration measurement. Test result data for cigarette smoke, Arizona dust, and mulberry pollen is provided along with all software and hardware design files.
http://www.ti.com/tool/TIDA-00378#1

Es posible usar un conversor análogo-digital externo como el ADS1115 el cual cuenta con 4 canales de 16bit

Posibles Filtros Para enfocar la lectura en partículas más pequeñas se pueden probar varios materiales calibrando la eficiencia con un sensor laser. Otra opción que comentó Valentin es una corona de iones que al parecer concentra las partículas grandes en los bordes, todavía no sabemos como funciona pero una primera búsqueda arrojó esto: “ The DiSCmini (Matter Engineering) is a personal diffusion charging device introduced by Fierz et al. [60]. In the DiSCmini, a positive corona is used to produce a high concentration of positive ions that attach to the particles entering the inlet. The charged particles then pass through an induction stage (or ion filter), a diffusion stage, and a high-efficiency particulate air (HEPA) filter. The diffusion stage and the HEPA filter are each connected to an electrometer, which measures the charge of depositing particles. The smallest particles deposit on the screen in the diffusion stage, whereas larger particles penetrate to the HEPA filter. ” de este buen texto https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4807653/

TI's ADS1115 I2C 16bits ADC+PGA

Durante el MDE15 se empezó la investigación sobre este integrado http://wiki.unloquer.org/proyectos/jardin_delicias/tecnologicos/microprocesadores-esp8266?#integrado_ads1115

4-ways-to-expand-adc-in-esp8266 http://codelectron.com/4-ways-to-expand-adc-in-esp8266/

Dentro del repositorio de librerías de platformio se encuentran 3 resultados:

Sensores MQ

improving-the-accuracy-of-gas-sensors

Notas del datasheet

Sensor MQ-2

Sensor MQ-5

STORAGE

SPI FLASH

http://www.diyprojects.io/esp8266-web-server-part-4-arduinojson-load-save-files-spiffs/
https://github.com/G6EJD/SPIFFS-Examples
https://github.com/ourairquality/oaq-esp-open-rtos

Se llama la librería FS para el esp8266

#include <FS.h>

Se inicializa la flash en la función setup()

void setup() {
  Serial.begin(115200); 
  Serial.println("Starting...");

  SPIFFS.begin();

}

Se crean funciones para leer, escribir, borrar o conocer el estado del flas

Para escribir

void fs_write_frame(String frame) {
  char filename [] = "datalog.txt";                     // Assign a filename or use the format e.g. SD.open("datalog.txt",...);
  File myDataFile = SPIFFS.open(filename, "a+");        // Open a file for reading and writing (appending)
  if (!myDataFile)Serial.println("file open failed");   // Check for errors

  myDataFile.println(frame);
  myDataFile.close();
}

y luego se llama la función en el código

fs_write_frame(variable_string_que_contiene_la_data);

Para leer

void fs_read_file() {
  char filename [] = "datalog.txt";                     // Assign a filename or use the format e.g. SD.open("datalog.txt",...);
  File myDataFile = SPIFFS.open(filename, "a+");        // Open a file for reading and writing (appending)
  myDataFile = SPIFFS.open(filename, "r");              // Open the file again, this time for reading
  if (!myDataFile) Serial.println("file open failed");  // Check for errors
  while (myDataFile.available()) {
    wdt_disable();
    //yield();
    Serial.write(myDataFile.read());                    // Read all the data from the file and display it
    Serial.flush();
    wdt_enable(1000);
  }
  myDataFile.close();
}

Para borrar

void fs_delete_file() {
  // Assign a file name e.g. 'names.dat' or 'data.txt' or 'data.dat' try to use the 8.3 file naming convention format could be 'data.d'
  char filename [] = "datalog.txt";                     // Assign a filename or use the format e.g. SD.open("datalog.txt",...);

  if (SPIFFS.exists(filename)) SPIFFS.remove(filename); // First blu175.mail.live.com in this example check to see if a file already exists, if so delete it
}

Para conocer el estado de la flash
Se declara primero una estructura global

FSInfo fs_info;

a la cual se accede luego mediante una función como esta

void fs_info_print() {
  SPIFFS.info(fs_info);
  Serial.print("totalBytes ");Serial.println(fs_info.totalBytes);
  Serial.print("usedBytes ");Serial.println(fs_info.usedBytes);
  Serial.print("blockSize ");Serial.println(fs_info.blockSize);
  Serial.print("pageSize ");Serial.println(fs_info.pageSize);
  Serial.print("maxOpenFiles ");Serial.println(fs_info.maxOpenFiles);
  Serial.print("maxPathLength ");Serial.println(fs_info.maxPathLength);
}

SD Card

https://github.com/esp8266/Arduino/blob/master/libraries/SD/examples/Datalogger/Datalogger.ino

¿Cómo usar directamente los pines MOSI, MISO, SCLK y CS del chip ESP8266-12E y que no tenemos mapeados en la primera versión de la tarjeta que diseñamos?

GPS

El GPIO16 no se puede usar para softserial https://forum.arduino.cc/index.php?topic=354933.0

Solo necesito un el pin Rx acá hay una alternativa ReadOnlySerial http://forum.arduino.cc/index.php?topic=112013.0

https://www.linuxpinguin.de/project/wifiscanner/
https://github.com/mkconer/ESP8266_GPS

FIXME Transcribir y traducir >

Batería

Pantalla OLED

Ingeniería inversa

Nube SIATA

Crea tu propio sensor - kit/taller

Referentes

Raspberrypi Air http://www.rigacci.org/wiki/doku.php/doc/appunti/hardware/raspberrypi_air?s[]=plantower Air Quality EGG http://airqualityegg.wikispaces.com/Dust+Sensor+Design
Air Sensors http://www.staceyk.org/airSensors/ https://itp.nyu.edu/archive/physcomp-spring2014/sensors/Reports/GP2Y1010AU.html
Sensor GP2Y1010AU https://web.archive.org/web/20130217035550/http://sensorapp.net/?p=479 https://www.dfrobot.com/wiki/index.php/Sharp_GP2Y1010AU http://arduinodev.woofex.net/2012/12/01/standalone-sharp-dust-sensor/
Lectura ADC http://internetofhomethings.com/homethings/?p=530 Nueva agenda de seguridad vial urbana http://www.eltiempo.com/opinion/columnistas/la-nueva-agenda-de-seguridad-vial-urbana-dario-hidalgo-columna-el-tiempo/16734842 Comparación de sensor laser con G2Y1010AU http://www.eltiempo.com/opinion/columnistas/la-nueva-agenda-de-seguridad-vial-urbana-dario-hidalgo-columna-el-tiempo/16734842
Ejemplo que usa sdk de espressif http://wiki.jackslab.org/ESP32_Partical https://github.com/icamgo/esp-idf/blob/master/examples/11_sharp_dust/main/app_main.c Timeseries DB - InfluxDB https://rawgit.com/francescou/iot-timeseries/master/slides.html
http://www.elcolombiano.com/opinion/columnistas/un-moderado-problema-de-contaminacion-BN5483003
http://www.elcolombiano.com/antioquia/ciudad-no-puede-sentarse-a-esperar-nueva-crisis-del-aire-MN5539952
http://lantaukwcounter.blogspot.com.co/2016/01/shinyei-and-sharp-dust-sensors-looking.html
http://www.mentalmunition.com/2013/05/dustduino-plan-to-crowdsource.html
Sensor Shinyei PPD42NS dust http://dustduino.org/
http://www.geek-workshop.com/thread-13981-1-1.html
www.elcolombiano.com/antioquia/movilidad/pico-y-placa-en-medellin-aumenta-a-seis-digitos-por-mala-calidad-del-aire-DI6192467
http://www.purpleair.org
http://euerdesign.de/2016/04/16/wigpsfi-esp8266-gps/
Emprendimiento muy completo sobre el tema https://breezometer.com
http://www.brizi.com/

Noticias

https://oskymarin.wordpress.com/2016/11/04/no-nos-quedemos-en-la-frivolidad/
http://www.vivirenelpoblado.com/blogs/verde-que-te-quiero-verde/sos-por-el-aire/
http://www.elcolombiano.com/medio-ambiente/cambio-climatico-acuerdo-de-paris-entra-en-vigor-XY5302808
http://www.elcolombiano.com/colombia/estos-son-los-departamentos-con-mas-emision-de-gases-de-efecto-invernadero-FA5299887
http://www.eltiempo.com/colombia/medellin/emision-de-gases-de-efecto-invernadero/16741664
http://www.showmeshiny.com/wind-rose/
http://www.elcolombiano.com/antioquia/el-valle-de-aburra-tendra-320-000-arboles-mas-LX5365872
http://www.elcolombiano.com/antioquia/la-oferta-de-parqueaderos-para-bicicletas-en-medellin-se-queda-corta-MB5366842
http://www.elcolombiano.com/antioquia/s-o-s-por-el-aire-desde-universidades-del-valle-de-aburra-CB5366015
https://twitter.com/LaCiudadVerde/status/798545496805691392
https://twitter.com/LaCiudadVerde/status/798865344517521408
http://www.elcolombiano.com/antioquia/movilidad/decalogo-por-el-aire-la-herencia-del-dia-sin-carro-en-medellin-BE5372542
http://la.network/sostenibilidad/ecologia-urbana/medellin-bogota-las-ciudades-colombia-aire-mas-contaminado/
http://www.lavanguardia.com/natural/20161230/412993639213/efectos-contaminacion-salud-estudios-cientificos.html
http://www.elcolombiano.com/tendencias/contaminacion-del-aire-tambien-causa-demencia-JH5854597
http://www.elcolombiano.com/antioquia/contaminacion-responsable-de-parte-de-las-muertes-por-causas-naturales-en-medellin-AD5849992
http://www.elcolombiano.com/antioquia/sin-plan-de-fondo-frente-a-amenaza-ambiental-BX6011388
https://www.theguardian.com/environment/bike-blog/2014/feb/20/air-pollution-cyclists-bike-blog
https://www.theguardian.com/environment/bike-blog/2015/oct/07/avoiding-pollution-on-bike-we-test-cycling-anti-pollution-masks-respro-totobobo-biologic
http://www.elcolombiano.com/antioquia/gobierno-anuncia-medidas-para-mejorar-calidad-del-aire-en-medellin-YC6150076
http://www.semana.com/nacion/articulo/medellin-tiene-el-punto-mas-contaminado-de-colombia/518952
http://www.semana.com/nacion/articulo/que-es-una-alerta-roja-ambiental/519333
www.elcolombiano.com/antioquia/medellin-y-el-valle-de-aburra-en-alerta-roja-para-salvar-el-aire-XL6195275
www.elcolombiano.com/antioquia/propuestas-para-mejorar-calidad-del-aire-en-medellin-KY6203480
http://www.elcolombiano.com/antioquia/calidad-del-aire-de-medellin-mejora-con-medidas-de-alerta-roja-ambiental-XD6207527
http://www.semana.com/nacion/articulo/medellin-se-necesitan-mas-medidas-contra-contaminacion-del-aire-en-medellin/520025
http://www.elcolombiano.com/colombia/salud/el-aire-tampoco-es-puro-en-su-oficina-YN6807203
http://www.dw.com/en/stuttgart-builds-moss-covered-wall-to-fight-air-pollution/a-37866760
https://seetheair.wordpress.com/2016/11/03/review-airvisual-node/
http://www.elcolombiano.com/colombia/gobierno-expedira-norma-por-la-calidad-del-aire-en-el-pais-EY7098071
http://www.elcolombiano.com/tendencias/entre-mas-contaminacion-mas-infartos-graves-DY7771894
http://www.elcolombiano.com/antioquia/norma-de-calidad-del-aire-para-colombia-fue-inspirada-en-el-valle-de-aburra-FF7799373

Partícula en el aire del Aburrá es 53,4% cancerígenahttp://www.elcolombiano.com/antioquia/particula-en-el-aire-del-aburra-es-53-4-cancerigena-YM6482111

Sensor nube del SIATA http://noticias.caracoltv.com/medellin/medellin-respira-un-aire-mas-limpio-y-su-calidad-es-moderada-segun-las-recientes-mediciones
http://www.semana.com/100-empresas/articulo/medellin-se-levanto-pico-y-placa-pese-a-comite-tecnico/520181

Debate en el concejo de medellín https://www.facebook.com/ConcejodeMedellin/videos/10155225913734169/?hc_ref=NEWSFEED

Investigación de udem y san buenaventurahttp://www.elcolombiano.com/antioquia/la-calidad-del-aire-se-medira-mas-alto-EG6594215

http://www.elcolombiano.com/medio-ambiente/estudios-hablan-de-vinculo-entre-la-polucion-y-la-salud-DB6627599
http://www.elcolombiano.com/antioquia/la-calidad-del-aire-se-medira-mas-alto-EG6594215
https://andro4all.com/2017/06/google-maps-calidad-aire

Plan del govierno es cortina de humo → https://www.theguardian.com/environment/2017/jul/26/the-governments-air-pollution-plan-is-a-beautiful-smokescreen?CMP=Share_AndroidApp_Tweet

Este proyecto como dispositivo pedagógico

que lleva consigo unos valores de unloquer y una maneras muy particulares de crear y aprender.

Argumentos ¿por qué es importante motivar esto?:

License

http://www.tapr.org/TAPR_Open_Hardware_License_v1.0.txt

Licensed under the TAPR Open Hardware License (www.tapr.org/OHL)

Bitácora

Conversión de float a string sin perder precisión → http://forum.arduino.cc/index.php?topic=103935.0
Deshabilitad watchdog de esp → https://github.com/esp8266/Arduino/issues/34
Interrupciones con el esp → https://www.youtube.com/watch?v=ZLy96DamNrM
Datos del gps tomados por el esp → https://www.youtube.com/watch?v=ZLy96DamNrM
Mapa de puntos graduados con datos tomados → http://www.daquina.io/vizAirePuntosGraduados/

Construcción de carcaza - AQA Mouse

 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
personas/brolin/proyectos/agentes_calidad_aire/bitacora.txt · Última modificación: 2017/12/02 14:08 por brolin