Introduction: Alarma Remota Congelador Arduino-Android

Idea:

crear una alarma que inque en un dispositivo andrioid que la temperatura de un congelador pasa de un límite

Teoría:
necesito subir a Internet la medida para que un programa en android sea capaz de acceder a la información del sensor puedo hacer un servidor web con el arduino o usar otro servidor, si uso el arduino como servidor web tengo que tocar la configuración del router para acceder a el desde Internet, además de montar un sistema para las dns dinamicas.

Opto por usar uno de los dominios que tengo contratados con base de datos mysql para hacer unos servicios web que me permitan guardar los datos del arduino y que puedan ser leídos por Android

hay localizar una aplicación para android que ejecute un programa al reiniciar el teléfono para asegurarse de que el programa está activo. http://www.gizmos.es/moviles/auto-start-lanza-aplicaciones-en-forma-automatica-al-iniciar-tu-movil-android.html


Referenias

http://www.tweaking4all.com/hardware/arduino/arduino-ds18b20-temperature-sensor/

http://www.prometec.net/arduino-wifi/

http://www.sistemasorp.es/2014/10/07/probando-el-modulo-wifi-esp8266/

https://www.instructables.com/id/ESP8266-Wifi-Temperature-Logger/

http://www.edaboard.com/thread208731.html

http://www.tweaking4all.com/hardware/arduino/arduino-ds18b20-temperature-sensor/

http://hyperphysics.phy-astr.gsu.edu/hbasees/electric/voldiv.html

http://ai2.appinventor.mit.edu/

http://www.nosinmiubuntu.com/como-crear-servicios-web-php/

Step 1: ​Material:

- Arduino UNO

- sensor tempetatura (con valores negativos) sonda DS18B20 http://www.ebay.es/itm/231569381488?_trksid=p2060...

- Transceptor WIFI ESP8266 ( Acceso a internet por wifi desde donde está el congelador)

- Conversor USB A RS232 UART TTL 3.3V PL2303HX SERIAL CONVERTER ARDUINO

- Dispositivo android

- Fuente de alimentacion (ordenador)

- Resistencias 4K7, 1k y 2k

Step 2: MySql: Crear Las Tablas Arduino_Sensores Y Arduino_Alarma.

Lo primero que necesitamos es un servidor web con bases de datos Mysql (No es necesario registrar un dominio)

por ejemplo http://260mb.net/index.php/hosting-gratis

En Arduino_Sensores voy a escribir las lecturas del sensor, lo he definido para varios sensores y valores decimal y de texto para poder controlar varios dispositivos.

CREATE TABLE `Arduino_Sensores` (

`Sensor` varchar(10) NOT NULL COMMENT 'nombre del sensor',

`Fecha` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'fecha de lectura',

`Valor` decimal(10,2) DEFAULT NULL COMMENT 'valor leido',

`Valor_Char` varchar(100) DEFAULT NULL COMMENT 'valor leido',

KEY `Sensor` (`Sensor`),

KEY `Fecha` (`Fecha`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='guardado de datos de los Arduinos';

CREATE TABLE `Arduino_Alarma` (

`Sensor` varchar(10) NOT NULL,

`Valor` decimal(10,2) NOT NULL,

PRIMARY KEY (`Sensor`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `Arduino_IP` (

`IP` varchar(20) NOT NULL

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Step 3: Php: Hay 3 Modulos Principales

config.php donde guardo los parámetros de configuracion de acceso al Mysql.

dbmanager.php tiene la función de conectarse y ejecutar las sql .

webservice.php colección de servicios web y funciones.

Para simplifcar las llamadas a las funciones creo un programa php que llama a cada una. PutLastIp.php ( para uso futuro, dinamicDNS)

GetLastIp.php ( para uso futuro, dinamicDNS)

InsertSensorValue.php programa que guarda el valor del sensor, este es al que llama el arduino .

getSensorAlarma.php programa que obtiene el valor de referencia para el sensor,para la alarma.

getLastSensorInput.php programa que obtiene la ultima fecha y hora en el arduino guardó un valor.

getLastSensorValue.php programa que obtine el último valor del sensor,.

Step 4: Android (Teléfono)

Android (Teléfono): hay 3 procesos a realizar, para programar en Android uso APPINVENTOR

http://ai2.appinventor.mit.edu/?galleryId=6493905902632960

- conectarse a los servicios web cada 5 minutos leer la medida y la alarma para cada sensor

- reproducir sonido si se produce una medida que llegue al valor de alarma y no está en silencio

- cada hora quitar el silencio de la alarma....

- Si no se sube una lectura en las 2 ultimas hora salta una alarma.

Step 5: Arduino: Hay 2 Procesos a Realizar

Primero:

Antes de empezar ha montar el Arduino hay que montar el ESP8266 al conversor USb Serial Rx con Tx y Tx con Rx usando la fuente de alimentación para dar corriente al ESP8266 porque consume mas de lo que puede dar el conversor, en la patilla +3.3, en una consola abierta en el com del conversor a 115200 Bauds escribimos...

AT+RST

y luego

AT+CIOBAUD=9600

en ambos casos nos devuelve OK (aunque en el segundo no lo vemos)con esto le bajamos la velocidad de 115200 a 9600 ya que la librería SoftwareSerial.h que usamos para programar el arduino no soporta esta velocidad.

hardware y conexiones:

Para la sonda DS18B20 primero hay que poner una resistencia de 4K7 entre vcc (5v) y data El pin data lo conectmos al pin 5,

El pin 2 y 3 lo dejamos para el RX y TX del wifi en el pin 2 ponemos el divisor de voltaje formado por las resistencias de 1k y 2k

El sistema lo alimentamos con una fuente de ordenador de donde tomamos 0v (negro) 12V (amarillo) para el arduino y 3.3 (naranja) para el módulo ESP8266

análisis programación:

- Leer temperatura

- cada 5 minutos enviar la ultima lectura por internet

- enviar la lectura por wifi a internet

- Activar el wifi

- conectarse al router

- Llamar al servicio web que guarda la Ip publica del router (uso futuro)

- Llamar al servicio web del sensor para guardar el valor

congelador.ino

Siguiendo las explicaciones de prometec consigo conectar el wifi a la red pero no obtengo datos del servidor web he conectado usb- serie-ttl al wifi y con las explicaciones de http://www.sistemasorp.es/ primero lo configuro para que trabaje a 9600 bps , comentan que es el mas estable para trabajar con internet

Tras muchos intentos del comando GET no consigo nada en claro, solo "time out", todos los tutoriales ponen \r\n para fin de linea pero veo que en http://www.edaboard.com ponen \n, pruebo y consigo "not found" con lo que a la cadena GET hay que indicar el HOST. pero los tiempos de espera son cortos como para hacer puebas escribiendo los comandos con el teclado, para las pruebas con arduino creo terminal.ino con lo que lo hago en bateria poniendo delays para dar tiempo al wifi y a internet a responder.