Arduino Manual
Arduino Manual
UNO
Configuraciones, conexiones y ejemplos
Descripcin breve
El presente documento presenta una breve descripcin del controlador UNO de Arduino, las
conexiones a sensores analgicos y digitales y sus utilizacin como elemento de control en un
Sistema de Automatizacin.
Tabla de contenidos
TABLA DE CONTENIDOS ................................................................................................. 1
EL CONTROLADOR ARDUINO. ........................................................................................ 2
EL ARDUINO UNO .............................................................................................................................................. 2
Alimentacin. ............................................................................................................................................. 4
Valores de entrada y de salida. .................................................................................................................. 5
EL ENTORNO DE DESARROLLO DE ARDUINO UNO ...................................................................................................... 6
Descarga e instalacin del Entorno. .......................................................................................................... 6
Reconocimiento de la tarjeta o modulo controlador. ................................................................................ 8
PROGRAMANDO EL CONTROLADOR. ...................................................................................................................... 10
Estructura de un programa en Arduino. .................................................................................................. 13
El controlador ARDUINO.
Arduino es una plataforma de hardware libre, basada en una placa con un microcontrolador y un
entorno de desarrollo, diseada para facilitar el uso de la electrnica en proyectos
multidisciplinares.
El hardware consiste en una placa con un microcontrolador Atmel AVR y puertos de entrada/salida.
Los microcontroladores ms usados son: Atmega168, Atmega328, Atmega1280 y ATmega8 que por
su sencillez y bajo coste permiten el desarrollo de mltiples diseos. Por otro lado el software
consiste en un entorno de desarrollo que implementa el lenguaje de programacin
Processing/Wiring y el cargador de arranque que es ejecutado en la placa.
Desde octubre de 2012, Arduino usa tambin microcontroladores CortexM3 de ARM de 32 bits, que
coexistirn con las ms limitadas, pero tambin econmicas AVR de 8 bits. ARM y AVR no son
plataformas compatibles a nivel binario, pero se pueden programar con el mismo IDE de Arduino y
hacerse programas que compilen sin cambios en las dos plataformas. Eso s, los microcontroladores
CortexM3 usan 3,3V, a diferencia de la mayora de las placas con AVR que generalmente usan 5V.
Sin embargo ya anteriormente se lanzaron placas Arduino con Atmel AVR a 3,3V como la Arduino
Fio y existen compatibles de Arduino Nano y Pro como Meduino donde se puede conmutar el
voltaje.
El entorno de desarrollo integrado es de libre utilizacin y puede descargarse gratuitamente. Una
caracterstica importante de los controladores Arduino es que pueden tomar informacin del
entorno a travs de sus entradas analgicas y digitales, puede controlar luces, motores y otros
actuadores. El microcontrolador en la placa Arduino se programa mediante el lenguaje de
programacin Arduino (basado en Wiring) y el entorno de desarrollo Arduino (basado en
Processing). Los proyectos hechos con Arduino pueden ejecutarse sin necesidad de conectar a un
computador.
Uno de los dispositivos Arduino ms utilizados es el Arduino UNO.
EL Arduino UNO
El Arduino Uno es una plataforma electrnica microcontrolada basada en el ATmega328. Dispone
de 14 pines digitales de entrada / salida (de los cuales 6 pueden utilizarse para salidas PWM), 6
entradas analgicas, un resonador cermico de 16 MHz, una conexin USB, un conector de
alimentacin, un conector ICSP, y un botn de reinicio (reset).
Botn de reset
SCL
SDA
Referencia Analgica
Tierra digital
Vin
Tierra
IOREF
RESET
3.3.V
5V
Alimentacin externa
de 7 a 12 Vdc
Entradas/Salidas
Analgicas
Arduino UNO contiene todo lo necesario para dar soporte al microcontrolador; basta con conectarlo
a un ordenador con un cable USB o alimentar con un adaptador de CA o la batera a CC para empezar
a trabajar con l.
Alimentacin.
Arduino puede estar alimentado por dos vas:
Conexin USB (que proporciona 5 V).
Conector de alimentacin (que normalmente ser una pila de 9 V o fuente de alimentacin,
que se recomienda entre 7 12 V).
Los pines de alimentacin de Arduino son para alimentar los circuitos externos de prototipos,
breadboard o protoboard:
La ltima versin del IDE de ARDUINO es la 1.0.6. Una vez descargado el ejecutable del instalador,
procedemos a correrlo:
Se instalan los drivers de Arduino, aceptando la confianza en el software de Arduino LLC y dando
clic en Instalar:
Al hacer efectiva la conexin, la computadora reconoce el dispositivo e instala los drivers, mediante
la secuencia de proceso siguiente:
Reconocimiento del dispositivo e inicio del proceso de instalacin del controlador
Programando el controlador.
Al hacer doble clic sobre el icono de Arduino, se abrir la aplicacin:
10
En la parte inferior derecha de esta ventana se lee el controlador conectado y el puerto que ocupa
en este caso dice Arduino Uno on COM3, esta informacin no es confiable, pues la misma aparece
incluso si la tarjeta no se encuentra presente, por lo que es necesario seleccionar la tarjeta del
submen Tarjeta en el men Herramientas:
Y luego el puerto de comunicaciones del submen Puerto Serial, en el mismo men Herramientas:
Al realizar cualquier programa, es necesario considerar el hecho de que este debe ser compilado
(proceso de bsqueda de errores de sintaxis y transformacin a programa de bajo nivel reconocible
por el controlador) y luego transferido al Arduino UNO. Estos dos procesos los podemos hacer de
dos formas diferentes. Primero a travs de la opcin Verificar/Compilar ubicada en Sketch y luego
la opcin Cargar del men Archivo, o a travs de los iconos de acceso directo:
Compilar/Verificar
Cargar
El programa a ser compilado y cargado es aquel ubicado en el editor del programa, que es la porcin
de la ventana, editable y que se nomina por defecto como sketch_jan20a, que realmente es la unin
de la palabra sketch (boceto) ms el mes y da en el que se realiza el archivo y la letra a, en este caso
jan de January (Enero en ingls) y 20 por el da 20.
rea de programacin
12
void setup()
{
inMode(pin, OUTPUT);
// Establece 'pin' como salida
}
void loop()
{
digitalWrite(pin, HIGH);
// Activa 'pin'
delay(1000);
// Pausa un segundo
digitalWrite(pin, LOW);
// Desactiva 'pin'
delay(1000);
}
Como se observa en este bloque de cdigo cada instruccin acaba con ; y los comentarios se
indican con //. Al igual que en C se pueden introducir bloques de comentarios con /* ... */. Antes
de Setup() es posible definir variables globales, as:
13
14
15
16
17
void setup()
18
{
Serial.begin (9600);
pinMode (ledpin, OUTPUT);
}
void loop()
{
digitalWrite (ledpin, HIGH);
delay(1000);
digitalWrite (ledpin, LOW);
delay(1000);
}
19
El software para leer el voltaje enviado por el potencimetro a la entrada analgica 0 ser entonces:
int potpin = A0;
int valorpot = 0;
void setup()
{
Serial.begin (9600);
}
void loop()
{
valorpot = analogRead(potpin);
Serial.println (valorpot);
Serial.println (/r);
Delay (1000);
}
20
Realmente, la seal analgica de salida no es analgica en s, sino un PWM. Esto significa que la
salida es una seal modulada por pulsos, formada por una serie de pulsos (de valor 5 V) repartidos
durante un tiempo determinado de tal forma que el valor promedio de la seal de salida se hace
coincidir con el de la seal analgica que se persigue imitar. Es importante tener esto presente para
comprender el funcionamiento de Arduino y, por ejemplo, de los transistores conectados a ella. Las
salidas PWM para diferentes valores de salida son:
Con el programa que se indica a continuacin controlamos el brillo de un LED conectado a la salida
PWM 11:
Int brillo = 0;
Int incremento = 5;
Int ledpin=11;
voidsetup()
{
pinMode (ledpin,OUTPUT);
}
void loop()
{
analogWrite (ledpin, brillo);
brillo = brillo + incremento;
if (brillo==0 || brillo==255)
{
incremento = -incremento;
}
delay (30);
21
22
Este mismo esquema se lo conecta en la tarjeta real, tal como se indica en el grfico anterior y los
resultados obtenidos son 100% correctos de acuerdo al simulador.
Y el programa para realizar el control es:
const int smaxpin = 13;
const int sminpin = 12;
const int vspin = 0;
const int vepin = 2;
int smax = 0;
int smin = 0;
int p = 0;
void setup()
void loop()
Serial.begin(9600);
pinMode(smaxpin, INPUT);
pinMode(sminpin, INPUT);
pinMode(vspin, OUTPUT);
pinMode(vepin, OUTPUT);
}
23
smax = !digitalRead(smaxpin);
smin = !digitalRead(sminpin);
if (smin == 0 && smax == 0)
{
digitalWrite(vepin, HIGH);
digitalWrite(vspin, LOW);
p=0;
}
if (smin == 1 && smax == 0 && p==0)
{
digitalWrite(vepin, HIGH);
digitalWrite(vspin, LOW);
}
Solucin Analgica.
Para la solucin analgica se requiere de un potencimetro, que simulara al sensor analgico de
nivel SNIVEL y las dos vlvulas de entrada y salida del lquido, indicadas anteriormente (VS y VE).
Para este caso usamos dos referencias de nivel para delimitar lo que se interpreta como nivel
mnimo y nivel mximo, a travs de las variables nmin y nmax. Si la seal analgica entre valores
que van de 0 a 1023, para una entrada de voltaje que vara de 0 a 5V, y un nivel que vara de 0 a 3m,
entonces, la referencia mnima de nivel en voltaje ser 0.09*5/3 = 0.15V que equivale a 0.15*1023/5
= 30.69 o sea nmin = 31 y para la referencia mxima tenemos que el voltaje ser 2.85*5/3 = 4.75V
que corresponde a 4.75*1023/5 = 971.85 o sea nmax = 972.
El sistema implementado, simulado con ayuda de Proteus V8.1 y Simulino nos queda as:
Este mismo esquema se lo conecta en la tarjeta real, tal como se indica en el grfico anterior y los
resultados obtenidos son 100% correctos de acuerdo al simulador.
24
}
if (snivel <= nmin)
{
p=0;
digitalWrite(vepin, HIGH);
digitalWrite(vspin, LOW);
}
void setup()
{
Serial.begin(9600);
pinMode(vspin, OUTPUT);
pinMode(vepin, OUTPUT);
}
void loop()
{
snivel=analogRead (snivelpin);
if (snivel < nmax && p==0)
{
digitalWrite(vepin, HIGH);
digitalWrite(vspin, LOW);
delay(100);
}
}
void loop()
{
snivel=analogRead (snivelpin);
if (snivel < nmax && p==0)
{
digitalWrite(vepin, HIGH);
digitalWrite(vspin, LOW);
}
if (snivel <= nmin)
{
p=0;
25
t=0;
digitalWrite(vepin, HIGH);
digitalWrite(vspin, LOW);
p=1;
t=1;
}
if (snivel <= nmax && p==1)
{
digitalWrite(vepin, LOW);
digitalWrite(vspin, HIGH);
}
}
if (snivel >= nmax && t == 0)
{
digitalWrite(vepin, LOW);
digitalWrite(vspin, LOW);
delay(tiempo);
digitalWrite(vepin, LOW);
digitalWrite(vspin, HIGH);
delay(100);
}
Temporizamos
Encendemos vlvula de salida y apagamos la entrada
}
t es una variable asociada a la temporizacin que evita que una vez ingresado a ejecutar el if donde
se temporiza, reingrese provocando nuevamente una temporizacin. Se resetea la variable (vuelve
a 0) al llegar al nivel mnimo.
26
27
p=0;
c=0;
cont=0;
digitalWrite(vepin, HIGH);
digitalWrite(vspin, LOW);
}
if (snivel >= nmax && c==0)
{
digitalWrite(vepin, LOW);
digitalWrite(vspin, LOW);
digitalWrite(motorpin, HIGH);
while (cont < vueltas)
{
tacho = digitalRead(tachopin);
if (tacho!=tachoant) if (tacho == 0) cont++;
tachoant=tacho;
}
digitalWrite(vepin, LOW);
digitalWrite(vspin, HIGH);
digitalWrite(motorpin, LOW);
c=1;
p=1;
void setup()
{
pinMode(vspin, OUTPUT);
pinMode(vepin, OUTPUT);
pinMode(motorpin, OUTPUT);
pinMode(tachopin, INPUT);
}
void loop()
{
snivel=analogRead (snivelpin);
if (snivel < nmax && p==0)
{
digitalWrite(vepin, HIGH);
digitalWrite(vspin, LOW);
}
if (snivel <= nmin)
{
}
if (snivel <= nmax && p==1)
{
digitalWrite(vepin, LOW);
digitalWrite(vspin, HIGH);
}
delay(100);
}
En este caso el conteo no lo logramos a travs de una simple instruccin sino en base a un grupo de
ellas. La estructura de conteo ser:
while (cont < vueltas)
{
tacho = digitalRead(tachopin);
if (tacho!=tachoant) if (tacho == 0) cont++;
tachoant=tacho;
}
El programa en Arduino entra en el while y solo saldr cuando el nmero de pulsos contados por los
ifs anidados hallar superado el nmero de vueltas previsto en la variable vueltas, para este caso 10.
28
Es importante la ltima lnea del anterior cdigo (tachoant=tacho), pues esta asegura que solo se
contara cuando haya pasado un pulso y venga otro, sin ella en funcin de cunto tiempo tenga
presionado el botn que simula el tacmetro, saldr del while, o sea llagara a la cuenta con un
nmero menor de pulsos, e incluso podra hacerlo con un solo pulso.
A continuacin insertamos el cdigo del contador en la estructura de espera al conteo:
if (snivel >= nmax && c==0)
{
digitalWrite(vepin, LOW);
digitalWrite(vspin, LOW);
digitalWrite(motorpin, HIGH);
Los servomotores, conocido generalmente como servos, son dispositivos actuadores que tiene la
capacidad de ubicarse en cualquier posicin angular, dentro de su rango de operacin, y mantenerse
29
estable en ella. Est formado por un motor de corriente continua, una caja reductora y un circuito
de control, y su margen de funcionamiento generalmente es de menos de una vuelta completa.
Los servos se utilizan frecuentemente en sistemas de radiocontrol y en robtica, pero su uso no est
limitado a estas aplicaciones.
La estructura de un servo es la que se indica a continuacin:
El ngulo de giro del servo se determina por la duracin del pulso aplicado en el cable de control.
Este proceso es conocido como modulacin por ancho de pulso, PWM por su nombre en ingls.
El servo espera recibir un pulso cada 20 ms. La longitud del pulso determinara el ngulo que gira el
motor. Por ejemplo, un pulso de 1,5 ms har que el motor gire a la posicin de 90 grados (posicin
neutra).
Cuando a un servo se le ordena ubicarse en una posicin, mantendr esa posicin. Si una fuerza
externa trata de sacar al servo del ngulo girado, el servo se resistir a salir de esta posicin. La
30
cantidad mxima de fuerza del servo puede ejercer, para no cambiar su posicin se le conoce como
el torque del servo. Los servos no sostendrn su posicin por siempre, el pulso de posicin se debe
repetir para mantener al servo en la posicin requerida.
Cuando se enva un pulso a un servo, inferior a 1.5 ms, el servo girar a una posicin antihoraria y
mantiene su eje de salida a un ngulo especifico desde el punto neutral. Cuando el pulso es ms
ancho que 1.5 ms ocurre lo contrario. La anchura mnima y mxima de pulso que van a comandar el
servo, para llevarlo a una posicin especfica, son funciones de cada servo. Distintas marcas, e
incluso diferentes servos de la misma marca, tienen diferentes mximos y mnimos. Generalmente
el pulso mnima ser de aproximadamente 1 m de ancho y el pulso mxima ser de 2 ms de ancho.
Otro parmetro que vara de servo en servo es la velocidad de giro. Este es el tiempo que se tarda
para cambiar de una posicin a otra. El tiempo ms extenso cuando el servo est ubicado en la
mnima posicin y se le enva a la mxima. Esto puede tardar varios segundos en servos de par muy
elevado.
Los servomotores tienen tres terminales de conexin: dos para la alimentacin elctrica del circuito
y uno para la seal de control. El voltaje de alimentacin generalmente es de alrededor de 6 voltios,
pues aunque el motor soporta mayores voltajes de trabajo, el circuito de control no lo hace.
31
El color del cable de cada terminal vara con cada fabricante, aunque el cable del terminal positivo
de alimentacin siempre es rojo. El cable del terminal de alimentacin negativo puede ser marrn
o negro, y el del terminal de entrada de seal suele ser de color blanco, naranja o amarillo, de
acuerdo a lo que se indica en la siguiente tabla:
Fabricante
Futaba
Dong Yang
Hobico
Hitec
JR
Airtronics
Fleet
Krafr
E-Sky
Hobbyking
Positivo
Rojo
Rojo
Rojo
Rojo
Rojo
Rojo
Rojo
Rojo
Rojo
Rojo
Conectores
Negativo
Negro
Marrn
Negro
Negro
Marrn
Negro
Negro
Negro
Negro
Marrn
Control
Blanco
Naranja
Amarillo
Amarillo
Naranja
Naranja
Blanco
Naranja
Blanco
Naranja
El potencimetro del sistema de control del servo es un potencimetro de menos de una vuelta, de
modo que no puede dar giros completos en un mismo sentido. Para evitar que el motor pudiera
daar el potencimetro, el fabricante del servo aade una pequea pestaa en la caja reductora del
motor, que impide que ste gire ms de lo debido. Es por ello que los servos tienen una cantidad
limitada de giro, y no pueden girar continuamente en un mismo sentido. Es posible, sin embargo,
realizar modificaciones al servo de modo que esta limitacin se elimine, a costa de perder el control
de posicin.
Hay dos tipos de modificacin realizables:
1) La completa eliminacin del sistema de control del circuito, para conservar nicamente el
motor de corriente continua y el sistema de engranajes reductores. Con esto se obtiene
simplemente un motor de corriente continua con caja reductora en un mismo
empaquetado, til para aplicaciones donde no se necesite del control de posicin
incorporado del servo.
2) Cambio en el sistema de control, de modo que se obtenga un sistema de control de
velocidad. Para ello, se desacopla el potencimetro de realimentacin del eje del motor, y
se hace que permanezca esttico en una misma posicin. As, la seal de error del sistema
de control depender directamente del valor deseado que se ajuste (que seguir
indicndose mediante pulsos de duracin variable). Ambos tipos de modificacin requieren
que se elimine fsicamente la pestaa limitadora de la caja reductora.
32
#include <Servo.h>
Servo servo1;
int scontrol = 9;
int pos = 0;
void setup()
{
servo1.attach (scontrol); // ajusta la salida del servo al objeto
}
void loop()
{
for (pos = 0; pos < 180; pos += 1) // posiciona la servo de 0 a 180 en pasos de 1
{
servo1.write (pos);
// le indica al servo ir a la posicin indicada por pos
delay (15);
// 15ms para que el servo se ubique
}
for (pos = 180; pos>=1; pos-=1) // posiciona al servo de 180 a 0
{
servo1.write (pos);
// le indica al servo ir a la posicin indicada por pos
delay (15);
// 15ms para que el servo se ubique
}
}
2) Controlamos la posicin de un servo a travs de un potencimetro:
33
#include <Servo.h>
Servo servo2;
int scontrol = 9;
int potpin = 0;
int potval;
void setup()
{
myservo.attach(scontrol); // ajusta la salida del servo al objeto
}
void loop()
{
potval = analogRead(potpin);
// lee el valor del potencimetro (0 a 1023)
potval = map(potval, 0, 1023, 0, 179); // escala al valor del ngulo del servo (0 a 180)
myservo.write(potval);
// le indica al servo ir a la posicin indicada por potval escalada
delay(15);
// 15ms para que el servo se ubique
}
34
Motor de pasos.
Los motores paso a paso se pueden ver como motores elctricos sin escobillas. Es tpico que todos
los bobinados del motor sean parte del estator, y el rotor puede ser un imn permanente o, en el
caso de los motores de reluctancia variable, un cilindro slido con un mecanizado en forma de
dientes (similar a un engranaje), construido con un material magnticamente "blando" (como el
hierro dulce).
La conmutacin se debe manejar de manera externa con un controlador electrnico y, tpicamente,
los motores y sus controladores se disean de manera que el motor se pueda mantener en una
posicin fija y tambin para que se lo pueda hacer girar en un sentido y en el otro.
La mayora de los motores paso a paso conocidos se pueden hacer avanzar a frecuencias de audio,
lo que les permite girar muy velozmente. Con un controlador apropiado, se los puede hacer arrancar
y detenerse en un instante en posiciones controladas.
Los motores paso a paso tienen un comportamiento del todo diferente al de los motores de
corriente continua. En primer lugar, no giran libremente por s mismos. Los motores paso a paso,
como lo indica su nombre, avanzan girando por pequeos pasos. Tambin difieren de los motores
de CC en la relacin entre velocidad y torque (un parmetro que tambin es llamado "par motor" y
"par de giro"). Los motores de CC no son buenos para ofrecer un buen torque a baja velocidad sin
la ayuda de un mecanismo de reduccin. Los motores paso a paso, en cambio, trabajan de manera
opuesta: su mayor capacidad de torque se produce a baja velocidad.
Los motores paso a paso tienen una caracterstica adicional: el torque de detencin (que se puede
ver mencionado tambin como "par de detencin", e incluso par/torque "de mantenimiento"), que
no existe en los motores de CC. El torque de detencin hace que un motor paso a paso se mantenga
firmemente en su posicin cuando no est girando. Esta caracterstica es muy til cuando el motor
deja de moverse y, mientras est detenido, la fuerza de carga permanece aplicada a su eje. Se
elimina as la necesidad de un mecanismo de freno.
35
Si bien es cierto que los motores paso a paso funcionan controlados por un pulso de avance, el
control de un motor paso a paso no se realiza aplicando en directo este pulso elctrico que lo hace
avanzar. Estos motores tienen varios bobinados que, para producir el avance de ese paso, deben
ser alimentados en una adecuada secuencia. Si se invierte el orden de esta secuencia, se logra que
el motor gire en sentido opuesto. Si los pulsos de alimentacin no se proveen en el orden correcto,
el motor no se mover apropiadamente. Puede ser que zumbe y no se mueva, o puede ser que gire,
pero de una manera tosca e irregular.
Esto significa que hacer girar un motor paso a paso no es tan simple como hacerlo con un motor de
corriente continua, al que se le entrega una corriente y listo. Se requiere un circuito de control, que
ser el responsable de convertir las seales de avance de un paso y sentido de giro en la necesaria
secuencia de energizacin de los bobinados.
Un motor paso a paso se define por estos parmetros bsicos:
Voltaje: Los motores paso a paso tienen una tensin elctrica de trabajo. Este valor viene
impreso en su carcasa o por lo menos se especifica en su hoja de datos. Algunas veces puede
ser necesario aplicar un voltaje superior para lograr que un determinado motor cumpla con
el torque deseado, pero esto producir un calentamiento excesivo y/o acortar la vida til
del motor.
Resistencia elctrica: Otra caracterstica de un motor paso a paso es la resistencia de los
bobinados. Esta resistencia determinar la corriente que consumir el motor, y su valor
afecta la curva de torque del motor y su velocidad mxima de operacin.
Grados por paso: Generalmente, este es el factor ms importante al elegir un motor paso a
paso para un uso determinado. Este factor define la cantidad de grados que rotar el eje
para cada paso completo. Una operacin de medio-paso o semi-paso (half step) del motor
duplicar la cantidad de pasos por revolucin al reducir la cantidad de grados por paso.
Cuando el valor de grados por paso no est indicado en el motor, es posible contar a mano
la cantidad de pasos por vuelta, haciendo girar el motor y sintiendo por el tacto cada
"diente" magntico. Los grados por paso se calculan dividiendo 360 (una vuelta completa)
por la cantidad de pasos que se contaron. Las cantidades ms comunes de grados por paso
son: 0,72, 1,8, 3,6, 7,5, 15 y hasta 90. A este valor de grados por paso usualmente se le
llama la resolucin del motor. En el caso de que un motor no indique los grados por paso en
su carcasa, pero s la cantidad de pasos por revolucin, al dividir 360 por ese valor se obtiene
la cantidad de grados por paso. Un motor de 200 pasos por vuelta, por ejemplo, tendr una
resolucin de 1,8 por paso.
Los motores paso a paso se dividen en dos categoras principales: de imn permanente y de
reluctancia variable. Tambin existe una combinacin de ambos, a los que se les llama hbridos.
Los de imn permanente son los que ms conocemos, utilizados, por ejemplo, en el avance de papel
y del cabezal de impresin de las impresoras, en el movimiento del cabezal de las disketteras, etc.
Como su nombre indica, poseen un imn que aporta el campo magntico para la operacin.
36
Los motores del tipo de reluctancia variable, en cambio, poseen un rotor de hierro dulce que en
condiciones de excitacin del estator, y bajo la accin de su campo magntico, ofrece menor
resistencia a ser atravesado por su flujo en la posicin de equilibrio. Su mecanizacin es similar a los
de imn permanente y su principal inconveniente radica en que en condiciones de reposo (sin
excitacin) el rotor queda en libertad de girar y, por lo tanto, su posicionamiento de rgimen de
carga depender de su inercia y no ser posible predecir el punto exacto de reposo. El tipo de motor
de reluctancia variable consiste en un rotor y un estator cada uno con un nmero diferente de
dientes. Ya que el rotor no dispone de un imn permanente, gira libremente si no tiene corriente
alimentndolo, o sea que no tiene torque de detencin.
Los motores hbridos combinan las mejores caractersticas de los de reluctancia variable y de imn
permanente. Se construyen con estatores multidentados y un rotor de imn permanente. Los
motores hbridos estndar tienen 200 dientes en el rotor y giran en pasos de 1,8 grados. Existen
motores hbridos con configuraciones de 0,9 y 3,6. Dado que poseen alto torque esttico y
dinmico y se mueven a muy altas velocidades de pulso, se los utiliza en una amplia variedad de
aplicaciones industriales.
Motores paso a paso de imn permanente.
Los motores paso a paso de imn permanente se dividen a su vez en distintos tipos, diferenciados
por el tipo de bobinado. Existen entonces motores paso a paso de imn permanente unipolares
(tambin llamados "unifilares"), bipolares (tambin llamados "bifilares") y multifase.
37
38
La secuencia de pulsos de un motor unipolar se puede controlar con un contador binario de dos bits
con un decodificador, como por ejemplo el integrado CD 4017. La parte de potencia puede ser
implementada con un nico transistor en cada bobinado. El circuito de control es:
39
La configuracin de los motores bipolares requiere que las bobinas reciban corriente en uno y otro
sentido, y no solamente un encendido-apagado como en los unipolares. Esto hace necesario el uso
de un Puente H (un circuito compuesto por al menos seis transistores) sobre cada uno de los
bobinados. La secuencia de pulsos para un motor bipolar es:
El que sigue es un circuito de ejemplo para el manejo de una de las bobinas (se necesita otro igual
para manejar un motor completo). Para ms detalles en el funcionamiento de un circuito como este,
vase nuestro artculo Puente H:
40
Esquemticamente tenemos:
Esquemticamente tenemos:
En este caso necesitamos el circuito integrado SN75441, que es un puente H, como nos indica el
siguiente esquema:
#include <Stepper.h>
42
// asigna la velocidad
void loop()
{
val = analogRead(potpin); // leemos el potencimetro
stepper.step(val - prev); // movemos un numero de pasos igual a la diferencia de valor del pot.
prev = val;
// almacena el valor previo del motor.
}
Los display alfanumricos de matriz de puntos, se caracterizan normalmente por el nmero de filas
y columnas para cada matriz de puntos que lo caracterizan. De ah que un display de 2 x 16 quiere
decir que puede desplegar 32 caracteres ubicados en dos filas de 16 caracteres por fila, como el que
se muestra en el dibujo anterior.
43
En el mercado es muy habitual encontrarse con el controlador HD44780 de Hitachi, o afn que se
describe a continuacin. El controlador se encarga de la operacin del display, desde el punto de
vista fsico: polarizar los puntos de la pantalla, generar los caracteres, desplazar la pantalla, mover
el cursor, etc. El usuario necesita simplemente conocer un grupo de instrucciones de alto nivel que
le permitirn limpiar la pantalla, posicionar el cursor, etc., con la finalidad de mostrar textos o
grficos en la pantalla, de acuerdo a su necesidad. Para comunicarse con el controlador del display
se dispone de un interfaz paralelo al exterior, de fcil conexin a otros microcontroladores o
microprocesadores.
Los caracteres que se pueden representar estn formados por una matriz de puntos que vienen
almacenados en memoria ROM dentro del propio controlador. El fabricante reserva una pequea
zona de memoria RAM donde se pueden definir algunos caracteres especiales, como por ejemplo
la letra que no suele venir, o si se desean, pequeos grficos.
La conexin del mdulo LCD y el circuito que lo utiliza puede realizarse por medio de un cable plano
de 14 hilos, similar al que se emplea en las disketteras o discos duros. Admitindose que el display
est conformado por un controlador del tipo HD44780, de la japonesa Hitachi o similar.
Lamentablemente la disposicin de los terminales en el LCD an no estn normalizadas, por lo que
el para el montaje se deber conseguir la hoja de datos al momento de comprar el display y as
poder usarlo. Si bien los terminales no son normalizados, los tipos de seal manejados por ellos son
casi estndar, no presentndose mayor diferencia entre cada uno de ellos. Puede variar uno que
otro comando, pero no el cableado del mdulo en lo que a seales se refiere.
Los pines del display son:
PIN
1
2
3
4
5
6
7
Smbolo
VSS
VCC
VEE
RS
R/W
E
DB0
E/S
E
E
E
E/S
Funcin
0 V (Tierra)
+5V 0.25 V (Tensin de alimentacin positiva)
Tensin negativa para el contraste de la pantalla.
Selector de dato/instruccin
Selector de Lectura/Escritura
Habilitacin del modulo
Dato E/S
44
8
9
10
11
12
13
14
15
16
DB1
DB2
DB3
DB4
DB5
DB6
DB7
LED+
LED-
E/S
E/S
E/S
E/S
E/S
E/S
E/S
E
E
Dato E/S
Dato E/S
Dato E/S
Dato E/S
Dato E/S
Dato E/S
Dato E/S
Encendido del LED de iluminacin
Apagado del LED de iluminacin
Para sincronizar la velocidad de trabajo del controlador interno con las posibles velocidades de los
sistemas de control a los cuales puede ser conectado, los mdulos multi-matrix disponen de dos
registros que pueden ser accedidos por los C P externos.
Los registros internos de instrucciones (RI) y los de datos (RD) almacenan temporalmente la
informacin de control y la que deber mostrarse para poder adecuar los procesos a los tiempos
que la tecnologa LCD requiere.
En condiciones de uso normal, las instrucciones ms empleadas son las de transferencia con la RAM
interna, las que envan datos al display. Pero como el contador interno incrementa
automticamente (o decrementa) en una unidad la direccin de la RAM posteriormente a cada
instruccin de escritura de datos, el nmero final de instrucciones del programa se ve reducido a un
pequeo grupo.
Durante cada operacin interna del C, el bit 7 permanece activo (estado alto), esto es usado
entonces como busy flag bandera de ocupado. Asimismo, cuando se desee una velocidad de
operacin alta, alrededor de 50KHz, el estado de este bit o bandera deber ser constantemente
monitorizado, a fin de mantener la sincronizacin de los sistemas sin prdida de datos.
Juegos de instrucciones.
Instruccin
Cdigo de Operacin
Descripcin
Tiempo de
Ejecucin
RS R/W B7 B6 B5 B4
B3
B2
B1
B0
Clear display
1.52 ms
Cursor home
1.52 ms
I/D
37 s
Display on/off
control
37 s
37 s
37 s
Cursor/display shift
S/C
R/L
Function set
DL
45
CGRAM address
DDRAM address
37 s
37 s
0 s
Write CGRAM
orDDRAM
Write Data
37 s
Read from
CG/DDRAM
Read Data
37 s
BF
CGRAM/DDRAM address
0 = Display Apagado
1 = Display Encendido;
0 = Cursor Apagado
1 = Cursor Encendido
S/C
0 = Mover Cursor
1 = Corrimiento de pantalla
R/L
0 = Mover/Correr a la izquierda
1 = Mover/Correr a la derecha
DL
0 = Interfaz de 4 bits
1 = Interfaz de 8 bits
0 = 1 lnea
1 =2 lneas
0 = 58 puntos
1 =510 puntos
BF
No importa el valor
Cuando se enva un carcter ASCII, como por ejemplo el A, al mdulo LCD, el controlador HD44780
busca en la memoria CGROM (no la CGRAM) interna el patrn que le corresponde y lo muestra en
la pantalla. La CGROM contiene 192 mapas de bits correspondientes al alfabeto, nmeros, signos
de puntuacin, caracteres japoneses Kanji, smbolos griegos y otros. La CGRAM es parte del
controlador HD44780 y no puede ser alterada o reprogramada por el usuario. No se pueden
modificar pxeles individuales en el LCD, tan slo caracteres completos identificados por un cdigo
ASCII.
46
Esquemticamente seria:
Con el mismo circuito podemos realizar varios programas. El primer programa simplemente
despliega un texto en la pantalla y el segundo desplaza texto en la pantalla.
Primer programa:
#include <LiquidCrystal.h>
void setup()
{
lcd.begin(16, 2);
lcd.print("hola a todos!");
}
void loop()
{
lcd.setCursor(0, 1); // Ubicamos el cursor en la lnea 1, columna 0 (segunda linea)
lcd.print(millis()/1000); //Imprimimos los milisegundos de operacin
}
Segundo programa:
#include <LiquidCrystal.h>
void loop()
{
// recorremos todas las columnas de la pantalla desde la izquierda
for (int i = 0; i < 13; i++)
{
lcd.scrollDisplayLeft();
delay(150);
}
// recorremos 29 posiciones (nmero de caracteres + columnas del display) hacia la derecha
// para mover fuera de pantalla a la derecha
for (int i = 0; i< 29; i++)
{
lcd.scrollDisplayRight();
delay(150);
}
// movemos 16 posiciones scroll 16 positions (nmero de caracteres + columnas del display) hacia
// la izquierda para mover de Nuevo al centro)to the left
for (int i = 0; i < 16; i++)
{
lcd.scrollDisplayLeft();
delay (150);
}
48
delay (1000);
}
49