Control de velocidad para motores sin escobillas con un ESP8266

Aprende cómo funcionan los motores sin escobillas, cómo controlarlos con PWM usando un controlador de velocidad, un ESP8266 y Ubidots.

¿Qué son los motores sin escobillas?

También conocidos como motores síncronos de corriente continua, son un tipo especial de motor que consta de un estator y un rotor como la mayoría de los motores existentes, pero con una diferencia, los "motores sin escobillas", como su nombre indica, no tienen escobillas conectadas eléctricamente entre el estator y el rotor para reducir la fricción, las vibraciones y la ineficiencia.

¿Cómo funcionan?

Estos motores están asociados a un inversor. El variador hace que la tensión de alimentación de las bobinas sea secuencial, por lo que los polos del rotor se mueven en función del campo magnético generado por las bobinas secuencialmente. La velocidad del rotor y de su eje, dependerá de la velocidad de secuenciación del variador.

Podemos encontrarlos normalmente en aviones o coches RC, también drones.

En el siguiente tutorial vamos a aprender sobre motores Brushless, cómo controlarlos con un ESP8266 (NodeMCU) y Ubidots.

Requisitos para la solicitud:

A continuación, utilice 2 cables para conectar Gnd y la señal a la entrada respectiva del ESC.

ESC NodoMCU
Cable trasero GND - Cable negro
Cable blanco D5 - Cable amarillo

En este caso no usamos el cable rojo del ESC porque suministra 5v y nuestra NodeMCU funciona a 3.3v, por lo que podemos dañarla.

2. Ubidots Creación de dispositivos y variables.

Ve a la sección Dispositivo de tu cuenta Ubidots y crea tu dispositivo llamado"motor".

Dentro de tu dispositivo"motor", crea una variable llamada"velocidad".

3. Ubidots Dashboard y creación de widgets.

Una vez creado nuestro dispositivo y variable, podemos crear un dashboard y widget para controlar el motor desde una web o móvil dashboard.

Ahora, crea un widget de control para fijar la velocidad del motor asociado a la variable"velocidad".

Entonces estará listo para programar y probar su proyecto.

4. Programación con el IDE Arduino.

1. Si aún no lo has hecho, descarga el IDE de Arduino.

1a. Abra el IDE y seleccione Archivos -> Preferencias

1b. Añada la siguiente URL en el campo URLs adicionales del Administrador de tableros. Puede añadir varias URL separándolas con comas.

http://arduino.esp8266.com/stable/paquete_esp8266com_index.json

2. Abra e instale la placa ESP8266 en el Boards Manager: Herramientas -> Board -> Boards Manager
2a. Puede encontrar fácilmente la placa escribiendo "ESP8266" en la barra de búsqueda.

3. Ahora selecciona la placa NodeMCU 1.0 en el menú Herramientas -> Placa

4. Defina o vuelva a comprobar el Puerto de su PC con el que se está comunicando el dispositivo. Vaya a Herramientas -> Puerto: -> Seleccione el puerto

4b. Asegúrate de que la velocidad de subida de tu IDE es 115200 yendo a Herramientas -> Velocidad de subida -> 115200

5. Descarga la librería UbidotsESPMQTT si aún no lo has hecho. Ahora, haga clic en Sketch -> Include Library -> Add .ZIP Library y elija la biblioteca Ubidots ESP8266 MQTT.

Si se carga correctamente, obtendrá la respuesta: "Biblioteca añadida a sus bibliotecas".

8. Cierra y abre de nuevo el IDE de Arduino.

Programación del NodeMCU ESP8266:

Una vez que su ESP8266 está configurado, podemos publicar y obtener datos de Ubidots con el fin de controlar su motor sin escobillas.

1. Copia y pega el siguiente código en el IDE de Arduino. No olvides personalizar el SSID y la contraseña Wi-Fi y tu Ubidots Token.

/****************************************
   Include Libraries
 ****************************************/
#include "UbidotsESPMQTT.h"
#include <Servo.h>
/****************************************
   Define Constants
 ****************************************/
#define TOKEN "............" // Your Ubidots TOKEN
#define WIFINAME "............" //Your SSID
#define WIFIPASS "............" // Your Wifi Pass
#define DEVICE_LABEL  "motor"  // Put here your Ubidots device label
#define VARIABLE  "speed"  // Put here your Ubidots variable label
#define MotorPin D5 //NodeMCU pin where the signal for the ESC comes out
Servo ESC; //Servo variable
float value=0; // To store incoming value.
float MotorSpeed=0;
Ubidots client(TOKEN);
/****************************************
   Auxiliar Functions
 ****************************************/
// cast from an array of chars to float value.
float btof(byte * payload, unsigned int length) {
  char * demo = (char *) malloc(sizeof(char) * 10);
  for (int i = 0; i < length; i++) {
    demo[i] = payload[i];
  }
  float value = atof(demo);
  free(demo);
  return value;
}
// Callback to handle subscription
void callback(char* topic, byte* payload, unsigned int length) {
    value = btof(payload, length);
      value = map(value, 0, 100, 0, 180); //Map the 0-100 values from the slider to the 0-180 to use the servo lib.
      ESC.write(value); //Send the value (PWM) to the ESC
}
/****************************************
   Main Functions
 ****************************************/
void setup() {
  // put your setup code here, to run once:
  client.ubidotsSetBroker("industrial.api.ubidots.com"); // Sets the broker properly for the business account
  client.setDebug(true); // Pass a true or false bool value to activate debug messages
  Serial.begin(115200);
  client.wifiConnection(WIFINAME, WIFIPASS);
  client.begin(callback);
  client.ubidotsSubscribe(DEVICE_LABEL, VARIABLE); //Insert the dataSource and Variable's Labels
  ESC.attach(MotorPin,1000,2000);
}
void loop() {
  // put your main code here, to run repeatedly:
  if (!client.connected()) {
    client.reconnect();
    client.ubidotsSubscribe(DEVICE_LABEL, VARIABLE); //Insert the dataSource and Variable's Labels 
  }
  client.loop();
}


Ahora, verifica que tu código es correcto haciendo clic en el botón de comprobación en el IDE Arduino encima del editor.

Una vez verificado el código, recibirá una respuesta similar a la siguiente, indicando que está correctamente configurado.

A continuación, tienes que cargar el código en tu NodeMCU. Para ello, seleccione el icono de flecha a la derecha junto al icono de verificación.

Una vez cargado el código, recibirá el siguiente mensaje en el IDE de Arduino:

Sesión de pruebas:

Conecte la batería o la fuente de alimentación al ESC.

A continuación, todo está listo, sólo tiene que deslizar el control deslizante en su web o móvil dashboard.

Resumen:

En esta guía acabamos de aprender cómo funcionan los motores Brushless y cómo controlarlos con el ESP8266 NodeMCU y Ubidots. Este proyecto podría ayudarnos a diseñar sistemas de control electrónico para dispositivos mecánicos. Ej: Cortinas automáticas, un ventilador termo-controlado para el verano, y todo lo que tu imaginación pueda hacer con motores.