Controlar un motor cc con Arduino

Arduino no dispone de potencia suficiente para mover actuadores (un motor es un actuador por ejemplo). La función de Arduino es la de procesar (el control) y no la de ejecutar acciones. Su función es la de mandar ejecutar acciones a «drivers» que realicen el trabajo sucio.

Por ejemplo un sensor de temperatura metería datos a Arduino y este los procesa y manda orden a los controladores para que actúen. Si el actuador es un diodo led no existe mucho problema pero si es un motor de corriente continua la cosa se complica.

De todos modos con un transistor, un diodo y una resistencia si que podremos hacer que el motor se mueva a diferente velocidad, apagarlo y encenderlo. Ese será nuestro driver.

Antes de ponernos manos a la obra

Es importante saber que es un transistor. Aquí unos vídeos muy buenos: https://www.youtube.com/watch?v=ewzVt1Sr0zI y aquí https://www.youtube.com/watch?v=xGeHqRoKXU4

El transistor puede funcionar como interruptor (uno o cero) pero también como amplificador.

Los pines PWN (en un «arduino uno» son el 3,5,6,9,10 y 11) nos permitirán generar señales «analógicas» (véase http://playground.arduino.cc/ArduinoNotebookTraduccion/Appendix3 ).

El cometido de este articulo es mover un motor CC a diferente velocidad y controlarlo. Para ello usaremos los pines PWN, un transistor TIP120, un motor de 6V (podemos alimentar el arduino (IN4001) con una pila a 9v y conectar a Vin en vez de al pin 5v), una resistencia (220Ω) y un diodo.

Controlar un motor de estos es posible pero en velocidad y poco más, es decir, no es un motor paso a paso que ese si que nos permite controlar las vueltas que da.

Vídeos del motor en acción

Las conexiones y el código

Aquí vemos las conexiones que he realizado (el transistor no es PNP es NPN):

Aquí puede verse el código:

int motorPin = 3;
int speed = 0;

void setup(){
        pinMode(motorPin, OUTPUT);
        Serial.begin(9600);
        while(!Serial);
        Serial.println("Velocidad de 0 a 255");
}


void loop(){
        if (Serial.available()){
                if (speed >= 0 && speed <= 255){
                        analogWrite(motorPin, speed);
                        Serial.println(speed);
                        speed = speed+1;
                        delay(100);
                }else{
                        speed=0;
                        analogWrite(motorPin, speed);
                        Serial.println(speed);
                        delay(2000);
                        speed=255;
                        analogWrite(motorPin, speed);
                        Serial.println(speed);
                        delay(2000);
                        speed=0;
                        analogWrite(motorPin, speed);
                        Serial.println(speed);
                        delay(2000);

                }
        }
}
 

¿Le ha gustado el contenido?

Si le ha gustado y le ha sido de utilidad puede donar aquí https://paypal.me/mierdatv .  
También puede escribir un comentario si lo considera oportuno.  
 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *