Ir al contenido
Conéctate para seguir esto  
chujalt

Arduino. Controlar servo vía Wifi con módulo HLK-RM04

Recommended Posts

Saludos....

    En esta ocasión vamos a establecer el giro de un servo vía wifi desde una página web, por lo que podremos controlarlo desde un PC, tableta, smartphone, etc.


Materiales utilizados

  • Una placa Arduino (yo he utilizado la Uno).
  • 7 Cables dupont.
  • Un servo, yo he utilizado el de la imagen de mas abajo.
  • Un módulo wifi HLK-RM04.

 

 

servo.jpg

 

 

WIFI-HLK-RM04.jpg

 

 

Conexiones

  • Pin Rx del módulo HLK-RM04 al pin Tx de arduino.
  • Pin Tx del módulo HLK-RM04 al pin Rx de arduino.
  • Pin 5V del módulo HLK-RM04 al pin 5V de arduino.
  • Pin GND del módulo HLK-RM04 al pin GND de arduino.
  • Cable naranja del servo (datos) al pin 9 de arduino
  • Cable marrón del servo a pin GND de arduino.
  • Cable rojo del servo a pin 5v de arduino


    Lo que vamos a necesitar son dos clases de código. Por una parte una página web que estará en nuestro servidor web en la que tendremos el formulario con los grados (de 0 a 180) que queremos que gire el servo y el código para la placa arduino que recibirá la los grados de giro del servo.


Código página web, index.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//ES" "http://www.w3.org/TR/html4/strict.dtd">
<html>
 <head>
   <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
   <title>Control servo</title>
<style type="text/css">
#juan {
   position: absolute;
   left: 50%;
   top: 50%;
   transform: translate(-50%, -50%);
   -webkit-transform: translate(-50%, -50%);
}
</style>
 </head>
 <body>
<div id="juan">
<form action="http://192.168.1.254:8080/servo" method="get">
 
 <input type="submit" name="l" value="000">
 <input type="submit" name="l" value="005">
 <input type="submit" name="l" value="010">
 <input type="submit" name="l" value="015">
 <input type="submit" name="l" value="020">
 <input type="submit" name="l" value="025"></br>
 <input type="submit" name="l" value="030">
 <input type="submit" name="l" value="035">
 <input type="submit" name="l" value="040">
 <input type="submit" name="l" value="045">
 <input type="submit" name="l" value="050">
 <input type="submit" name="l" value="055"></br>
 <input type="submit" name="l" value="060">
 <input type="submit" name="l" value="065">
 <input type="submit" name="l" value="070">
 <input type="submit" name="l" value="075">
 <input type="submit" name="l" value="080">
 <input type="submit" name="l" value="085"></br>
 <input type="submit" name="l" value="090">
 <input type="submit" name="l" value="095">
 <input type="submit" name="l" value="100">
 <input type="submit" name="l" value="105">
 <input type="submit" name="l" value="110">
 <input type="submit" name="l" value="115"></br>
 <input type="submit" name="l" value="120">
 <input type="submit" name="l" value="125">
 <input type="submit" name="l" value="130">
 <input type="submit" name="l" value="135">
 <input type="submit" name="l" value="140">
 <input type="submit" name="l" value="145"></br>
 <input type="submit" name="l" value="150">
 <input type="submit" name="l" value="155">
 <input type="submit" name="l" value="160">
 <input type="submit" name="l" value="165">
 <input type="submit" name="l" value="170">
 <input type="submit" name="l" value="175"></br>
 <input type="submit" name="l" value="180">
</form>
</div>
</body>
</html>

    Este código lo que hace básicamente es crear un formulario con los grados que queremos que gire el servo y lo envía, por el método get, a la dirección ip de nuestro arduino.

 

 

grados.png

 

 

 

Código para la placa arduino:

#include <Servo.h> 
const int servo_pin = 9; 
Servo myservo;  
unsigned int old_value;
void setup() 
{ 
 Serial.begin(57600);
 myservo.attach(servo_pin); 
   old_value = 90;
} 

int f = 0;
void loop() 
{ 
boolean has_request = false;
 String in = "";
   if (Serial.available()) {
in = "";
   while (true) {  
      while (Serial.available() == false) {}
     in += (char)(Serial.read());
     if (in.endsWith("\r\n")) {
       has_request = true;  break;
     }
   }   
 }
 if (has_request) {
   char i1 = in.indexOf("GET /servo?l="), i2;
   if (i1 != -1) {
     i2 = in.indexOf(" ", i1+13);
     f = in.substring(i1+13, i2).toInt();
   }  
Serial.println("HTTP/1.1 200 OK");
   Serial.println("Content-Type: text/html");
   Serial.println("Connection: close");

   String sr = "<!DOCTYPE HTML>\n";
   sr += "<html>\n";
   sr += "<body onload='history.back();'>\n";    
   sr += "</body>";  
   sr += "</html>";
   Serial.print("Content-Length: ");
   Serial.print(sr.length());
   Serial.print("\r\n\r\n");
   Serial.print(sr);
  has_request = false;  
    
   if ((0 <= f) && (f <= 180)) {
         
      if (f < old_value)
       {   
      for(int i = old_value ; i > f ; i -= 1)
         {
         myservo.write(i);
         delay(15);
         }
         old_value = f;
       }
       
     if (f > old_value)
       {
       for(int i = old_value ; i < f ; i += 1)
         {
         myservo.write(i);
         delay(15);
         }
         old_value = f;
      }

   }  

 }
 delay(100);

}

    El código lo que que hace es cargar la librería necesaria, recoger en una variable el valor que le enviamos desde la página web, que será el valor de giro del servo. También crea una página web que lo que hace es volver al index.html desde el que le enviamos los datos.
    Mencionar que el script está preparado para que el giro del servo sea un poco mas lento de lo normal, que no gire muy rápido.

Compartir este post


Enlace al post
Compartir en otros sitios
Saludos....

 

Ahora te tocará instalarte la IDE de Arduino (creo que van por la 1.6.7) y las librerías de ESP-8266.

 

¿que Nodemcu te has pillado, la V2 o V3?

 

Yo me acabo de dar una grata sorpresa. El Nodemcu sólo tiene salidas de 3 voltios y los relés que tengo son de 5 voltios, pero los he probado y funciona. Ya me veo encendiendo el horno desde trabajo con el móvil para que cuando llegue a casa esté la comida calentita   :tongue:

Compartir este post


Enlace al post
Compartir en otros sitios

 

Saludos....
 
Ahora te tocará instalarte la IDE de Arduino (creo que van por la 1.6.7) y las librerías de ESP-8266.
 
¿que Nodemcu te has pillado, la V2 o V3?
 
Yo me acabo de dar una grata sorpresa. El Nodemcu sólo tiene salidas de 3 voltios y los relés que tengo son de 5 voltios, pero los he probado y funciona. Ya me veo encendiendo el horno desde trabajo con el móvil para que cuando llegue a casa esté la comida calentita   :tongue:

 

 

Es una v3 Lolin, lo del voltaje es una putada para modulos de Arduino como el detector de movimiento. Lo poco que se de Arduino lo he aprendido mientras esperaba que llegara

Ya he estado trasteando un poco con el ide de Arduino (paso de lua, C forever xD).  He tenido algun susto porque lo puse a una velocidad de 9600 (como ponia escrito detras) y se quedaba a mitad, cuando arrancaba soltaba un moton de caracteres irreconocibles sin parar, se ve que era el bootloader y retornaba a alguna velocidad que no soportaba el serial monitor de Arduino.

A partir de ahi prove a usar un led rgb (todo directo de China xD) cambiando el tono, ahora es crear alguna interfaz web donde establecer el color. Tambien quiero crear algun metodo para guardar en la memoria flash los datos de acceso y si no puede conectarse a mi wifi crear un ap wifi con una interfaz para cambiar el ssid y la pass.

 

La idea es tambien mencionarlo en mi TFG, estoy desarrollando una app Android para ancianos y seria una buena idea para un pastillero conectado a internet, con leds en las casillas (haria falta algo para añadir mas GPIO como un MCP23S17) en una matriz 3x7.

 

PD: una duda con los reles, me interesaria encender o apagar el motor de un pozo (raspberry y modulo 3G), no se ni cuanto amperaje requiere y si habria que mirar el tipo de relé

Editado por Cristobal

Compartir este post


Enlace al post
Compartir en otros sitios

Saludos....

 

Yo con el nodemcu he hecho poca cosa, lo tengo hace poco, tengo un script para encender un led desde la web, el mismo sirve para encender o apagar un relé, y modificándolo puede servir para mas cosas. está bien porque también le puedes asignar la ip que tu quieras, dentro del script, claro.

 

A ver si abro un nuevo hilo coneste script.

 

Saludos

Compartir este post


Enlace al post
Compartir en otros sitios

Registra una cuenta o conéctate para comentar

Debes ser un miembro de la comunidad para dejar un comentario

Crear una cuenta

Regístrate en nuestra comunidad. ¡Es fácil!

Registrar una cuenta nueva

Iniciar Sesión

¿Ya tienes cuenta? Conéctate aquí.

Iniciar Sesión
Conéctate para seguir esto  

×