Control domotico con servidor integrado en el arduino

Tengo este codigo en el arduino (dejo el pde aqui en el post ojala tambien ayude a alguien que este en mi caso). Esta montado en un arduino duemilanove/UNO con una eth shield con el chip ENC28J60 (la mas economica del ebay). Tambien tengo un PDE funcional con la eth shield con wiznet (la que venden origianl de arduino) si alguien la necesita me lo dice y la posteo (cuando termine mi proyecto lo posteare todo).

Me he echo una web html donde controlar todos los arduinos para juntarlo todo el dia que toque, ahora por ahora solo es una prueba.

Mi duda es se puede añadir unos casos mas para por ejemplo en ciertos pins del arduino decirle activalo 4 segundos cuando haga el click y luego desactiva otra vez?

Seria para tener un boton para poner la persiana electrica en el centro de su recorrido, el delay no se cual seria eso lo veria cuando tenga la persiana montada.

Haber si un alma caritativa me puede modificar para que vea como seria. He echo alguna prueba y no me salgo con la mia y eso que me da la sensacion que es un fallo tonto XD

Gracias a todos por vuestra colaboracion!!

srvidor_domotic_amb_eth_barata.pde (14.9 KB)

He estado trasteando, veo que no me funcionaba por culpa del buffer (lo averigue a base de leer por el antiguo foro, pero no entiendo muy bien de que va).

Para que me funcionase quite la web que escribe el arduino cuando pones su ip y asi me deja poner mas botones, sino no me dejava.

Estoy intentando poner un delay en alguno de los casos y veo que si pongo un delay de 1000ms realmente me hace esperar 3000ms es porque hago mal en ponerlo asi?

Este es el codigo para hacer que se enciendan los reles:

case 'K': //el caso K y L son los funcionales normales que van al instante si hago click en la web que me he echo on_off6=1; digitalWrite(SW6, HIGH); // switch on LED6 break; case 'L': on_off6=0; digitalWrite(SW6, LOW); // switch off LED6 break; case 'M': //aqui simplemente quite el break y caso N poniendo un delay en medio. on_off7=1; digitalWrite(SW7, HIGH); // switch on LED7 // break; //case 'N': delay(1000); //on_off7=0; digitalWrite(SW7, LOW); // switch off LED7 break;

Que soluciones pueden haber?

te dejo la misma versión del PDE pero modificada para que quede algo más clara:

  • no le paso argumentos a la función print_webpage (son variable globales) así si modificas algo en el programa no tienes que estar cambiando la función.
  • he quitado algún switch a cambio de ver variables analógicas
  • le buffer lo he subido a 1600 (más de daba problemas)
  • he puesto un debugger para ver si me paso o no en el tamaño del buffer

Me queda pendiente saber algo más de HTML. Si la página se hace más simple, se podrían ver más cosas.
En mi opinión es el mayor limitante

Estoy viendo otras liberías que haces más amigable programar la ethershield, pero cada una tiene sus “pijadas” y no hay tiempo para todo.

switch_6_Paco.rar (3.53 KB)

bokeauss: Pues no utilizarlo o realizar la comunicacion cuando no tengas que contar tiempo. En la referencia de arduino hay algun documento sobre esto.

Amph, no entiendo a la que te refieres (piensa que soy un novato total :P)

pacojarcia:
te dejo la misma versión del PDE pero modificada para que quede algo más clara:

  • no le paso argumentos a la función print_webpage (son variable globales) así si modificas algo en el programa no tienes que estar cambiando la función.
  • he quitado algún switch a cambio de ver variables analógicas
  • le buffer lo he subido a 1600 (más de daba problemas)
  • he puesto un debugger para ver si me paso o no en el tamaño del buffer

Me queda pendiente saber algo más de HTML. Si la página se hace más simple, se podrían ver más cosas.
En mi opinión es el mayor limitante

Estoy viendo otras liberías que haces más amigable programar la ethershield, pero cada una tiene sus “pijadas” y no hay tiempo para todo.

No tienes problemas si utilizas todos los pins digitales? yo he modificado el pde que posteaisteis para controlar los pins 2 a 9 que estan libres de la duemilanove/uno y si no quito la web se queda pillado, haciendo una web externa puedo controlar todo bien, pero tengo el problema (solo es problema dependiendo de para que lo tenga que usar en el caso actual da igual, este proyecto solo sera para subir/bajar persianas y encender luces), tengo que mirar si toca la moral si pongo LDR’s y LM35’s para mirar temperaturas y otras funciones como abrir cerrar persianas cuando es de dia o noche, o le da el sol en verano/hinvierno.

Pero una cosa que me pica mucho ahora es el tema de usar RS o canbus (para mi aun es chino esto) porque veo que todo el mundo se decanta por alla y no se porque :stuck_out_tongue:

Gracias a todos por vuestros aportes, poco a poco voy aprendiendo jejejeje

Yo acabo de conectar el arduino haciendo un bus RS485 con el integrado MAX485 (2,5€). el el PC uso un coversor RS232-RS485. He usado varias aplicaciones para monitorizar los puertos. Tambíen he conseguido comunicar el arduino con un software comercial de medición de consumos de energía de Circutor (Power Studio). Esta parte es la que más tiempo me ha llevado, porque aunque funcionaba el bus, no comunicaban. El problema es el Power Studio solo usaba la función 4 para leer el Arduino y esa función no estaba implementada. En el PDE cambié la función 3 por 4 y todo ha ido muy bien. La ventaja del Modbus es que con 2 hilos sin muchas historias puede comunicar equipos a mucha distancia. En donde trabajo tengo equipos Circutor a distancias de 400m en un ambiente industrial sin problema.

pacojarcia: Yo acabo de conectar el arduino haciendo un bus RS485 con el integrado MAX485 (2,5€). el el PC uso un coversor RS232-RS485. He usado varias aplicaciones para monitorizar los puertos. Tambíen he conseguido comunicar el arduino con un software comercial de medición de consumos de energía de Circutor (Power Studio). Esta parte es la que más tiempo me ha llevado, porque aunque funcionaba el bus, no comunicaban. El problema es el Power Studio solo usaba la función 4 para leer el Arduino y esa función no estaba implementada. En el PDE cambié la función 3 por 4 y todo ha ido muy bien. La ventaja del Modbus es que con 2 hilos sin muchas historias puede comunicar equipos a mucha distancia. En donde trabajo tengo equipos Circutor a distancias de 400m en un ambiente industrial sin problema.

Si se comunican con dos hilos, si el segundo aparato se estropea cae el tercero y cuarto? o el hilo va unido del inicio al fin y pueden estropearse los que sean que cuelgan de el sin afectar al resto?

Oye pacojarcia, ese sistema que usas de comunicación, se puede usar a su vez como alimentación también, o no ¿?

Y si estan todos en serie, si se cae uno, tira la comunicación del resto ?¿?

Un saludo

pacojarcia, molaria que hicieses una explicacion de tu proyecto con modbus, codigo, como has cableado,... Podrias integrarlo en el blog en espanyol de Arduino, no?? Para dar un empujoncito al material en espanyol.... :D

Yo hace tiempo escribi esto sobre el RS485 en castellano => http://real2electronics.blogspot.com/2009/09/buses-de-campo-para-arduino-rs485.html

Es estructura de bus, por lo que si "rompes" dicho bus.... estas "muerto". Lo de si se cae uno, no lo entiendo muy bien.....

Lo mejor es "actualizarse" a CAN, que tiene muchas mas ventajas, y no hay mucha diferencia de precio.

Salu2

Igor R.

Con lo de si se cae uno, me refiero a que si se quema el arduino del centro por ejemplo, deja de haber comunicacion con los que tiene detras.

Segun lo que le pase al driver, que es el dispositivo que se conecta entre el Arduino y el bus.

Te pongo un diagrama como se cablea un bus CAN (que es similar al rs485):

Ok, veo que van con "Y" asi que el cable que pasa de un arduino a otro no esta separado entre los dos extremos.

Tendre que estudiarmelo, por ahora se que cableando MAS (ethernet shield sin complicarme la vida pero tirando un cable a cada arduino) puedo hacerlo ahora lo que falta es intentar enteder como usar RS-485 o CAM que aun no tengo claro como funcionaria en una instalacion domotica ni que diferencias de programacion en el arduino habra.

Bufff, no se que hacer si quedarme con lo que estoy ahora o intentar cambiar mi "chip" y ir a por el bus.

FAQ de http://secuduino.blogspot.com/ esta todavia calentito!!! recien sacado del horno!!

Tambien puedes usar rs485/can para el control, y luego tener uno de ellos que tenga ethernet para monitorizar por web.

Si quieres tener varios modulitos distribuidos, lo mas sencillo a mi manera de ver es Can bus.

Una pregunta que no he echo podeis explicarme que mejoras hay con can o 485 a que use eth shield (aparte del tema de la facilidad del cableado).

Mi proyecto no es gran cosa, control de ventanas, puertas... algun sensor de movimiento, temperatura/humedad...

Cuantos dispositivos vas a tener? Me refiero, que si solo tienes un Arduino que controla todo y la ethernet es para hacer una web embebida que controle las e/s, vas bien como estas. Rs485 o Can es para si vas a hacer una red de Arduinos....

Lo quiero hacer es con 2 o 3 arduinos tengo de sobras bueno con un mega realmente podre hacer mucho, y lo que he leido de los bus creo que me complico la vida por 2 cables que tenga que pasar de mas (que =mente tengo que cablear con red toda la casa con red pk no dejare un rincon sin cable y sin wifi).

Solo quiero controlar persianas, luces, puertas... cosas muy basicas, monitorear temperaturas y cosas asi es segundario pero veo que igualmente con el sistema que utilizo se puede hacer sin problemas.

Si lo puedes hacer. Lo único que tienes que tener un Hub/router, tienes que hacerte un protocolo maestro-esclavo, ... Aunque esto ultimo también te lo tendrías que hacer con rs485. Con can bus, esto ya te viene implementado, y no es un protocolo orientado a maestro-esclavo, si no al mensaje (todos los dispositivos "escuchan" todo y son ellos mismos los que deciden si usan la información o no).

Siempre hay muchas maneras de afrontar un proyecto. Lo bueno de una estructura en bus, que te será muy facil añadir nuevos elementos. Con ethernet, pues tienes que poner un hub una vez que tengas todo el cableado si quieres añadir un nuevo módulo en la habitación/jardin/etc dónde tenias uno previamente... No sé si me explico, ethernet es poco "escalable". Una estructura en bus te permite tener un alto grado de flexibilidad para ir añadiendo/quitando elementos. Ya que si te haces una "Y" en cada dispositivo, tan solo es enchufarlo y a funcionar!!

Ya sabes, que empiezas con 3 y te terminas liando...ja,ja,ja

A gusto del consumidor!!! Mi humilde opinión, con bus CAN es muy fácil de mantener y luego uno de los dispositivos que tenga shield ethernet (o un router linux con openwrt) para el tema "visualizacion" por una página web.

;)

[quote author=Igor R link=topic=51730.msg370779#msg370779 date=1297513726] Si lo puedes hacer. Lo único que tienes que tener un Hub/router, tienes que hacerte un protocolo maestro-esclavo, ... Aunque esto ultimo también te lo tendrías que hacer con rs485. Con can bus, esto ya te viene implementado, y no es un protocolo orientado a maestro-esclavo, si no al mensaje (todos los dispositivos "escuchan" todo y son ellos mismos los que deciden si usan la información o no).

Siempre hay muchas maneras de afrontar un proyecto. Lo bueno de una estructura en bus, que te será muy facil añadir nuevos elementos. Con ethernet, pues tienes que poner un hub una vez que tengas todo el cableado si quieres añadir un nuevo módulo en la habitación/jardin/etc dónde tenias uno previamente... No sé si me explico, ethernet es poco "escalable". Una estructura en bus te permite tener un alto grado de flexibilidad para ir añadiendo/quitando elementos. Ya que si te haces una "Y" en cada dispositivo, tan solo es enchufarlo y a funcionar!!

Ya sabes, que empiezas con 3 y te terminas liando...ja,ja,ja

A gusto del consumidor!!! Mi humilde opinión, con bus CAN es muy fácil de mantener y luego uno de los dispositivos que tenga shield ethernet (o un router linux con openwrt) para el tema "visualizacion" por una página web.

;)

[/quote]

No entiendo porque necesitaria un hub/router, mi idea es que cada arduino sea totalmente independiente de los demas ocupandose cada uno de una tarea distinta donde no tiene que tomar datos de otro arduino para tomar una decision. Si lo hago como comento lo ves factible?

Imagina que pones un Arduino+Ethernet en el salón, que va a controlar las persianas, luces, temperatura,.... y de aqui a un tiempo, te encuentras con la necesidad de poner otro Arduino para hacer una alarma (es un decir). Para conectarlo a la red creada con ethernet, necesitas poner un hub/router en dicha habitación (a no ser que quieras volver a pasar rozas por toda la casa.... ;). O conectarlos entre ellos con otro tipo de comunicación. no??

Por otro lado, si van a ser totalmente independientes, para que quieres conectarlos en red??? (ahí me he perdido).

Anyway, hay tienes las distintas opciones, elige la que quieras...

:)