GUIA DE EJERCICIOS Nº 3 INSTRUMENTACIÓN AVANZADA ... · Como se vio en las transparencias de la...

8
Instrumentación Avanzada. G. Murcia J. Strack 1 GUIA DE EJERCICIOS Nº 3 INSTRUMENTACIÓN AVANZADA Comunicando LabVIEW a una placa ARDUINO

Transcript of GUIA DE EJERCICIOS Nº 3 INSTRUMENTACIÓN AVANZADA ... · Como se vio en las transparencias de la...

Page 1: GUIA DE EJERCICIOS Nº 3 INSTRUMENTACIÓN AVANZADA ... · Como se vio en las transparencias de la Clase 3, para lograr el objetivo se debe: 1. Instalar el driver correspondiente para

Instrumentación Avanzada. G. Murcia – J. Strack

1

GUIA DE EJERCICIOS

Nº 3

INSTRUMENTACIÓN AVANZADA

Comunicando LabVIEW

a una placa ARDUINO

Page 2: GUIA DE EJERCICIOS Nº 3 INSTRUMENTACIÓN AVANZADA ... · Como se vio en las transparencias de la Clase 3, para lograr el objetivo se debe: 1. Instalar el driver correspondiente para

Instrumentación Avanzada. G. Murcia – J. Strack

2

3.-COMUNICANDO LABVIEW A UNA PLACA ARDUINO

El objetivo de esta guía es programar la placa ARDUINO para que se comporte como una

DAQ (Data AcQuisition) de bajo costo. Es decir, que permita escribir salidas digitales

(leds), leer entradas digitales (botones) y leer una entrada analógica (potenciómetro) a

través de comandos enviados desde la PC.

Como se vio en las transparencias de la Clase 3, para lograr el objetivo se debe:

1. Instalar el driver correspondiente para que la placa ARDUINO didáctica suministrada por

la cátedra sea reconocida por la PC como un dispositivo conectado a un puerto COM

virtual.

2. Instalar las librerías NI-VISA (si aún no lo han hecho), para poder realizar luego la

comunicación con el dispositivo conectado al puerto COM virtual. Las herramientas que

usaremos están en la pestaña “Data Comunication” del diagrama de bloques de labVIEW.

3. Generar un programa en ARDUINO y en LabVIEW para establecer la comunicación

entre la PC y la DAQ de bajo costo. El programa en ARDUINO se puede generar en el

propio Entorno de Desarrollo Integrado (IDE) provisto en el DVD de la asignatura.

Ejercicio 3.1 (Escritura de salidas digitales)

Programar el comando A de la placa Arduino que permitirá escribir 4 salidas digitales

nombradas D0, D1, D2 y D3 correspondientes a los pines físicos 4, 5, 7 y 9 respectivamente.

Page 3: GUIA DE EJERCICIOS Nº 3 INSTRUMENTACIÓN AVANZADA ... · Como se vio en las transparencias de la Clase 3, para lograr el objetivo se debe: 1. Instalar el driver correspondiente para

Instrumentación Avanzada. G. Murcia – J. Strack

3

///////////////////////////////////////////////////////////////////////////////////

// Cátedra Instrumentación Avanzada

// Driver de comunicación serie para Arduino UNO, MEGA 2560, Intel Galileo Gen1 y DUE

// Compatible con libreria de LabVIEW similar a la de PIC18F2550

// Versión: 1.1.0

// Fecha: 03/09/2017

///////////////////////////////////////////////////////////////////////////////////

//DECLARACIONES/////////////////////////////////////////////////////////////

const int D0=4, D1=5, D2=7, D3=9; // SALIDAS DIGITALES

char caracteres[4], caracterEntrada;

//SETUP//////////////////////////////////////////////////////////////////////////

void setup() {

pinMode(D0, OUTPUT); // DECLARACIÓN DE SALIDAS DIGITALES

pinMode(D1, OUTPUT);

pinMode(D2, OUTPUT);

pinMode(D3, OUTPUT);

Serial.begin(9600); // CONFIGURACIÓN DEL PUERTO SERIE

digitalWrite(D0,0); // INICIALIZACIÓN DE SALIDAS (se ponen en 0)

digitalWrite(D1,0);

digitalWrite(D2,0);

digitalWrite(D3,0);

}// FIN DEL SETUP

//CICLO PRINCIPAL/////////////////////////////////////////////////////////////

void loop() {

if (Serial.available()) { // si llegó uno o más caracteres desde la PC

caracterEntrada = Serial.read(); // toma un nuevo byte

// ATENCIÓN AL COMANDO 'A' (ESCRITURA DE SALIDAS DIGITALES)

if (caracterEntrada == 'A') {

Serial.readBytes(caracteres,4); // lee 4 caracteres y los guarda en un buffer

digitalWrite(D0,caracteres[0]); // escribe la salida digital D0

digitalWrite(D1,caracteres[1]); // escribe la salida digital D1

digitalWrite(D2,caracteres[2]); // escribe la salida digital D2

digitalWrite(D3,caracteres[3]); // escribe la salida digital D3

}// FIN DE ATENCIÓN AL COMANDO 'A'

}// fin del if principal

}// fin del loop

Una vez escrito el programa anterior, se selecciona el modelo de la placa (UNO, MEGA 2560,

Intel Galileo Gen 1 o DUE) y el puerto COM en la pestaña Herramientas. Luego, se debe

compilar presionando Ctrl R o a través de la pestaña Programa. Si la compilación resulta exitosa

(no aparecen errores en el código) se carga el mismo al ARDUINO presionando Ctrl U.

Page 4: GUIA DE EJERCICIOS Nº 3 INSTRUMENTACIÓN AVANZADA ... · Como se vio en las transparencias de la Clase 3, para lograr el objetivo se debe: 1. Instalar el driver correspondiente para

Instrumentación Avanzada. G. Murcia – J. Strack

4

Antes de programar en LabVIEW se enviarán comandos al puerto serie de la placa a través del

software Docklight a fin de testear el funcionamiento del código recién cargado. Para ello, se

abre el programa, luego se abre el archivo ia2017_clase3_comandos.ptp y se selecciona el puerto

COM (configurar la velocidad a 9600 baudios).

Se realiza el siguiente programa en LabVIEW y se lo nombra como Ejercicio 3-1.vi:

Panel Frontal:

Diagrama de bloques:

Page 5: GUIA DE EJERCICIOS Nº 3 INSTRUMENTACIÓN AVANZADA ... · Como se vio en las transparencias de la Clase 3, para lograr el objetivo se debe: 1. Instalar el driver correspondiente para

Instrumentación Avanzada. G. Murcia – J. Strack

5

Ejercicio 3.2 (Lectura de entradas digitales)

Programar el comando B de la placa Arduino que permitirá leer 4 entradas digitales nombradas

D4, D5, D6 y D7 correspondientes a los pines físicos 2, 3, 6 y 8 respectivamente.

Al código anterior le agregamos el comando B y las variables y declaraciones necesarias. ///////////////////////////////////////////////////////////////////////////////////

// Cátedra Instrumentación Avanzada

// Driver de comunicación serie para Arduino UNO, MEGA 2560, Intel Galileo Gen1 y DUE

// Compatible con libreria de LabVIEW similar a la de PIC18F2550

// Versión: 1.1.0

// Fecha: 03/09/2017

///////////////////////////////////////////////////////////////////////////////////

//DECLARACIONES/////////////////////////////////////////////////////////////

const int D0=4, D1=5, D2=7, D3=9; // SALIDAS DIGITALES

const int D4=2, D5=3, D6=6, D7=8; // ENTRADAS DIGITALES

int entradaDigital, b0, b1, b2, b3; // VARIABLES

char caracteres[4], caracterEntrada;

//SETUP//////////////////////////////////////////////////////////////////////////

void setup() {

pinMode(D0, OUTPUT); // DECLARACIÓN DE SALIDAS DIGITALES

pinMode(D1, OUTPUT);

pinMode(D2, OUTPUT);

pinMode(D3, OUTPUT);

pinMode(D4, INPUT); // DECLARACIÓN DE ENTRADAS DIGITALES

pinMode(D5, INPUT);

pinMode(D6, INPUT);

pinMode(D7, INPUT);

Serial.begin(9600); // CONFIGURACIÓN DEL PUERTO SERIE

digitalWrite(D0,0); // INICIALIZACIÓN DE SALIDAS (se ponen en 0)

digitalWrite(D1,0);

digitalWrite(D2,0);

digitalWrite(D3,0);

}// FIN DEL SETUP

//CICLO PRINCIPAL/////////////////////////////////////////////////////////////

void loop() {

if (Serial.available()) { // si llegó uno o más caracteres desde la PC

caracterEntrada = Serial.read(); // toma un nuevo byte

// ATENCIÓN AL COMANDO 'A' (ESCRITURA DE SALIDAS DIGITALES)

if (caracterEntrada == 'A') {

Serial.readBytes(caracteres,4); // lee 4 caracteres y los guarda en un buffer

digitalWrite(D0,caracteres[0]); // escribe la salida digital D0

digitalWrite(D1,caracteres[1]); // escribe la salida digital D1

digitalWrite(D2,caracteres[2]); // escribe la salida digital D2

digitalWrite(D3,caracteres[3]); // escribe la salida digital D3

}// FIN DE ATENCIÓN AL COMANDO 'A'

Page 6: GUIA DE EJERCICIOS Nº 3 INSTRUMENTACIÓN AVANZADA ... · Como se vio en las transparencias de la Clase 3, para lograr el objetivo se debe: 1. Instalar el driver correspondiente para

Instrumentación Avanzada. G. Murcia – J. Strack

6

// ATENCIÓN AL COMANDO 'B' (LECTURA DE ENTRADAS DIGITALES)

if (caracterEntrada == 'B') {

b0 = digitalRead(D4); // lee la entrada D4

b1 = digitalRead(D5); // lee la entrada D5

b2 = digitalRead(D6); // lee la entrada D6

b3 = digitalRead(D7); // lee la entrada D7

entradaDigital = 1 * b0 + 2 * b1 + 4 * b2 + 8 * b3;

Serial.write(lowByte(byte(entradaDigital))); // envía el estado de las entradas en los 4 bits menos significativos

}// FIN DE ATENCIÓN AL COMANDO 'B'

}// fin del if principal

}// fin del loop

Al programa en LabVIEW le agregamos bloques y lo guardamos como Ejercicio 3-2.vi:

Panel Frontal:

Diagrama de bloques:

Page 7: GUIA DE EJERCICIOS Nº 3 INSTRUMENTACIÓN AVANZADA ... · Como se vio en las transparencias de la Clase 3, para lograr el objetivo se debe: 1. Instalar el driver correspondiente para

Instrumentación Avanzada. G. Murcia – J. Strack

7

Ejercicio 3.3 (Lectura de una entrada analógica)

Programar el comando C de la placa Arduino que permitirá leer 1 entrada analógica del canal

solicitado desde la PC.

Al código anterior le agregamos el comando C y las variables y declaraciones necesarias. ///////////////////////////////////////////////////////////////////////////////////

// Cátedra Instrumentación Avanzada

// Driver de comunicación serie para Arduino UNO, MEGA 2560, Intel Galileo Gen1 y DUE

// Compatible con libreria de LabVIEW similar a la de PIC18F2550

// Versión: 1.1.0

// Fecha: 03/09/2017

///////////////////////////////////////////////////////////////////////////////////

//DECLARACIONES/////////////////////////////////////////////////////////////

const int D0=4, D1=5, D2=7, D3=9; // SALIDAS DIGITALES

const int D4=2, D5=3, D6=6, D7=8; // ENTRADAS DIGITALES

int entradaDigital, b0, b1, b2, b3, dato; // VARIABLES

char caracteres[4], caracterEntrada;

byte vector1[2];

String canal;

//SETUP//////////////////////////////////////////////////////////////////////////

void setup() {

pinMode(D0, OUTPUT); // DECLARACIÓN DE SALIDAS DIGITALES

pinMode(D1, OUTPUT);

pinMode(D2, OUTPUT);

pinMode(D3, OUTPUT);

pinMode(D4, INPUT); // DECLARACIÓN DE ENTRADAS DIGITALES

pinMode(D5, INPUT);

pinMode(D6, INPUT);

pinMode(D7, INPUT);

Serial.begin(9600); // CONFIGURACIÓN DEL PUERTO SERIE

digitalWrite(D0,0); // INICIALIZACIÓN DE SALIDAS (se ponen en 0)

digitalWrite(D1,0);

digitalWrite(D2,0);

digitalWrite(D3,0);

}// FIN DEL SETUP

//CICLO PRINCIPAL/////////////////////////////////////////////////////////////

void loop() {

if (Serial.available()) { // si llegó uno o más caracteres desde la PC

caracterEntrada = Serial.read(); // toma un nuevo byte

// ATENCIÓN AL COMANDO 'A' (ESCRITURA DE SALIDAS DIGITALES)

if (caracterEntrada == 'A') {

Serial.readBytes(caracteres,4); // lee 4 caracteres y los guarda en un buffer

digitalWrite(D0,caracteres[0]); // escribe la salida digital D0

digitalWrite(D1,caracteres[1]); // escribe la salida digital D1

digitalWrite(D2,caracteres[2]); // escribe la salida digital D2

Page 8: GUIA DE EJERCICIOS Nº 3 INSTRUMENTACIÓN AVANZADA ... · Como se vio en las transparencias de la Clase 3, para lograr el objetivo se debe: 1. Instalar el driver correspondiente para

Instrumentación Avanzada. G. Murcia – J. Strack

8

digitalWrite(D3,caracteres[3]); // escribe la salida digital D3

}// FIN DE ATENCIÓN AL COMANDO 'A'

// ATENCIÓN AL COMANDO 'B' (LECTURA DE ENTRADAS DIGITALES)

if (caracterEntrada == 'B') {

b0 = digitalRead(D4); // lee la entrada D4

b1 = digitalRead(D5); // lee la entrada D5

b2 = digitalRead(D6); // lee la entrada D6

b3 = digitalRead(D7); // lee la entrada D7

entradaDigital = 1 * b0 + 2 * b1 + 4 * b2 + 8 * b3;

Serial.write(lowByte(byte(entradaDigital))); // envía el estado de las entradas en los 4 bits menos significativos

}// FIN DE ATENCIÓN AL COMANDO 'B'

// ATENCIÓN AL COMANDO 'C' (LECTURA DE UNA ENTRADA ANALÓGICA)

if (caracterEntrada == 'C') {

caracterEntrada = Serial.read(); // toma un nuevo byte

canal = caracterEntrada + ""; // convierte el caracter en string

dato = analogRead(canal.toInt()); // lee el canal analógico solicitado

vector1[0] = lowByte(word(dato)); // genera el primer byte

vector1[1] = highByte(word(dato)); // genera el segundo byte

Serial.write(vector1,2); // envía los dos bytes en binario

}// FIN DE ATENCIÓN AL COMANDO 'C'

}// fin del if principal

}// fin del loop

Al programa en LabVIEW le agregamos bloques y lo guardamos como Ejercicio 3-3.vi:

Panel Frontal:

Diagrama de bloques: