Вы находитесь на странице: 1из 20

INICIO

ARDUINO

RASPBERRY PI

ELECTRNICA

PROYECTOS ROBOTS

BLOG

EQUIPO DIY

CONTACTO
Notice: Undefined index: result in /mnt/webb/e1/18/53884418/htdocs/wp-content/plugins/simple-share-buttonsadder/inc/ssba_buttons.php on line 431

CONTROL VELOCIDAD Y SENTIDO DE MOTOR


DC

(26/11/13)

En este tutorial vamos a controlar la velocidad y el sentido de un motor DC a travs de un potencimetro desde
Convertido de w eb en PDF con http://www.htmlapdf.com!

Arduino.

Material
-Arduino Uno
-Motor DC
-Potencimetro
-L293D (driver motores)
-Fuente alimentacin externa

Motor DC
Un motor de corriente continua convierte la energa elctrica en mecnica. Se compone de dos partes: el estator y el rotor.
El estator es la parte mecnica del motor donde estn los polos del imn.
El rotor es la parte mvil del motor con devanado y un ncleo, al que llega la corriente a travs de las escobillas.
Cuando la corriente elctrica circula por el devanado del rotor, se crea un campo electromagntico. Este interacta con el campo
magntico del imn del estator. Esto deriva en un rechazo entre los polos del imn del estator y del rotor creando un par de fuerza
donde el rotor gira en un sentido de forma permanente.
Si queremos cambiar el sentido de giro del rotor, tenemos que cambiar el sentido de la corriente que le proporcionamos al rotor; basta
con invertir la polaridad de la pila o batera.

Convertido de w eb en PDF con http://www.htmlapdf.com!

L293D
Para controlar un motor DC desde Arduino, tendremos que usar un driver para motores para proporcionarle ms corriente al motor ya
que las salidas del Arduino slo dan 40mA. De esta manera, con el driver podemos alimentar el motor con una fuente de alimentacin
externa.
El L293D es un integrado para controlar motores DC que usa el sistema puente en H. Qu es el puente en H? Es un sistema para
controlar el sentido de giro de un motor DC usando cuatro transistores. En la imagen vemos que los transistores se comportan como
interruptores y dependiendo que transistores conducen y cules no cambia la polarizacin del motor, y con esto el sentido de giro.

Convertido de w eb en PDF con http://www.htmlapdf.com!

Convertido de w eb en PDF con http://www.htmlapdf.com!

El L293D tiene dos puentes H y proporciona 600mA al motor y soporta un voltaje entre 4,5V y 36V tal y cmo pone en el datasheet.
En el datasheet tambin hay el esquema que vamos a usar.

Convertido de w eb en PDF con http://www.htmlapdf.com!

Nosotros usaremos la parte de la izquierda (los diodos externos en el L293D estn dentro). Cmo se aprecia en la imagen, los pins 3 y 6
son las salidas y se conectan a los bornes del motor. Y los pins 2 y 7 son las entradas donde conectaremos las salidas del Arduino.
Dependiendo que valor ponemos entre los pins 2 y 7 el motor girar en un sentido o en otro.

Control velocidad a travs de PWM


Hasta este punto sabemos cmo controlar el sentido de giro del motor DC a travs del L293D. Pero y la velocidad de giro? En este
proyecto lo que haremos es controlar la velocidad y el giro del motor con un solo potencimetro.

Convertido de w eb en PDF con http://www.htmlapdf.com!

Para hacerlo utilizaremos el PWM (vase PWM). Sabemos que hay que atacar los pins 2 y 7 del L293D desde dos salidas del Arduino. En
estas dos salidas habr un PWM a cada una. Pero tenemos que invertir un PWM. Qu quiere decir invertir? Pues que cuando en un
PWM tengamos un pulso a un valor alto, en el otro PWM el mismo pulso sea valor bajo. En la imagen lo entenderemos de una manera
ms grfica.

Convertido de w eb en PDF con http://www.htmlapdf.com!

Convertido de w eb en PDF con http://www.htmlapdf.com!

MONTAJE

Convertido de w eb en PDF con http://www.htmlapdf.com!

-Pins 4,5,12,13 del L293D a masa.


-Juntar las masas del Arduino y de la fuente de alimentacin externa.
-Pin 8 del L293D a 9V de la fuente de alimentacin externa. Es el voltaje que proporciona al motor.
-Pin 16 del L293D a 5V. Es la alimentacin del L293D, pude alimentarse directamente desde la alimentacin que proporciona el
Convertido de w eb en PDF con http://www.htmlapdf.com!

Arduino.
-El potencimetro pude ser de cualquier valor.

PROGRAMA
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

/*
www.diymakers.es
by A.Garca
Control velocidad y sentido motor DC
Tutorial en: http://diymakers.es/control-velocidad-y-sentido-de-motor-dc/
*/
int pin2=9; //Entrada 2 del L293D
int pin7=10; //Entrada 7 del L293D
int pote=A0; //Potencimetro
int valorpote;
int pwm1;
int pwm2;

//Variable que recoge el valor del potencimetro


//Variable del PWM 1
//Variable del PWM 2

void setup()
{
//Inicializamos los pins de salida
pinMode(pin2,OUTPUT);
pinMode(pin7, OUTPUT);
}
void loop()
{
//Almacenamos el valor del potencimetro en la variable
valorpote=analogRead(pote);
//Como la entrada analgica del Arduino es de 10 bits, el rango va de 0 a 1023.
//En cambio, la salidas del Arduio son de 8 bits, quiere decir, rango entre 0 a 255.
//Por esta razn tenemos que mapear el nmero de un rango a otro usando este cdigo.
pwm1 = map(valorpote, 0, 1023, 0, 255);
pwm2 = map(valorpote, 0, 1023, 255, 0); //El PWM 2 esta invertido respecto al PWM 1
//Sacamos el PWM de las dos salidas usando analogWrite(pin,valor)
analogWrite(pin2,pwm1);
analogWrite(pin7,pwm2);
}

Convertido de w eb en PDF con http://www.htmlapdf.com!

27 comentarios en Control velocidad y sentido motor de DC


Convertido de w eb en PDF con http://www.htmlapdf.com!

Eduardo 28 agosto, 2014 at 18:04

En vez de conectar un potenciometro, se puede hacer a travs de una salida pwm de arduino que haga de potenciometro
Responder

DIYMakers 28 agosto, 2014 at 18:08

S, se puede hacer.
Responder

Jorge Rodriguez 18 junio, 2015 at 05:43

No estoy muy seguro, se reemplazaria la entrada de referencia en A0 para colocar alli la entrada de PWM, y asi
reemplazar el potenciometro, la pregunta es que en el codigo tendria que tener los valores medidos en
osciloscopio del pwm de control para asignar las condiciones para los pwm de salida?
Responder

Irving Delgado Rivera 2 octubre, 2014 at 07:02

si requiero conectar un motor de 12V solo debo cambiar la fuente o hay algn cambio en el circuito??
Responder

DIYMakers 3 octubre, 2014 at 19:07

Si el motor aguanta 9V ningn problema.


Responder

Hector Bonilla Muoz 5 octubre, 2014 at 05:54

Que tal buenas noches, estoy trabajando con un arduino alejandro, esta no tiene ss/pwm, pin 10 del arduino,(uni el pin 7
del l239d con la entrada 10 pwm) monte el mismo codigo mostrado en la pagina, al girar el potenciometro solo gira el
motor en uno solo sentido, en cualquier sentido que gire el potenciometro solo gira el motor para un solo lado. Que puedo
hacer???, agradeceria su apoyo.
Responder

Emanuel Chvez 19 octubre, 2014 at 17:49


Convertido de w eb en PDF con http://www.htmlapdf.com!

hola.es justo lo que necesito pero con dos motores.mira quisiera tener dos potenciometros para controlar cada motor,
pero lo puedo hacer con un l293D..conectando el otro motor a los mismos pines del otro y pues obvio conectando mas
pines al arduino que serian dos mas?????
Responder

Juanjo Pedrajas 23 octubre, 2014 at 00:19

Hola, tengo una duda sobre el L293D. Cuando dices proporciona 600mA al motor y soporta un voltaje entre 4,5V y 36V
significa que el integrado se puede alimentar de 4,5V a 36V y proporciona al motor el mismo voltaje que le proporciona
arduino pero con mayor intensidad?
Responder

Francisco 11 noviembre, 2014 at 14:38

Hola, mi duda es el L239D tiene diodos protectores integrados para que cuando cambie el sentido de giro no queme el
arduino?
Responder

David Guillermino Acevedo Cardenas 13 noviembre, 2014 at 16:25

si tiene el l239 sin la d no tiene


Responder

Pingback: Tema 3 Conceptos bsicos de microcontroladores y electrnica (3) | Aprendiendo Arduino


Ivan 18 marzo, 2015 at 15:55

Saludos.
Mis conocimientos en electronica son bastante buenos, aunque no de ingeniera, pero soy nuevo en esto de arduino y me
quedo un poco corto con la programacin, mi idea es tomando el modelo de motor dc, aadir un segundo potenciometro
que me marque la posicin. Haba pensado que quizs la opcin seria que el sistema calculase la posicin segn (pot2pot1), donde pot1 es el que controla el giro y pot2 el que determina la posicin del elemento que gira, esto quiere decir
que si tengo 2V en pot1 y 2V en pot2 (2-2= 0V), el motor girar y parar al llegar pot2 a 4,5V (2,5v de diferencial) y as con
cualquier valor de pot1. Esto a su vez me genera otro problema y es que, cuando tenga pot1 4V y pot2 1V (diferencial 1-4=
-3V) no se como lo tomara, tericamente sera solo un valor calculado y no real, pero no se si habra que hacer alguna
correccin.
Convertido de w eb en PDF con http://www.htmlapdf.com!

Teniendo en cuenta el cdigo que tienes expuesto, he realizado algunas modificaciones, las cuales aunque el software no
me da error no se si estn bien para el calculo.
/*
http://www.diymakers.es
by A.Garca
Control velocidad y sentido motor DC
Tutorial en: http://diymakers.es/control-velocidad-y-sentido-de-motor-dc/
*/
int pin2=9; //Entrada 2 del L293D
int pin7=10; //Entrada 7 del L293D
int pote1=A0; //Potencimetro mando
int pote2=A1; //Potenciometro control
int pote=(A1-A0); //Diferencial de giro
int valorpote1; //Variable que recoge el valor del potencimetro mando
int valorpote2; //Variable que recoge el valor del potenciometro control
int valorpote; //Variable control giro diferencial
int pwm1; //Variable del PWM 1
int pwm2; //Variable del PWM 2
void setup()
{
//Inicializamos los pins de salida
pinMode(pin2,OUTPUT);
pinMode(pin7, OUTPUT);
}
void loop()
{
//Almacenamos el valor del potencimetro en la variable
valorpote1=analogRead(pote1);
valorpote2=analogRead(pote2);
valorpote=(pote2-pote1);
//Como la entrada analgica del Arduino es de 10 bits, el rango va de 0 a 1023.
Convertido de w eb en PDF con http://www.htmlapdf.com!

//En cambio, la salidas del Arduio son de 8 bits, quiere decir, rango entre 0 a 255.
//Por esta razn tenemos que mapear el nmero de un rango a otro usando este cdigo.
pwm1 = map(valorpote, 0, 1023, 0, 255);
pwm2 = map(valorpote, 0, 1023, 255, 0); //El PWM 2 esta invertido respecto al PWM 1
//Sacamos el PWM de las dos salidas usando analogWrite(pin,valor)
analogWrite(pin2,pwm1);
analogWrite(pin7,pwm2);
}
No se si he duplicado acciones, si las he colocado correctamente, etc. Espero puedan ayudarme.
Gracias.
Responder

Ignacio 31 marzo, 2015 at 12:50

Deberan dejar un valor en 0 y el otro con pwm, dependiendo para qu lado debe girar.
adems hay que darle un margen de seguridad al punto medio del potencimetro
ReadedVal = analogRead(PotPin1); // reads the value of the potentiometer (value between 0 and 1023)
OutFwdVal = 0;
OutRevVal = 0;
if (ReadedVal >= 528)
{
OutFwdVal = map(ReadedVal, 520, 1023, 0, 255); // scale it
}
if (ReadedVal <= 496)
{
OutRevVal = map(ReadedVal, 504, 0, 0, 255); // scale it
}
analogWrite(FwdPin1, OutFwdVal);
analogWrite(RevPin1, OutRevVal);
Responder

Pingback: Actuadores y perifricos de salida | Aprendiendo Arduino


Convertido de w eb en PDF con http://www.htmlapdf.com!

Luis Ra 12 abril, 2015 at 02:34

Se puede controlar todo por modulo Bluetooth


Responder

johnny 27 mayo, 2015 at 21:13

Se puede restringir el numero de vueltas del motor dc. Es que quiero que gire ghasta un cierto numero de vueltas y
se detenga, sera posible
Responder

Pingback: Tema 5 Taller de Proyectos con Arduino | Aprendiendo Arduino


Luis Eduardo 25 mayo, 2015 at 03:01

Se Puede controlar el motor con una fotoresistencia en vez de un potenciometro?


Responder

Irving-kira Light Yagamy 31 mayo, 2015 at 07:41

disculpa, yo estoy ocupando 4 motores de cd y por lo tanto uso 4 puentes h para invertir el giro, lo que quiero saber es
como declaro los pines 2 y 7 de los dems puentes h al igual que los pot
Responder

Carlos Aguilar 31 mayo, 2015 at 17:20

si quisiera indicarle al Motor la velocidad que quiero por medio del teclado, es decir en vez de usar el potenciometro,
cambiar la velocidad de giro del motor indicando con los numeros del teclado la velocidad que quiero (obviamente
ajustando las velocidades de acuerdo al numero tecleado) se podria hacer ???
Responder

Raul 2 junio, 2015 at 20:11

Desde el Monitor serial, ingresaras el valor que deseas. Esto hara la funcion del potenciometro !
Responder

Raul 2 junio, 2015 at 20:02


Convertido de w eb en PDF con http://www.htmlapdf.com!

por que declaras las salidas como analogWrite? No son salidas digitales?
Responder

martin 14 agosto, 2015 at 20:38

se puede poner en lugar del potenciometro el lm35?


Responder

manuel 4 septiembre, 2015 at 21:36

buenas tardes mi pregunta es que si es cualquier valor de potencimetro para poder girar a los dos sentido lo que pasa
es que solo me gira de un sentido estoy haciendo exactamente lo mismo
Responder

FernandoMonzon 16 septiembre, 2015 at 18:13

Estos motores de C.D. se pueden utilizar en maquinas CNC caseras?


Responder

DIego 24 octubre, 2015 at 11:27

buenos dias, quiero realizar el mismo proyecto pero solo tengo un l293b, donde irian puestos los diodos y cuales desde
ya muchas gracias!!
Responder

Marcelo 30 octubre, 2015 at 20:11

Hola, llego 2 aos despues a su articulo, no s si este post sigue con vida, igual van mis 2 preguntas, cmo hacer en el
caso qu quiera utilizar dos motores y cada uno de ellos con su respectivo potencimetro ?, en mi caso lo utilizaria con
motores de mayor potencia , 4 amperes de consumo, recomienda algn puente H con Mosfet en especial ?, dado qu
estuve leyendo sobre el tema y hay algunas complicaciones si dichos puentes se cosntruyen con Mosfet
complementarios o en su defecto de canal N, gracias por su atencin.
Responder

Convertido de w eb en PDF con http://www.htmlapdf.com!

Deja un comentario

Convertido de w eb en PDF con http://www.htmlapdf.com!

Introduce tu comentario aqu...

Buscar

Buscar

All rights reserved. | Design by OpenCodez

Convertido de w eb en PDF con http://www.htmlapdf.com!

Вам также может понравиться