Antes de poder darle autonomía a nuestro robot, queremos que nos recopile 1 dato mas, el del sensor de CO2. Ya vimos como funciona el sensor CO2 y tenemos su código. Aprovecharemos para aprender a incorporar un archivo .ino de un proyecto a otro para poder ejecutar código de otro proyecto.
Requisitos:
Computadora (mac)
Arduino MEGA (u otra variante Arduino) o incluso Arduino clone, Edison, Raspberry… Este tutorial en particular usa una Arduino MEGA.
Wifi Shield & WiFi Library
Grove Shield con Sensor CO2 y/o Dust Sensor
Servidor PHP (hay servicios gratuitos de php por ejemplo: http://www.000webhost.com/) o Parse.com
Arduino IDE (https://www.arduino.cc/en/Main/Software)
Arduino TinySine WiFi Grove Air Monitor
En el tutorial Sensores Avanzados vimos como operar un sensor de CO2. Lo que vamos a hacer es importar el código del sensor CO2 al proyecto existente del WiFi Dust. Así podremos reportar el CO2 a un servidor.
Dependiendo de como armamos la base de datos podemos graficar los datos usando highcharts en un servidor:
En este tutorial combinaremos 2 habilidades electrónicas que hemos aprendido:
Colectar datos en sensores digitales
Comunicar datos via WiFi
Incorporaremos una habilidad distinta que no es precisamente de Arduino pero si de IoT. La habilidad de recibir datos en un servidor en la web.
Requisitos:
Computadora (mac)
Arduino MEGA (u otra variante Arduino) o incluso Arduino clone, Edison, Raspberry… Este tutorial en particular usa una Arduino MEGA.
Wifi Shield & WiFi Library
Grove Shield con Sensor CO2 y/o Dust Sensor
Servidor PHP (hay servicios gratuitos de php por ejemplo: http://www.000webhost.com/) o Parse.com
Arduino IDE (https://www.arduino.cc/en/Main/Software)
Arduino TinySine WiFi Grove Air Monitor
Aquí tenemos la Arduino UNO debajo de la TinySine WiFi inter-conectada a la Grove Shield.
Lo que vamos a querer hacer es tomar muestras cada 100,000 ms usando el Dust Sensor y postear la data a un servidor usando php & MySQL como base de datos. En mi caso particular tengo un servidor con MySQL database y una pagina sencilla de código php para recibir datos de un cliente y grabarlos a la base de datos. Los servicios PHP por lo general son gratis. Con un código como este puedes recibir datos e un cliente y postearlo a la base de datos:
<?php
$conex = mysql_connect("localhost", "usuario", "clave");
if(!$conex){
die("Couldn't connect to the server...<br />".mysql_error());
}
$db = mysql_select_db("test", $conex);
if(!$db){
die("Couldn't connect to the database...<br />".mysql_error());
}
$dato1 = $_POST['dato1'];
$dato2 = $_POST['dato2'];
$sql = "INSERT INTO example (co2,dust,fuente) VALUES ('$dato1','$dato2',"Arduino")";
$res = mysql_query($sql, $conex);
?>
También podríamos usar un servicio mas especializado como Parse.com. Para Parse.com puedes usar un código sencillo como jQuery así:
Parse.initialize(“APPKEY”, “JSKEY”);
var TestObject = Parse.Object.extend(“TestObject”);
var testObject = new TestObject();
testObject.save({foo: “bar”}, {
success: function(object) {
$(“.success”).show();
},
error: function(model, error) {
$(“.error”).show();
}
});
Pero regresemos al proyecto en mano. La idea es poder postear datos a un servidor, ya sea a traves de php o jquery. Asi que veamos como usar WiFi para comunicar datos a un servidor via HTTP. Estas son funciones mas avanzadas y por ende usaremos nuevamente una library. La library es una serie de archivos de código que agrupan las funciones mas comunes de un dispositivo (sensor o WiFi o BT) para darle al programador una serie de funciones amigables con cuales interactuar.
Veamos el codigo por partes:
int pin = 8;
unsigned long duration;
unsigned long starttime;
unsigned long sampletime_ms = 30000;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;
#include <WiFlyHQ.h>
#include <SoftwareSerial.h>
SoftwareSerial wifiSerial(2,3);
WiFly wifly;
String data;
const char mySSID[] = "linksys";
const char myPassword[] = "miclave";
const char site[] = "miservidor.com";
void terminal();
Aquí iniciamos las mismas constantes de antes cuando usamos el sensor de Dust pero adicionalmente iniciamos algunas constantes para el WiFly module. Hacemos otras cosas en el setup que imprimen datos del modulo y su estado al Monitor Serial.
Los resultados deberían poderse verificar tanto en el Monitor Serial como en la base de datos configurada para recibir los datos. Si los datos aparecen en el Monitor Serial pero no en la base de datos, seguramente tiene alguna problema con la comunicación HTTP y deberá revisar los logs de su servidor para verificar lo que el servidor esta recibiendo de la MEGA y lo que responde. Ademas puede verificarse los ingresos a la base de datos con un simple php query al MySQL db:
Ok ahora nuestro robot tiene la habilidad de tomar muestras de aire. Deberemos incorporarle el código para muestra el CO2 también para poderlo reportar al servidor.