¡Esta es una revisión vieja del documento!
Tabla de Contenidos
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
Comparación de diferentes sensores http://aqicn.org/sensor/
http://www.gassensor.com.cn/product_en/typeid/19.html
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
https://forum.mysensors.org/topic/147/air-quality-sensor/194
http://www.howmuchsnow.com/arduino/airquality/grovedust/
https://github.com/empierre/arduino/blob/master/DustSensor_Shinyei_PPD42NS.ino
Sensor Sharp GP2Y1010AU
< Transcribir y traducir
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
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:
- http://platformio.org/lib/show/95/I2Cdevlib-ADS1115/examples (No tiene soporte oficial para espressif8266)
- http://platformio.org/lib/show/342/Adafruit%20ADS1X15 (Soporta espressif8266, Version 1.0.0 last updated 4 months ago )
- http://platformio.org/lib/show/344/ADS1X15 (Soporta espressif8266, Version 1.2.0 last updated 4 months ago )
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
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
Transcribir y traducir >
Batería
Pantalla OLED
https://macsbug.wordpress.com/2016/03/13/dvm-in-ads1115-and-esp8266/ https://github.com/squix78/esp8266-oled-ssd1306 http://oleddisplay.squix.ch/#/home
Ingeniería inversa
Nube SIATA
Crea tu propio sensor - kit/taller
Plantower Sensor Accuracy
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
Sobre los sensores de bajo costo
https://twitter.com/Kamerpo/status/961245752759586817
http://www.good4utah.com/news/local-news/dirty-air-monitors-are-they-telling-us-the-whole-truth/382744964
Partícula en el aire del Aburrá es 53,4% cancerígena → http://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 buenaventura → http://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
Lo mandó Fabio → https://www.nesta.org.uk/blog/air-quality-data-challenge
emprendimiento relacionado → https://flow.plumelabs.com/
sensores móviles del área metropolitana → http://www.metropol.gov.co/SalaPrensa/Paginas/En-Medellin-se-monitorea-la-calidad-del-aire-en-vehiculos-en-movimiento.aspx
http://la.network/colombianos-preocupados-calidad-aire/
http://www.elcolombiano.com/antioquia/contaminacion-del-aire-en-medellin-GD8207109
Este proyecto como dispositivo pedagógico
que lleva consigo unos valores de unloquer y una maneras muy particulares de crear y aprender.
similar a esto http://blinkenrocket.de/
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/