Tutorial: Control de Arduino con el móvil por Internet

Este tutorial también esta en mi página web (en cosas Arduino) con imágenes aclaratorias.

Visto el interés que hay por el control de Arduino vía Internet con el móvil, me he permitido hacer este pequeño tutorial que espero pueda ayudar a algún principiante.
Lo que se trata es poder activar una o más salidas digitales del Arduino por medio de un ordenador o un móvil. Esto permitiría actuar sobre luces, motores, alarmas, climatización, etc… desde cualquier distancia con un ordenador o un móvil con conexión de datos.
La solución se divide en varios apartados.

1.-Hardware: En plan básico, necesitamos un Arduino Uno y una placa Ethernet (Ethernet Shield W5100). Hay otros tipos de placas e incluso soluciones Wifi. Para el ejemplo, conectamos la placa al router y en el pin 4 un diodo LED con su resistencia.

2.-Programa Arduino:
-byte ip[] = { 192, 168, 1, 15 }; Aquí con 15 definimos la IP interna. Puede ser cualquier valor hasta 254, siempre que no esté ocupada por otro dispositivo.
-byte gateway[] = { 192, 168, 1, 1 }; Es la IP de nuestro router. A veces es 192.168.0.1 y habría que cambiar la IP interna con el cero.
-EthernetServer server(100); Es el puerto por el que queremos acceder a la IP. Podemos usar el que queramos.
-Lo siguiente es generar una página básica para enviar los comandos de ON y OFF sobre el pin 4 y su detección para actuar en consecuencia.
¡Ojo! En la página aparece “Estado: Activado o Desactivado”, esto no nos asegura que la función se haya realizado, para ello tendríamos que hacer una programación con retorno a la página que garantizase la acción.

3.-Acceso desde LAN: Cargado el programa en nuestro Arduino solo nos queda cargar en nuestro navegador o móvil (con wifi) la página generada. Tendremos que teclear 192.168.1.15:100 y veremos dos botones de ON y OFF. Al pulsarlos se envían los comandos 192.168.1.15:100/?lighton=ON o 192.168.1.15:100/?lighton=OFF que encenderán o apagarán el LED. En realidad el programa solo lee la palabra lighton y lightoff para la conmutación.

4.-Acceso desde Internet: El punto peliagudo para muchos es configurar el router y la IP externa.
Cada router es diferente. Tenemos que buscar el lugar donde se redirigen los puertos a cada IP interna. En mi router Comtrend está en la opción Virtual Server, ahí decimos que IP vamos a direccionar y que puerto interno y externo a nuestra LAN.
Más problemático es el tema de la IP externa. Si tenemos IP fija, estupendo. Basta con poner en un PC o móvil con tarifa de datos http://MyIP:100 y asunto resuelto. Con IP variable tendremos que contratar un servicio del tipo http://es.dyn.com/remote-access

P.D. Por dificultades “técnicas” para utilizar la llave, este sistema se usa para abrir el portón del edificio. El Arduino (con módulo Wifi HLK-RM04) está conectado a los cables del fonoporta, en Android hay un programa (escrito en Basic4Android) que envía el comando de apertura durante 3 segundos. En realidad el sistema se activa acercando el móvil a una etiqueta NFC estratégicamente situada.

Jopapa
www.jopapa.me

1 Like

me parece muy útil como primeras pruebas en el tema. Pero de esta manera todo el mundo quien sabe la ip o url tiene acceso y puede activarlo.

Es imprescindible añadir al menos Basic Autentication para un mínimo de seguridad,.

1 Like

Buenas, perdon por usar el tema abierto. En caso de molestias al OP creare uno nuevo. Tambien estoy enfrascado en el control de un pequeño invernadero via ethernet, pero mi duda es la siguiente. Tengo una pequeña web html y dos conexiones diferentes dentro de arduino. Una es para mostrar un cuadro con variables ambientales en un iframe de la web y el segundo lo quiero para que a traves de la web poder enviar variables para definir horarios de riego, temperaturas maximas y minimas para activar la ventilacion, ect ect. Alguien tiene alguna idea de como podria hacerse? ( el tema del cuadro de variables esta terminado, pero nose como enviar las configuraciones desde la web a arduino) Un saludo y muchas gracias

con esta escasa información no se puede recomendar mucho. Describelo un poco más detallado y añade el sketch.
¿Que hardware estas usando?
¿con "traves de la web poder enviar variables" a que te refieres? ¿desde tu movil, p.e.?

Un pequeño croquis tampoco estaría mal.

el skecht lo tengo al completo en obras.. jajaja. A ver lo primero uso, arduino UNO (posibilidad de ampliar a mega), ethernet shield, un sensor humedad/ temperatura DHT22, tambien necesito controlar una salida a 220V con un optoacoplador y un triac; y 3 ventiladores, 2 PWM y uno sin control de velocidad. Todo eso es para controlar un invernadero, cosa que podria hacerlo autonomo en un sketch y fuera. La cosa esta en que por trabajo estoy temporadas fuera de casa y me gustaria poder controlarlo via web. Probe haciendo un servidor web con arduino pero se cuelga con facilidad si se le mete mucha carga, entonces cree una pagina web en un servidor externo con dos iframes y un menu. En uno de los iframes simplemente muestro un cuadro con todos los datos, humedad, temperatura, si estan conectados o no los diferentes sistemas. ( lo envio desde un server creado en arduino expresamente para mostrar el cuadro con los datos) Y ahora el quid de la cuestion, para poder controlarlo en el otro iframe muestro paginas usando el menu, por ejemplo la de temperatura despues de pulsar su correspondiente menu, en el iframe se muestran varias opciones, entre ellas definir valores maximos y minimos( lo cual controlaria la extraccion del invernadero para controlarla). La idea/duda principal es esa, como podria yo enviar esos datos al arduino via http y que arduino tomara esos datos para establecerse ciertos valores ( tempratura maxima y minima, humedad maxima y minima, humedad en los tiestos para activar riego, ...ect ect) Muchisimas gracias ante todo y si alguno esta tan interesado como yo aunque sepa menos que yo, si entre todos podemos sacar algo en claro lo dejaremos aqui tambien para toda la comunidad

  1. coje un Mega. Tienes suficiente Flash y 2 veces más RAM
  2. no te compliques la vida con iframes. Va todo bien en un Mega.
  3. Mira en internet por "Arduino server basic autentication" para por lo menos poner un pequeño candado.
  4. Los valores transfieres con "get" en la url como parametros.
  5. Mira ejemplos sencillos de encender y apagar un LED por la web
  6. No olvides un boton para guardar todo en el eeprom para que el Arduino no olvida sus datos con cortes de luz.
  7. Haz todo por partes, y si tienes todas las partes, combinalo.

Para arreglar los ventiladores con PWM, existe una libreria "PID", es para arreglar cosas, muy generica. No tengo experiencia practica con ella, pero es la aplicación para tu caso.

En vez de optoacoplador y un triac existen Relés digitales, pero ojo, no es tan facíl arreglar potencia en AC.

Es un proyecto bastante complejo para empezar con Arduino. Son muchas horas de buscar en Internet y aprender.

yo quisiera que me colaboraran es como enviar por el ethernet shield datos almacenados en una variable, me muestra errores

ATENCIÓN: Categoría '' en librería UIPEthernet no es válida. Configurando a 'Uncategorized'

ATENCIÓN: Categoría '' en librería UIPEthernet no es válida. Configurando a 'Uncategorized'
X:....\estado_led_eth\estado_led_eth.ino:2:23: fatal error: UIPEthernet: No such file or directory

#include

^

compilation terminated.

exit status 1
Error compilación en tarjeta Arduino Nano.

Carlos! Este no es el lugar apropiado para preguntar, reformula tu pregunta en Software, por favor.
Y pon más datos que el simple mensaje de error del IDE.
Saludos!