Logo Studenta

Laboratorio 6-ARQUITECTURA DE COMPUTADORAS-2020-II

¡Este material tiene más páginas!

Vista previa del material en texto

Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
1 
 
 
 
 
 
 
 
 
UNIVERSIDAD 
 
 NACIONAL DE LA 
 
 AMAZONIA PERUANA 
 
 
 
 
FACULTAD DE INGENIERIA 
 
DE SISTEMAS E INFORMATICA 
 
LABORATORIO DE ARQUITECTURA DE COMPUTADORAS 
 
 
GUIA - INFORME Nº 6 
CURSO : ARQUITECTURA DE COMPUTADORAS 
 TEMA : Control de Motores con Arduino 
 PROFESOR : 
 GRUPO : 
 ALUMNO : 
 CODIGO : 
 
 NOTA: 
 
 FECHA EXPE.: SEMEST. ACADÉ. 2020 - II 
 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
2 
 
 
 
6to LABORATORIO 
Tema: Control de Motores con Arduino 
Objetivo: Hacer que el alumno aprenda a controlar una gran variedad de motores como de 
corriente continua, motores paso a paso y servomotores 
Material y Equipo: 
 Motores DC, paso a paso y servomotor 
Diodos LED 
 Resistencias 
 Un Protoboard 
 Cablecitos de Conexión 
 Una Tarjeta Arduino Uno 
 Cable USB 
EXPERIENCIA 1: FUNCIONAMIENTO DE UN MOTOR DE CONTÍNUA (DC) 
Los motores eléctricos de corriente continua (DC) se pueden encontrar en una amplia gama de 
dispositivos incluyendo los coches y barcos de radio control, reproductores de DVD, ventiladores 
eléctricos, etc. Muchos de estos pueden ser reutilizados para el uso con nuestro Arduino 
(decididamente, hay que rebuscar en el trastero). 
Alternativamente, podemos comprarlos por módicos precios en tiendas de electrónica o a través 
de Internet. Son pequeños motores (Figura 1) cuyas tensiones de trabajo varían entre 2 V Y 30 V. 
Cada fabricante proporciona una tensión recomendada que si la sobrepasamos (suelen ser bastantes 
«duros») podemos quemar el motor. Si por el contrario, aplicamos poca tensión, el motor ni se 
entera, es decir, no gira. 
 
 
 
 
 
 
 Figura 1.- Motor de Corriente Continua (DC) 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
3 
 
 
 
 
 
 
 
 
 
 
 
 
 FIGURA 2.- Motor DC con sus cables de conexión 
El control de estos motores se realiza mediante dos cables. La velocidad del motor se establece 
con la tensión que se le aplica. Una variación de tensión producirá un cambio proporcional de su 
velocidad de giro. Para invertir el giro, simplemente, se debe invertir la polaridad de los terminales. 
Si estamos usando el motor DC para accionar un pequeño robot, a menudo se acopla su eje a una 
caja reductora mecánica (Figura 2) ya que permite trasformar la alta velocidad de giro a baja 
velocidad, pero con un par de fuerza más alto de la que por defecto proporciona el motor solo. 
Esto es adecuado para potenciar la fuerza de los motores, aunque sea a costa de su velocidad de 
giro. Por otra parte, el Arduino solo puede proporcionar una pequeña cantidad de corriente, 
insuficiente para excitar las bobinas del motor DC. Por ello se hace imprescindible aumentar o 
amplificar dicha corriente si deseamos que nuestro motor se mueva. 
Las características de un pequeño motor DC típico se pueden resumir en los siguientes puntos: 
 La tensión de trabajo. Esta puede variar desde 3 V a más de 12 V. 
 La corriente sin carga. Es la cantidad de corriente que el motor absorbe cuando gira 
libremente sin nada conectado. 
 Par de fuerza del eje del motor. 
 La cantidad de corriente que absorbe el motor cuando tiene carga en el eje. 
 La velocidad a la tensión de trabajo expresada en revoluciones por minuto (RPM) 
Para el control de nuestro motor usaremos un transistor debido a sus necesidades de corriente. 
Vamos a utilizar un transistor llamado Darlington como típico TlP120. Los transistores Darlington 
 
DOS CABLES DE CONEXIÓN 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
4 
 
 
pueden manejar altas corrientes y tensiones. El TIP120 Darlington puede controlar hasta 5 A de 
corriente a 60 V. Esto es más que suficiente para controlar nuestro pequeño motor. El TIP120 
utiliza un símbolo esquemático similar al BC548 (Figura 3 y Figura 4). 
 
 
 
 
 
 
 
 
 Figura N° 3.- Diagrama del Circuito Darlington 
 
 
 
 
 
 
 
 
 Figura N° 4.- TIP 120 
PROGRAMA: Haciendo Girar un Motor DC 
Realicemos ahora un simple control de un motor oc. Para ello necesitaremos el siguiente 
hardware: 
Un pequeño motor eléctrico DC de 6 V ( Active Motor (Simple DC Motor Model)) 
Una resistencia de 1 KΩ Un diodo lN4004 
Un transistor TIP120 Darlington Una pila de 9 V. 
 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
5 
 
 
Nos puede sorprender que necesitemos una fuente de alimentación a mayores. Ello es debido a 
que cuando se trabaja con motores, el Arduino no les puede suministrar suficiente corriente para 
unas condiciones normales de funcionamiento. Usaremos una pila de 9 V que es más que suficiente 
para pequeños motores. 
El esquema es el que se muestra a continuación (Figura 5): 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Figura 5.- Diagrama de circuito de control básico de Motor DC 
Nota: el símbolo del transistor Darlington utilizado es el de un transistor normal. 
La función del diodo 1N4004 es la de proteger el motor en los momentos de arranque, parada o 
cambio de sentido de giro, debido a la corriente inducida por las bobinas del mismo. El diodo 
permite que circule esa corriente inversa de fuga disipando una pequeña cantidad de calor. 
En este proyecto vamos a ajustar la velocidad del motor desde cero, a un valor máximo y a 
continuación, tras una pausa, reducirla desde ese máximo a cero. Utilizaremos la característica 
PWM de nuestro Arduino para variar el tiempo de conducción del transistor y, en consecuencia, 
el valor medio del voltaje aplicado al motor. Con ello, modificaremos la velocidad del mismo. 
Programa: Control simple de Velocidad de un Motor DC 
/* Variando por software la velocidad de un motor DC */ 
/* Empezamos a trabajar con motores ... */ 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
6 
 
 
void setup() 
{ 
 pinMode(5, OUTPUT); 
} 
void loop() 
{ 
 for (int a=0; a<256; a++) 
 { 
 analogWrite(5, a); 
 delay(100); 
 } 
 delay(5000); 
 for (int a=255; a>=0; a--) 
 { 
 analogWrite(5,a); 
 delay(100); 
 } 
 delay(5000); 
} 
En primer lugar, definimos la patilla 5 del Arduino como salida PWM para atacar la base del 
transistor y hacerlo conmutar. 
 pinMode(5, OUTPUT); 
El núcleo de esta experiencia es el bucle for que va dando valores crecientes a la variable “a” que 
se van enviando, con intervalos de 100 ms (para dar tiempo a responder al motor), a la base del 
transistor. Con ello iremos subiendo la velocidad del motor. Al llegar a su valor máximo, 
esperamos 5 segundos y entramos en otro bucle for que hace justamente lo contario: va 
decreciendo el valor de la variable a y con ello la velocidad del motor hasta llegar a pararse (a=0). 
for (int a=0; a<256; a++) 
 { 
 analogWrite(5, a); 
 delay(100); 
 } 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
7 
 
 
Trabajo Encargado 
1.- Realiza una práctica que controle la velocidad de un motor DC mediante el valor de una 
entrada analógica que esté conectada a un potenciómetro 
2.- Realiza una práctica que gobierne la velocidad de dos motores independientemente. Cada 
motor tendrá asociado un pulsador de tal maneraque cada vez que pulsemos, se incremente 
su velocidad hasta llegar a un máximo. Superado este valor, cada pulsación siguiente irá 
decreciendo la velocidad hasta que el motor se pare 
EXPERIENCIA N° 2.- EL PUENTE H Y EL INTEGRADO L293D 
Vamos a potenciar el control del motor DC. Ahora deseamos poder invertir el sentido de giro del 
motor y regular su velocidad en cada momento. la inversión del sentido de giro del motor DC se 
puede realizar manualmente, cambiando la polaridad de sus terminales; pero queremos hacerlo 
electrónicamente. Para ello necesitamos utilizar lo que se denomina: puente en H. Un puente H es 
una forma común de controlar la velocidad y dirección de un motor DC. Inicialmente, vamos a 
utilizarlo para controlar su sentido de giro y luego volveremos a lo que hemos aprendido en la 
última sección y usar PWM para controlar su velocidad. 
La figura 6 muestra el diagrama esquemático de un puente H formado por cuatro interruptores. En 
la figura 7 se observa el sentido de giro del motor en función de la posición de los cuatro 
interruptores S1, S2, S3 Y S4. Cuando los interruptores S1 y S3 están cerrados, el motor gira en 
un sentido. Si los interruptores S2 y S4 se cierran y lógicamente se abren S1 y S3, el motor gira en 
sentido contrario al anterior ya que la corriente circula al revés. 
 
 
 
 
 
 
 
 Figura 6.- El Puente H 
La figura 6 muestra el diagrama esquemático de un puente H formado por cuatro interruptores. En 
la figura 7 se observa el sentido de giro del motor en función de la posición de los cuatro 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
8 
 
 
interruptores S1, S2, S3 Y S4. Cuando los interruptores S1 y S3 están cerrados, el motor gira en 
un sentido. Si los interruptores S2 y S4 se cierran y lógicamente se abren S1 y S3, el motor gira en 
sentido contrario al anterior ya que la corriente circula al revés. 
 
 
 
 
 
 
 
 Figura 7.- Configuración del Puente H 
Para llevar este esquema a un circuito real, podríamos sustituir los interruptores por transistores 
como se observa en la figura 8. Sin embargo, la solución definitiva que se ha adoptado, 
considerando que vamos a manejar motores de pequeña potencia, es la de utilizar un circuito 
integrado que está diseñado específicamente para esta tarea. El L293D (Figura 9) contiene dos 
puentes H integrados y proporciona una manera fácil de controlar tanto la dirección como la 
velocidad de motores DC. La ventaja de utilizar este chip es que se pueden controlar dos motores 
al mismo tiempo, además de que se puede controlar su dirección. El chip también se puede utilizar 
para controlar un motor paso a paso (PAP) que veremos más adelante. 
También, se puede usar un chip compatible pin-a-pin con el L293D. Se referencia por SN754410. 
Tiene una corriente nominal superior. Además, el chip tiene sus propios diodos internos de 
protección del motor por lo que no necesitan añadir externamente. 
 
 
 
 
 
 
 Figura 8.- Puente H con transistores PNP 
 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
9 
 
 
 
 
 
 
 
 
 
 
 
 Figura 9.- Chip puente H, el L293D 
 TABLA 1.- Descripción de los pines del chip L293D 
 
 
 
 
 
 
 
 
 
 
 
En cuanto al LD293D su patillaje y su funcionamiento se observan en la Tabla 1. El L293D tiene 
las siguientes características eléctricas: 
 Corriente de salida máxima de 1,2 amperios. 
 Corriente de salida continúa de 600 miliamperios. 
 Rango de tensión de 4,5 a 36 voltios. 
 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
10 
 
 
 Dos drivers (canal) o puentes H. 
 Se puede accionar dos motores de corriente continua o un motor paso a paso. 
Aunque el L293D puede accionar dos motores de corriente continua, solo se va mostrar cómo 
controlar uno. Puedes usar la misma técnica empleada en el caso de que vayas a utilizar dos 
motores (algo necesario en el supuesto control de un pequeño vehículo). Por otra parte, es 
necesario asegurarse de que conectamos a la misma masa las dos baterías o fuentes de 
alimentación: la del Arduino y la externa del motor. 
EXPERIENCIA N° 2.1- CONTROL DEL GIRO DE UN MOTOR DC UTILIZANDO EL 
L293D 
Se trata de utilizar el clásico chip L293D para realizar un proyecto que controle el sentido de giro 
de un motor DC. Dicho motor girará en un sentido durante un determinado tiempo, tras el cual 
invertirá su giro durante otro tiempo. 
El hardware necesario para esta práctica es el siguiente: 
Un motor DC. Una batería externa para alimentar el motor. 
Un controlador H dual L293D o equivalente. 
El Arduino, los cablecitos y la Protoboard ya se suponen a estas alturas de la asignatura 
 
 
 
 
 
 
 
 
 
 
 
 Figura 10.- Circuito de Control del giro de un motor utilizando el L293D y el Arduino UNO 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
11 
 
 
Programa: Control del Giro de un Motor Utilizando el L293D 
/* Usando el L293D */ 
/* El Arduino moviendo un motor, empezamos a tener fe en sus 
posibilidades. */ 
int enablePin = 11; 
int in1A = 4; 
int in2A = 7; 
void setup() 
{ 
 pinMode(enablePin, OUTPUT); 
 pinMode(in1A, OUTPUT); 
 pinMode(in2A, OUTPUT); 
 digitalWrite(enablePin, LOW); 
} 
void loop() 
{ 
 digitalWrite(in1A, HIGH); 
 digitalWrite(in2A, LOW); 
 digitalWrite(enablePin, HIGH); 
 delay (5000); 
 digitalWrite(enablePin,LOW); 
 delay(2000); 
 digitalWrite(in1A, LOW); 
 digitalWrite(in2A, HIGH); 
 digitalWrite(enablePin, HIGH); 
 delay (5000); 
EL MOTOR GIRA EN UN SENTIDO 
EL MOTOR SE FRENA 
EL MOTOR GIRA EN 
EL OTRO SENTIDO 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
12 
 
 
 digitalWrite(enablePin, LOW); 
 delay(2000); 
} 
Para analizar el sketch es aconsejable echar un vistazo a la siguiente Tabla 2. Nos resume el 
funcionamiento del motor en función de los estados lógicos de los pines de control: 1,2 EN, 1A Y 
2A del chip L293 que provienen de las patillas11,4 y 7 de nuestro Arduino. 
 Tabla 2.- Funcionamiento del motor 
1,2 EN 1A 2ª MOTOR 
ALTO BAJO ALTO Giro en sentido horario 
ALTO ALTO BAJO Giro en sentido antihorario 
ALTO BAJO BAJO Freno del motor 
ALTO ALTO ALTO Freno del motor 
BAJO X X Freno del motor 
 
 Examinando la tabla, se puede ver que para que el motor funcione la patilla de habilitación (l,2EN) 
debe ser alta. Los pines 1A y 2A controlan el sentido de giro del motor. Durante un ciclo de trabajo, 
se habilita el puente H estableciendo el pin 1,2 EN (enable) en alto. Los pines in1A y in2A que 
están conectados a las patillas 2 (1A) Y 7 (2A) en el L293D, cambian de estado lógico en el bucle 
principal de manera que el motor gira en una dirección durante cinco segundos y luego en la otra 
dirección durante cinco segundos, con un intervalo de dos segundos en el 
medio. 
Es necesario intercalar estas esperas con la función delay() para dar tiempo al motor a reponerse 
ya que es un dispositivo «lento» en comparación con el Arduino. El valor de estos retardos se 
puede ajustar sobre la marcha cuando afinemos el funcionamiento del circuito. 
EXPERIENCIA N° 2.2.- CONTROL TOTAL DE UN MOTRO DC UTILIZANDO EL 
L293D (MOTOR-DC) / Animated DC Motor model With Inertia and Loading 
Sin necesidad de modificar en esencia el hardware de la práctica anterior, podemos añadir más 
control al motor DC. Se va a regular la velocidad del mismo con solo cambiar algunas cosas en el 
sketch utilizado anteriormente. 
Universidad Nacional de laFacultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
13 
 
 
En la sección anterior se trató el tema de cómo la técnica PWM puede usarse para controlar la 
velocidad de un motor. Ahora se usa esta técnica en el pin de habilitación (1,2 EN) para activar y 
desactivar el puente H 
Programa: Control Total de un Motor DC 
/* Control total de un motor oc: sentido de giro y velocidad.*/ 
/* Ya nos queda menos para pensar en hacer un robotito móvil.*/ 
int enablePin = 11; 
int in1A = 4; 
int in2A = 7; 
int Pot = A0; 
int botonD = 1; 
int botonI = 2; 
int botonParo = 3; 
int estadol = 0; 
int estado2 = 0; 
int estado3 = 0; 
void setup() 
{ 
 pinMode(botonD, INPUT); 
 pinMode(botonI, INPUT); 
 pinMode(botonParo, INPUT); 
 pinMode(enablePin, OUTPUT); 
 pinMode(in1A, OUTPUT); 
 pinMode(in2A, OUTPUT); 
} 
void Derecha() 
{ 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
14 
 
 
 int Velocidad = analogRead(Pot); 
 Velocidad = map(Velocidad, 0, 1024, 0, 256); 
 digitalWrite(in1A, HIGH); 
 digitalWrite(in2A, LOW); 
 digitalWrite(enablePin, HIGH); 
 analogWrite(enablePin, Velocidad); 
 delay(50); 
} 
void Izquierda () 
{ 
 int Velocidad = analogRead(Pot); 
 Velocidad = map(Velocidad, 0, 1024, 0, 256); 
 digitalWrite(in1A, LOW); 
 digitalWrite(in2A, HIGH); 
 digitalWrite(enablePin, HIGH); 
 analogWrite(enablePin, Velocidad); 
 delay(50); 
} 
void Paro () 
{ 
 digitalWrite(in1A, LOW); 
 digitalWrite(in2A, LOW); 
 digitalWrite(enablePin, LOW); 
} 
void loop() 
{ 
MAPEAMOS LOS RANGOS 
CONTROL PWM EN 
LA PATILLA ENABLE 
MAPEAMOS LOS RANGOS 
CONTROL PWM EN LA 
PATILLA ENABLE 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
15 
 
 
 estadol = digitalRead(botonD); 
 if (estadol == HIGH) 
 { 
 Derecha(); 
 } 
 estado2 = digitalRead(botonI); 
 if (estado2 == HIGH) 
 { 
 Izquierda(); 
 } 
 estado3 = digitalRead(botonParo); 
 if (estado3 == HIGH) 
 { 
 Paro(); 
 } 
} 
Este programa controla el movimiento de un motor mediante tres interruptores; izquierda, derecha 
y paro. Por otra parte, regulamos la velocidad mediante un potenciómetro conectado en la patilla 
analógica A0. El esquema se muestra en la figura 11. 
Se he mostrado cómo utilizar este circuito para controlar un motor. Si quieres añadir otro motor 
(un vehículo tiene dos ruedas de tracción y cada una de ellas necesita un motor) el control de dos 
motores es solo una cuestión de utilizar el otro puente H que contiene el L293D. 
El circuito que se ha construido en esta práctica solo es adecuado para el control de motores 
pequeños. Motores de corriente continua de gran tamaño pueden ser controlados de manera similar 
con PWM, pero requieren componentes que manejen mayores potencias, tal es el caso de los 
transistores MOSFET. Es decir, habría que construir el puente o los puentes H con dispositivos 
discretos basados en este tipo de transistores. La disipación de su potencia es elevada por lo que 
vas a necesitar dotarlos de disipadores adecuados. 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
16 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Figura 11.- Diagrama del circuito de control total de un motor DC 
Trabajo Encargado 
Diseña un proyecto basado en el L293D que te permita seleccionar mediante interruptores o 
pulsadores, el sentido de giro de un motor DC. Además, deberá poder regularse la velocidad de 
giro mediante un potenciómetro o trimrner. 
Diseña un proyecto que obtenga la temperatura de un sensor LM35 y la muestre en cualquier tipo 
de LCD. Si la temperatura se hace mayor que 30 °C se accionará un motor DC que no dejará de 
girar hasta que dicha temperatura baje por debajo de los 25 °C. 
EXPERIENCIA 3.- FUNCIONAMIENTO DE UN MOTOR PASO A PASO (PAP) 
Un motor paso a paso es un tipo especial de motor que puede moverse en una serie de pasos 
discretos. Motores paso a paso son una buena opción para los proyectos que requieren un 
movimiento controlado y preciso. Los proyectos típicos incluyen las impresoras 3D, sistemas de 
posicionamiento del telescopio, control numérico por computadora (CNC) de tornos, etc. 
Como se comentó anteriormente, se pueden obtener motores paso a paso de viejas impresoras de 
inyección de tinta o de las impresoras láser. En ellas, estos motores se usan para mover los 
cabezales de impresión y para controlar la alimentación del papel. 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
17 
 
 
En la figura 12 se puede observar el aspecto del motor paso a paso que se usaría para construir una 
impresora 3D tipo Prusa 2 (A los que se atrevan a realizarlo: que la fuerza le acompañe...). 
Los motores paso a paso se pueden clasificar en términos de la torsión que pueden proporcionar. 
Como el par es proporcional a la longitud del cuerpo, cuanto más largo sea el cuerpo, mayor será 
el par de torsión que pueden desarrollar. 
El ángulo de paso es también una forma de clasificarlos. Un motor paso a paso con un ángulo de 
9 grados requerirá 40 pasos para completar una vuelta completa. El par o torque es una medida de 
la fuerza de rotación que un motor puede proporcionar. A menudo se expresa en onzas-pulgadas 
o en kg/cm. 
El PAP de la figura 12 es un tipo NEMA 17 bipolar que tiene un ángulo de paso de 1.8° (200 pasos 
por vuelta) y cada bobinado requiere 1.2 A a 4 V. Es capaz de cargar con 3.2 kg/cm (44 oz-in). 
 
 
 
 
 
 
 
 
 Figura 17.- PAP NEMA 17 
 Tabla 3.- Diferencia entre PAP bipolares y unipolares 
Unipolares Bipolares 
Más sencillo de controlar Más eficiente 
Menor coste Mayor torque 
Cinco o seis conexiones de los cables Cuatro conexiones de los cables 
Mayor velocidad de rotación Construcción más simple 
 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
18 
 
 
La elección de un motor paso a paso puede ser un poco complicada dependiendo de su uso previsto. 
Para los proyectos que requieran un alto par extremadamente preciso, selecciona uno bipolar; para 
proyectos más simples, el tipo unipolar es más barato y es una buena opción. Aunque hoy en día, 
los motores bipolares se están volviendo más populares debido a la reducción en el costo de los 
integrados necesarios para su control. 
Echemos un vistazo a los pasos necesarios para identificar un tipo de motor PAP y las conexiones 
del mismo. Si observamos el PAP que se utilizaría en la construcción de la impresora 3D, averiguo 
a través de las características proporcionadas por el fabricante que posee un ángulo de paso de 1,8 
grados y que requiere 1.2 amperios. Como tiene un ángulo de paso de 1,8 grados, podemos calcular 
el número de pasos para completar una vuelta al dividir 360 grados por ese ángulo: 
360/1,8 = 200 pasos. 
Sobre la base de este cálculo, el motor paso a paso necesita 200 pasos para completar una 
revolución. Además, el motor cuenta con cuatro cables de conexionado por lo que deduzco que es 
de tipo bipolar. Por otra parte, el color de dichos cables es fundamental para conocer a que bobinas 
están conectadas. En la figura 13 se observa el esquema interno de este motor bipolar y la 
disposición de sus dos bobinas con los colores asociados a cada terminal. 
 
 
 
 
 
 
 Figura 13.- Esquema interno del motor bipolar 
En esta estupenda página disponemos de un tutorial muy clarito que explica la teoría de dichos 
motores PAP: http://www.monografias.com/trabajos37/motores/motores.shtml En ella se nos 
muestra una técnicasencilla basada en un polímetro para averiguar la polaridad de los terminales. 
La usaremos cuando no dispongamos de esta información clave del motor porque la impresora que 
hemos reciclado es muy vieja. 
Pero no siempre es adecuado utilizar PAP bipolares. Podemos usar los PAP unipolares mucho más 
baratos y más fáciles de encontrar en viejos aparatos olvidados en el trastero. Vamos a verlos. 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
19 
 
 
Los motores paso a paso unipolares (Figura 14) básicamente se componen de dos bobinas con una 
derivación en el centro. las derivaciones del centro son llevadas fuera del motor como dos cables 
separados o conectados entre sí internamente. Como resultado de esto, los motores unipolares 
tienen 5 o 6 cables. Independientemente del número de cables, los motores unipolares son 
manejados de la misma manera. El cable de toma central (1,2) está ligado a una fuente de 
alimentación y los extremos de las bobinas son llevados alternativamente a tierra. 
 
 
 
 
 
 
 
 
 
 
 Figura 14.- Motor Paso a Paso Unipolar 
 
 
 
 
 
 
 
 
 
 Figura 15.- Sección transversal de un motor paso a paso unipolar 
 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
20 
 
 
La figura 15 muestra la sección transversal de un motor paso a paso unipolar de 30 grados. El 
bobinado número 1 del motor se distribuye entre los polos de la parte superior e inferior del estator, 
mientras que la bobina número 2 del motor se distribuye entre los polos izquierdo y derecho del 
rotor. El rotor es un imán permanente con seis polos, tres al norte y tres al sur, como se muestra 
en la figura anterior. Para hacer girar un motor unipolar se aplican impulsos en secuencia a sus 
devanado. La secuencia de estos impulsos se aplica con un controlador electrónico externo como 
nuestro Arduino. Los motores unipolares se pueden hacer avanzar a frecuencias de audio, lo que 
les permite girar muy velozmente. Este es el motivo por el que se suele decir que un motor «gruñe», 
debido a la frecuencia a la que se produce la conmutación. Con Arduino se les puede hacer arrancar 
y detenerse en cualquier instante y en una posición determinada. Por otra parte, para gobernar estos 
motores tenemos una ventaja respecto a los bipolares: no necesitamos un L293, sino que 
utilizaremos un array de transistores Darlington integrado (ULN2003A) que es sensiblemente más 
barato. 
La idea al manejar un motor paso a paso Unipolar es ir «encendiendo» y «apagando» las bobinas 
de a pares siguiendo una determinada secuencia, como se muestra en la siguiente tabla, extraída 
de http://www.todorobot.com.ar/informacion/tutorial%20stepper/stepper-tutorial.htm 
EXPERIENCIA 3.1.- Giro de un Motor PAP Unipolar utilizando el ULN2003A 
Muchas veces se rehúye del uso de los motores unipolares porque se piensa que son difíciles de 
controlar. Tenemos enfrente los bipolares que nos hacen un guiño amistoso para hacerse querer. 
Sin embargo, esto no es así. Vamos a realizar una experiencia que demuestra que todo es producto 
de falsos perjuicios. En este caso, haremos girar un motor unipolar en un sentido durante una vuelta 
y, después, otra vuelta en el sentido contrario, usaremos el ULN2003A. 
 
 
 
 
 
 
 
 Figura 16.- Descripción pines del ULN2003A 
 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
21 
 
 
Según el fabricante el terminal 1 (color rosa) y el 3 (color amarillo) forman una bobina. El terminal 
2 (color naranja) y el 4 (color azul) constituyen la otra bobina del motor. El hilo que sobra es el 
común y debe ir a alimentación. El listado del código se muestra a continuación: 
Programa: Control de un PAP Unipolar: 
/* Motor Unipolar y ULN2003A */ 
/* Cuidado con 1as conexiones que si se hace ma1 el motor ni 
se inmuta */ 
int pin1=8; 
int pin2=10; 
int pin3=9; 
int pin4=11; 
int tiempo=5; 
int vuelta=2000; 
int cuenta=0; 
void setup() 
{ 
 pinMode(pin1,OUTPUT); 
 pinMode(pin2,OUTPUT); 
 pinMode(pin3,OUTPUT); 
 pinMode(pin4,OUTPUT); 
} 
void loop() 
{ 
 digitalWrite(pin1,HIGH); 
 digitalWrite(pin2,HIGH); 
 digitalWrite(pin3,LOW); 
 digitalWrite(pin4,LOW); 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
22 
 
 
 cuenta++; 
 delay(tiempo); 
 
 digitalWrite(pin1,LOW); 
 digitalWrite(pin2,HIGH); 
 digitalWrite(pin3,HIGH); 
 digitalWrite(pin4,LOW); 
 cuenta++; 
 delay(tiempo); 
 
 digitalWrite(pin1,LOW); 
 digitalWrite(pin2,LOW); 
 digitalWrite(pin3,HIGH); 
 digitalWrite(pin4,HIGH); 
 cuenta++; 
 delay(tiempo); 
 
 digitalWrite(pin1,HIGH); 
 digitalWrite(pin2,LOW); 
 digitalWrite(pin3,LOW); 
 digitalWrite(pin4,HIGH); 
 cuenta++; 
 delay(tiempo); 
 
 if(cuenta>=vuelta) 
 { 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
23 
 
 
 int aux=pin2; 
 pin2=pin4; 
 pin4=aux; 
 cuenta=0; 
 } 
} 
Observamos que la secuencia que le enviamos al motor consta de 4 pasos. Cada uno de ellos 
polariza las dos bobinas de una determinada manera para mover el motor. Si no lo entiendes bien, 
estudia la experiencia anterior. Es importante añadir que este tipo de motor en particular tiene 
2000 pasos por vuelta. Para cambiar el sentido de giro invertimos uno de los pares de la bobina (1-
3 o 2-4). Con la variable tiempo cambiamos la velocidad del PAP. 
En la figura 17 observamos la práctica funcionando en Proteus. El IDE de Arduino nos hace la 
vida más fácil y luminosa, incluyendo una librería estupenda que nos evita confundirnos en las 
secuencias de los motores unipolares. Ahora la aplicaremos en el control de los bipolares. 
 
 
 
 
 
 
 
 
 
 Figura 17.- Diagrama del circuito control de un PAP Unipolar con el ULN2003A 
TIP 1: Librería “Steeper.h”: Simplificando las cosas: 
El IDE de Arduino tiene un excelente soporte para motores paso a paso y proporciona una librería 
denominada Steeper.h que se puede utilizar con este tipo de motor, ya sea bipolar o unipolar. Esta 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
24 
 
 
librería presenta tres funciones principales que controlan la velocidad y dirección de la rotación 
del motor paso a paso. 
La primera de las funciones se llama Stepper() y ofrece dos posibilidades de trabajo, dependiendo 
de los circuitos utilizados para controlar el PAP, ya que es posible controlarlo utilizando solo dos 
pines del Arduino añadiendo componentes adicionales. Estas son las dos posibilidades: 
Stepper (number_steps, pin1, pin2) 
Stepper (number_steps, pin1, pin2, pin3, pin4) 
La variable number_steps es el número de pasos que el PAP necesita para completar una 
revolución o vuelta, que si no lo recuerdas, se puede calcular dividiendo 360 entre el paso angular. 
Por ejemplo, si tienes un motor con un ángulo de paso de 1,5 grados, el cálculo es la siguiente: 
360/ 1,5 = 240 pasos 
Las variables pin1, pin2, pin3 y la opcional pin4 son los pines digitales del Arduino que se utilizan 
para controlar el motor. la segunda función es la denominada setSpeed(). Esta función, que es 
opcional, ajusta la velocidad del motor de giro en revoluciones por minuto (RPM). Esta función, 
en realidad, no activa el motor, pero sí establece la velocidad a la que girará cuando se inicializó 
con la función anterior Stepper(). 
setSpeed(rpm) 
La última función es la llamada step(). Esta función mueve el motor el númerode pasos 
especificados: un número negativo hace que el motor paso a paso gire en un sentido. Un número 
positivo provoca que gire en el sentido contrario. 
steps(num_steps) 
La velocidad a la que el motor PAP se mueve entre los pasos se establece por la función setSpeed(). 
Cuando no utilizamos esta función, el motor se moverá tan rápido entre los pasos como sea capaz 
Ahora que ya has visto las funciones disponibles de la famosa librería, vamos a usar el motor 
PAP en una experiencia muy sencilla. 
EXPERIENCIA 3.2.- Control Básico de un PAP Bipolar utilizando el L293D 
Utilizamos un ejemplo que viene contenido en el IDE de nuestro Arduino. Está bajo la carpeta de 
ejemplos, en la subcarpeta Stepper y aparece con el nombre: stepper_oneStepAtATime. 
El hardware necesario para esta práctica es el siguiente: 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
25 
 
 
Un motor paso a paso (PAP). Una fuente de alimentación o batería externa de 12 V. 
El circuito integrado dual L293D. 
El L293 puede trabajar con un PAP un bipolar o unipolar. En la práctica lo haremos con uno 
bipolar. Este ejemplo es una estupenda manera de comprobar que tu motor paso a paso está 
conectado correctamente. 
Programa: Probando el PAP (MOTOR-BISTEPPER) 
/*Diagnosticando las conexiones de un motor paso a paso*/ 
/*Si esto funciona ya podemos olvidarnos del hardware*/ 
#include<Stepper.h> 
const int pasoPorRevolucion=200; 
Stepper mypap(pasoPorRevolucion,8,9,10,11); 
int pasoCont = 0; 
void setup() 
{ 
 Serial.begin(9600); 
} 
void loop() 
{ 
 mypap.step(1); 
 Serial.print("pasos:"); 
 Serial.print(pasoCont); 
 pasoCont++; 
 delay(500); 
} 
La primera línea del sketch carga la librería paso a paso. Ello es siempre necesario porque incluso, 
aunque la librería se proporciona como parte del IDE de Arduino, no es parte de su núcleo de 
librerías. 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
26 
 
 
#include<Stepper.h> 
A continuación, ajustamos el número de pasos de nuestro PAP, que en este caso es de 200, aunque 
podría ser otro número dependiendo del motor que tengas entre las manos. Además, definimos las 
patillas que van a controlarlo desde el Arduino. 
const int pasoPorRevolucion=200; 
Stepper mypap(pasoPorRevolucion,8,9,10,11); 
Durante el bucle de configuración, configuramos el puerto serie para que podamos ver en el 
programa monitor del PC el número de pasos recorridos 
 Serial.begin(9600); 
En el bucle principal el motor paso a paso se mueve un paso a la vez. El número de pasos se envía 
como salida al puerto serie visualizándose en el programa monitor. la variable pasoCont se 
incrementa en 1, y tras una espera de 500 milisegundos, volvemos al principio del bucle y 
movemos el motor otro paso más. y así continuamente. 
mypap.step(1); 
 Serial.print("pasos:"); 
 Serial.print(pasoCont); 
 pasoCont++; 
 delay(500); 
Es el momento de observar el esquema (Figura 18) con las conexiones entre el motor y Arduino. 
Como se observa en la figura 18, los pines digitales 8 al 11 del Arduino se utilizan para 
proporcionar las entradas de control del L293D. los pines 1 y 9 del L293D están ligados a la 
alimentación de 5 voltios de tal manera que los puentes H del integrado siempre están habilitados 
(cuando se controló el motor de corriente continua, se utilizaron estos pines para proporcionar el 
control PWM cambiando de estado alto a bajo). 
El Pin 8 del L293D proporciona la alimentación del motor. En este caso es de 12 V. Es un valor 
habitual en los motores bipolares empleados en impresoras 3D. El PAP conecta una de sus bobinas 
a los pines de salida 3 y 6, y la otra a los pines 11 y 14 del chip L293D. 
Si utilizamos un motor paso a paso unipolar habría que conectar la toma central de las bobinas a 
tierra como hemos visto antes. 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
27 
 
 
Usa la función setSpeed() para variar la velocidad de un PAP mediante un potenciómetro 
conectado a una entrada analógica A0 del Arduino. 
 
 
 
 
 
 
 
 
 
 
 
 
 Figura 18.- Diagrama del Circuito de Control Básico de un PAP Bipolar utilizando el L293D 
EXPERIENCIA 3.3.- Utilizando la librería “Stepper.h”, en un PAP unipolar 
Realicemos una experiencia que haga girar un motor PAP unipolar mediante los pines digitales 7, 
8, 9 y 10 siguiendo la posición de un potenciómetro conectado al pin analógico 5. Utilicemos la 
librería Stepper.h. 
El hardware necesario para esta práctica es el siguiente: 
• Un motor paso a paso (PAP) Unipolar ST-28 
• Una fuente de alimentación o batería externa de 9 V. 
• El circuito integrado ULN2003A 
Programa: Control básico de un PAP unipolar 
/*Control basico de un motor Unipolar*/ 
/*Vamos con los unipolares que son mas baratos*/ 
#include<Stepper.h> 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
28 
 
 
#define STEPS 2000 
int previo = 0; 
void setup() 
{ 
 stepper.setSpeed(30); 
} 
void loop() 
{ 
 int val = analogRead(5); 
 stepper.step ((val - previo/5); 
 previo = val; 
} 
El esquema dibujado y simulado en Proteus e muestra en la figura 19. 
 
 
 
 
 
 
 
 
 
 Figura 19.- Circuito de Control Motor PAP Unipolar 
Trabajo Encargado 
Diseña un proyecto en el que gobiernes el motor PAP unipolar de un Parabrisas de un coche. 
Considera un ángulo de 120º de movimiento en los dos sentidos. 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
29 
 
 
EXPERIENCIA N° 4.- FUNCIONAMIENTO DE UN SERVOMOTOR (SERVO) 
Los servomotores son muy comunes en el mundo del aeromodelismo ya que son excelentes para 
controlar los alerones en pequeños aviones o timones en los barcos radio-controlados. Un 
servomotor es un motor con un engranaje en el que se puede controlar un ángulo de giro (por lo 
general entre 0 y 180 grados). Normalmente es alimentado por una tensión pequeña de 
aproximadamente 5 voltios. Debido a su bajo costo y su sencillez de control, son ideales para 
utilizar en una amplia variedad de proyectos que requieran un movimiento preciso. 
Un servomotor (Figura 20) tiene tres conexiones: tierra, alimentación y una conexión de control o 
señal. El cable de alimentación suele ser rojo y debe ser conectado a 5 V. El cable a tierra es 
normalmente de color negro o marrón. El cable de señal es generalmente de color amarillo, naranja 
o blanco y debe ser conectado a un pin digital del Arduino. La señal de control actúa directamente 
sobre el ángulo de giro del servomotor. Y lo hace mediante la recepción de un pulso. El ancho del 
pulso indica el valor del ángulo de giro del servo entre 0 y 180grados. El pulso tiene que ser 
repetido cada 20 milisegundos o el motor volverá a una posición arbitraria. La figura 21 muestra 
la relación entre el ancho de pulso y el ángulo de servo. 
 
 
 
 
 
 
 
 
 
 Figura 20.- Servomotor 
Examinado la figura 21, la posición neutra o centrada para un servo es de 90 grados. Es obtenida 
con una anchura de impulso de 1,5 milisegundos. El ancho de pulso oscila aproximadamente entre 
1,0 milisegundo y 2,0 milisegundos, situando el servomotor con un ángulo de 0 grados para el 
primer ancho de pulso y 180 grados para los 2 ms. 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
30 
 
 
 
 
 
 
 
 
 
 
 
 Figura 21.- Relación entre el ancho de pulso y el ángulo de servo. 
EXPERIENCIA4.1.- Librería “Servo.h”: Simplificando las Cosas 
Del mismo modo que en el IDE de Arduino disponíamos de una librería para manejar los motores 
PAP, ahora tenemos otra librería denominada "Servo.h" que nos ayudará a controlar un 
servomotor. De hecho, esta librería nos proporciona la capacidad de controlar hasta 12 
servomotores en un Arduino UNO y la friolera de 48 con el Mega. 
 Tabla 4.- Funciones proporcionadas por la biblioteca Servo.h 
Función Descripción 
Servo miServo Crea un objeto miServo. 
attach(pin) 
attach(pin, min, max) 
“pin” es la patilla de control desde el Arduino al 
servomotor. Los parámetros “min” y “max” son los valores 
mínimos y máximo, en microsegundos, de los valores de la 
anchura de pulso. 
writeMicroseconds(pulse_width) Establece el ancho de pulso del servo en microsegundos. 
write(angle) Establece el ángulo de rotación del servo en grados. 
read() Devuelve el último ancho de pulso expresado en grados. 
readMicroseconds() Devuelve el último ancho de pulso expresado en 
microsegundos 
attach() Asocia la variable Servo a un pin de control 
detach() Desasocia la variable Servo de su pin de control. Si todas 
las variables Servo son desasociadas, entonces los pines 9 
y 10 se pueden usar para salidas PWM 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
31 
 
 
Utilizamos de nuevo un ejemplo que viene contenido en el lDE de nuestro Arduino. Está en la ruta 
siguiente: C:\Program Files (x86)\Arduino\libraries\Servo\examples\Sweep y aparece con el 
nombre de archivo : sweep.ino 
El hardware necesario para esta práctica es el siguiente: 
• Un servomotor tipo Futaba S35 de rotación continua. (Motor-PWMSERVO) 
• Una fuente de alimentación o batería externa de 5 V (opcional). 
Para un servo modelo S35/STD de GWS el fabricante recomienda pulsos de 0,9 ms para conseguir 
el giro en el sentido de las agujas del reloj; pulsos de 1,5 ms para bloquear el motor en una posición 
y mantenerlo parado, y pulsos de 2,1 ms para que gire en el sentido antihorario. También hay que 
controlar la duración del período, que es el tiempo total de la zona activa de la señal y la zona 
inactiva. La duración del período recomendada para conseguir una velocidad óptima está entre 16 
y 23 ms. Para conectar el motor en un Arduino tendremos en cuenta los colores de los cables de 
conexión del motor. El cable marrón para GND, el cable rojo a 5 V y el cable amarillo para el pin 
de control digital. 
Si quieres profundizar un poco más en esta librería te recomiendo que le eches un vistazo al 
siguiente enlace: http://arduino.cc/es/Reference/Servo. 
Programa: Control Básico de un Servo 
/* Control Básico de un Servo*/ 
/*Jugueteando con un Servomotor*/ 
#include<Servo.h> 
Servo miservo; 
int pos = 0; 
void setup() 
{ 
 miservo.attach(9); 
} 
void loop() 
{ 
 for(pos = 0; pos < 180; pos += 1) 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
32 
 
 
 { 
 miservo.write(pos); 
 delay(10); 
 } 
 for(pos = 180; pos >= 1; pos -=1) 
 { 
 miservo.write(pos); 
 delay(10); 
 } 
 } 
La primera línea del sketch carga la librería Servo.h. Ello es siempre necesario porque incluso, 
aunque la librería se proporciona como parte del IDE de Arduino, no es parte de su núcleo de 
librerías. 
#include<Servo.h> 
A continuación, se crea un objeto Servo llamado miservo 
Servo miservo; 
En el bucle de configuración se define el pin digital 9 del Arduino como pin de control de nuestro 
servomotor. 
 miservo.attach(9); 
En el bucle principal, el código barre el servomotor de 0 a 180 grados con un retraso de 15 
milisegundos entre cada nueva posición para dar tiempo al servomotor a trasladarse al nuevo 
ángulo. A continuación, el servomotor se barre, a la inversa, desde 180 hasta O grados; de nuevo, 
con un retraso de 15 milisegundos entre cada movimiento. 
 for(pos = 0; pos < 180; pos += 1) 
 { 
 miservo.write(pos); 
 delay(15); 
 } 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
33 
 
 
 for(pos = 180; pos >= 1; pos -=1) 
 { 
 miservo.write(pos); 
 delay(15); 
 } 
 } 
Vamos a pasar ahora a construir el esquema de conexionado entre Arduino y el servo (Figura 
22). 
 
 
 
 
 
 
 
 
 
 
 
 Figura 22.- Control Motor Servo 
Aunque es posible alimentar el servomotor desde el Arduino para proporcionarle voltaje, se 
recomienda alimentarlo con una fuente de alimentación externa. 
Trabajo Encargado 
Realiza un proyecto que controle dos servomotores de tal manera que uno gire en un sentido, 
mientras que el otro servo lo haga en sentido contario. 
 
 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
34 
 
 
EXPERIENCIA N° 5.- MEJORANDO EL CONTROL CON EL MOTOR BRUSHLESS 
El motor de corriente continua típico DC ha estado vigente durante muchos años. Pero ahora le ha 
salido un serio competidor: el motor brushless. Su producción en masa ha bajado rápidamente el 
precio de estos motores de alta eficiencia. De hecho, se pueden ver «volando» en los extraños 
«drones» (cuadricópteros) que amenazan con invadir nuestro espacio aéreo en los próximos años. 
Comparados con los motores de continua clásicos, los motores sin escobillas o brushless ofrecen 
más par, son más eficientes, ofrecen una mayor fiabilidad y han reducido el ruido eléctrico. Una 
desventaja es que requieren un controlador más especializado que un motor DC, a pesar de que 
son fáciles de controlar. Estos motores a menudo son etiquetados con un valor de KV, que es el 
RPM teórico por voltio al que un motor puede girar. Por ejemplo en un motor de mercado de 2400 
kV que esté alimentado a 6 voltios, la velocidad máxima del motor a la que podría girar sería: 
6 x 2.400 = 14.400 RPM. 
Los motores sin escobillas son de dos tipos: inrunner y outrunner. En un motor inrunner solo el 
eje interior gira; con un motor outrunner, la capa exterior gira también. los motores inrunner 
tienden a tener una mayor kV y menos par, mientras que los de tipo outrunner tienden a ser más 
bajos en cuanto a su valor en kV pero ofrecen un par más alto. En las figuras 23 y 24 se muestran 
ambos tipos. 
 
 
 
 
 
 Figura 23.- Motor inrunner 
 
 
 
 
 Figura 24.- Motor outrunner 
 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
35 
 
 
Los motores inrunner tienden a ser utilizados para cualquier vehículo. En cambio los motores 
outrunner, normalmente, se utilizan en aeromodelismo con modelos de aviones y helicópteros. 
Para alimentar estos motores, es necesario utilizar baterías diseñadas para suministrar altos valores 
corriente. Estas pueden ser NiCd, NiMH o de litio POLYMORE (LiPo). 
Los controladores o variadores (Figura 25) de este tipo de motores se denominan ESCs (electrontc 
speed controllers) y hay que prestar atención al tipo de motores que queremos controlar debido a 
que no disponemos de un controlador universal que valga para cualquier tipo de motor. 
Una de las mejores ventajas de este tipo de controladores es que pueden ser gobernados de la 
misma manera que los servomotores. Esto significa que podemos utilizar la misma librería Servo 
que en el apartado anterior. Al igual que los servomotores, esperan un pulso cada 20 milisegundos 
con una anchura de entre 1,0 y 2,0 milisegundos. 
 
 
 
 
 
 
 Figura 25.- Controlador de motor ESC 
Con 1,0 milisegundos de pulso tendremos la velocidad más baja y con 2,0 milisegundos, la más 
alta. Seleccionado un pulso de 1,5 milisegundos provocamosla parada del motor. Cuando un 
motor y su controlador se encienden por primera vez, por motivos de seguridad, el motor 
esperará un tiempo antes de empezar a girar. En la figura 26 se observa un batería LIPO típica. 
La forma de conectar el motor a Arduino se muestra en la figura 27 
 
 
 
 
 
 
 
Figura 26.- Batería LIPO 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
36 
 
 
 
 
 
 
 
 
 
 
 
 
 Figura 27.- Forma de Conectar Arduino a un motor y a un ESCs 
EXPERIENCIA 5.1: Control Básico de un Motor brushless 
El listado del programa es casi el mismo que el de Programa: Control Básico de un Servo, salvo 
la adición de un impulso de arranque para permitir que el hardware ESC estabilice el motor. 
El hardware necesario para esta práctica es el siguiente: 
• Un motor brushless tipo outrunner de 1000 kV (Figura 28). 
• Un variador de velocidad ESC. 
• Una fuente de alimentación o batería externa de 12 V. 
 
 
 
 
 
 
 
 Figura 28.- Motor brushless tipo outrunner de 1000 kV 
 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
37 
 
 
 
Características del motor 
Modelo: A2212/13. Bateria:2-3 Li-Poly (11.1V). RPM/V:1000 RMP/V. Eficiencia máxima: 80 
%. Eficiencia máxima: 4-10 A (>75 %). Corriente sin carga: 10 V a 0,5 A. Corriente máxima: 12 
A/60 segundos. Resistencia interna: 90 mΩ. Dimensiones: 27.5 x 30 mm. Diámetro del eje: 3.17 
mm. Peso:47 gramos 
Programa: Control básico de un motor sin escobillas en un sentido de giro 
void setup() 
{ 
 miservo.attach(9); 
 miservo.write(pos); 
 delay(1000); 
} 
void loop() 
{ 
 for(pos = 0; pos < 180; pos += 1) 
 { 
 miservo.write(pos); 
 delay(15); 
 } 
 for(pos >= 180; pos >= 1; pos -= 1) 
 { 
 miservo.write(pos); 
 delay(15); 
 } 
} 
Estas dos funciones establecen un pulso de inicio para inicializar el motor. 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
38 
 
 
 miservo.write(pos); 
delay(1000); 
Cuidado con el precio de los cargadores de las baterías que acompañan a este tipo de motores. 
Suelen ser caras (>300 soles). 
Trabajo Encargado 
Escribe un programa que controle la velocidad de un motor y su sentido de giro en los dos sentidos. 
EXPERIENCIA N° 6.- HACIENDOLO TODO MAS FACIL CON LAS SHIELDS 
Como vimos anteriormente las shíelds extienden funcionalidad al Arduino. Existen muchos tipos 
de shields dedicadas al control de motores. Vamos a examinar una de ellas; me parece la más 
documentada, es razonable en cuanto al precio (unos 120 soles) y fácil de conseguir. 
Se denomina: Arduino Motor Shield Rev3 (Figura 29). Se trata de la shield oficial del equipo de 
Arduino por lo que tendremos abundante información en su página web. 
La Arduino Motor Shield se basa en el L298 que es un controlador de puente H dual diseñado para 
manejar grandes cargas inductivas como relés, solenoides, DC y motores paso a paso. Te permite 
conducir dos motores de corriente continua con tu placa Arduino, además del control de la 
velocidad y la dirección de cada uno de forma independiente. También se puede medir el consumo 
de corriente del motor de cada motor, entre otras características. 
 
 
 
 
 
 
 
 
 
 
 Figura 29.- Arduino Motor Shield Rev3 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
39 
 
 
Características 
Voltaje de funcionamiento 5 V a 12V. 
Controlador del motor L298P, dos motores DC o 1 motor paso a paso. 
Max 2 A por canal o 4 A máx (con fuente de alimentación externa). 
Detección de corriente 1.65V A. 
Función de freno. 
Esta shield tiene dos canales separados denominados A y B donde cada uno usa 4 de los pines de 
Arduino para conducir y sensar el motor. Se puede utilizar cada canal por separado para conducir 
dos motores DC o combinarlos para conducir un motor paso a paso. Los cables de la figura deben 
conectarse bien a la placa según el par de bobinas o según los colores que se indican: bobina 
1(cables azul y rojo), bobina 2 (cables negro y azul). Mira en las características de tu motor si los 
colores son diferentes. 
 Tabla 5.- Pines divididos por cada canal. 
 
 
 
 
Además, tiene dos pines de alimentación exterior para el motor a los cuales conectaremos una 
batería externa. la conexión ente esta placa y un motor bipolar se muestran en la figura 30. En el 
siguiente enlace tienes toda la información oficial de esta shield: 
http://arduino.cc/en/Main/ArduinoMotorShieldR3. 
 
 
 
 
 
 Figura 30.- Conexión entre la Arduino Motor Shield y un motor bipolar 
Función Pines Canal A Pines Canal B 
Dirección D12 D13 
PWM D3 D11 
Brake D9 D8 
Current Sensing A0 A1 
 
http://arduino.cc/en/Main/ArduinoMotorShieldR3
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
40 
 
 
EXPERIENCIA 6.1: Control de un Motor bipolar utilizando la Arduino Motor Shield 
Vamos a realizar una práctica utilizando esta shield para controlar un motor paso a paso bipolar 
utilizando la librería Stepper.h. 
El hardware necesario para esta práctica es el siguiente: 
Un motor PAP bipolar. 
Una Arduino Motor Shield. 
Una fuente de alimentación o batería externa de 9 V. 
Programa: Control de un motor bipolar utilizando la Arduino Motor Shield 
/* Control de un motor bipolar utilizando una shield*/ 
/* El motor gira una vuelta en un sentido y otra vuelta 
 en el sentido contrario*/ 
/* Merece la pena gastarse 120 soles en esta placa*/ 
#include<Stepper.h> 
#define motorPasos 200 
#define motorPin1 13 
#define motorPin2 12 
Stepper miStepper(motorPasos, motorPin1, motorPin2); 
void setup() 
{ 
 const int pwm_cha = 3; 
 const int pwm_chb = 11; 
 
 pinMode(pwm_cha, OUTPUT); 
 pinMode(pwm_chb, OUTPUT); 
 
 digitalWrite(pwm_cha, HIGH); 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
41 
 
 
 digitalWrite(pwm_chb, HIGH); 
 
 miStepper.setSpeed(100); 
 Serial.begin(9600); 
} 
 
void loop() 
{ 
 Serial.println("En un Sentido"); 
 miStepper.step(200); 
 delay(500); 
 
 Serial.println("En el otro"); 
 miStepper.step(-200); 
 delay(500); 
} 
Enel siguiente enlace se puede visualizar un vídeo en el que explico con detalle el sketch anterior: 
http://www.youtube.com/watch?v=KSfRjcf1JTk. Además podemos ver el motor bipolar 
funcionando. 
En resumen, aconsejo encarecidamente usar este tipo de shields para controlar los motores DC, 
los PAP y Servos porque es muy sencillo y nos ahorra cableado. Sobre todo, en el caso de que 
queramos motorizar un pequeño robot u otro tipo de vehículo. 
 
 
 
 
 
http://www.youtube.com/watch?v=KSfRjcf1JTk
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
42 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
43 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Universidad Nacional de la Facultad de Ingeniería de 
 Amazonia Peruana Sistemas e Informática 
44 
 
 
 
 
 
 
 
 
 
 
 
 
	LABORATORIO DE ARQUITECTURA DE COMPUTADORAS

Continuar navegando