Arduino (IoT): Simple Tutorial Air Quality Box Design

Acrylic Case Arduino Projects

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial Diseño de Contenedor

Para la estación de Monitoreo de Calidad del Aire fue necesario diseñar un contenedor para la electrónica.  También haría falta hacer cambios mas profundos al diseño como reemplazar la Arduino UNO por una Nano o Micro que sea mas pequeña y por ende ocupe menos espacio y consuma menos energía, pero eso lo haremos en una próxima sesión.  Por ahora nos enfocamos en el diseño estructural del contenedor para la estación.

Sencillamente usamos una lamina de acrílico para medir y construir las paredes para luego unirlas.  Básicamente el diseño era una pirámide rectangular en v1.0.  Para unir las paredes se uso sellador de silicone transparente  en medidas de 10″ x 20″ x 4″.  Una vez cortadas las piezas, se procedió a lijar las orillas para hacer mas efectivo el trabajo del adhesivo.  Notamos que también es mejor aplicar un adhesivo mas inmediato y fuerte como Super Glue” y luego usar el silicone para terminar de fijar y sellar la union.  En un diagrama se mira asi:

AcrylicBoxDiagram

En la v1.0 se construyó el contenedor exactamente de las dimensiones especificadas.  En una v2.0 se pretende dejar aleros mas grandes para proteger contra el azote de lluvia y poder hacer mas agujeros de ventilación no solo en la parte inferior del contenedor sino también a los lados.

Al final el contenedor queda así:

Arduino IoT: Air Quality Box Design Santiapps Marcio Valenzuela

 

 

Como podemos ver en la columna derecha, en la imagen superior se ve una union con silicone aplicado a la orilla únicamente.  En contraste en la imagen inferior de la derecha se puede ver una union hecha con Super Glue aplicado a la orilla y luego silicone aplicado en la “L” creada por las 2 paredes.

La idea para este contenedor es poderlo ubicar en el exterior para poder tomar muestras de aire!

Arduino (IoT): Simple Tutorial Luz Nocturna Portátil

Nightlight Arduino Santiapps

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial Luz Nocturna Portátil

En este tutorial modificaremos nuestro proyecto de Iluminación Nocturna para poderlo operar de forma portátil.

Requisitos:

  1. Computadora (mac)
  2. Tosduino Nano
  3. LED Blanca o de cualquier color
  4. Breadboard
  5. Detector de Iluminación
  6. Detector de Movimiento IR
  7. Arduino IDE (https://www.arduino.cc/en/Main/Software)
Arduino (IoT) Simple Tutorial Luz Nocturna Santiapps Marcio Valenzuela
Arduino (IoT) Simple Tutorial Luz Nocturna

Esta MCU es muy compacta e ideal para proyectos compactos.  En este caso vamos a armar un detector de movimiento nocturno para proveer iluminación.  Esto significa que ocupamos una MCU que controle la operación, operada por una fuente de energía portátil, como una batería en este caso.  Debido a que operara de una batería, necesitamos una MCU que consuma poca energía, como la Nano.  La MCU operara un detector de movimiento quien señalara cuando sea necesario encender la LED para iluminar.

Sin embargo si operamos el proyecto así y alguien pasa por el detector durante el día, entonces estaremos encendiendo la LED durante el día cuando no es necesario.  Esto significa que ocupamos un sensor de iluminación para controlar que el detector de movimiento solo se dispare cuando la iluminación es baja, ósea de noche.

Como vimos en el proyecto original, el código es sencillo:

[code]</pre>
<pre>//PIR
int ledPin = 10;
int pirPin = 9;
int pirVal = 0;
int photoTr = 0;
//Timing parameters
boolean motionDetectedFlag;
unsigned long initialiseSensorTimestamp;
long previousMillis = 0;
long interval = 1000;
void setup() {
Serial.begin(9600);
pinMode (pirPin, INPUT);
pinMode (ledPin, OUTPUT);
}
void loop() {
//if PIR motion is detected && illum is below x value
pirVal = digitalRead(pirPin);
Serial.print(“PIR: “);
Serial.println(pirVal);
photoTr = analogRead(A0);
Serial.print(“Illum: “);
Serial.println(photoTr);
if (pirVal == 1) { //if pirPin is 1…
//Test Illum
if (photoTr < 5) { //if photoTr is larger than 100…
Serial.println(“Illum is also low”);
digitalWrite(ledPin,HIGH); //light up the LED!
delay(15000); //leave it on for 15 seconds
digitalWrite(ledPin,LOW); //light up the LED!
} //end of photoTr
} //end of pir if
delay(1000); //delay loop for 1 whole second
}</pre>
<pre>[/code]

Listo, ahora hagamos las conexiones modificadas con la Nano y con el pack de baterías:

Arduino IoT: Simple Tutorial Luz Nocturna Portátil Santiapps Marcio Valenzuela
Arduino IoT: Simple Tutorial Luz Nocturna Portátil

Ahora cargaremos este código a la Nano y haremos el ensayo:

La Tosduino Nano es una MCU muy poderosa debido a su portabilidad!

Arduino (IoT): Simple Tutorial de Sensor de Gas MQ2

Gas Detection Santiapps

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial Sensor de Gas MQ2

Grove tiene una gran selección de sensores para distintas aplicaciones.  Ya vimos el sensor de CO2 en la Estación de Monitoreo Ambiental.  Ahora agregamos un sensor MQ2 que cubre un espectro de gases mas amplio.

Requisitos:

  1. Computadora (mac)
  2. Arduino UNO
  3. Sensor M2
  4. Grove Shield
  5. Arduino IDE (https://www.arduino.cc/en/Main/Software)
Arduino Simple Tutorial Sensor de Gas MQ2 Santiapps Marcio Valenzuela
Arduino Simple Tutorial Sensor de Gas MQ2

La conexión a la Grove shield es muy sencilla.  He allí el poder de Grove y la facilidad de crear un robot multisensorial usando una Grove Shield como interfaz.

Arduino Simple Tutorial Sensor de Gas MQ2 Santiapps Marcio Valenzuela
Arduino Simple Tutorial Sensor de Gas MQ2 + Grove Shield

En este caso lo que tenemos que hacer es crear una linea base o baseline.  Esto se conoce como “Calibrar” el sensor porque vamos a tomar una muestra de lo que consideramos aire limpio y luego en base a esa linea base el sensor luego tomara otras mediciones para determinar el diferencial.

Para calibrar el sensor, lo ubicamos en un ambiente libre del gas que queremos medir y corremos el siguiente sketch con el sensor conectado al Grove Shield:

[code]
void setup() {
Serial.begin(9600);
}
void loop() {
float sensor_volt;
float RS_air; // Para el valor de Rs de aire limpio
float R0; // Para el valor R0 del gas en cuestión
float sensorValue;
/*— Muestras promediadas 100 veces —*/
for(int x = 0 ; x < 100 ; x++){
sensorValue = sensorValue + analogRead(A0);
}
sensorValue = sensorValue/100.0;
sensor_volt = sensorValue/1024*5.0;
RS_air = (5.0-sensor_volt)/sensor_volt;
R0 = RS_air/9.8; // La razon RS/R0 es 9.8 en nuestro caso
Serial.print(“sensor_voltaje = “);
Serial.print(sensor_volt);
Serial.println(“V”);
Serial.print(“R0 del gas = “);
Serial.println(R0);
delay(1000);
}
[/code]

Ahora reemplazamos el valor R0 en este sketch que usaremos para medir:

[code]
void setup() {
Serial.begin(9600);
}
void loop() {
float sensor_volt;
float RS_gas; // RS del gas
float ratio; // Razon RS_GAS/RS_air
int sensorValue = analogRead(A0);
sensor_volt=(float)sensorValue/1024*5.0;
RS_gas = (5.0-sensor_volt)/sensor_volt;
/*-Reemplazar “R0” con valor de R0 en calibración -*/
ratio = RS_gas/R0; // Razon = RS/R0
Serial.print(“sensor_voltaje = “);
Serial.println(sensor_volt);
Serial.print(“RS_ratio = “);
Serial.println(RS_gas);
Serial.print(“Rs/R0 = “);
Serial.println(ratio);
Serial.print(“\n\n”);
delay(1000);
}[/code]

 

Ahora podemos agregar un nuevo valor a nuestra tabla de monitoreo.  Luego veremos como agregar un sensor de UV y postearemos todo a la nube para poder presentar los datos.