Como podemos ver en el artículo NodeMCU - primeros pasos (MIC024S), el NodeMCU es una tarjeta de desarrollo muy interesante, tanto como proyectos para Internet de las Cosas o para proyectos "locales" (que no requieren conectividad a Internet). Por este motivo el NodeMCU es muy usado en el control de diversos periféricos, desde simples LEDs hasta motores DC. Y lo que veremos en este artículo es justamente eso, como accionar un motor DC utilizando como tarjeta de control el NodeMCU. Al comprender el contenido de este artículo, usted será capaz de hacer proyectos aún más interesantes y desafiantes.
Material necesario
Para reproducir el proyecto abordado en este artículo (es decir, comprobar el accionamiento de un motor DC con el NodeMCU), necesitará:
- Una tarjeta NodeMCU
- Una fuente / cargador de celular (conector micro-USB) - tensión de 5V, con al menos 1A de corriente de salida
- Dos motores DC de 3V a 6V de tensión de operación (modelos con caja de reducción acoplada también están permitidos)
- Un cable micro-USB (para la programación de NodeMCU)
- Dos transistores BC548 (o equivalente NPN como el BC337)
- Dos pulsadores
- Dos resistores 1K / 0,25W
- Dos resistores 2K2 / 0,25W
- Dos resistencias 220R / 0,25W
- Módulo relé / Shield relé de 2 canales
Entradas y salidas de NodeMCU - información importante
Como hemos visto en el artículo NodeMCU - primeros pasos (MIC160), el NodeMCU tiene varias entradas y salidas disponibles para el desarrollador. Sin embargo, es muy importante tener en cuenta la siguiente información:
- Las entradas y salidas (GPIOs configuradas como input y / o output) del NodeMCU funcionan SOLAMENTE con tensión de 3,3V. Por lo tanto, no son tolerantes a 5V. Si se desobedeció y / o no se consideró, el NodeMCU se dañaría permanentemente.
- Una salida del NodeMCU (GPIO configurado como salida) puede tener corriente máxima drenada de 12mA. Cualquier necesidad de corriente además de ésta requiere el uso de un circuito controlador / circuito de accionamiento electrónico (escudo). Desconsiderar y / o desobedecer esta limitación puede llevar al NodeMCU a daños permanentes.
Diseño / demostración: accionamiento de motor DC
El proyecto / demostración de accionamiento de motor DC que haremos aquí permitirá utilizar el NodeMCU para controlar si un motor girará o no.
El control de los motores (por parte del usuario) se hace vía push-buttons. Es decir, el NodeMCU será responsable de estar constantemente leyendo el estado de las entradas en que los pulsadores están conectados y, al apretar uno de ellos, el NodeMCU activará el motor correspondiente.
Es importante resaltar que, como el NodeMCU no posee capacidad de corriente para accionar un motor de forma directa, siendo restringido al procesamiento del proyecto y generación de señales de baja potencia. Por lo tanto, un circuito de controlador de motor es necesario. Este circuito será el responsable de la interfaz entre motores DC y NodeMCU, y tal técnica es ampliamente utilizada en la electrónica y automatización.
Utilizando los conceptos de este experimento, usted será capaz de controlar varios motores DC, algo muy útil en la robótica.
Circuito esquemático
Para hacer el control de los motores DC como descrito arriba, vamos a montar el circuito esquemático de la figura 1.
Sin embargo, antes de montar, tenga en cuenta las siguientes observaciones:
- Al observar el circuito esquemático, usted notará que se utilizaron transistores para accionar el Shield de Relés desde el NodeMCU. Esto fue necesario porque el Shield de Relés requiere una tensión de accionamiento mayor que la tensión de salida de un GPIO del NodeMCU (el NodeMCU utiliza 3,3V, mientras que el Shield de Relés necesita 5V). Como no es una buena idea accionarlo con una tensión menor que la especificada, los transistores serán responsables de "convertir" los niveles de tensión a un nivel dentro de lo especificado.
- Como se puede observar en el circuito esquemático, se utilizó un regulador de tensión 7805. El motivo de utilizarlo es su alta popularidad y fácil disponibilidad en el mercado (gran parte de los profesionales y / o aficionados de electrónica ya utilizó este regulador). Pero recuerde: el consumo máximo que el 7805 alimentos es 1A. Si va a aprovechar este circuito para otro proyecto, asegúrese de trabajar dentro de este límite de corriente o cambiar el regulador a un compatible con lo que su proyecto necesita
Código fuente
El código fuente del proyecto se encuentra abajo:
// Programa: Control de motor DC con NodeMCU. // Descripción: NodeMCU acciona los motores según el usuario // apriete los pulsadores pulsados a las entradas D2 // y D3 //Autor: Pedro Bertoleti // incluye #include // define - pines a los que están conectados los controladores de los motores // (circuitos transistorizados + relé shield) #define MOTOR1_SAIDA D0 #define MOTOR2_SAIDA D1 // define - pines que contendrán los botones para controlar // accionamiento de los motores (control independiente de accionamiento) #define BOTAO_PARA_ACIONAR_MOTOR1 D2 #define BOTAO_PARA_ACIONAR_MOTOR2 D3 // función de configuración / inicialización void setup () { // Configura todas las entradas (conectadas a los pulsadores) // y salidas (conectadas a los controladores de los motores) pinMode (MOTOR1_SAIDA, OUTPUT); pinMode (MOTOR2_SAIDA, OUTPUT); pinMode (BOTAO_PARA_ACIONAR_MOTOR1, INPUT); pinMode (BOTAO_PARA_ACIONAR_MOTOR2, INPUT); // inicializaciones de los motores: es buena práctica in inicializar // los estados de las salidas tan pronto como sea posible. En el caso de este // proyecto, los motores se inicializan apagados. digitalWrite (MOTOR1_SAIDA, LOW); digitalWrite (MOTOR2_SAIDA, LOW); } // bucle principal void bucle () { char EstadoMotor1; char EstadoMotor2; // el programa simplemente le de forma constante (vía polling) los push- // botones y toma la decisión de accionamiento o no conforme resultado // de la lectura efectuada. // le la entrada conectada al pushbutton 1 (entrada D2) y comprueba si // debe conectar o desconectar el motor correspondiente (controlado por // salida D0) EstadoMotor1 = LOW; if (digitalRead (BOTAO_PARA_ACIONAR_MOTOR1) == LOW) EstadoMotor1 = HIGH; digitalWrite (MOTOR1_SAIDA, EstadoMotor1); // le la entrada conectada al pushbutton 2 (entrada D3) y comprueba si // debe conectar o desconectar el motor correspondiente (controlado por // salida D1) EstadoMotor2 = LOW; if (digitalRead (BOTAO_PARA_ACIONAR_MOTOR2) == LOW) EstadoMotor2 = HIGH; digitalWrite (MOTOR2_SAIDA, EstadoMotor2); }
Próximos pasos - desafios
Ahora que hemos visto cómo accionar un motor DC con el NodeMCU, que tal hacer algunos desafíos? Ver algunos abajo:
- Utilizando el siguiente artículo aquí del sitio (Cómo utilizar el sensor de temperatura y humedad relativa DHT22 con el NodeMCU (MIC162)), accione un motor DC (con una hélice acoplada a su eje) para controlar la temperatura del ambiente. Por ejemplo: si la temperatura sube más allá de un valor / límite determinado, acciona el ventilador; si se encuentra por debajo de este valor / límite, apaga el ventilador.
- Utilizando otro artículo también aquí del sitio (Monitoreo de Temperatura Ambiente y Humedad Relativa del Aire vía Internet), haga el accionamiento de los motores vía Internet. De esta forma, desde cualquier lugar del mundo que tenga conectividad a Internet usted podrá accionar sus motores!
- Si tiene un motor DC más potente que los más comunes de mercado, vuelva a calcular / cambiar el tamaño del controlador de los motores de transistor para que el NodeMCU pueda controlarlos.
Conclusión
En este artículo, hemos visto cómo controlar motores DC a través de un NodeMCU, ampliando aún más las posibilidades de proyectos a ser hechos con esta placa de desarrollo.
Este proyecto / demostración puede ser evolucionado para control de diferentes portes de motores DC, permitiendo vislumbrar aplicaciones cada vez más reales y dentro del segmento de automatización.