Está en la página 1de 50

TRABAJANDO CON ARDUINO

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.

Luis Echeverra Ynez


lmecheverria@espe.edu.ec

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

CONECTANDO SENSORES Y ACTUADORES. ................................................................... 15


CONEXIN DE INSTRUMENTACIN DIGITAL. ............................................................................................................ 15
Simulando sensores digitales ................................................................................................................... 15
Simulando actuadores digitales ............................................................................................................... 17
CONEXIN DE INSTRUMENTACIN ANALGICA. ....................................................................................................... 19
Simulando sensores analgicos ............................................................................................................... 19
Simulando salidas analgicas .................................................................................................................. 20
APLICACIN DE INSTRUMENTACIN BSICA ............................................................................................................ 22
Llenado y vaciado de tanque ................................................................................................................... 22
Llenado y vaciado de tanque, con temporizacin al llenado. .................................................................. 25
Llenado y vaciado de tanque, con batido de la mezcla al llenado. .......................................................... 26
CONEXIN A OTROS INSTRUMENTOS. .................................................................................................................... 29
Servomotores. .......................................................................................................................................... 29
Motor de pasos. ....................................................................................................................................... 35
Display numrico de matriz de puntos LCD.............................................................................................. 43

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

Salida Serial (Tx)


Entrada Seroal (Rx)

SCL
SDA
Referencia Analgica
Tierra digital

ICSP para USB

Entradas/Salidas Digitales (2-13)

Con capacidad para


PWM
Conector USB

ICSP para Atmega328

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:

3.3 V proporciona una tensin de 3,3 V, y una intensidad mxima de 50 mA.


5 V proporciona una tensin de 5 V, y una intensidad mxima de 300 mA.
GND es la toma de tierra, o nivel 0 V de referencia.
Vin proporciona la tensin mxima con la que est alimentado Arduino.

Valores de entrada y de salida.


En funcin de cmo est siendo utilizado en pin, tendremos:
Salida y entrada digital:
Los valores de salida pueden ser o 0 V (LOW) o 5 V (HIGH), y se interpretar una entrada de entre 0
y 2 V como LOW y de entre 3 y 5 V como HIGH.
Salida analgica:
Los valores de salida van desde 0 V a 5 V en un rango de 0 a 255 (precisin de 8 bits) valores
intermedios.
Entrada analgica:
Los valores de entrada van desde 0 V a 5 V en un rango de 0 a 1023 (precisin de 10 bits) valores
intermedios.
La intensidad mxima de todos estos pines es de 40 mA.
Normalmente, todo el circuito electrnico que Arduino controlar se monta sobre una placa de
prototipos o breadboard, y el conexionado se realiza con cables tipo jumper (es importante utilizar
este tipo de cables porque no suelen romperse en los zcalos) como los siguientes:

Una aplicacin en Arduino UNO aparece como se indica a continuacin:

El entorno de desarrollo de Arduino UNO


Descarga e instalacin del Entorno.
El software del entorno de desarrollo de Arduino UNO, es de libre distribucin y puede ser
descargado de:
http://arduino.cc/en/Main/Software

La ltima versin del IDE de ARDUINO es la 1.0.6. Una vez descargado el ejecutable del instalador,
procedemos a correrlo:

Entonces nos aparece la siguiente secuencia de instalacin:


Se verifica el instalador:

Se presenta el acuerdo del licenciamiento de uso:

Se presentan las opciones de instalacin:

Presionamos Next, e indicamos el lugar donde queremos la instalacin, as:

Y a continuacin presionamos Install, entonces comienza el proceso de instalacin:

Se instalan los drivers de Arduino, aceptando la confianza en el software de Arduino LLC y dando
clic en Instalar:

Una vez terminado el proceso podemos presionar Close:

Terminada la instalacin aparece el icono de Arduino en el escritorio, similar al siguiente:

Con eso se termina la instalacin del IDE de Arduino.

Reconocimiento de la tarjeta o modulo controlador.


Terminada la instalacin del entorno de desarrollo, y mediante un cable USB standard procedemos
a conectar el Arduino UNO a un puerto desocupado USB de la computadora, as:

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

Bsqueda del controlador:

Instalacin del software del controlador de Arduino UNO:

Finalizacin de la instalacin y asignacin de puerto de comunicaciones:

Para verificar la correcta instalacin y reconocimiento del dispositivo, en la ventana del


administrador de dispositivos, en los puertos de comunicaciones, deber aparecer el Arduino UNO
en COM3 o en el COM que se asigne a tu computadora, as:

Programando el controlador.
Al hacer doble clic sobre el icono de Arduino, se abrir la aplicacin:

que presenta una ventana similar a la de la siguiente figura:

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:

Entonces ahora si estamos listos para la programacin.


11

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

En el entorno de programacin de Arduino pueden coexistir varias reas de programacin en


pestaas diferentes:

12

Estructura de un programa en Arduino.


La estructura bsica de programacin de Arduino es bastante simple y divide la ejecucin en dos
partes: setup y loop.
La funcin Setup() constituye la preparacin del programa y sus parmetros de inicializacin y la
funcin loop() es la ejecucin. En la funcin Setup() se incluye la declaracin de variables y se trata
de la primera funcin que se ejecuta en el programa. Esta funcin se ejecuta una nica vez y es
empleada para configurar el pinMode (p. ej. si un determinado pin digital es de entrada o salida) e
inicializar la comunicacin serie. La funcin loop() incluye el cdigo a ser ejecutado continuamente
(leyendo las entradas de la placa, salidas, etc.), como por ejemplo el cdigo:

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

// constants won't change. They're used here to


// set pin numbers:
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin
// variables will change:
int buttonState = 0;
// variable for reading the pushbutton status

14

Conectando sensores y actuadores.


Como cualquier otro dispositivo controlador el Arduino UNO admite infinidad de instrumentos,
tanto sensores como actuadores, entre los que podemos citar: potencimetros, interruptores,
motores de pasos, motores AC, motores DC, servos, etc.
Vamos a simular sensores y actuadores mediante dispositivos sencillos fciles de encontrar en
cualquier almacn de electrnica. Los elementos que se necesitaran son:

Un interruptor y una resistencia de 2.2 K.


Un LED y una resistencia de 220 .
Un potencimetro de 10 K, un conector de batera de 9 V y una batera de 9 V.
Un multmetro.
Una tableta para prototipos electrnicos (protoboard).

Conexin de instrumentacin digital.


Simulando sensores digitales
Un sencillo circuito que opera como un sensor digital del tipo ON/OFF contiene un interruptor, una
resistencia de 2.2 K y una seal de 5 Vdc. La conexin es la siguiente:

En el Arduino UNO quedara as:

15

16

El software para leer el interruptor, e imprimir su estado es:


const int swpin = 2;
int estadosw = 0;
void setup()
{
Serial.begin(9600);
pinMode(swpin, INTPUT);
}
void loop()
{
int estadosw = digitalRead(swpin);
Serial.println(estadosw);
delay(1000);
}

// entrada a la que est conectado el SW


// variable donde se almacena el estado del SW

//Inicializa comunicacin con el IDE


// Establece 'swpin' como entrada

// Lee la entrada swpin


// imprime el estado del interruptor
// Pausa un segundo

Simulando actuadores digitales


Un sencillo circuito, que simula el encendido o apagado de un actuador, lo podemos realizar con un
LED y una resistencia de 220 . La conexin a realizar es la siguiente:

En el Arduino UNO quedara as:

17

El software para encender el LED es:


const int ledpin = 2;

// salida a la que est conectado el LED

void setup()
18

{
Serial.begin (9600);
pinMode (ledpin, OUTPUT);

//Inicializa comunicacin con el IDE


// Establece 'ledpin' como salida

}
void loop()
{
digitalWrite (ledpin, HIGH);
delay(1000);
digitalWrite (ledpin, LOW);
delay(1000);
}

// enciende el LED (HIGH es el nivel alto de voltaje)


// espera de un segundo
// apaga el LED (LOW es el nivel bajo de voltaje)
// espera de un segundo

Conexin de instrumentacin analgica.


Simulando sensores analgicos
Para poder simular un sensor analgico, utilizamos el potencimetro de 10 K y la salida de 5V de
la placa del Arduino, para lo cual armamos el siguiente circuito:

En el Arduino UNO quedara as:

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);
}

//Inicializa comunicacin con el IDE

// leemos la entrada analgica


// escribimos el valor ledo en el monitor
// salto de lnea (estilo C)
// espera de un segundo

Simulando salidas analgicas


Podemos programar para que Arduino en un pin determinado coloque un valor de tensin
comprendido entre 0 V y 5 V, pudiendo seleccionar entre 256 valores intermedios posibles (de 0 a
255), empleando la instruccin analogWrite (salida PWM, valor de 0 a 255).

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);

//declaro la variable brillo, con valor inicial=0


//declaro la variable incremento, con valor=5

//el pin 9 ser la salida

//coloca el valor brillo en el pin 9


//brillo aumenta su valor en 5
//si brillo llega a sus lmites...
//...pasamos de ir creciendo a pasar...
//...a ir decreciendo y al revs
// esperamos un tiempo para observar la variacin de luz

21

El circuito para el programa anterior ser:

Aplicacin de instrumentacin bsica


Llenado y vaciado de tanque

22

Se necesita desarrollar un sistema de control para que un tanque de almacenamiento de lquido se


llene hasta un valor mximo, y luego se vaci hasta llegar a un valor mnimo, y as sucesivamente.
La altura del tanque es 3 metros y el mnimo corresponde al 3% de la altura y el mximo al 95%.
En cuanto a la instrumentacin, hay dos posibilidades, la primera es utilizar dos sensores digitales
ubicados en los niveles mnimo y mximo, y la segunda es utilizar un sensor analgico para comparar
con dos valores referenciales, el mnimo y el mximo.
Solucin Digital.
Para la solucin digital se requiere de dos interruptores que servirn como el sensor de nivel mnimo
(SMIN) y el mximo (SMAX) y dos leds, uno que representa la vlvula de entrada (VE) y otro la de
salida (VS). El interruptor de nivel mnimo deben estar ubicados a 3/100 * 3 m = 0.09 m o sea a 9 cm
de la base del tanque y el interruptor de nivel mximo a 95/100*3m = 2.85 m de la base.
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.
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

Ojo con la negacin

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);
}

if (smin == 1 && smax == 1)


{
digitalWrite(vepin, LOW);
digitalWrite(vspin, HIGH);
p=1;
}
if (smin == 1 && smax == 0 && p==1)
{
digitalWrite(vepin, LOW);
digitalWrite(vspin, HIGH);
}
delay (100);
}

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

Y el programa para realizar el control es:


const int snivelpin = A0;
const int vspin = 0;
const int vepin = 2;
int snivel = 0;
int nmin = 31;
int nmax = 972;
int p = 0;

}
if (snivel <= nmin)
{
p=0;
digitalWrite(vepin, HIGH);
digitalWrite(vspin, LOW);
}

void setup()
{
Serial.begin(9600);
pinMode(vspin, OUTPUT);
pinMode(vepin, OUTPUT);
}

if (snivel >= nmax)


{
digitalWrite(vepin, LOW);
digitalWrite(vspin, HIGH);
p=1;
}
if (snivel < nmax && p==1)
{
digitalWrite(vepin, LOW);
digitalWrite(vspin, HIGH);
}

void loop()
{
snivel=analogRead (snivelpin);
if (snivel < nmax && p==0)
{
digitalWrite(vepin, HIGH);
digitalWrite(vspin, LOW);

delay(100);
}

Llenado y vaciado de tanque, con temporizacin al llenado.


El esquema de conexiones es el mismo del ejemplo anterior, lo nico que cambia es el programa
donde se inserta la funcin de temporizacin delay. El programa quedar entonces de la siguiente
manera:
const int snivelpin = A0;
const int vspin = 0;
const int vepin = 2;
int snivel = 0;
int nmin = 31;
int nmax = 972;
int p = 0;
int t = 0;
int tiempo = 5000;
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);
}
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);
}

La temporizacin en Arduino se la hace simplemente a travs de la funcin delay(tiempo), de tal


manera que el momento que se quiere congelar la ejecucin del programa o sea detenerlo
temporizadamente, es suficiente insertar este cdigo como el siguiente fragmento del programa
anterior:
if (snivel >= nmax && t == 0)
{
digitalWrite(vepin, LOW);
Apagamos las vlvulas
digitalWrite(vspin, LOW);
delay(tiempo);
digitalWrite(vepin, LOW);
digitalWrite(vspin, HIGH);
p=1;
t=1;

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.

Llenado y vaciado de tanque, con batido de la mezcla al llenado.


En el proceso anteriormente descrito incorporamos un motor que bate el lquido que ingresa al
tanque de almacenamiento luego que el tanque se ha llenado. El motor de batido da 10 vueltas,
antes de detenerse y habilitar el vaciado del tanque.

26

La simulacin en Proteus V8.1 del Arduino e instrumentacin es la siguiente:

Finalmente el software para Arduino es:

27

const int snivelpin = A0;


const int vspin = 0;
const int vepin = 2;
const int motorpin = 13;
const int tachopin = 12;
int snivel = 0;
int tacho = 0;
int tachoant = 0;
int nmin = 31;
int nmax = 972;
int p = 0;
int c = 0;
int cont = 0;
int vueltas = 10;

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);

Apagamos las vlvulas y


encendemos el motor

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;
}

Contamos las vueltas

Encendemos la vlvula de salida, mientras que la


de entrada y el motor se encuentran apagadas

Preparamos variables para no volver a contar y mantener cerrada la


vlvula de entrada en el vaciado del tanque

Conexin a otros instrumentos.


Servomotores.

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 componente principal de un servo es un motor de corriente continua, que realiza la funcin de


actuador en el dispositivo: al aplicarse un voltaje entre sus dos terminales, el motor gira en un
sentido a alta velocidad, pero produciendo un bajo par. Para aumentar el par del dispositivo, se
utiliza una caja reductora, que transforma gran parte de la velocidad de giro en torsin.
El punto de referencia o setpoint, que es el valor de posicin deseada para el motor, se indica
mediante una seal de control cuadrada. El ancho de pulso de la seal indica el ngulo de posicin,
una seal con pulsos ms anchos (es decir, de mayor duracin) ubicar al motor en un ngulo mayor,
y viceversa.
Los servos son controlados mediante el envo de un pulso de ancho variable, el cable de control
llevara este pulso. Los parmetros para este pulso son: un pulso mnimo, un pulso mximo, y una
tasa de repeticin. Dadas las limitaciones de rotacin del servo, el punto neutro o medio se define
como la posicin desde donde el servo tiene exactamente el mismo ngulo de rotacin en la
direccin de las agujas del reloj como en el sentido contrario. Es importante tener en cuenta que los
servos tendrn diferentes limitaciones en su rotacin, pero todos exhiben una posicin neutra, y
que la posicin es siempre alrededor de 1,5 milisegundos (ms).

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

Control del Servomotor con Arduino.


1) Controlamos un servo para que se mueva +/- 180, a travez de un lazo for:

#include <Servo.h>
Servo servo1;

int scontrol = 9;
int pos = 0;

// librera de Arduino para manejar servos


// crea un objeto tipo servo1
// se pueden crear hasta 8 servos, o sea manejar este nmero de
// actuadores
// salida de la seal al cable de control
// variable para almacenar la posicin del servo

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>

// librera de Arduino para manejar servos

Servo servo2;

// crea un objeto tipo servo1

int scontrol = 9;
int potpin = 0;
int potval;

// salida de la seal al cable de control


// pin al que se conecta la seal del potencimetro
// valor de la seal del potenciometro

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.

Cada uno de estos tipos requerir un diferente circuito de control.


Motores paso a paso unipolares.
Los motores unipolares son relativamente fciles de controlar, gracias a que poseen devanados
duplicados. Aunque para facilitar el esquema se dibuja este devanado como una bobina con punto
medio, en realidad tienen dos bobinas en cada eje del estator, que estn unidas por extremos
opuestos, de tal modo que al ser alimentada una u otra, generan cada una un campo magntico
inverso al de la otra. Nunca se energizan juntas: por eso lo correcto es decir que tienen una doble
bobina, en lugar de decir (como se hace habitualmente) que es una bobina con punto medio. Esta
duplicacin se hace para facilitar el diseo del circuito de manejo, ya que permite el uso, en la parte
de potencia, de un transistor nico por cada uno de los bobinados.
El bobinado de un motor unipolar es el que se indica en la siguiente figura:

37

En el esquema ms comn de conexin se unen los "puntos medios" de ambos ejes (a y b en el


dibujo) y se les conecta al positivo de la alimentacin del motor. El circuito de control de potencia,
entonces, se limita a poner a masa los bobinados de manera secuencial.
El circuito de control de las bobinas de un motor de pasos lo podemos realizar mediante transistores
as:

Para lograr ms fuerza la secuencia es:

Y para obtener medio paso la secuencia es:

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:

Motores paso a paso bipolares.


Los motores bipolares requieren circuitos de control y de potencia ms complejos. Pero en la
actualidad esto no es problema, ya que estos circuitos se suelen implementar en un integrado, que
soluciona esta complejidad en un solo componente. Como mucho se deben agregar algunos
componentes de potencia, como transistores y diodos para las contracorrientes, aunque esto no es
necesario en motores pequeos y medianos.
Como no tienen el doble bobinado de los unipolares (recordemos que en stos todo el tiempo se
est utilizando slo una de las bobinas duplicadas, mientras la otra queda desactivada y sin ninguna
utilidad), los motores bipolares ofrecen una mejor relacin entre torque y tamao/peso.
El bobinado de un motor bipolar es el que se indica en la siguiente figura:

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:

Motores paso a paso de reluctancia variable.


Los motores de reluctancia variable son los motores paso a paso ms simples de manejar. Su
secuencia se limita a activar cada bobinado en orden, como lo indica la figura. Es comn que estos
motores tengan un cable comn que une todas las bobinas. Estos motores, si se los mueven a
mano, no tienen la sensacin "dentada" de los otros motores paso a paso, sino que se mueven
libres, como los motores de corriente continua.

40

Control de posicionado de un motor de pasos con ayuda de un potencimetro en Arduino.


El esquema de conexiones para un motor unipolar de 6 cables es:

Esquemticamente tenemos:

Para poder controlar el motor de pasos, requerimos de un elemento adicional, el circuito


integrado ULN2004A, que es un arreglo de transistores Darlington, para alta corriente y alto
voltaje, cuyo diagrama de componentes es el siguiente:

Las conexiones para un motor bipolar de cuatro cables es:


41

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

#define PASOS 100


// nmero de pasos del motor
Stepper stepper(PASOS, 8, 9, 10, 11); // se crea el objeto stepper y se asigna las conexiones al
circuito
// de control a travs de los pines 8,9,10,11
int prev = 0;
//variable que almacena la lectura previa del pot.
int potpin = 0;
// direccin del potencimetro
int val = 0;
// almacena el valor del potencimetro.
int velocidad = 30;
// velocidad del motor de pasos
void setup()
{
stepper.setSpeed(velocidad);
}

// 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.
}

Display numrico de matriz de puntos LCD.


Los Display LCD son visualizadores pasivos, esto significa que no emiten luz como el visualizador o
display alfanumrico hecho a base de un arreglo de diodos LEDs.
Muchas aplicaciones requieren mostrar datos de diversas formas. Para ello se puede emplear
fcilmente un display LCD. Estos mdulos son la solucin ideal en los casos donde se desea mostrar
mens, respuestas a determinadas secuencias de comandos o control, para lo cual el hardware de
control se resume en un par de teclas del tipo cursor. Tambin son muy tiles en sistemas de
mediciones mltiples y simultneas, donde de otra forma habra que emplear cantidades de
decodificadores BCD y transistores para comandar dispositivos de 7 segmentos convencionales.

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

Estos dispositivos vienen gobernados por un microcontrolador, que normalmente va incorporado


sobre la misma placa de circuito impreso que soporta el LCD, en la parte de atrs, como se indica a
continuacin:

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

Borra el contenido de la pantalla y retorna el


cursor a la posicin home (direccin 0).

1.52 ms

Cursor home

Retorna el cursor a la posicin Home. Retorna


tambin el rea de visin a la posicin inicial. El
contenido de la DDRAM permanece intacto.

1.52 ms

Entry mode set

I/D

Incrementar/Decrementar direccin (I/D);


Habilitar corrimiento de pantalla (S). Estas
operaciones se realizan al leer o escribir datos

37 s

Display on/off
control

Enciende o apaga el display (D), Cursor encendido


/ apagado (C), destello del cursor (blink) (B).

37 s

37 s

37 s

Cursor/display shift

S/C

R/L

Selecciona entre desplazamiento de pantalla o de


cursor (S/C), selecciona la direccin de
desplazamiento (R/L). El contenido de la DDRAM
permanece intacto.

Function set

DL

Configurar en ancho de bus (4 u 8 bits) (DL),


Numero de lneas de display (N), y tipo de fuente
(F).

45

Set CGRAM address

Set DDRAM address

CGRAM address

DDRAM address

Escribe la direccin de CGRAM. Los datos a


almacenar en CGRAM pueden ser enviados
despus de esta instruccin

37 s

Escribe la direccin de DDRAM. Los datos a


almacenar en DDRAM pueden ser enviados
despus de esta instruccin

37 s

Leer bandera Ocupado (Bussy Flag) indicando si


el controlador est realizando alguna operacin
interna o est listo para aceptar datos/comandos.
Lee la direccin CGRAM o DDRAM (dependiendo
de la instruccin previa).

0 s

Read busy flag


&address counter

Write CGRAM
orDDRAM

Write Data

Escribe datos a las memorias CGRAM o DDRAM.

37 s

Read from
CG/DDRAM

Read Data

Lee datos desde las memorias CGRAM o DDRAM.

37 s

BF

CGRAM/DDRAM address

Nombres y significado de bits en instrucciones


I/D

0 = disminuir el contador de direccin

1 = incrementar el contador de direccin

0 = Sin corrimiento de display

1 = Con corrimiento de display

0 = Display Apagado

1 = Display Encendido;

0 = Cursor Apagado

1 = Cursor Encendido

0 = Parpadeo cursor Apagado

1 = Parpadeo 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

0 = puede aceptar instruccin

1 = operacin interna en progreso

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

Escribiendo texto en un display con Arduino.

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>

// Liberia para manejo de LCD

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// Creamos el objeto lcd con los pines de conexin como datos


47

void setup()
{
lcd.begin(16, 2);
lcd.print("hola a todos!");
}

//Configuramos el nmero de filas y columnas


// Presentamos el mensaje

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>

// Liberia para manejo de LCD

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


void setup()
{
lcd.begin(16, 2);
lcd.print("hola a todos!");
delay(1000);
}

// Creamos el objeto lcd con los pines de conexin como datos

//Configuramos el nmero de filas y columnas


// Presentamos el mensaje

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

También podría gustarte