Académique Documents
Professionnel Documents
Culture Documents
Strack
GUIA DE EJERCICIOS
Nº 12
INSTRUMENTACIÓN AVANZADA
1
Instrumentación Avanzada. G. Murcia – J. Strack
Ejercicio 12.1
Luego de reconocer los elementos realizar el cableado del conjunto variador de velocidad –
motor basado en la siguiente figura:
Una vez realizadas todas las conexiones, procederemos a configurar el variador de velocidad
ATV 11 siguiendo las instrucciones del Anexo I y probaremos su correcto funcionamiento.
2
Instrumentación Avanzada. G. Murcia – J. Strack
Circuito 1: Mando para los relés de Arduino (para generar marcha / parada sobre LI1)
///////////////////////////////////////////////////////////////////
// Cátedra Instrumentación Avanzada //
// Driver de comunicación TCP/IP para Arduino UNO y MEGA 2560 //
// Versión: 1.0.10 //
// Fecha: 20/11/2017 //
///////////////////////////////////////////////////////////////////
//DECLARACIONES_________________________________
// LIBRERÍAS
#include <SPI.h> //comunicación SPI utilizada por ethernet shield (pines
10,11,12,13)
#include <Ethernet.h> //funciones para comunicación ethernet
// SALIDAS DIGITALES:
const int D0=4;
const int D1=5;
const int D2=7;
const int D3=9;
// ENTRADAS DIGITALES:
const int D4=2;
const int D5=3;
const int D6=6;
const int D7=8;
const int PIN_PWM_in=22;
// VARIABLES
char caracterEntrada;
int entradaDigital, b0, b1, b2, b3, dato, PWM;
byte vector1[2], vector2[10];
char canal;
int valor_analog;
int contador;
volatile int PWM_alto;
//SETUP_________________________________________
void setup() {
Serial.begin(9600);
// DECLARACIÓN DE SALIDAS DIGITALES:
pinMode(D0, OUTPUT);
pinMode(D1, OUTPUT);
pinMode(D2, OUTPUT);
pinMode(D3, OUTPUT);
//CICLO PRINCIPAL________________________________
void loop() {
EthernetClient client = server.available(); // Se crea el objeto cliente
if (client) { // Si se recibe una petición de un cliente
while (client.connected()) { // Mientras el cliente esté conectado
if (client.available()) { // Si el cliente está disponible
caracterEntrada = client.read(); // toma un nuevo byte
5
Instrumentación Avanzada. G. Murcia – J. Strack
// ATENCIÓN AL COMANDO 'F' (LECTURA DE ENTRADA PWM)
if (caracterEntrada == 'F') {
contador = 0;
configuraInterrupcion1(1,0,0,15);
delay(500);
vector1[0] = lowByte(word(PWM_alto)); // genera el primer byte
vector1[1] = highByte(word(PWM_alto)); // genera el segundo byte
client.write(vector1,2); // envía los dos bytes en binario
}// FIN DE ATENCIÓN AL COMANDO 'E'
//FUNCIÓN configuraInterrupcion1()______________
void configuraInterrupcion1(boolean b0, boolean b1, boolean b2, int dN) {
cli(); // Deshabilita las interrupciones globales para configurar los
registros del Timer 1
TCCR1A = 0; // Se vacía el registro
TCCR1B = 0; // Se vacía el registro
OCR1A = dN; // Registro que se comparará constantemente con el timer
TCCR1B |= (1 << WGM12);
// Se configura un preescalador:
TCCR1B |= (b0 << CS10); // Se pone a b0 el bit CS10 (Clock Select bit 10)
TCCR1B |= (b1 << CS11); // Se pone a b1 el bit CS11 (Clock Select bit 11)
TCCR1B |= (b2 << CS12); // Se pone a b2 el bit CS12 (Clock Select bit 12)
TIMSK1 = (1 << OCIE1A); // Se configura el timer como comparador
PWM_alto=0;
//FUNCIÓN deshabilitaInterrupcion1()_______________
void deshabilitaInterrupcion1(){
cli(); // Deshabilita las interrupciones globales para configurar los
registros del Timer 1
TCCR1A = 0; // Se vacía el registro
TCCR1B = 0; // Se vacía el registro
// deshabilita el clock del contador
TCCR1B |= (0 << CS10); // Se pone a 0 el bit CS10 (Clock Select bit 10)
TCCR1B |= (0 << CS11); // Se pone a 0 el bit CS11 (Clock Select bit 11)
TCCR1B |= (0 << CS12); // Se pone a 0 el bit CS12 (Clock Select bit 12)
sei(); // Habilita las interrupciones globales
}// fin de la función deshabilitaInterrupcion1()
contador = contador + 1;
if (contador == 2000){
contador = 0;
deshabilitaInterrupcion1();
}
}// FIN DE LA INTERRUPCIÓN 1
El driver anterior nos servirá para este y otros proyectos, ya que podremos crear cualquier
programa en LabVIEW que envíe comandos a través de TCP/IP a nuestra placa, de forma tal de
6
Instrumentación Avanzada. G. Murcia – J. Strack
escribir o leer pines digitales, leer entradas analógicas, escribir una salida pseudoanalógica
(PWM) o leer una señal PWM.
Finalmente desarrollaremos un programa en LabVIEW que nos permita comandar el variador de
velocidad ATV11 a través de TCP/IP.
Diagrama de Bloques:
7
Instrumentación Avanzada. G. Murcia – J. Strack
Ejercicio 12.2
Conectar el shield Ethernet a la placa Arduino UNO o MEGA y realizar un programa en el IDE
de ARDUINO que permita generar una página web en formato HTML. En dicha página se debe
poder ver una entrada analógica y una entrada digital, a la vez que se debe poder accionar una
salida digital de la placa.
Algunos comandos y funciones específicas disponibles útiles para resolver este ejercicio:
// LIBRERIAS
#include <Ethernet.h> // Librería para la comunicación Ethernet
// VARIABLES ESPECIALES
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Escribe una dirección
MAC para el controlador.
IPAddress ip(10,2,0,100); // Escribe una IP para el controlador.
EthernetServer server(80); // Puerto 80 es el valor predeterminado para HTTP
// FUNCIONES
Ethernet.begin(mac, ip); // Inicialización del servidor
server.begin();// comienza a recibir conexiones
EthernetClient client = server.available(); // Obtiene un cliente que esté
conectado al servidor y posea datos disponibles para lectura.
client.connected(); //Vale 1 si el cliente está conectado
client.available(); //Vale 1 si el cliente está disponible
client.read(); // Lee un caracter del cliente
client.println(); // Envía una línea al cliente
client.println("<meta http-equiv=\"refresh\" content=\"5\">"); // Añade una
etiqueta para conseguir que el navegador se actualice cada 5 segundos por
ejemplo.
client.println("<input type=submit value=ON style=width:200px;height:75px
onClick=location.href='./?LED=T\'>"); // arma un botón y retorna lo escrito
detras del signo ? (LED=T en este caso)
client.stop(); // cierra la conexión:
8
Instrumentación Avanzada. G. Murcia – J. Strack
Ejercicio 12.3
Crear una página web en Arduino para comandar y monitorear un conjunto variador de
velocidad ATV-11 y motor asincrónico trifásico. El objetivo es controlar el variador de
velocidad desde LabVIEW utilizando Ethernet, pero a su vez queremos que también se pueda
controlar desde una página web HTML, de forma tal que se pueda acceder a ella desde cualquier
dispositivo (smartphone, tablet) conectado a internet simplemente utilizando un navegador web.
///////////////////////////////////////////////////////////////////
// Cátedra Instrumentación Avanzada //
// Ejercicio 13.2 //
// Fecha: 21/11/2017 //
///////////////////////////////////////////////////////////////////
//DECLARACIONES_________________________________
// LIBRERÍAS
#include<SPI.h>//comunicación SPI utilizada por Ethernet shield (pines
10,11,12,13)
#include<Ethernet.h>//funciones para comunicación ethernet
// CONSTANTES Y VARIABLES
const int marcha=4; // pin de salida marcha
//const int parada=5; // pin de salida parada
const int in_marcha=3;
int aux;
//const int in_parada=2;
const int vel=9;
String estado="PARADA"; // estado del motor inicialmente "PARADA"
String velocidad="0000";
int vel_actual;
int v=0;
int HSP=50;
int contador=0;
int PWM;
volatile int PWM_alto;
const int PIN_PWM_in=22;
//SETUP_________________________________________
void setup(){
9
Instrumentación Avanzada. G. Murcia – J. Strack
// INICIALIZACIÓN DE SALIDAS
digitalWrite(marcha,0);
analogWrite(vel,v);
void loop(){
// lectura ENTRADA PWM
configuraInterrupcion1(1,0,0,15);
delay(500);
vel_actual=60*(PWM_alto/(2*2000.0))*HSP;
aux=1*digitalRead(in_marcha);
if (aux==1){
estado="MARCHA";
}
else{
estado="PARADA";
}
10
Instrumentación Avanzada. G. Murcia – J. Strack
client.println("Content-Type: text/html");
client.println("Conexion Cerrada: cerrada");
client.println();
client.println("<!DOCTYPE HTML>"); // aqui empieza la pagina web
que se visualizará
client.println("<meta http-equiv=\"refresh\" content=\"5\">"); //
Añade una etiqueta para conseguir que el navegador se actualice cada 5
segundos:
client.println("<html>");
client.println("<head>");
client.println("</head>");
client.println("<body>");
client.println("<h1 align='center'>INSTRUMENTACION
AVANZADA</h1><h3 align='center'>MOTOR controlado por Servidor Web con
Arduino</h3>");
//Se crean los botones. Para enviar parametros a través de HTML
se utiliza el metodo URL encode. Los parámetros se envian a través del
símbolo '?'
client.println("<div style='text-align:center;'>");
client.println("<button onClick=location.href='./?M=1\'
style='margin:auto;background-color: #3ADF00;color: snow;padding:
10px;border: 1px solid #3ADF00;width:100px;'>");
client.println("MARCHA");
client.println("</button>");
client.println("<button onClick=location.href='./?M=0\'
style='margin:auto;background-color: #FF0000;color: snow;padding:
10px;border: 1px solid #FF0000;width:100px;'>");
client.println("PARADA");
client.println("</button>");
client.println("<br /><br />");
client.println("<b>ESTADO DEL ACCIONAMIENTO = ");
client.print(estado);
client.println("<br /><br />");
client.println("<button onClick=location.href='./?V=0000\'
style='margin:auto;background-color: #81BEF7;color: snow;padding:
10px;border: 1px solid #81BEF7;width:100px;'>");
client.println("0 RPM");
client.println("</button>");
client.println("<button onClick=location.href='./?V=0500\'
style='margin:auto;background-color: #2E9AFE;color: snow;padding:
10px;border: 1px solid #2E9AFE;width:100px;'>");
client.println("500 RPM");
client.println("</button>");
client.println("<button onClick=location.href='./?V=1000\'
style='margin:auto;background-color: #0174DF;color: snow;padding:
10px;border: 1px solid #0174DF;width:100px;'>");
client.println("1000 RPM");
client.println("</button>");
client.println("<button onClick=location.href='./?V=1350\'
style='margin:auto;background-color: #084B8A;color: snow;padding:
10px;border: 1px solid #084B8A;width:100px;'>");
client.println("1350 RPM");
client.println("</button>");
client.println("<br /><br />");
client.println("<b>VELOCIDAD DEL MOTOR: ");
client.print(vel_actual);
client.println(" RPM");
client.println("</b><br />");
client.println("</b></body>");
client.println("</html>");
break;
} // fin del if
if (c =='\n') { // si hay nueva linea
linea_blanca= true;
} // fin del if
11
Instrumentación Avanzada. G. Murcia – J. Strack
else if (c !='\r') {
linea_blanca= false; // si hay retorno de carro
} // fin del if
} // fin del if (client.available)
} // fin del while
delay(1); // se le da tiempo al navegador para recibir los datos
client.stop();// se cierra la conexión
} // fin del if (client)
} // fin del loop
//FUNCIÓN configuraInterrupcion1()______________
void configuraInterrupcion1(boolean b0, boolean b1, boolean b2, int dN) {
cli(); // Deshabilita las interrupciones globales para configurar los
registros del Timer 1
TCCR1A = 0; // Se vacía el registro
TCCR1B = 0; // Se vacía el registro
OCR1A = dN; // Registro que se comparará constantemente con el timer
TCCR1B |= (1 << WGM12);
// Se configura un preescalador:
TCCR1B |= (b0 << CS10); // Se pone a b0 el bit CS10 (Clock Select bit 10)
TCCR1B |= (b1 << CS11); // Se pone a b1 el bit CS11 (Clock Select bit 11)
TCCR1B |= (b2 << CS12); // Se pone a b2 el bit CS12 (Clock Select bit 12)
TIMSK1 = (1 << OCIE1A); // Se configura el timer como comparador
PWM_alto=0;
//FUNCIÓN deshabilitaInterrupcion1()_______________
void deshabilitaInterrupcion1(){
cli(); // Deshabilita las interrupciones globales para configurar los
registros del Timer 1
TCCR1A = 0; // Se vacía el registro
TCCR1B = 0; // Se vacía el registro
// deshabilita el clock del contador
TCCR1B |= (0 << CS10); // Se pone a 0 el bit CS10 (Clock Select bit 10)
TCCR1B |= (0 << CS11); // Se pone a 0 el bit CS11 (Clock Select bit 11)
TCCR1B |= (0 << CS12); // Se pone a 0 el bit CS12 (Clock Select bit 12)
sei(); // Habilita las interrupciones globales
}// fin de la función deshabilitaInterrupcion1()
contador = contador + 1;
if (contador == 2000){
contador = 0;
deshabilitaInterrupcion1();
}
}// FIN DE LA INTERRUPCIÓN
Ya estamos en condiciones de visualizar la página web creada en Arduino. Sólo debemos abrir el
navegador y acceder a la IP que configuramos en el código anterior.
12
Instrumentación Avanzada. G. Murcia – J. Strack
Diagrama de Bloques
13
Instrumentación Avanzada. G. Murcia – J. Strack
14
Instrumentación Avanzada. G. Murcia – J. Strack
15