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

riscking:
Hola castillo14 a ver si me compro una ethernet shiel para probar, a mi me gustaria probar a programar la web en ajax,jquery o similar para q no haga falta refrescar la pagina cada vez que hay un cambio de estado, has probado tu algo de esto? Alguna ethernet shiel q recomiendes? O son todas parecidas?

Yo no utilizo ninguna ethernet shield en mi sistema ya que la comunicación la realizo por XBee. Si te sirve la información, yo la placa que uso es la siguiente:
http://www.cooking-hacks.com/index.php/shop/arduino/wireless/communication-shield-xb-bt-rfid.html

Cuando yo me comunico con las placas, no lo hago con una dirección IP, sino que utilizo una codificación tal que cuando una placa detecta que hace referencia a ella, se pone en modo "escucha" y ejecuta la acción que contiene la orden. Peferí utilizar una codificación específica porque así hacía independiente el equipo a controlar del chip de comunicación, el equipo está vinculado a la programación del chip arduino.

De todas formas, en los próximos días publicaré el código que he programado también.

En cuanto a la programación de la aplicación web con Ajax, esa es la forma que he seleccionado yo también para hacerlo (mejor o peor según los gustos). El núcleo del sistema es PHP+MySQL (aunque tengo que ver si no me conviene más usar SQLite) y el interface pues HTML+CSS.
Ventajas de esta arquitectura: funciona hasta en una bicicleta si tiene navegador de internet. Desventajas: Con entornos concretos (lease android, ios...) la transmisión de datos es menor pues no tendrás que transmitir las imágenes, pero por contra tienes que desarrollar una aplicación específica para cada plataforma.

Ventajas de esta arquitectura: funciona hasta en una bicicleta si tiene navegador de internet. Desventajas: Con entornos concretos (lease android, ios...) la transmisión de datos es menor pues no tendrás que transmitir las imágenes, pero por contra tienes que desarrollar una aplicación específica para cada plataforma.

No entendí la parte de la desventaja, se supone que si tenemos un interfaz web la cual contiene los módulos que se comunican con los actuadores.. esta puede ser accesada vía web desde cualquier plataforma no?

Enritux:

Ventajas de esta arquitectura: funciona hasta en una bicicleta si tiene navegador de internet. Desventajas: Con entornos concretos (lease android, ios...) la transmisión de datos es menor pues no tendrás que transmitir las imágenes, pero por contra tienes que desarrollar una aplicación específica para cada plataforma.

No entendí la parte de la desventaja, se supone que si tenemos un interfaz web la cual contiene los módulos que se comunican con los actuadores.. esta puede ser accesada vía web desde cualquier plataforma no?

La desventaja está en la rapidez del interface.
Con una aplicación web, el código tanto de las órdenes como del interfaz se envían desde el servidor, incluidas las imágenes que dan forma al aspecto de la aplicación

Con la aplicación específica de la plataforma móvil (lease androis o ios) todo el código e imágenes de la interfaz están almacenadas en el dispositivo móvil, con lo que sólo se transmiten los datos correspondientes a las órdenes que se envían desde/hacia el teléfono hasta/desde el servidor. El flujo de datos es menor y la velocidad del interfaz en mayor. Se eliminan los tiempos de carga del interfaz.

Para mí el núcleo del sistema siempre se trata de una aplicación web, en mi caso en PHP por cuestiones de portabilidad y documentación existente, pero para el interfaz se puede valorar qué es mejor, si rapidez y exclusividad, o por el otro lado, universalidad y un interfaz menos rápido.

Antes que nada dejame felicitarte, se ve increible Fuctiodomo, y te queria hacer una pregunta, como logras hacer el live streaming (tan fluido), to estoy intentando hacer un control de una webcam, pero me he estado dando de topes con el streaming, no consigo hacerlo fluido, me podrias hechar una mano con eso?..

de antemano gracias y denuevo esta increible...

eyoZ07:
Antes que nada dejame felicitarte, se ve increible Fuctiodomo, y te queria hacer una pregunta, como logras hacer el live streaming (tan fluido), to estoy intentando hacer un control de una webcam, pero me he estado dando de topes con el streaming, no consigo hacerlo fluido, me podrias hechar una mano con eso?..

de antemano gracias y denuevo esta increible...

El vídeo lo grabé haciendo un screencast de la pantalla del portátil desde donde interactuaba con el sistema. El portátil cliente y el servidor LAMP que contiene el sistema domótico estaban en la misma red wifi. En cuanto al programa de grabación, no recuerdo si usé Record My Destop o Istambul, pero seguro que fue uno de los dos, el que me fuera más sencillo de usar.

Hola que tal Castillo14, tengo el Arduino Uno R3 conectado con una USB a una maquina con Ubuntu y Xampp...

Al hacer las pruebas por el monitor serial del arduino todo funciona correctamente sin embargo
al quererle enviar los valores al arduino con la libreria php_serial.class.php no lo hace...

Podrías decirme si le hiciste alguna configuracion en el apache?.. ya que tampoco en windows logro hacerlo andar.

<?php

require ("php_serial.class.php");

$serial = new phpSerial();

$serial->deviceSet("/dev/ttyACM0");

$serial->confBaudRate(9600);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("none");

$serial->deviceOpen();

$serial->sendMessage('A');

$serial->deviceClose();
?>

Enritux:
Hola que tal Castillo14, tengo el Arduino Uno R3 conectado con una USB a una maquina con Ubuntu y Xampp...

Al hacer las pruebas por el monitor serial del arduino todo funciona correctamente sin embargo
al quererle enviar los valores al arduino con la libreria php_serial.class.php no lo hace...

Esta noche o mañana voy a publicar una entrada con el método que uso para comunicarme con arduino a través de PHP.

eyoZ07 también está teniendo problemas y creo que la solución que encontré es mucho más sencilla de lo que estáis intentando.

En un rato me pongo a ello.

Esta noche o mañana voy a publicar una entrada con el método que uso para comunicarme con arduino a través de PHP.

eyoZ07 también está teniendo problemas y creo que la solución que encontré es mucho más sencilla de lo que estáis intentando.

En un rato me pongo a ello.

Gracias..! una manera que me funcionó para conectarme al Arduino fue haciendo librerias en python las cuales son llamadas desde PHP...

Tambien intente con el comando exec pero auditando la velocidad de comunicacion me di cuenta que es mas rapido con python...

Estaré al tanto de tu entrada! :smiley:

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