Mostrando entradas con la etiqueta arduino. Mostrar todas las entradas
Mostrando entradas con la etiqueta arduino. Mostrar todas las entradas

07 julio 2014

Así construí mi huerto domótico

Hace un tiempo leí un artículo que despertó cierto interés en mí, el artículo hablaba sobre la escasez de agua en el planeta, algo de lo que no somos conscientes aún los seres humanos y que ya afecta a todos los continentes. Cada día se desperdician cantidades incalculables de este recurso natural, que es una fuente de vida, y uno de los motivos es la cantidad de campos inundados por falta de control en el riego. 

Pues bien, a raíz de este artículo, y acordarme de lo riquísimos que saben siempre unos tomates de huerta, y no los comprados en cualquier supermercado…se me ocurrió la idea de fabricarme mi propio “microhuerto domótico”. 

Con ello, ayudaría a controlar el consumo de agua, fomentando su ahorro, puesto que se riega en función de la humedad deseada, gastando por tanto, el agua justo y necesario. Aunque en este caso, el ahorro de agua es mínimo, comparado con el resto del mundo, aporto ese granito de arena.

Además esto me sirvió como proyecto final para dar por finiquitado el ciclo de grado superior ASIR (Administración de Sistemas Informáticos en Red), cursado en el Centro Don Bosco (Villamuriel de Cerrato- Palencia), del que solo puedo dar calificativos buenos. No sólo te hacen crecer a nivel profesional, sino también a nivel personal, algo importantísimo y que en los últimos años tanto escasea. 

Y bien, después de todo esto, vamos a lo que nos concierne. Para el desarrollo del huerto tenía que pensar primeramente que quería conseguir, y una vez hecho esto, como conseguirlo. La idea principal era construir un sistema de riego automático, controlado por diferentes tipos de sensores, de forma que el sistema sea capaz de tomar decisiones por sí mismo, reduciendo así los cuidados. Para ello se controlarían las condiciones del ambiente y la necesidad de riego que tiene la tierra en función de su humedad. Cuando las condiciones sean óptimas comienza el riego, siempre y cuando exista agua en el depósito.

Además quería que los datos se almacenaran de forma periódica en una base de datos, y a través de una aplicación Web, con nuestras credenciales poder acceder y ver un histórico gráfico de datos. 

Para conseguir esto básicamente he utilizado:

    • Sensores
    • Microcontrolador
    • Servidor

El sistema utiliza diferentes tipos de sensores, porque nos interesa controlar diversos valores. En mi caso me interesan sobre todo los valores de la humedad de la tierra para lo que uso un sensor conocido como YL-69, realmente se trata de dos picas que se encuentran enterradas en tierra de manera que controlando la resistencia de la tierra puedo conocer la humedad. Para recoger los valores de humedad y temperatura ambiente utilizo un sensor DHT11

De la temperatura del suelo se encarga el DS18B20, un sensor sumergible y resistente a la humedad, que se usará para controlar la temperatura de la tierra.

Por seguridad, y para evitar que las bombas funcionen en vacío, y puedan dañarse, es imprescindible controlar la cantidad de agua que hay en el depósito, y esto lo consigo con un sensor de nivel de marca Funduino.

Por último controlar si hay luz o no, para evitar el riego de noche. Para ello he usado un sensor de luz, también conocido como resistencia LDR.

Sensores Utilizados

He de decir que son sensores muy básicos con un precio mínimo, por tanto, no podemos esperar una precisión increíble. El precio de cada uno de ellos puede variar dependiendo del sitio donde se compre, pero podemos encontrar diferencias que a lo sumo llegan a 5€. En mi caso opté por usar la conocida web de Ebay, de donde proviene todo el material. La mayoría de productos los compré directamente a países asiáticos, por lo que no superaron los 3€/unidad.

Mi recomendación, es que para trabajos más críticos se utilicen sensores de mayor calidad, ya que la calidad y precisión de los mismos va ligada a su precio.

El encargado de recoger todos estos valores y tomar las acciones necesarias es un sistema Arduino. Éste es el microcontrolador ya mencionado. Para quien no lo sepa, Arduino es una placa con múltiples entradas y salidas gestionadas por un microcontrolador programable de marca Atmel. Hay una gran variedad de placas Arduino pero en mi caso opté por usar la placa Leonardo. Este sistema ha sido programado para recoger datos, actuar en función de los valores de dichos datos, y en última instancia se encarga de mandarlos a un servidor.

Aquí se muestra una parte del código encargado de recoger los datos, y enviarlos por el puerto serie.


Como servidor he optado por una Raspberry PI, este pequeño ordenador que seguramente muchos ya conoceréis, lleva en mi caso, una distribución de Linux llamada Raspbian, basada en Debian. Aquí se almacenará nuestra Base de Datos, y además hará de Servidor Web. Opté por usar una Raspberry por su perfecta compatibilidad junto a Arduino, por las grandes posibilidades que ofrece a pesar de su escaso hardware, y muy importante, por su bajo coste.

En este mini pc hay un Servidor Web Apache funcionando junto con MySQL. Además para que Arduino y Raspberry se comuniquen entre sí, programé un script en Python, que se encarga de recibir los datos por el puerto Serie que Arduino está enviando de forma constante. Básicamente este script recibe los datos, se conecta con nuestra Base de Datos e inserta los datos.


Para que esto se hiciera de forma periódica pero no constante, utilicé la herramienta Cron integrada en Raspbian, de manera que cada “X” minutos se ejecute el script en Python.

Para la visualización de los datos he desarrollado una aplicación Web sencilla, programada principalmente en Php, junto con pequeñas funciones en Javascript para controlar y validar ciertos campos. Además en el aspecto visual me inicié en el framework Bootstrap, para conseguir una Web fácilmente adaptable a múltiples dispositivos y que ofrece una gran profesionalidad. También utilicé la librería HighCharts para la creación de gráficas y así conseguir visualización de los datos muy atractiva.


Es muy importante que si le damos salida a internet nos cercioremos de que está seguro. Para ello he modificado el archivo de configuración de Apache, para que ante un ataque muestre la mínima información posible sobre el servidor. Además me encargué de encriptar el tráfico entre cliente y servidor mediante certificados SSL, y he forzado para que el acceso siempre sea HTTPS

Esta imagen muestra un esquema de los elementos que intervienen y la forma de interactuar entre ellos.



A continuación se pueden ver unas imágenes del huerto acabado, y un vídeo que muestra su funcionamiento:





Por último, paso a detallar el costo total del sistema:

Elemento
Unidades
Precio unitario
Precio total
Arduino Mega 2560 Rev.3
1
19€
19€
Raspberry Pi
1
35€
35€
Sensor de humedad de tierra YL-69
2
1,44€
2,84€
Sensor de temperatura y humedad ambiente DTH-11
1
1,90€
1,90€
Sensor de luz LDR
1
0,70€
0,70€
Sensor de temperatura de tierra
2
2,99€
5,98€
Sensor de nivel de agua
1
3,50€
3,50€
Placa de 4 relés 5V-220V
1
11,50€
11,50€
Bombas de agua
2
6,95€
12,90€
Protoboard
1
2,50€
2,50€
Resistencias de pull-up de diferentes valores
12
0,20€
2,40€
Cableado y conectores
-
5,50€
5,50€
Leds de diferentes colores
15
0,16€
2,40€
Bandeja de plástico
1
4,50€
4,50€
Piezas de policarbonato
2
1,85€
3,70€
Recipientes para depósito de agua y electrónica
2
1,80€
3,60€
Tarjeta SD  para Raspberry PI
1
8€
8€
Tubos de goteo
2
0,70€
1,40€
Plantas
6
0,70€
4,20€
Fuente de alimentación 220V
1
25€
25€
PRECIO TOTAL
156,52€

*** Todos los precios llevan incluido el IVA y los gastos de transporte asociados en los componentes pedidos por internet.

Artículo por cortesía de: Carolina Herrero 
Leer más...

14 febrero 2013

Fuerza bruta mecánica: Ganando al Mezcladitos jugando de verdad


Disclaimer: Desde Security By Default, no nos hacemos responsables de los malos usos que se puedan extraer de la información explicada en el presente artículo.

El mes pasado, nuestro amigo Lorenzo Martínez nos enseñó como ganar siempre a Mezcladitos interceptando las comucaciones entre el juego y el servidor.

Como soy de ciencias, y en este tipo de juegos llevamos las de perder contra los de letras, y como no me gusta hacer trampas para ganar, decidí buscar una forma de jugar el juego utilizando mis conocimientos técnicos:


Bueno, quizá si sean trampas, pero al menos no estamos hackeando el sistema ;)

Esto es solo una inocente demostración de lo que es la fuerza bruta mecánica. Cuando escuchamos hablar sobre fuerza bruta, la mayoría de las veces nos viene a la cabeza el "ensayo y error" software para atacar contraseñas cifrando y comprobando si son válidas. Sin embargo podemos aplicarla mecánicamente a todo tipo de cosas: teclados virtuales, teclados físicos, roscas, etc.

En esta demostración he jugado al Mezcladitos de Facebook, sin embargo me hubiese gustado disponer de unos cuantos servos y un arduino para jugar directamente sobre la pantalla del iPhone (haciendo un sencillo "tecleador" mecánico).

Lo primero fue crear un algoritmo que resuelve el casillero, buscando por fuerza bruta todas las palabras que contiene basandome en un diccionario con todas las palabras del idioma español.

Dado que tenemos solo dos minutos para jugar, necesitamos calcular las palabras en el menor tiempo posible, así que ademas de optimizar el algoritmo, lo lanzamos en 16 threads (uno por cada casilla) para aprovechar todos los núcleos de nuestra CPU. Dicho algoritmo recorre todos los caminos posibles desde una casilla y comprueba si la palabra resultante en cada uno de ellos existe en el diccionario.


Una vez tenemos todos los resultados, hacemos un hook a bajo nivel del ratón con SetWindowsHookEx, de ese modo puedo moverlo y hacer clicks automatizados para cada palabra.

Como se puede ver en el video, antes de iniciar se hace una calibración haciendo click sobre las dos primeras casillas y el "Enter", para conocer las coordenadas de todas las casillas del tablero.


Hemos hecho fuerza bruta para ganar a un juego, pero podría utilizarse para cosas más serias como ganar acceso no autorizado tanto a sitios web como a lugares físicos, si no utilizan medidas extra de seguridad.

En este caso estamos utilizando el ratón como método de entrada automatizado. Algunos sitios web emplean teclados virtuales para hacer login (incluso algunos bancos) utilizando el ratón. A veces incluso cambian aleatoriamente el orden de las letras o números (nada que no se pueda saltar con un algoritmo OCR). Con ese método muchas veces creen equivocadamente que añaden una capa de seguridad, pero si no limitan el número de intentos se puede hacer fuerza bruta fácilmente (y si te están pidiendo un PIN de 4 números, no tardaría más que unos minutos).

Sin embargo como comentaba antes, disponiendo de un arduino y unos cuantos motores, podemos hacer fuerza bruta sobre prácticamente cualquier cosa de forma muy sencilla y barata siempre y cuando no nos limíte en número de intentos, lo que nos hace preguntarnos cuán seguros son los dispositivos que utilizamos habitualmente, y como muchas veces obvian ciertas medidas de seguridad al pensar que obligando a alguien a introducir datos manualmente no probarán todas las combinaciones. O cuantas veces quitamos nosotros mismos ese número de intentos "por miedo a bloquear nuestro dispositivo nosotros mismos".

En plena era digital, existe mucha gente (especialmente gente mayor, o con pocos conocimientos informáticos) que piensa que lo analógico es más seguro que lo digital, sobretodo cuando cada vez hay más noticias en la prensa generalista sobre incidentes de hacking; así que aquí van unos cuantos ejemplos para romper esa leyenda urbana (Nota: Algunos de estos ejemplos se bloquean despues de un número de intentos, pero los pongo para hacer un muestrario del tipo de cosas que se pueden atacar físicamente):













Moraleja: Si estais implementando algun tipo de mecanismo para restringir accesos, nunca olvideis limitar el número de intentos (el cual en muchas ocasiones es visto como "innecesario" o engorroso), y procurad incluir algún elemento extra como un tarjeta, una llave,...

Si disponeis de algún mecanismo de acceso que limite el número de intentos y os permita deshabilitarlo, nunca lo hagais por comodidad o miedo.

Os dejo el código fuente del programa para los que querais echarle un vistazo (no incluyo los diccionarios). https://github.com/moebiuz/mezclaPWNr

----------------------------------------

Artículo cortesía de Antonio Rodríguez (@MoebiuZ)

Leer más...