Material -Arduino Uno -Motor DC -Potenciómetro -L293D (driver motores) -Fuente alimentación externa
Motor DC Un motor de corriente continua convierte la ener!a el"ctrica en mec#nica$ %e com&one de dos &artes' el estator el rotor rotor$$ l estator es la &arte mec#nica del motor donde est#n los &olos del im#n$ l rotor es la &arte móvil del motor con devanado un n*cleo+ al ,ue llea la corriente a trav"s de las escoillas$ Cuando la corriente el"ctrica circula &or el devanado del rotor+ se crea un cam&o electroman"tico$ ste interact*a con el cam&o man"tico del im#n del estator$ sto deriva en un rec.a/o entre los &olos del im#n del estator del rotor creando un &ar de 0uer/a donde el rotor ira en un sentido de 0orma &ermanente$ %i ,ueremos camiar el sentido de iro del rotor+ tenemos ,ue camiar el sentido de la corriente ,ue le &ro&orcionamos al rotor1 asta con invertir la &olaridad de la &ila o ater!a$
L293D Para controlar un motor DC desde Arduino+ tendremos ,ue usar un driver &ara motores &ara &ro&orcionarle m#s corriente al motor a ,ue las salidas del Arduino sólo dan mA$ De esta manera+ con el driver &odemos alimentar el motor con una 0uente de alimentación externa$ l L293D es un interado &ara controlar motores DC ,ue usa el sistema &uente en 4$ 56u" es el &uente en 47 s un sistema &ara controlar el sentido de iro iro de un motor DC usando cuatro cuatro transistores$ n la imaen vemos ,ue los transistores se com&ortan como interru&tores de&endiendo ,ue transistores conducen cu#les no camia la &olari/ación del motor+ con esto el sentido de iro$
l L293D tiene dos &uentes 4 &ro&orciona 8mA al motor so&orta un voltae entre +:; 38; tal cómo &one en el datasheet$ n el datas.eet tami"n .a el es,uema ,ue vamos a usar$
son las entradas donde conectaremos las salidas del Arduino$ De&endiendo ,ue valor &onemos entre los &ins 2 > el motor irar# en un sentido o en otro$
Control velocidad a trav"s de P?M 4asta este &unto saemos cómo controlar el sentido de iro del motor DC a trav"s del L293D$ Pero 5 la velocidad de iro7 n este &roecto lo ,ue .aremos es controlar la velocidad el iro del motor con un solo &otenciómetro$
Para .acerlo utili/aremos el P?M (v"ase PWM)$ %aemos ,ue .a ,ue atacar los &ins 2 > del L293D desde dos salidas del Arduino$ n estas dos salidas .ar# un P?M a cada una$ Pero tenemos ,ue invertir un P?M$ 56u" ,uiere decir invertir7 Pues ,ue cuando en un P?M tenamos un &ulso a un valor alto+ en el otro P?M el mismo &ulso sea valor ao$ n la imaen lo entenderemos de una manera m#s r#@ca$
M
-Pins +:+2+3 del L293D a masa$ -untar las masas del Arduino de la 0uente de alimentación externa$
-Pin E del L293D a 9; de la 0uente de alimentación externa$ s el voltae ,ue &ro&orciona al motor$ -Pin 8 del L293D a :;$ s la alimentación del L293D+ &ude alimentarse directamente desde la alimentación ,ue &ro&orciona el Arduino$ -l &otenciómetro &ude ser de cual,uier valor$
PGAMA /* www.diymakers.es by A.García Control velocidad y sentido motor DC Tutorial en: http://diymakers.es/controlvelocidadysentidode motordc/ */ int pin!"#$ //%ntrada ! del &!#'D int pin(")$ //%ntrada ( del &!#'D int pote"A$ //+otenci,metro int valorpote$ int pwm)$ int pwm!$
//-ariable ue recoe el valor del potenci,metro //-ariable del +01 ) //-ariable del +01 !
void setup23 4 //5niciali6amos los pins de salida pin1ode2pin!789T+9T3$ pin1ode2pin(7 89T+9T3$ void loop23 4 //Almacenamos el valor del potenci,metro en la variable valorpote"analo;ead2pote3$ //Como la entrada anal,ica del Arduino es de ) bits7 el rano va de a )!'. //%n cambio7 la salidas del Arduio son de < bits7 uiere decir7 rano entre a !==. //+or esta ra6,n tenemos ue mapear el n>mero de un rano a otro usando este c,dio. pwm) " map2valorpote7 7 )!'7 7 !==3$ pwm! " map2valorpote7 7 )!'7 !==7 3$ //%l +01 ! est? invertido respecto al +01 ) //@acamos el +01 de las dos salidas usando analo0rite2pin7valor3 analo0rite2pin!7pwm)3$ analo0rite2pin(7pwm!3$
HB C< 2 MB% D CC = L293D ( %<>:) 22 FH+ 28 ADIAJ CM
Objetivos •
Con el interado L293D control de un root$
•
a&render a controlar motores de corriente continua controladores de motores asados en &uentes 4$
l controlador de motor L293D el controlador del motor SN754410 tienen exactamente las mismas salidas de &in+ &or lo ,ue se &uedenintercamiar entre ellos sin nin*n camio de .ardKare códio$ Laúnica diferencia es ,ue %<>: &uede suministrar A 0rente $8A&ara el L293D$ l SN754410 es un dis&ositivo m#s moderno &or lo tanto tiende aser m#s arato de com&rar$ l L293D+ ase*rate de com&rar uno conla DN al @nal+ a ,ue tiene los diodos internos no es necesario aOadirnin*n com&onente externo$
Material requerido
•
Arduino Uno o similar$ sta sesión ace&ta cual,uier otro modelo de Arduino$
•
Una Protooard$
•
C.asis del root
•
Un 4 ride interado L293D
•
Alunos cales de Protooard$
•
Dos motores de corriente contin*a$
El esquema. l es,uema ser# exactamente iual al de la entrada anterior+ &ero conectando el seundo motor$
El ro!rama. Besteando Motores con L293D ""De#$imos i$s ""Motor % int enaleA :1 int motorA 81
int motorA2 >1 ""Motor & int enaleH E1 int motorH 91 int motorH2 1 void setu&() Q
%erial$ein (98)1 ""'o$#!ura'i($ &inMode (enaleA+ UBPUB)1 &inMode (motorA+ UBPUB)1 &inMode (motorA2+ UBPUB)1
&inMode (enaleH+ UBPUB)1 &inMode (motorH+ UBPUB)1 &inMode (motorH2+ UBPUB)1 R void loo&() Q ""a'ti)amos motor % %erial$&rintln (SActivamos motoresT)1 diital?rite (enaleA+ 4IG4)1 diital?rite (enaleH+ 4IG4)1 dela ()1
//Nos movemos
%erial$&rintln (S4acia delanteT)1 diital?rite (motorA+ L?)1 diital?rite (motorA2+ 4IG4)1 diital?rite (motorH+ L?)1 diital?rite (motorH2+ 4IG4)1 //Drante 3 se!ndos
dela (3)1
%erial$&rintln (S4acia atr#sS)1 diital?rite (motorA+4IG4)1 diital?rite (motorA2+L?)1 diital?rite (MotorH+4IG4)1 diital?rite (MotorH2+L?)1 //Drante 3 se!ndos
dela (3)1 %erial$&rintln (SParamos motoresT)1 //sto" diital?rite (enaleA+ L?)1 diital?rite (enaleH+ L?)1 dela (3)1 R Pero &odemos meorar esta &roramación$ scriiremos códio &ara controlar mediante ordenador el root con 2 motores CC desde el &uerto serie$
// dec#araci$n de variab#es c.ar val1 int enaleA :1 //ve#ocidad motor % int dirmotorA 81 // direccion motor a int dirmotorA2 >1 // direccion motor a int enaleH E1 //ve#ocidad motor & int dirmotorH 91 // direccion motor b int dirmotorH2 1 // direccion motor b int velocidad 21 //'(todos "ara e# contro# ade#ante) atras) derec*a // i+,ierda - sto" void adelante()Q diital?rite (dirmotorA+4IG4)1 ira motor A derec.a diital?rite (dirmotorA2+L?)1 analo?rite (enaleA+ velocidad)1 diital?rite (dirmotorH+L?)1 ira motor H i/,uierda diital?rite (dirmotorH2+4IG4)1 analo?rite (enaleH+ velocidad)1 R void atras()Q diital?rite (dirmotorA+L?)1 ira motor A i/,uierda diital?rite (dirmotorA2+4IG4)1 analo?rite (enaleA+ velocidad)1 diital?rite (dirmotorH+4IG4)1 ira motor H derec.a diital?rite (dirmotorH2+L?)1
analo?rite (enaleH+ velocidad)1 R void i/,uierda()Q diital?rite (dirmotorA+4IG4)1 ira motor A derec.a diital?rite (dirmotorA2+L?)1 analo?rite (enaleA+ velocidad)1 diital?rite (dirmotorH+4IG4)1 ira motor H derec.a diital?rite (dirmotorH2+L?)1 analo?rite (enaleH+ velocidad)1 R void derec.a()Q diital?rite (dirmotorA+L?)1 ira motor A i/,uierda diital?rite (dirmotorA2+4IG4)1 analo?rite (enaleA+ velocidad)1 diital?rite (dirmotorH+L?)1 ira motor H i/,uierda diital?rite (dirmotorH2+4IG4)1 analo?rite (enaleH+velocidad)1 R void &aro()Q diital?rite (dirmotorA+4IG4)1 &ara motor A diital?rite (dirmotorA2+4IG4)1 analo?rite (enaleA+ )1 diital?rite (dirmotorH+4IG4)1 &ara motor H diital?rite (dirmotorH2+4IG4)1 analo?rite (enaleH+ )1
R // comen+amos "arando #os motores void setu&()Q int i1 0or(i:1i1iVV)Q &inMode(i+ UBPUB)1 &oner &in :+8+>+E+9++ de salida R %erial$ein(98)1 &aro()1 R // . e# bc#e "rinci"a# void loo&() Q i0( %erial$availale() ) Q val %erial$read()1 R sKitc. (val) Q case sN'
&aro()1
reaW1
case aN'
adelante()1
reaW1 case rN'
atras()1 reaW1
case iN' i/,uierda()1 reaW1 case dN' derec.a()1 reaW1 R R
OBJETIVOS
o
Mostrar la aplicación practica de los L293d para montar un control de apertura de una puerta motorizada de garaje..
o
Presentar los módulos RF de 433 MHz.
o
Ver su comportamineto como emisor rece ptor.
MATERIAL REQUERIDO.
2 ! Arduino UNO o equivalente.
2 ! Proto"oard .
#lgunos ca"les de proto"oard$
% ! LED rojo
&n H "ridge integrado L293D
&n pulsador
una pareja de módulos RF 433 MHz
'uente de alimentación e!terna para el motor
MODULOS SENCILLO DE RF
(stos módulos$ de mu "ajo costo$ son utilizados para radio control. )ra"ajan con una 'recuencia de radio de 433 MHz$ pertenecientes a la "anda &HF de *+ cm$ la cual comparte segmentos con otros ser,icios aplicaciones$ como los mandos de garaje$ transmisores para con'erencias$ dispositi,os inal-m"ricos de )V$ etc.
(n la imagen superior$ se pueden ,er el módulo transmisor izquierda/ el módulo receptor derecha/. La transmisión de datos es en modo simple! unidireccional / a una ,elocidad no superior a %+ 0"ps. 1o traen antenas$ las cuales a ue aadir sold-ndolas en los respecti,os puntos marcados como 5#1)6. (stas antenas se pueden comprar o acerla uno mismo.
Antenas Las antenas para estos módulos suelen ser de %74 de la longitud de onda$ ue en 433 MHz corresponde a unos %* cm También se suele ver como 16.5 cm/. 1osotros usaremos 3+ cm para el transmisor$ de tipo l-tigo para el receptor la tipo elicoidal.
Para el transmisor$ cogeremos 3+ cm de ca"le r8gido pelando un poco uno de sus e!tremos$ procedemos a soldarlo en la zona indicada como 5#1)6. (l ca"le de"er8a uedar perpendicular al suelo Para el receptor$ cogemos los 3+ cm restantes$ los arrollamos alrededor de un "ol8gra'o o similar$ dejando un peueo e!tremo en una punta para soldar en la otra punta % cm apro!imadamente. Luego la estiraremos un poco. e puede pro"ar con otras medidas en la antena emisora receptora$ pero las di'erencias parecen ser poco signi'icati,as. e pueden acer ensaos con otras medidas en "ase a los %* cm. (l alcance conseguido con las medidas e!puestas en el montaje 'u: de %+ metros en interior. 1o se a compro"ado maor distancia por limitación de espacio. (s importante no acercar ca"les de alimentación o 'uentes de ruido motores/ a las antenas. ;e"en estar alejadas de ca"les o similares pues pueden a'ectar a la transmisión. e puede montar los módulos so"re un soporte para ele,arlos del plano de tierra$ as8 alejarlos de ca"leado dem-s$ mejorar la emisión recepción de la seal<
Alimentación (l transmisor admite ,oltajes entre 3.=V %2V$ en cam"io el receptor sólo admite 4.=V =.=V. (l consumo es m8nimo$ teniendo e l transmisor una potencia de 2=m> a %2V el receptor un consumo de unos =.=m#. e recomienda alimentar el transmisor con 3.3V para e,itar la in'luencia del ruido$ aunue se puede pro"ar con otros ,oltajes para maor potencia alcance$ no superando los %2V. (l receptor lo alimentaremos con =V.
Conexiones Las cone!iones son mu simples< Vcc$ ?1; datos$ con lo ue sólo necesitamos un pin para cada #rduino.
)R#1M@AR
Vcc
#
;ata
?1;
Resistencia entre Vcc pata izuierda del pulsador. Pin * a la pata izuierda del pulsador. Pata dereca del pulsador a ?1;.
Nota: La resistencia que aparece en el esquema es de 1K. Se obtuvo meor resultado con una de !!" #hm
Las cone!iones del módulo receptor son algo m-s la"oriosas<
ECE!"O
Vcc
;ata
?1?
L(;
B para el control del motor
L293;
#
Pin %$ 9$ %C
Pin 2
Pin *
Pin 3 C
Pin 4 =
D
#l positi,o de la 'uente al
No olvidar unir la $N% de &rduino a la $N% de la 'uente e(terna.
(l receptor trae dos pines ;#)#. (s indi'erente a cual conectarlo. La "ater8a representa la 'uente e!terna para el motor$ la cual puede ser otra eui,alente. Para este proecto e usado un Arduino $e%a en el receptor. i se ,a a utilizar un Arduino Uno o Nano$ se de"e cam"iar los pines * D por otros P>M$ como el 3$ =$ C$ 9 %+$ a ue necesitamos ue sean P>M para poder controlar la ,elocidad el motor.
PROGRAMA DE CONTROL
1ecesitamos incluir la li"rer8a
VirtualWire.h
la cual nos 'acilita el manejo de estos
módulos.
"ransmisor (L programa del emisor uedar8a parecido a esto mas o menos< /* Modulo RF 433 MHz. Simulacion apertura de garaje Sketch del transmisor
En!a la orden de "#$%&"R al pulsar un 'oton. El receptor la reci'e ( acciona el motor. */
)include &irtual+ire.h,
//
li'reria para los modulos RF
int pin-oton 0
// para la lectura del 'oton
int 'oton 10
// estado del 'oton
oid setup2 56setup271110
//
iniciamos la comunicacion por radio
pinMode2pin-oton8 %9:;$0
// de
=
oid loop2
'oton digitalRead2pin-oton0
// leemos la entrada
i<2'oton >?+
// si se ha pulsado
send2@actiar@0
// eniamos actiar
dela(2A110 = =
//Funcion para eniar el mensaje oid send 2char *message
56send22uintB6t *message8 strlen2message0 //Enia el mensaje 565ait6tC20
// Espera hasta aca'ar de transmitir todo
=
eceptor B en cuanto al receptor ueda algo as8< /* 1odulo ; B'' 16
@ketch del receptor
%spera hasta recibir la orden ACT5-A; para accionar un motor
durante alunos seundos7 hay una pausa y el motor vuelve a
irar en sentido contrario7 simulando la apertura de una
puerta de arae. Durante el movimiento7 se activa un &%D. &ueo
ueda a la espera de una nueva orden.
*/
Einclude F-irtual0ire.h
// libreria para utili6ar los modulos ;
byte messaeH-0I1AJI1%@@AG%I&%KL$ //Creamos un mensae
byte messae&enth " -0I1AJI1%@@AG%I&%K$ //&a constante -0I1AJI1%@@AG%I&%K viene deMinida en la libreria
void setup23
4
pin1ode2)'7 89T+9T3$
//ConMiuramos el pin )'
pin1ode2(7 89T+9T3$
//pines para el motor
pin1ode2<7 89T+9T3$
vwIsetup2!3$
// iniciamos la comunicacion por radio
vwIrNIstart23$
void loop23
4 analo0rite2(73$
analo0rite2<73$
// apaamos motor
iM 2vwIetImessae2messae7 Omessae&enth33 // leemos el mensae 4 iM2comparar2PactivarP3 "" 3
4 // comparamos el mensae
diital0rite2A38 H%DH0
// encendemos >E
analog+rite28AB10 // encendemos motor en un sentido analog+rite2B810 // el alor AB1 controla la elocidad de giro
dela(241110
// esperamos 4 segundos
analog+rite2810
// apagamos motor
analog+rite2B810 dela(231110 analog+rite2810
// esperamos 3 segundos // encendemos motor en sentido opuesto
analog+rite2B8AB10
dela(241110
// esperamos 4 segundos
analog+rite2810
// apagamos motor
analog+rite2B810 digital+rite2A38 >?+0
// apagamos >E
= = =
char comparar2char* cadena
// Esta
ength0 i
i<2messageGi I cadenaGi return A0
= return 10 =
NOTAS FINALES
Podemos jugar con la longitud de las antenas emisora receptora$ as8 como el ,oltaje del módulo transmisor$ sin so"repasar los %2V. (n el montaje propuesto$ se consiguió acti,ar el receptor a unos D metros sin contacto ,isual$ encontr-ndos el transmisor en una estancia el receptor en otra.
La li"rer8a Virtual>ire. entra en con'licto con la li"rer8a er,o.$ al utilizar las dos el )imer de #rduino$ con lo ue para usar ser,omotores con estos módulos tenemos dos opciones<
• •
)ontrolar los servos con PWM * micropulsos +incluida en una 'unci,n- por eemplo Trabaar con la librer/a ServoTimer2 +la cual no ha sido probada.