miércoles, 30 de mayo de 2018

Smart Fridge, una frigorífico/despensa inteligente

Con la informática podemos automatizar casi cualquier proceso de nuestra vida cotidiana para hacernos la vida más sencilla o más cómoda. Esto ya lo dijo Turing, que cualquier parámetro que fuese parametrizable de nuestra vida por nosotros, un ordenador podría cuantificarlo también.


Con esto en mente, podemos analizar cualquier aspecto de nuestra vida y tratar de mejorarlo de la mejor manera posible. Muchas veces las soluciones se te ocurren por arte de magia cuando estas haciendo tareas cotidianas como si de una película se tratase.

Esta idea se me ocurrió mientras mi pareja y yo estábamos viendo una serie en Netfilx. Todo genial, hasta que me dijo lo siguiente:

"Manu, cielo, mira si hay cervezas en la nevera, que no sé si hay y a mi me gustan muy frías"

Aquí aclaro dos cosas:
  1. Mi pareja siempre me dice "Manu, cielo," cuando quiere que haga algo. Es un inicio que me mantiene alerta a lo siguiente que va a decir, es un mensaje SYN para mí.
  2. Yo no bebo alcohol, pero mi pareja sí.
 A mí, particularmente, cuando estoy viendo una serie después de un día entero de trabajo e investigación, no me suele agradar mucho la idea de levantarme por cosas como esta, pero como esto es una pareja, voy sin problema. Y fue mientras me levantaba del sofá que se me ocurrió la idea y salí corriendo a apuntarla.

Se me ocurrió que podría consultar el estado del frigorífico y la temperatura de las latas desde el móvil mientras estaba en el sofá. Esta idea la apunté rápidamente y la empecé a desarrollar en papel.

Después de tenerlo toda la base en papel, siempre, para proyectos de este tipo, empiezo a hacerlos en Arduino para tener una ligera idea de cómo quedaría. Así que fue a una de las tiendas de electrónica que tengo relativamente cerca de casa, pillé una placa Arduino y unos conectores macho-hembra y me puse a enrredar hasta que lo saqué.

Para desarrollar la idea, lo primero que necesitaba eran botellas y latas, asíq ue las que íbamos gastando en casa mi pareja y yo, las guardaba por mi habitación hasta que saqué algo bastante avanzado del proyecto.


Cuando comecé con el proyecto, quité cosas de nuestro armario para meter ahí las latas y botellas, además de alguna caja de Oreo como se ve en la imagen.

Nota: Os podéis imaginar el rostro de felicidad en la cara de mi pareja, la cual estaba muy "contenta" porque hubiese quitado ropa de nuestro armario para guardar ahí el proyecto. Ya no duermo en el sofá ni nada.


Aunque este esquemático con las conexiones sea muy cutre {soy partidario del Keep It Cutre} podéis apreciar que reutilicé una idea que ya desarrollé para GAURUINO, más concretamente, para la idea del parking. Ahí utilicé un sensor de ultrasonidos para que, si había un coche a menos de una distancia determinada, eso era un indicador de que esa plaza no estaba libre y si no había coche a menos de esa distancia, la plaza estaba libre. Pues aquí hice lo mismo, pero con la sutileza de que si hay "algo" a menos de una distancia, es que SÍ hay ese producto y al revés. Una idea simple, que es verdad que requiere de tener toda la nevera siempre con el mismo orden, pero una idea que funciona.


Para conocer la temperatura de una botella o una lata, tendría que meter un sensor de temperatura tipo DHT11 dentro de la boteela. Yo lo que he hecho con una botella ya usada es abrirla por arriba, meter el sensor con los cables y esa parte de arriba volví a pegar tal y como se ve en la foto. Espero que también veáis el sensor dentro de la botella.



Para el sensor de ultrasonidos me hice una plataforma con un mecano de cuando era pequeño. Esta plataforma me iba a servir para sujetar bien el sensor ultrasónico.


Ya tenía sujeto el sensor de ultrasonidos y el sensor de temperatura y humedad  dentro de una de las botellas, por lo que era hora de probar el código.


Tal y como se observa en esta imagen, cuando detecta que la botella de Pepsicola {pepsi, pagadme por esta publi} obtiene la temperatura de la botella, cuando no, simplemente muestra que no hay pepsicola. También he grabado un vídeo con la PoC que subí a mi cuenta de Instagram.



 Ya tenía controlada este despensa/frigorífico, pero claro, para saber si quedan pepsicolas y su temperatura para saber si hay o no, tendría que abrir igualmente la puerta de la nevera, ya que el ordenador con el Arduino lo tendría que dejar dentro, y eso es una mierda. Bien es cierto que puedo utilizar una pantalla LCD o una pantalla de una tablet que ya no uso, pero el problema sería ir hasta la cocina, aunque el problema del gasto energético por abrir y cerrar la nevera se quita, eso sí.

Ahora venía lo gracioso, el mostrar los datos obtenidos por la web. Esto con Arduino, ya sabéis que no es fácil, o al menos no tanto como en Raspberry.


Si queremos seguir con Arduino, vamos a tener que sudar un poco, ya que tendremos que realizar la conexión al Arduino para sacar sus datos mediante un programa en Java que, una vez obtenga los datos, los base a un CSV o a una Base de datos. Os dejo un vídeo donde se explica cómo hacer esto.

La otra opción-que es por la que opté yo- es por cambiar todo el proyecto hacia Raspberry, ya que te ahorras mucho tiempo, y todos los problemas vendrán más en pelearte con Python-que no es muy complicado- y poco más.


Ya os digo, si os vais a pasar a Raspberry, tenéis 2 opciones. La primera es controlar cada componente con Python tal y como se ve en la imagen anterior, que son 2 códigos que se usó para GAURUINO para la parte que iba con Raspberry. Como veis, es más elegante este código, ya que en pocas líneas termina, aunque también es verdad que es encender y apagar un led.


Aquí ya vemos algo más elaborado, aunque en muchos aspectos es casi lo mismo que arduino. El pin lo declaras igual, y posteriormente dependiendo de la humedad, lo metes en el if y hará una cosa u otra.


Con shellscript es más o menos lo mismo, ya que en Linux todo es tratado como un archivo, por lo que todo queda en un echo 0 || 1 >/aya/class/gpio y el valor del gpio correspondiente si quieres encender o apagar algo. Para los demás casos, serían cosas muy parecidas, declaras los variables para los pines y todas las operaciones que tengas que hacer, tendrás que hacerlas con let. Al fin y al cabo es lo mismo, aunque hay mucha gente haciéndolo en Python en lugar de ShellScript.

Yo apuesto siempre que puedo por ShellScript, aunque vosotros como os veais más cómodos.

Pues para este proyecto de frigorífico sería lo mismo, pero ahora en Raspberry, y cuando se obtengan los datos, pasarlos a un archivo CSV o de Base de datos.

Posteriormente, con un bucle while infinito, en otro script leeríamos cada 5 minutos por ejemplo, las nuevas actualizaciones en el archivo de la base de datos y lo subiríamos a mysql con source ARCHIVO.

Finalmente, tendríamos que crear un archivo PHP con la web y un archivo PHP con la consulta a la base de datos que se relacione con el primer PHP o HTML, en el que el usuario, mediante un formulario sencillito, escriba el nombre de un producto, y al pulsar Enviar, le muestre la salida del SELECT product_name FROM productos.frigo WHERE product_name like '[String enviada por el usuario]'.

 

Con esto creo la conexión, la base de datos, tablas e inserto datos. En nuestro caso, esto ya estaría creado.

Como tendremos nuestro Apache montado e iniciado, tan sólo tendríamos que ir a otro equipo y buscar con el formulario que se haya creado para esto.


Que se enviaría a un PHP donde recibe la consulta y la mete en el SELECT.


Aquí estaría mostrando toda la tabla, que es algo que a nosotros nos puede interesar, ya que nuestra base de datos tendrá el nombre del producto y la temperatura.


Esta sería otra forma de mostrar los datos de la base de datos con, además, las cabeceras.

Con nuestro Apache, y conociendo la IP de nuestra web que hemos creado, podríamos acceder desde cualquier equipo. Por ejemplo, si estoy en mi casa, abro un navegador, escribo la IP y el archivo en cuestión y realizo la consulta.

Es verdad que si lo hago en PHP y abro la web desde el móvil, a lo mejor los datos que almacene en la tabla puede que no se vean del todo bien. Esto se puede solucionar con Wordpress y un tema que sea responsive, aunque yo lo he hecho en PHP directamente y no se me ve mal, ya que solamente son 2 campos los que muestra.

Dependiendo el móvil, a lo mejor hay que girarlo para verlo mejor, pero vamos, que desde ordenador se ve bien y desde móvil depende del dispositivo, desde el mío tengo que girarlo y desde el de mi novia, se ve bien sin girarlo.

Así ya sí que puedo consultar si hay o no hay refrescos o cervezas y además puedo comprobar su temperatura. Yo esto lo he probado sin meterlo en el frigorífico, solamente en una especie de despensa que tenemos, y la verdad es que funciona bastante bien.

¿Hackeamos el Mundo?

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...

Entrada destacada

El server me sabe a poco.

Soy un fanático del Rock y de Debian . (Creo que voy a inventar Rockbian, que suena bien y todo xD) Llevaba tiempo queriendo unir estos 2 c...