Functiodomo-Sistema de automatización del hogar (domótica) sin cables

Comunicación con Arduino a través de un servidor PHP.

En este artículo explico como nos comunicamos entre el ordenador principal y cada uno de los nodos Arduino mediante instrucciones escritas en PHP.

Como aparece más detallado en el artículo, un punto importante de nuestro método es que la selección de nodo activo no se hace mediante direcciones IP, sino que aprovechando que en las redes Zigbee, todas las órdenes pasan por todos los nodos, debido a su configuración tipo malla, la selección de a qué nodo se dirige una orden la hacemos mediante programación en la propia placa Arduino.

Esta técnica tiene como ventajas:

  • La programación es muy sencilla, tanto en PHP como en Arduino.
  • Los nodos son independientes de los chips Xbee que les comunican con el sistema central. Aunque lo recomendable es saber qué chip XBee acompaña a cada nodo Arduino, los chips Xbee son perfectamente intercambiables entre ellos, ya que la selección del nodo no la hace su dirección de red, sino la propia placa Arduino

También tiene sus desventajas, siendo la principal que esta técnica obliga a tener la placa Arduino siempre conectada, no permitiendo técnicas de ahorro de energía (manteniéndola apagada mientras no llegue una orden), aunque como en nuestro caso los nodos no van a estar alimentados por baterías, este factor no es tan crítico.

Como ejemplos de comunicación PHP-Arduino sobre red Xbee, nuestra programación es la siguiente:

  • para el servidor PHP:

enviar_instrucción_M_al_nodo_a.php

<HTML> 
<BODY> 
<?php 
// apertura del fichero de escritura a través del puerto serie ttyUSB0
$fp =fopen("/dev/ttyUSB0", "w"); 
// escritura de la instrucción aM
fwrite($fp, aM); 
// cierre del fichero
fclose($fp); 
?> 
<p>Envío de la instrucción M a la placa a</p> 

 

 
<a href="../control_por_zonas/index_plata_zonas.html" title="Orden enviada">vuelta a control por zonas</a> 
</BODY> 
</HTML>

En cuanto a la programación de la placa Arduino, el código necesario es el siguiente:

ectura_ordenes_PHP.pde

/* Modificación del programa SwitchCase2 de la librería de ejemplos de Arduino 
Programa original creado por Tom Igoe el 1 de julio de 2009 
Programa mofificado por José Antonio Castillo Rodríguez el 15 de abril de 2010 
A continuación el texto informativo original de Tom Igoe: 
-- Switch statement with serial input 
-- 
-- Demonstrates the use of a switch statement. The switch 
-- statement allows you to choose from among a set of discrete values 
-- of a variable. It's like a series of if statements. 
-- 
-- To see this sketch in action, open the Serial monitor and send any character. 
-- The characters a, b, c, d, and e, will turn on LEDs. Any other character will turn 
-- the LEDs off. 
-- 
-- The circuit: 
-- * 5 LEDs attached to digital pins 2 through 6 through 220-ohm resistors 
-- 
-- created 1 Jul 2009 
-- by Tom Igoe 
-- 
-- http://www.arduino.cc/en/Tutorial/SwitchCase2 
-- 
Modificaciones realizadas por José Antonio Castillo Rodríguez: 
+ pin actuable para control de estado manual modificables por variable (asignaPinAlimentacion) 
+ pin actuable para alimentación sensor modificables por variable (alimenSensor) 
+ 
+ cambio en los caracteres de control; nomenclatura de acciones: 
+ M -> activa el pin que alimenta el detector de estado manual; N -> desactiva el pin que alimenta el detector de estado manual 
+ OTRO VALOR -> envía una señal de error a través del puerto serie 
+ 
+ "a","b","c"... selecciona la placa como activa para poder recibir la siguiente orden; valor de activación definido por variable (selecPlaca) 
+ 
+ el pin de lectura del cambio de estado manual esta definido por variable (remotoPin) 
+ 
*/ 
// VARIABLE DE SELECCIÓN DE PLACA 
int inByte = 0; // almacena la lectura del puerto serie 
int selecPlaca = 'a'; // CTE-valor ante el CUAL se activa la placa en modo escucha 
boolean placaActiva = false; // indica si la placa está en modo escucha o no 
// VARIABLES RELATIVAS AL PIN 13 DE ARDUINO-UTILIZADO PARA LA COMPROBACIÓN DEL ESTADO MANUAL 
int asignaPinAlimentacion = 13; // CTE-indica el pin de la placa que alimenta el comprobador de estado manual 
boolean estadoPinAlimentacion = true; // encendido/apagado del pin que alimenta el comprobador de estado manual 
int remotoPin = 12; // CTE-selecciona el pin de entrada para comprobar cambios en el modo manual 
int remotoCambio = 0; // inicialización de la variable para leer en pin del cambio de estado manual 
boolean estadoManual = false; // indica el estado del control manual (false-> apagado manual; true-> encendido manual) 
boolean estadoManualPrevio = false; // almacena el estado del control manual en el ciclo anterior (false-> apagado manual; true-> encendido manual) 

void setup() { 
// initialize serial communication: 
Serial.begin(9600); 
// inicialización de los pines 
pinMode(asignaPinAlimentacion, OUTPUT); 
pinMode(remotoPin, INPUT); 
} 

void loop() { 
// comenzamos con el pin 13 encendido 
if (estadoPinAlimentacion == true) { 
digitalWrite(asignaPinAlimentacion, HIGH); 
} 
// lectura de la señal serie 
if (Serial.available() > 0) { 
int inByte = Serial.read(); 
if (placaActiva == true) { // si la placa está en modo activo pasa a actuar dependiendo de la lectura del valor de inByte 
switch (inByte) { 
// desconectar el pin 13 que alimenta al analógico 
// "N" desactiva el pin, "M" lo vuelve a activar 
case 'N': 
digitalWrite(asignaPinAlimentacion, LOW); 
estadoPinAlimentacion = false; 
// hay que enviar por serie el código "'placa'13OFF" 
Serial.print(selecPlaca, BYTE); 
Serial.print('1', BYTE); 
Serial.print('3', BYTE); 
Serial.print('O', BYTE); 
Serial.print('F', BYTE); 
Serial.print('F', BYTE); 
Serial.print(","); 
break; 
case 'M': 
digitalWrite(asignaPinAlimentacion, HIGH); 
estadoPinAlimentacion = true; 
// hay que enviar por serie el código "'placa'13ON" 
Serial.print(selecPlaca, BYTE); 
Serial.print('1', BYTE); 
Serial.print('3', BYTE); 
Serial.print('O', BYTE); 
Serial.print('N', BYTE); 
Serial.print(","); 
break; 
default: //cualquier otro valor leido envía señal de error 
// hay que enviar por serie el código "'placa'13err" 
Serial.print(selecPlaca, BYTE); 
Serial.print('1', BYTE); 
Serial.print('3', BYTE); 
Serial.print('e', BYTE); 
Serial.print('r', BYTE); 
Serial.print('r', BYTE); 
Serial.print(","); 
} 
} 
// caso que la placa esté en modo activo, se vuelve a modo escucha tras 
// haber ejecutado la orden correspondiente 
if (placaActiva == true) { 
placaActiva = false; 
} 
//******** SELECCIÓN DE LA PLACA *************************** 
//********************************************************************* 
// si la variable inByte se corresponde con la letra de la placa (la asignada a la variable selecPlaca en este caso) 
// la placa se pone en modo activo 
if (inByte == selecPlaca) { 
placaActiva = true; 
} 
} 
}

Con estos dos códigos, nos permirtirán activar el pin 13 cuando enviemos la orden "aM" (nodo "a"+orden "M") y desactivarlo cuando enviémos la orden "aN".

Todo este proceso de comunicación está basado en la información publicada en los siguientes enlaces:
Control de Arduino utilizando PHP:

http://www.mydarkmaterials.co.uk/2008/11/30/interfacing-php-with-the-arduino/

Configuración de Zigbee:
http://ladyada.net/make/xbee/arduino.html

Software de configuración de los chips Xbee:

Bueno, después de unas semanas en las que mis publicaciones realizadas sobre el sistema "functiodomo" habían decaído exponencialmente, puedo anunciar que a partir de la próxima semana esto cambiará, con lo que haré pública el resto de documentación (interconexiones, programación, evoluciones...) del proyecto.

La razón del parón que sufrieron las publicaciones es que me anunciaron que el proyecto "functiodomo" había sido preseleccionado entre los finalistas del concurso EmprendeGo, cuyo premio consistía en una colaboración con una empresa patrocinadora, en mi caso Nokia. Como me acaban de comunicar que no estoy al final entre los ganadores, no voy a depender del criterio de ninguna empresa externa y voy a poder continuar con el plan previsto de publicaciones.

Objetivo: desarrollar un sistema de automatización del hogar que sea la referencia del sector.

P.D.: Este fin de semana también abriré un hilo en la sección correspondiente de Home Automation del foro en inglés. Incluiré este hilo como enlace en ese otro nuevo hilo, por lo que es posible que empiecen a aparecer algunos comentarios en el idioma de Shakespeare :wink:

Sigo tus avances, a ver si hay alguna idea tuya que pueda meter en mi casa inteligente.

Muy pronto podré publicar la documentación de unas nuevas placas que estamos desarrollando para el sistema functiodomo. las PCB que estamos desarrollando son dos:

  • Una que engloba toda la parte de control (programable compatible con Arduino), transformador 220 VAC/9 VDC y comunicaciones inalámbricas por XBee. Todo en 60x65mm.
  • La otra es la que maneja la parte de potencia, siguiendo el esquema de la que he publicado en este foro. Tamaño 60x55 mm.

Adjunto una imagen del esquema de las placas en modo de conexión para 3 equipos independientes:

¿Cuál es el motivo de desarrollar estas placas? Pues porque necesitaba unas placas que me permitieran minimizar los errores de montaje, que fueran más compactas y que resultasen más económicas que la combinación de placas anteriores.

Conforme me sea posible, iré publicando más información, aquí y a través del blog: http://www.functiodomo.org

Después de un montón de tiempo sin participar en el foro, vuelvo para anunciar que estoy realizando los últimos test a las placas que he desarrollado por necesidades de intergración del sistema "functiodomo".

Características de la placa de control:

  • Placa 100% compatible con la plataforma Arduino.
  • Alimentación directa desde una toma de 220V AC+3 entradas de interruptor
  • Comunicación ZigBee integrada
  • Reprogramación "en caliente", esto es puede estar la placa conectada y simplemente conectando el cable de programación a la entrada de datos, se corta la comunicación con el módulo Zigbee y se actúa directamente sobre el chip ATMEGA168
  • Dimensiones de la placa 65x60x25 mm
  • Posibilidad de conexión de hasta 3 placas de potencia para control de 3 equipos de forma independiente.
  • Posibilidad de conexión de 2 sensores junto con las 3 placas de potencia.

Características de la placa de control:

  • Capacidad para comportamiento como conmutador de cualquier sistema eléctrico de encendido y apagado
  • Conexión directa, sin cableado, a las nuevas placas de control del sistema functidomo
  • Esquema eléctrico idéntico al de las placas anteriormente descritas en este foro.
  • Dimensiones 40x60x20 mm

He realizado estas placas porque las necesito para la industrialización de nuestro sistema "functiodomo", pero soy consciente de que pueden ser usadas para diferentes y variadas aplicaciones. Mi intención es no sólo utilizarlas para nuestro sistema, sino que si alguien está interesado en adquirirlas para sus propios desarrollos, pues encantado de poder proporcionárselas. Así que vamos a comenzar a vender las placas de forma independiente.

En cuanto termine los test, subiré imágenes y vídeos de las mismas.

Castillo me parece muy interesante tu proyecto, tengo que repasar detenidamente el planteamiento, porque no termino de entender las ventajas de trabajar con la opción Automático/Manual tal y como se emplea en la industria, en la domótica por no existir peligro alguno para el usuario se suele trabajar en un modo combinado sin hacer distinciones. A primera vista, el esquema que publicaste del conmutador necesitabas tres relés cuando con un solo relé biestable es suficiente con lo que reducirá el coste de las placas algo indispensable si quieres que tu sistema desbanque a otros ya consolidados y de reconocidas marcas.
Yo por ahora estoy intentado aprender al máximo sobre Arduino porque necesito desarrollar un sistema de control remoto muy economico, así que de momento estoy en la "escuela", pero si necesitas mi ayuda estaré encantado de ayudarte, llevo 10 años haciendo instalaciones con KNX y alguna que otra automatización industrial.

Suerte campeón!!!

Llevo 10 años haciendo instalaciones con KNX y alguna que otra automatización industrial.

Esto son palabras mayores. Una casa domotica de 100 m2 cuanto sale domotizarla con KNX?

Flico la domótica no se presupuesta como la pintura, por metros, sino por instalaciones. Cuantos circuitos y tipo de alumbrado, persianas, climatización y seguridad fundamentalmente.

hola , me apunto al hilo que es intresante
salu2

LorDOS:
Castillo me parece muy interesante tu proyecto, tengo que repasar detenidamente el planteamiento, porque no termino de entender las ventajas de trabajar con la opción Automático/Manual tal y como se emplea en la industria, en la domótica por no existir peligro alguno para el usuario se suele trabajar en un modo combinado sin hacer distinciones. A primera vista, el esquema que publicaste del conmutador necesitabas tres relés cuando con un solo relé biestable es suficiente con lo que reducirá el coste de las placas algo indispensable si quieres que tu sistema desbanque a otros ya consolidados y de reconocidas marcas.

Yo por ahora estoy intentado aprender al máximo sobre Arduino porque necesito desarrollar un sistema de control remoto muy economico, así que de momento estoy en la "escuela", pero si necesitas mi ayuda estaré encantado de ayudarte, llevo 10 años haciendo instalaciones con KNX y alguna que otra automatización industrial.

Suerte campeón!!!

El sentido de trabajar con los modos automático/manual es que como principio de diseño del sistema, éste se tenía que poder añadir a cualquier elemento de una instalación ya existente, sin necesidad de sustituir nada (ni tan siquiera los interruptores). De esta forma, la clave del diseño del sistema es el desarrollo de "conmutadores electrónicos" que convirtieran los interruptores clásicos en conmutadores pero sin cambiarlos.

Otro principio importante era que ante fallo electrónico o de comunicaciones, la instalación debía seguir funcionando de forma trasparente, como si toda la placa se comportara como un cable.

Por todo esto uso 3 relés. Uno para poner el equipo en modo automático o dejarlo en manual, otro para dar el paso a la corriente cuando el equipo está en modo automático, y otro (éste realmente no es un relé pero lo simula) para detectar el cambio de estado del interruptor manual y cambiar el modo de operación de la placa a modo manual.

Lo de utilizar un relé biestable tendré que analizarlo, pues sinceramente, no conozco bien su función.

En cuanto a lo meterte en el mundo arduino, sólo puedo felicitarte por tu elección.

¡Ah! y gracias por el piropo :slight_smile:

flico:

Llevo 10 años haciendo instalaciones con KNX y alguna que otra automatización industrial.

Esto son palabras mayores. Una casa domotica de 100 m2 cuanto sale domotizarla con KNX?

En mi opinión, la domótica no termina de despegar a causa de los costes de todo los que no son componentes. En una instalación lo caro es toda la obra y cambios que conlleva modificar una vivienda, oficina, comunidad que no está pensada para añadir ningún elemento de control o sensor externo a lo incluido en la obra original.

Las solución que he desarrollado sale a nivel de hardware más cara que otras ya existentes (aunque con las nuevas placas que estoy probando puede que no tanto), pero donde se va el precio en otras soluciones es en su implantación, bien por la obra que conlleva o por los cambios de los equipos.

De todas formas, para más exactitud, en la web de functiodomo subiré próximamente un catalogo con precios.

Hola que tal.

Me gustaria antes que nada felicitarte por tu proyecto, parece que a muchas de las ideas que se proponen con arduino les falta exactamente lo que tu hiciste, es decir la concepcion de un producto orientado al usuario final.
Me parece mas aun mas apluadible el hecho de que asimilaras el modelo de negocio basado en herrmientas libres y que lo aplicaras a tu empresa.
Saludos

edmakhuit:
Hola que tal.

Me gustaria antes que nada felicitarte por tu proyecto, parece que a muchas de las ideas que se proponen con arduino les falta exactamente lo que tu hiciste, es decir la concepcion de un producto orientado al usuario final.
Me parece mas aun mas apluadible el hecho de que asimilaras el modelo de negocio basado en herrmientas libres y que lo aplicaras a tu empresa.
Saludos

Gracias por tu comentario. Realmente yo lo único que hago es coger un montón de recursos disponibles, "pegarlos" y añadir una pequeñísisma contribución de cosecha propia. Pero si se mira con perspectiva eso es lo que hacen el 99,99% de las empresas... aunque no se reconozca. :wink:

Aprovecho para comentar que lamento no estar más activo en éste y otros foros, pero he tenido unas semanas en las que he estado en otros asuntos. A ver si puedo retomar el tema para que el sistema crezca y se desarrolle, y pueda seguir aportando a la comunidad.

Ya tengo las nuevas placas que he desarrollado para el sistema Functiodomo. En estos momentos estoy en proceso de pruebas de las mismas.

Adjunto algunas fotos:

http://www.flickr.com/photos/functionars/7690141718
Placa de control compatible con la plataforma Arduino. Integra transformador para conexión directa a la red de 220 VAC y módulo de comunicaciones XBee.

http://www.flickr.com/photos/functionars/7690141294
Conjunto para el control de 1 equipo y lectura de 2 sensores.

http://www.flickr.com/photos/functionars/7690142292
Conjunto para el control de 1 equipo y lectura de 2 sensores. Vista trasera

http://www.flickr.com/photos/functionars/7690141526
Conjunto para el control de 2 equipos y lectura de 4 sensores.

Imgur
Conjunto para el control de 3 equipos y lectura de 6 sensores.

En cuanto las tenga comprobadas, subiré la documentación completa de las mismas.

NOTA: Lamento haber tenido que poner los enlaces a Flicker. Mi intención que se vieran las fotos directamente en el foro. En cuanto pueda solucionaré este problema.

Muy buena pinta, Felicidades

Que medidas tienen los modulos?

flico:
Muy buena pinta, Felicidades

Que medidas tienen los modulos?

Hola flico:

Las medidas de las placas son:

Para el control de 1 equipo: 117x65x25 mm
Para el contro de 2 equipos de forma independiente: 168x65x25 mm
Para el control de 3 equipos de forma independiente: 225x65x25 mm

Éstas son las medidas de las placas. Las medidas de la caja que las va a contener, las mostaré tan pronto como pueda pues todavía las tengo en fase de preproducción

Fotos de las nuevas placas del sistema functiodomo.

Bueno, como había comentado anteriormente, mi intención era mostrar las fotos de las placas directamente en este foro. Ahora ya estoy en condición de hacerlo:


Placa para el control independiente de 3 equipos y la conexión de hasta 6 sensores


Placa para el control independiente de 2 equipos y la conexión de hasta 4 sensores


Placa para el control de 1 equipo y la conexión de hasta 2 sensores

También podemos ver de forma individual la placa que se encarga del control, la alimentación y las comunicaciones inalámbricas de cada uno de los módulos. Esta placa, como ya he explicado es 100% compatible con la plataforma Arduino y tiene características propias como son la alimentación a 220 VAC o las salidas digitales a 12 VDC:

P.D.: ¿Alguien sabe si es posible publicar las imágenes en el foro escaladas para que aparezcan tan enormes? Por el bien de nuestras retinas, please help =(

Nuevas placas del sistema functiodomo pasan a producción. Comienzo con la fabricación de la preserie final.

Ya he realizado todas las pruebas a las placas que había recibido para test, y tras unos problemas con la detección del estado del interruptor y con la posición de un conector, ya son completamente operativas.

Las características finales de las placas permitirán con un única placa de control 100% compatible con la plataforma Arduino, poder controlar hasta 3 equipos de forma independiente y detectar las señales de hasta 6 sensores.

Dentro de poco detallaré todas las características del conjunto y cuando haya certificado la preserie publicaré bajo licencia abierta la documentación correspondiente al diseño de éstas.

Nuevas imágenes de las últimas placas con sus carcasas.

Adjunto un par de imágenes del conjunto del sistema functiodomo para el control de 3 equipos independientes:

En este caso podemos ver la caja abierta con toda la electrónica junto con un sensor de temperatura

Aquí tenemos el mismo conjunto pero una vez cerrado.

He sacado la foto junto al mando a distancia para que se pueda apreciar las dimensiones del equipo.

Muy pronto publicaré las especificaciones de cada componente del sistema.

Hola a todos. Después de un largo tiempo sin actualizar este hilo vuelvo para contar las novedades de nuestro sistema.

La primera de todas: hemos abierto una tienda online con todos los componentes relativos al sistema functiodomo. El enlace es:

http://www.functiodomo.com/eshop

Hemos dividido la tienda en 4 secciones principales:

  • sistemas (sistemas functiodomo completos para conectar y funcionar)
  • módulos (componentes de functiodomo pensados para ampliación de instalaciones previas)
  • desarrollo (componentes del sistema pensados para su uso por la comunidad, para sus proyectos propios, bien relativos a functiodomo, a la domótica en general u a cualquier otro campo)
  • informática (complementos informáticos relacionados con las instalaciones domóticas functiodomo)

Bueno, supongo que la parte que puede ser más interesante en este foro es la de desarrollo. Ahí vendemos las placas que hemos desarrollado para nuestro sistema. Como ya hemos publicado anteriormente, las placas de control (las hemos llamado ACduino) son 100% compatibles con las placas Arduino Duemilanove con los siguientes "pluses"

  • nuestras placas se conectan directamente a la corriente alterna de 220V
  • ya contienen integrado lo todo lo necesario para conectarles un chip XBee para la comunicación inalámbrica
  • se puede reprogramar sin necesidad de desenchufarlas de la alimentación ni quitarle el chip de comunicaciones (algo muy útil cuando un equipo esta ya instalado y no contiene el programa correcto o hay que ajustar algún parámetro del mismo, de verdad)

Supongo que todo el mundo nos dirá que falta documentación... y tendrá razón. Hemos preparado en marco para poder vender los productos y ahora vamos a ir rellenado las fichas de contenido, empezando por la documentación técnica de las placas, esquemas de las mismas y ejemplos de código Arduino para las diferentes funciones en el sistema. A lo largo de esta próxima semana esperamos poder ir aportando esta información.

A todo aquel que le apetezca pasar por la tienda online, echarle una ojeada y mandarnos comentarios a través de este foro o a través del formulario de contacto de la misma web.. pues encantados y agradecidos.

A todo aquel que esté interesado en alguno de nuestro productos para un proyecto propio o una instalación... bienvenido. Esperamos poder estar a la altura y si surge alguna duda poder contestarla lo antes posible.

Continuaremos publicando nuestras novedades en el foro...