You are on page 1of 7

UNIVERSIDAD DE BOYAC

FACULTAD DE CIENCIAS E INGENIERA


PROGRAMA DE INGENIERA MECATRNICA
TALLER PROGRAMACIN ARDUINO V
DOCENTE: MSC ELKIN YESID VESLIN DAZ
TUNJA 12 DE NOVIEMBRE DE 2012


Serial Communication II y Salida Analgica

En la seccin anterior aprendimos a configurar el Microcontrolador ATMEGA para recibir datos de
tipo analgico y tomar decisiones a partir de ellos. El Microcontrolador trabaja con seales
analgicas en el orden de voltios dentro de un rango de 0V a 5V. Tambin aprendimos a
configurar el protocolo de comunicacin serial, el cual sirve para enviar datos provenientes del
Microcontrolador a Arduino y visualizarlos en la ventana Serial Monitor. Para ms informacin
sobre este aspecto, favor referirse al Taller IV.

En esta seccin se configurar al Microcontrolador para que tome decisiones a partir de datos
provenientes del PC.

Incoming Data

Serial Monitor, la pantalla de interaccin de Arduino con el Microcontrolador trabaja con
caracteres, es decir en lugar de mostrar en pantalla el nmero 1, lo que en realidad est
mostrando es el carcter que representa a un 1.

En el mundo de la informtica, los caracteres del teclado son representados y clasificados a partir
del cdigo ASCII, este cdigo permite representar texto no slo en computadores, sino tambin en
comunicaciones y otros medios que transmiten y utilizan el texto. La Tabla a continuacin
presenta los cdigos ASCII en DECIMAL de algunos caracteres:

Carcter ASCII (DEC)
1 49
2 50
3 51
4 52
5 53
A 65
a 97
B 66
b 98


Tanto los datos que son enviados a Serial Monitor como los provenientes de l, son representados
en cdigo ASCII. Arduino a travs del protocolo de comunicacin serial, realiza esta conversin
automticamente, lo que muchas veces puede generar dificultades en el momento de disear un
programa, ya que al no tener en cuenta este proceso de conversin el programa no funcionar
correctamente. Existen otras dificultades que por desconocimiento tambin pueden generar
problemas, por ejemplo, en la tabla anterior se muestra que un carcter no tiene el mismo cdigo
ASCII si es mayscula o es minscula.

Para enviar datos a travs del Serial Monitor basta con ingresar una ventana y cmo lo presenta la
Fig. 1, digitar el texto correspondiente:


Figura 1. Ventana de visualizacin y envio de datos del Serial Monitor
Estructura de Programacin Arduino

El siguiente programa usar el Serial Monitor para mostrar el dato en ASCII de la tecla que se
oprima. El Microcontrolador se encargar de controlar el protocolo de comunicacin, leyendo el
dato que viene del teclado y luego envindolo al PC para mostrarlo en pantalla.

int incomingByte; //Variable que almacenar el dato proveniente del teclado

void setup()
{
Serial.begin(9600);
}

void loop()
{
if( Serial.available() > 0) //Si existe un dato proveniente del Puerto serial
{
incomingByte = Serial.read(); //Lee el dato y lo almacena en IncomingByte

Serial.print("Dato en Decimal ="); //Lo enva a pantalla a travs del puerto Serial
Serial.println(incomingByte, DEC); // ASCII- decimal
Serial.print("Dato en Hexadecimal =");
Serial.println(incomingByte, HEX); // ASCII-hexadecimal
Serial.print("Dato en Octal =");
Serial.println(incomingByte, OCT); // ASCII- octal
Datos que se
enviarn al
Microcontrolador
Serial.print("Dato en Binario =");
Serial.println(incomingByte, BIN); // ASCII- binario
|}
}

La estructura de lectura de datos es simple, primero el programa realiza una verificacin del
puerto serial, si existe un dato, cualquier que sea, Serial.available() ser mayor que 0, esto da
inicio al protocolo de lectura que se ejecuta a travs de Serial.read() quien se encarga de tomar el
dato y a travs de una variable lo almacena.

Serial.print y Serial.println, realizan la misma tarea, slo que la segunda funcin genera un cambio
de lnea luego de imprimir el dato en pantalla (ln hace referencia a un enter).

Cuando se quiera imprimir una cadena de caracteres para mostrar un mensaje, por ejemplo:
leyendo datos del puerto se debe encerrar el texto en comillas dobles: leyendo datos del
puerto. Una cadena de caracteres no es lo mismo que un dato en ASCII, cmo su nombre lo
indica un texto es una cadena de letras cuyo contenido es enteramente textual, mientras que un
dato en ASCII hace referencia a una sola letra o smbolo.


Estructura de Programacin Arduino

El siguiente programa toma un dato proveniente del teclado y de acuerdo con su valor en ASCII
realiza una accin en Microcontrolador. Para este ejercicio realice el siguiente diagrama de
conexiones en Arduino.


Figura 2. Esquema de conexiones para controlar un led
Otra forma de implementar los datos provenientes en ASCII es usando su
representacin en carcter, por ejemplo: el nmero 1 en ASCII es 49, sin embargo
tambin es '1', las comillas simples indican que el elemento es una variable tipo
carcter o texto. Al usar esta representacin nos olvidamos de su valor en ASCII
porque internamente el programa ya lo conoce, as que si se usa '1' como variable, se
est usando realmente la codificacin ASCII para interpretar este dato.
Nota
int incomingByte;
int led=8;

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

void loop()
{
if( Serial.available() > 0)
{
incomingByte = Serial.read();

if (incomingByte == '1') // Si se oprime la tecla 1
{
digitalWrite(led, HIGH);
Serial.println("Led Encendido ");
}
if (incomingByte == '2') // Si se oprime la tecla 2
{
digitalWrite(led,LOW);
Serial.println("Led Apagado.");
}

if ((incomingByte != '1') && (incomingByte != '2')) // Si se oprime una tecla diferente a 1 y 2
{
Serial.println("Digite otra tecla");

}
}
}

El anterior programa toma una decisin en funcin del valor proveniente del teclado, en este caso
las teclas 1 y 2 controlan el encendido de un led. Como se est trabajando por entorno Serial, se
aprovecha esta cualidad para enviar mensajes en pantalla que comuniquen al usuario que est
pasando con las acciones realizadas, este mtodo de conversacin es efectivo y muy til para
cualquier programa o proyecto controlado desde el PC.

Actividad

Realizar el esquema de control de sentido de Giro para un Motor DC como se presenta a
continuacin.


Figura 3. Esquema de conexiones para controlar un motor

Disear un programa que controle la salida del motor de la siguiente forma: d derecha, i
izquierda, p parar.

Salidas analgicas

La segunda parte del tutorial tiene como propsito ensear a utilizar las salidas Analgicas del
Microcontrolador. Arduino cuenta dentro del mdulo de pines digitales con 5 pines que se
pueden configurar como salidas analgicas, estos pines se pueden identificar por tener el smbolo
(~) a su lado.



Las salidas Analgicas del dispositivo no tienen el mismo rango de trabajo que las entradas , ellas
se pueden configurar de 0 a 255 para que genere una salida proporcional en voltios de 0 a 5 V.
Estas salidas analgicas tienen mltiples propsitos, por ejemplo se pueden usar para atenuar el
encendido de un led, tambin para variar la velocidad de un motor controlado a travs de un
L293D o un optoacoplador, y manejar cualquier otro dispositivo que requiera de control a travs
de un voltaje variable.

Estructura de Programacin Arduino

El siguiente programa se encarga de atenuar el encendido de un led.



Las salidas analgicas del microcontrolador se encuentran en los pines 3, 5, 6,
10 y 11 del mdulo digital i/o.
Esta seal se puede utilizar para generar PWM, muy til en el control de
servomotores. Sin embargo, para estos dispositivos Arduino tiene su propia
libreria muy fcil de enteder, que control de una manera muy sencilla la
posicin de estos dispositivos.
Nota

int ledPin = 11; // led Conectado al Pin 11
int atenuar;

void setup()
{
// no hay configuracin de salidas analgicas
}

void loop()
{
for(atenuar = 0 ; atenuar <= 255; atenuar +=5) // Genera un conteo incremental de 0 a 255
{
analogWrite(ledPin, atenuar);
delay(100);
}
for(atenuar = 255 ; atenuar >= 0; atenuar -=5) //Genera una cuenta regresiva de 255 a 0
{
analogWrite(ledPin, atenuar);
delay(100);
}
}

La funcin analogWrite(pin, valor) se encarga de enviar un valor de 0 a 255 definida por el
usuario, el programa realiza la conversin y genera en el pin una salida de voltaje proporcional a
este valor. for se encarga de incrementar de 5 en 5 la variable atenuar, esta se escribe a atravs de
analogWrite, y enviar una seal voltaje a travs del pin que aumentar de 0 a 5 voltios de forma
proporcional, una vez termina el primer ciclo, el segundo se encarga del ejercicio contrario,
reduciendo el voltaje de salida de 5 a 0 voltios. El resultado visualmente es un led que incrementa
su luminosidad y posteriormente la decrementa. Delay permite controlar el tiempo de atenuacin
del led

La siguiente actividad permite regular la intensidad de encendido de un led a travs de un
potencimetro utlizando analogWrite y analogRead.

int potenciometro=A0;
int dato;
int led=11;

void setup()
{
//No requiere de configuracin
}

void loop()
{
dato=analogRead (potenciometro);
analogWrite(led, dato/4);

}

El led se encender de manera proporcional al valor del potencimetro. La relacin entre el valor
mximo de la entrada anloga (1023) generada por el potencimetro y el valor mximo de la
salida anloga (255) es aproximadamente 1:4, por lo que el dato que es ledo a travs de
analogRead se reduce a una cuarta parte para que encaje en la proporcionalidad que requiere
analogWrite.


ACTIVIDAD

En grupos:

Utilizar las bondades de analogWrite para controlar la velocidad de giro de un motor DC
usando un potencimetro para controlar esta variacin. El control de velocidad se realiza a
travs de un L293D. Para esto, regule el voltaje de salida de los pines que controlan del
sentido de giro. Verifique que estos se encuentren conectados a cualquiera de los pines
habilitados para realizar salidas analgicas.
Genere una rutina que active y desactive un motor de acuerdo con los datos de la Figura 4.
Las rdenes de arranque y parada son dadas a partir del Serial Monitor de Arduino.
Adicionar mensajes que indiquen el estado del motor.

Tiempo
Voltaje
5v
4v
3s 5s
Arranque
0v
Tiempo
Voltaje
4v
5s
Parada
0V

Figura 4. Control de arranque y parada de un motor DC.
El motor arranca desde los 0v a 5v en un tiempo de 3 segundos. Posteriormente durante 2
segundos reduce su velocidad y se estaciona en un control permanente de 4 V.

Para detener el motor, reduzca la velocidad controlada y detngalo totalmente en un tiempo de 5
segundos.
Al igual que las entradas analigicas, los pines
digitales (~) que funcionan como salidas analgicas
no requieren configuracin desde el void setup.
Nota

You might also like