Está en la página 1de 11

Interfaces y Perifricos, Gua 3

Facultad: Ingeniera
Escuela: Electrnica
Asignatura: Interfaces y Perifricos

Tema: Arduino y Comunicacin Serial con Visual Basic


Objetivos Especficos
1. Utilizar el puerto USB como dispositivo de comunicacin externo.
2. Realizar programas de Visual Basic que se comuniquen con Arduino.
3. Realizar Sketches de Arduino que reciban rdenes y enven datos a la PC.
4. Realizar aplicaciones de manejo de hardware externo combinando las plataformas.

Material y Equipo
No

Cantidad

2
3
4
5
6
7
8
9
10

1
1
4
4
1
1
1
1
varios

Descripcin
Una computadora con sistema operativo Windows y con el
programa Arduino IDE instalados
Cable USB (tipo A hacia tipo B)
Tarjeta Arduino UNO R2 o R3
Resistencias de 4.7k
LEDs
Potencimetro de 5K
Breadboard
Pinza
Cortadora
Cables UTP

Introduccin Terica
Visual Basic y Puerto Serie
La interfaz serie asncrona es el principal dispositivo de comunicacin de sistema a sistema.
Asncrono significa que no hay presente una seal de sincronizacin o de reloj. Cada
carcter est enmarcado entre seales de inicio y parada. Un solo bit 0, denominado bit de
inicio, precede a cada carcter para indicar al sistema que los siguientes 8 bits constituyen
un byte de datos. Uno o dos bits en alto siguen al carcter para sealar que dicho carcter ha
sido enviado.
Trama en una transmisin asncrona:

Interfaces y Perifricos, Gua 3

Figura 1. Trama Asncrona


El puerto serie en una computadora est compuesto por varias entradas/salidas. Dispuestas
en un conector del tipo DB9 o DB25, tal como se muestra en la siguiente figura:

Figura 2. a) Conector DB25, b) Conector DB9


La distribucin de las seales en cada uno de sus pines es la siguiente:
Seal

Descripcin

GND o SG

0 Voltios

TxD

Salida para transmisin de datos

RxD

Entrada para recepcin de datos

RTS

(Request To Send) Salida que indica una peticin de envo

CTS

(Clear To Send) Dispuesto para enviar, entrada por donde le indica el otro
dispositivo que ya puede enviar los datos.

DSR

(Data Set Ready) Dispositivo de datos preparado, entrada por donde le


indica el otro dispositivo que ya est listo.

DCD o CD

Entrada para la deteccin de portadora

DTR

(Data Terminal Ready) Salida, terminal de datos listo

Interfaces y Perifricos, Gua 3

Microsoft Comm Control 6.0


Es el control que permite la comunicacin de una aplicacin hecha en Visual Basic 6 con el
puerto serie. No est en la caja de herramientas por defecto, debe introducirse mediante el
men Proyecto y luego Componentes. En el formulario solamente se ve en tiempo de diseo.
Para habilitar la herramienta del puerto serie en Visual Basic realice lo siguiente: Seleccione
la opcin Proyecto>>Componentes, al aparecer el listado de componentes seleccionar:
Microsoft comm control 6.0, d clic en aceptar, lo que provocar que la barra de
herramientas cambie como se muestra en la figura 3.

Figura 3. MSCOMM Control

Propiedades
Entre las propiedades del MSCOMM Control hay algunas que pueden establecerse en
tiempo de diseo o en tiempo de ejecucin, y otras que solamente se pueden establecer o
consultar en tiempo de ejecucin.
A continuacin se enuncian algunas propiedades de este control

Interfaces y Perifricos, Gua 3

Propiedades que se establecen en tiempo de diseo o ejecucin


CommPort

Indica el nmero del puerto serie a utilizar, admite valores del 1 al 255,
Generalmente las PC tienen dos puertos seriales: Com1 y Com2, si se le
coloca un nmero de puerto inexistente dar error

Settings

Indica 4 parmetros en orden: velocidad, paridad, nmero de bits y bits


de parada que se usarn en la comunicacin

InBufferSize

Mediante esta propiedad se establece el tamao del buffer de entrada.


Puede conocerse el nmero de caracteres presentes en el buffer de
entrada consultando el valor de la propiedad InBufferCount

OutBufferSize

Mediante esta propiedad se controla el tamao del buffer de salida.


Puede conocerse el nmero de caracteres presentes en el buffer de
salida (los que an estn transmitirse), consultando el valor de la
propiedad OutBufferCount

Propiedades que se establecen slo en tiempo de ejecucin


PortOpen

Abre el puerto de comunicacin. Puede tener los valores True (para


abrirlo) y False (para cerrarlo)

InBufferCount

Permite averiguar cuntos caracteres se tienen en el buffer de entrada

OutBufferCount

Permite conocer cuntos caracteres quedan por transmitir en el buffer de


salida

Output

Enva caracteres al buffer de salida

Input

Lee el buffer de recepcin

El control Microsoft Comm Control 6.0 tiene por defecto el nombre MSComm1. Para
establecer o consultar una propiedad se debe utilizar la siguiente sintaxis
MSComm1.Propiedad
Por ejemplo, para abrir el puerto se coloca MSComm1.Portopen=True
Para leer el puerto Buffer=MSComm1.Input
Para escribir en el puerto MSComm1.Output=dato
De igual forma con las dems propiedades
Manejo de Perifricos Analgicos Mediante Arduino.
La plataforma Arduino, basada en microcontrolador AVR, hereda la capacidad intrnseca de
dicho microcontrolador para manejar perifricos analgicos mediante tcnicas de conversin
especficas. Dichas tcnicas consisten en la conversin analgica a digital (ADC) y
modulacin por ancho de pulso (PWM). Cada una permite interactuar con perifricos
analgicos que proveen informacin de entrada (ADC) o que aceptan informacin de salida
(PWM)
Conversin analgica a digital.
El microcontrolador cuenta con un ADC integrado en el mismo chip, que permite tomar

Interfaces y Perifricos, Gua 3

lecturas analgicas de voltaje de un dispositivo que genere tensiones entre 0 y 5V. La


configuracin de dicho mdulo es automtica, bastando solamente con invocar la funcin de
lectura de datos, la cual se detalla a continuacin:
analogRead(numero_pin): Realiza la lectura sobre el pin analgico que se le especifique
(Slo se permiten los pines A0 al A5). El valor que devuelve es un nmero entero
proporcional al voltaje de entrada, de tal forma que si se introducen 0V devuelve un valor de
0 y si se introducen 5V devuelve un valor de 1023, con todos los voltajes intermedios se
producen valores distribuidos linealmente a lo largo de este intervalo.
Ntese que no es necesario configurar previamente un pin analgico para poderlo usar con
esta funcin.
Advertencia: El rango vlido para los voltajes de entrada es solamente de 0 a 5V. Si
introduce voltajes negativos, o bien, voltajes positivos arriba de 5V, podr daar de manera
permanente el dispositivo.
Modulacin por ancho de pulso (PWM).
El Microcontrolador AVR cuenta tambin con dispositivos temporizadores que permiten
generar seales externas, las cuales emplean la modulacin por ancho de pulso para
manejar cargas que sean compatibles con este esquema. Vale aclarar que la tcnica en s,
es completamente diferente de la conversin digital a analgica (DAC), puesto que no se
generan tensiones analgicas constantes (por ejemplo entre 0 y 5V) en ningn momento,
sino que ms bien la carga es encendida y apagada rpidamente, produciendo un efecto
equivalente a proveer un nivel de potencia intermedio, que puede variar entre completamente
apagado y completamente encendido. Adems, de manera similar al ADC, los mdulos
temporizadores son inicializados de manera automtica, bastando con invocar la funcin que
se detalla a continuacin:
analogWrite(numero_pin, ciclo_de_trabajo): Genera una seal PWM sobre un pin digital
que tenga esa capacidad (denotado con ~). El rango vlido para el ciclo de trabajo va desde
0 (completamente apagado) hasta 255 (completamente encendido).
Ntese que no todas las cargas son compatibles con la modulacin PWM, por lo que se
recomienda que se informe antes de emplearla con algn dispositivo en particular. La tcnica
funciona bien con algunas cargas como LEDs y motores DC pequeos, mas no con cargas
como rels o motores DC sin escobillas (como los ventiladores para chass de computadora).

Procedimiento
Parte 1. Lectura de entradas analgicas.
1. Proceda a ensamblar el circuito junto con el Arduino. Si cuenta con con un
potencimetro que permita conectar cables directamente a l, puede conectarlo
directamente al Arduino sin una breadboard. Recuerde que no es necesaria una
fuente de suministro externa.

Interfaces y Perifricos, Gua 3

Figura 4. Diagrama de circuito parte 1.


2. Abra Visual Basic y genere el siguiente formulario, a continuacin introduzca el
siguiente cdigo fuente en el mismo:

Figura 5. Formulario para parte 1.


Private Sub Form Load()
Timer1.Interval =400
MSComm1.CommPort = 4 'Ajustar al puerto real de su arduino en su PC
MSComm1.Settings = 9600,n,8,1
MSComm1.InputMode = comInputModeText
MSComm1.PortOpen = True
End Sub
Private Sub Timer1_Timer()
Dim valor As Integer
Dim voltage As Single
'Verifica si existen datos en el buffer del puerto
If MSComm1.InBufferCount <> 0 Then
'Si existen datos los retira

Interfaces y Perifricos, Gua 3

valor = MSComm1.Input
'Calcula el nivel de tensin que obtuvo el ADC
voltaje = valor/1023*5
'Actualiza la ventana con la informacin recibida
Text1.Text = valor
Text2.Text = Round(voltaje,2)
End If
End Sub
Listado 1. Programa de Visual Basic para parte 1.
3. A continuacin abra el Arduino IDE e introduzca el siguiente sketch.
void setup() {
//Inicializa el puerto serie
Serial.begin(9600);
}
void loop() {
int lectura;
lectura = analogRead(0); //Toma lectura del ADC
Serial.print(lectura); //Enva el dato ledo
delay(500); //Genera un retardo breve
}
Listado 2 Sketch para la parte 1.
4. Conecte el cable USB y descargue el sketch al Arduino. Ejecute el programa en Visual
Basic y observe el valor que se presenta en la ventana.
5. Vare el potencimetro y observe cmo cambia el valor visualizado en pantalla.
6. Modifique el formulario para que muestre una barra de desplazamiento horizontal (o el
control de su eleccin) que represente la posicin relativa del potencimetro. Notifique
a su docente cuando termine el programa para que le sea evaluado.
Parte 2. Control de salidas mediante PWM
7. Desconecte la tarjeta Arduino del puerto USB y proceda a armar el siguiente circuito
(una vez ms, el circuito no requiere de fuente externa).

Figura 6. Diagrama de circuito de la parte 2

Interfaces y Perifricos, Gua 3

8. A continuacin genere un nuevo proyecto en Visual Basic. Siga el siguiente modelo


para crear el formulario e introduzca el cdigo mostrado en el listado 3.

Figura 7. Formulario de programa de la parte 2


Private Sub Form_Load()
MSComm1.CommPort = 4 'Ajustar al puerto real de su PC asignado a Arduino
MSComm1.Settings = 9600,n,8,1
MSComm1.InputMode = comInputModeBinary
MSComm1.PortOpen = True
VScroll1.Min = 0
VScroll1.Max = 15
VScroll2.Min = 0
VScroll2.Max = 15
VScroll3.Min = 0
VScroll3.Max = 15
VScroll4.Min = 0
VScroll4.Max = 15
End Sub
Private Sub VScroll1_Change()
'Define un vector de un dato, el dato a enviar
Dim dato_enviado(0) As Byte
'Coloca el dato en el vector
dato_enviado(0) = VScroll1.Value + 0*16
'Enva el dato
MSComm1.Output = dato_enviado
Label1.Caption = VScroll1.Value
End Sub
Private Sub VScroll2_Change()
'Define un vector de un dato, el dato a enviar

Interfaces y Perifricos, Gua 3

Dim dato_enviado(0) As Byte


'Coloca el dato en el vector
dato_enviado(0) = VScroll2.Value + 1*16
'Enva el dato
MSComm1.Output = dato_enviado
Label2.Caption = VScroll2.Value
End Sub
Private Sub VScroll3_Change()
'Define un vector de un dato, el dato a enviar
Dim dato_enviado(0) As Byte
'Coloca el dato en el vector
dato_enviado(0) = VScroll3.Value + 2*16
'Enva el dato
MSComm1.Output = dato_enviado
Label3.Caption = VScroll3.Value
End Sub
Private Sub VScroll4_Change()
'Define un vector de un dato, el dato a enviar
Dim dato_enviado(0) As Byte
'Coloca el dato en el vector
dato_enviado(0) = VScroll4.Value + 3*16
'Enva el dato
MSComm1.Output = dato_enviado
Label4.Caption = VScroll4.Value
End Sub
Listado 3. Programa en Visual Basic de la parte 2
9. Haga un nuevo Sketch en el Arduino IDE y escriba el siguiente programa:
void setup(){
//Inicializa el puerto serie
Serial.Begin(9600);
}
void loop(){
int dato;
int num_led;
int brillo;
//Realiza el proceso slo si se reciben datos
if(Serial.available()){
//Toma el byte del puerto
dato = Serial.read();
//Extrae los cuatro bits ms significativos para el nmero del led
num_led = dato>>4;
//Extrae los cuatro bits menos significativos para el valor del brillo

10

Interfaces y Perifricos, Gua 3

brillo = dato & 0x0F;


//Ajusta el brillo segn el led seleccionado
switch(num_led){
case 0: analogWrite(9,brillo << 4); break;
case 1: analogWrite(6,brillo << 4); break;
case 2: analogWrite(5,brillo << 4); break;
case 3: analogWrite(3,brillo << 4); break;
}
}
}
Listado 4. Sketch de Arduino para la parte 2
10. Conecte el cable USB a Arduino y descargue el Sketch. Ejecute el programa de Visual
Basic y deslice las barras de desplazamiento. Observe lo que sucede con los LEDs al
variar las barras.
11. Modifique el programa de Visual Basic para generar el efecto de parpadeo atenuado
en uno de los LEDs (el brillo aumenta y disminuye suavemente entre los extremos de
encendido y apagado), mediante un timer que vare el brillo automticamente cada
0.5s. Notifique a su docente cuando lo termine para que le sea evaluado.
12. Desconecte la tarjeta Arduino de su PC y desarme el circuito. Luego apague su
computadora y deje en orden su puesto de trabajo.

Anlisis de Resultados
1. De qu manera se realiza la lectura de los datos en la primera parte? Cmo se
consigue sincronizar ambos extremos?
2. Qu proceso se realiza para combinar el valor de brillo de cada LED con su posicin
relativa al transmitir? De qu manera realiza el programa en Arduino la separacin de
esta informacin?

Investigacin Complementaria
1. Determine cmo se puede hacer para agregar entradas y salidas adicionales en los
programas de la primera y segunda parte.

Bibliografa

Referencia en lnea del lenguaje: http://arduino.cc/en/Reference/HomePage


Massimo Banzi, Getting started with Arduino O'Reilly Media / Make Publisher, Marzo
2009, ISBN: 978-0-596-15551-3

11

Interfaces y Perifricos, Gua 3


Hoja de cotejo: 3

Gua 3: Arduino y Comunicacin Serial con Visual Basic


Alumno:

Maquina No:

Docente:

GL:

Fecha:

EVALUACION
%

1-4

CONOCIMIENTO

25%

Conocimiento
deficiente de los
fundamentos
tericos

Conocimiento y
explicacin
incompleta de los
fundamentos
tericos

Conocimiento
completo y
explicacin clara
de los
fundamentos
tericos

APLICACIN DEL
CONOCIMIENTO

70%

No Termin
completamente el
programa y
coment mal el
cdigo (30%)

Termin
completamente el
programa pero los
comentarios no
estaban del todo
correctos

Termin
completamente el
programa con sus
comentarios
correctos

No realiz el
circuito
correctamente
(40%)

ACTITUD

TOTAL

5-7

El circuito
funcion

8-10

El circuito
funcion

2.5
%

Es un observador
pasivo.

Participa
ocasionalmente o
lo hace
constantemente
pero sin
coordinarse con su
compaero.

Participa
propositiva e
integralmente en
toda la prctica.

2.5
%

Es ordenado; pero
no hace un uso
adecuado de los
recursos

Hace un uso
adecuado de los
recursos, respeta
las pautas de
seguridad; pero es
desordenado.

Hace un manejo
responsable y
adecuado de los
recursos conforme
a pautas de
seguridad e
higiene.

100
%

Nota

También podría gustarte