Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TFrabbia PDF
TFrabbia PDF
Autor
JAVIER RODRIGO RABBIA
Carrera
INGENIERIA ELECTRONICA
Director
Ing. JAVIER ALEJANRO CARLETTO
Co-Director
Ing. GUILLERMO OMAR LARREGAY
realizados por los encargados del mantenimiento eléctrico de las mismas. Para
facilitar esta tarea, como así también modernizarla y hacerla más eficiente se
TG.
El usuario del sistema es aquel que lo aplica en una actividad específica para
forma de archivo de texto (con extensión *.txt). Por lo tanto, su contenido, podrá
Javier
Índice General
1. Introducción ……………..……………………………………………….…………............. 1
I
2.2.2. Sensores de Velocidad ………..…………………………………. 18
3. Implementación …………………………………………………………………………... 27
II
3.3.4.2. Entradas Analógicas ……………………….………… 40
III
4.2. Ensamble del Dispositivo ………….……………………………………….. 67
6. Bibliografía ………………………………………………………………………………... 74
7. Anexo ………………...…………………………………………………………………….. 77
IV
Índice de Figuras
V
Figura 3.6: Módulo RTC …………………………………………………………………... 36
VI
Figura 3.25: Curva de VCE ……………………………………………………………….. 65
Índice de Tablas
VII
Capítulo 1
Introducción
1.1. Antecedentes
determinada máquina. Esta supervisión tiene como fin almacenar el valor de las
de datos, como así también múltiples canales de entradas que permiten tener una
1
En todos aquellos ámbitos en los que se deban realizar tomas de larga
dispositivos, como así también su gran desarrollo y precio elevados. Este último,
entrada para ser procesadas. Para esto se usan adaptadores de nivel de tensión
2
para configurar el funcionamiento del equipo y para enviar los datos capturados
Datalogger que permitan conocer los cambios de estados de las señales del control
funcionamiento de la TG.
una buena calibración y, por lo tanto, lograr un mejor funcionamiento del equipo.
Para empezar se necesita que sea capaz de capturar estados lógicos digitales
almacenar en una memoria no volátil junto con la fecha y hora real de captura de
cada uno para dar un orden cronológico de los eventos. Además se necesita
4
memoria y poder visualizarlos en tablas y manipularlos, con lo cual se necesita
electrónico que permita convertir los niveles de tensión presentes en las señales
procesador. Las señales analógicas, posee una amplitud que varía entre ± 10Vcc, y
señales alternas oscilan entre 0 y 10kHz pero con una tensión variable, lo cual
hace necesario un circuito que transforme dicha señal alterna en un tren de pulsos
1.4. Justificación
bajo costo.
Entre los impactos que se espera de este proyecto, se puede nombre como
éstas generan.
Empresa ya que se pretende que el proyecto quede abierto para que en un futuro
6
Capítulo 2
Central Generadora
calibración periódica, del control de tres TG, permitiendo aproximar aun mas los
7
Esta central está compuesta por dos Grupos Turbo-Generadores a gas, los
2.1.1. Turbina
será aprovechada por el generador para convertirla en energía eléctrica. Este tipo
La turbina de gas de único árbol y ciclo simple, modelo “P”, comprende los
sistemas auxiliares entre los que se pueden nombrar bomba de aceite mecánica,
la figura 2.1, se puede observar una ilustración de la Turbo-Gas. (Ver Anexo 3).
8
Figura 2.1: Ilustración Grupo Turbo-Generador.
carga. Luego de pasar por la turbina, el gas sale por el escape a la atmosfera.
9
misma se autosustenta y la ignición se mantiene solo por un periodo de tiempo
rotación del compresor y la turbina, es de sentido contrario a las agujas del reloj,
externa de energía pudiendo arrancar con cero tensión de línea. Dicho motor
diésel es de doce cilindros, dos tiempos, con una velocidad de 2300 R.P.M. Posee
una potencia de 500HP y se encuentra colocado en uno de los extremos del grupo
carcasa y rueda de la turbina, se insufla aire del compresor; este aire también sella
10
2.1.2. Generador
armadura fija. La parte rotativa está sustentada por dos cojinetes simples
generar energía eléctrica a una frecuencia de 50Hz, por lo que necesita que el
rotor gire a una velocidad de 3000 R.P.M., y es capaz de entregar una potencia
reactiva según el consumo existente en la línea en cada momento. Para esto posee
rotor del generador y por lo tanto, las condiciones de generación. Este elemento
11
Esta energía es entregada a la playa de transformadores donde se eleva la
tensión a un valor de 66kV para ser transportada. Esta conexión entre el generador
marca ASEA es de pequeño volumen de aceite tipo HLC 72.5 y 84 kV, 1600A
control electrónico digital y analógico de estado sólido que provee las señales
de Valor Mínimo (actúa como llave selectora de bajo voltaje) a través de la cual se
conecta a la línea del Control Electrónico de Voltaje (VCE) para el control del
12
presión de descarga del compresor de la turbina para determinar las condiciones
requerida por el sistema que está bajo control, y que se encuentra señalizado en el
13
proveen sistemas de sobretemperatura y sobrevelocidad como sistemas
desenganche.
tensión trifásica de 380V que es utilizada para toda la etapa de potencia (como
±12V y 5V para el panel del control y 28V para las tensiones de campo.
14
con un transformador se obtiene los 380V necesarios (llamado Transformador de
Servicios Auxiliares).
interconectadas entre sí según las necesidades del circuito electrónico. Cada una
de ellas tiene definidas sus funciones según el tipo, algunas son de uso particular
mientras que otras son de uso general como compuertas, temporizadores, etc.
15
Figura 2.3: Panel esquemático
16
Figura 2.4: Panel Speed-Tronic real.
Muchos de los circuitos lógicos de control están asociados no solo con los
17
puede observar un diagrama de bloque de todos los circuitos que tienen relación
18
la turbina. Para el registro de velocidad se utilizan los siguientes cuatro relés de
velocidad: 14HR relé de velocidad cero, 14HM relé de mínima velocidad, 14HA
turbina comienza a rotar. Si la velocidad está por debajo del parámetro 14HR, la
de la turbina. Durante el ciclo de parada, este relé provee la señal para permitir
secuencia de aceleración ha sido completada. Con esta señal son actuados los
alabes guías variables y la purga del compresor. La salida del relé 14HS, en una
R.P.M.) llevando VCE a cero, cerrando los alabes guías variables y abriendo las
Capime).
19
TRONIC y así generar las señales de comando de combustible para la secuencia.
provisión de voltaje. Una luz encendida en el panel “CHECK” indica que esos
20
activos, la luz “RELAY” se encenderá e indicara que el sistema acepta una señal
de arranque.
figura 2.7).
así pasar al punto D, donde se fija un valor mínimo de VCE para mantener esa
21
Figura 2.7: Secuencia típica de arranque.
velocidad en el que se puede ver que consiste de las tarjetas llamadas SHPB,
22
Figura 2.8: Diagrama Control de Velocidad.
señal diferencial (aceleración) es comparada a una señal fija para regular VCE si
actúa durante periodos del arranque, pero puede actuar en cualquier momento en
23
Figura 2.9: Circuito Control de Aceleración.
alcanzado los límites de diseño. Dentro de la turbina a gas, la temperatura más alta
tanto es esta la que debe ser limitada por el sistema de control. Pero medir la
temperatura en ese lugar resulta poco práctico, por lo tanto el sistema está
de escape de la turbina.
a controlar, sino que se necesita otro parámetro que es la presión de descarga del
24
así logra controlar el flujo de combustible por medio del VCE manteniendo la
temperatura.
a realizar los ajustes necesarios en su control. Este calibrador está compuesto por
fuentes de tensión y frecuencia variables que permiten simular los valores que
toman los diferentes transductores y ajustar las señales de salida de control y así
25
sus variaciones para poder mantener el funcionamiento lo más próximo al
óptimo.
26
Capítulo 3
Implementación
procesamiento
cabo el proyecto planteado, los cuales marcaron las pautas para mantener un orden
27
del microcontrolador y la realización de la interfaz de usuario. Estas dos partes se
las señales que el dispositivo desarrollado debe ser capaz de medir. Para avanzar
en las etapas del desarrollo del proyecto, es necesario definir el número de señales
de cada tipo.
En cuanto a las señales digitales, decir que en el control general del Turbo-
tales como señales del control propiamente dicho, relés, presostatos, detectores de
llama, entre otros. Para este tipo de señal se estable un número mínimo de ocho
(8) entradas.
velocidad, entre otras. Se determina que para señales analógicas es suficiente con
cuatro (4) entradas y dos (2) para las entradas de frecuencia (alternas).
28
comprender de forma rápida y sencilla las partes estructurales del dispositivo de
medición en desarrollo.
Memoria SD
Almacenamiento
Lectura de datos
y
Dig
ital
Envio datos
Analógica Lectura de Visualización
Transductores uP PC Software
valores
n ci a Configuración
cu e
Fre
Modulo RTC
cual es desfavorable para este proyecto, que requiere de una elevada capacidad de
almacenamiento como así también un método extraíble. Por tales motivos, se opta
módulo Real Time Clock (RTC) de Arduino. Este módulo está destinado a
29
microcontrolador, utilizando una pila del tipo CR-2032. Por último, se estableció
necesidades.
aficionados sobre otros sistemas, tales como: bajo costo, multiplataforma, entorno
30
3.3.3.2 Arduino MEGA 2560
Arduino Mega 2560 (ver figura 3.2) es una versión ampliada de la tarjeta
original.
31
Figura 3.3: Microcontrolador (µC) ATMEL ATMEGA2560.
proyecto:
Microcontrolador ATmega2560
salidas PWM)
16 Entradas Analógicas
32
Memoria EEPROM para datos y variables no volátiles
requerido.
datos capturados en una memoria SD, utilizando un módulo de bajo costo para
llevada a cabo bajo el protocolo SPI (Serial Peripherical Interface), y cuenta con
fácilmente.
33
A pesar de sus cuantiosas ventajas, se debe tener en cuenta ciertos aspectos
importantes a detallar:
Las tarjetas SD funcionan a 3.3V. Usar una tensión mayor puede romper la
tarjeta.
Casi todas las placas Arduino funcionan a 5V, por lo tanto no pueden
usarse directamente.
debe ser solucionada con un divisor resistivo como se muestra en la figura 3.5.
34
Figura 3.5: Conexión Arduino y Módulo SD.
#include <SD.h>
const int chipSelect = 53;
void setup(){
// Configuración del puerto serie para informar de fallos a través de él.
Serial.begin(9600);
// El pin CS por defecto de la placa Arduino debe ser configurado como salida
pinMode(53, OUTPUT);
void loop(){
35
}
necesidad de utilizar memoria externa no volátil, como por ejemplo una tarjeta
SD.
actual a cero, lo cual no es deseable en este proyecto. Para evitar este problema, se
Circuits (I2C), con la utilización de una librería que facilita ésta comunicación. El
modelo utilizado es el Tiny RTC I2C que incorpora un reloj de tiempo real
36
DS1307, una batería para memorizar los datos y una pequeña memoria EEPROM
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
void setup () {
Wire.begin(); // Inicia el puerto I2C
RTC.begin(); // Inicia la comunicación con el RTC
//RTC.adjust(DateTime(__DATE__, __TIME__)); // Establece la fecha y hora (Comentar
una vez establecida la hora)
Serial.begin(9600); // Establece la velocidad de datos del puerto serie
}
voidloop(){
DateTimenow = RTC.now(); // Obtiene la fecha y hora del RTC
37
3.3.4 Hardware adaptador de señales
de los valores que toma como entrada el microcontrolador para diseñar y construir
los circuitos de adaptación. Se tuvo presente que las señales son tomadas de
puntos internos del control de la máquina y que ese dispositivo tiene su propio
tanto requiere un sistema de masas aisladas para que dicha conexión no afecte su
funcionamiento.
(digital, analógica y/o frecuencia), los niveles de tensión (28V, 12V, 5V, etc.), la
corriente.
ser muy pequeño, del orden de los µA, ya que si tienen una baja impedancia de
de salida de 5Vcc y alimentadas con ±12Vcc. Así también algunas que se dirigen
hacia la máquina (señal de salida del control) con un nivel lógico 1 de 28Vcc.
38
por tal motivo se debe diseñar un circuito capaz de llevar las tensiones de entradas
toda entrada menor a 1.8V origine un 0 lógico a la salida y las entradas mayores a
igual que los demás esquemáticos del trabajo. En la figura 3.9, el correspondiente
diseño de la placa Printed Circuit Board (PCB) para las 8 entradas requeridas.
15V
10MΩ
5V
7 1 5
ENTRADA
3
74hct245 Pin_uP
3.3MΩ TL080CP 6 2 A1 B1 18
Acom 4 3 A2 B2 17
2 4.7MΩ 4 A3 B3 16
5 A4 B4 15
3.3MΩ 6 A5 B5 14
4 8 10MΩ 7 A6 B6 13
8 A7 B7 12
9 A8 B8 11
1 DIR
19 ~G
-15V
10MΩ
R6
5V 15V
TEST_PT1
74HC245DW_VHDL
TEST_PT1
R1
R2
R3
R5
VDD
U2
R4
TEST_PT1
39
Figura 3.9: Distribución de componentes en PCB.
en las señales de entrada y salidas. Las primeras son señales que provienen de
estado del mismo, mientras que las segundas van desde el control hacia el Grupo
estado del mismo como también de los equipos auxiliares, en todo momento.
40
Haciendo un relevamiento de este tipo de señales se puede decir que en su
mayoría son señales de corriente continua pero con valor que oscila entre los ±
10Vcc. Por tal motivo, se decidió hacer un circuito adaptador que convierta el
5V. Esto quiere decir, que cuando se tiene una tensión de entrada de -10V se debe
tener una tensión de 0V como salida del adaptador y a su vez entrada del ADC del
para 10V de entrada, 5V de salida. Esto origina una ecuación de relación entrada-
salida que permite determinar el valor que se está midiendo, la misma se puede
observar en la ecuación 1.
𝑉𝑎𝑙𝑜𝑟 𝐴𝐶𝐷
𝑉𝑎𝑙𝑜𝑟𝑟𝑒𝑎𝑙 = (1)
𝑉𝑎𝑙𝑜𝑟 𝑀𝑎𝑥𝐴𝐶𝐷
analógicas.
41
-5V 5V
15V
1MΩ
7 1 5
7 1 5
3
ENTRADA Pin_uP
3 1MΩ TL080CP 6
3.3MΩ TL080CP 6 2
Acom
2 1MΩ
4 8
3.3MΩ
4 8
-15V 1MΩ
1MΩ
R6v R9
TEST_PT1
2MΩ
TEST_PT1
2MΩR8R7 5V 50% U1
50%
R4
Key=AR2
R5
50% R1
R3
VDD
U2
Key=A2MΩ
VCC
TEST_PT1
Key=A
R10
42
alternas cuya amplitud y frecuencia varían con proporción a la señal de entrada;
esto quiere decir que se tiene una señal alterna con amplitud y frecuencia variable.
entrada.
cuadrada de igual frecuencia pero cuyos valores son 0V, nivel mínimo, y 5V,
nivel máximo para poder ser señales de entrada en la placa Arduino y así medir la
para aislar las masas y entregar la señal de onda cuadrada referida a la masa del
microcontrolador de medición.
P12V
5V
7 1 5
3
1kΩ
6
ENTRADA SALIDA
2 1kΩ
3.3MΩ
4 8
10MΩ
N12V
43
R1 R4
GND
U1R3
5V U2
5V N12V
TEST_PT1
R2
OPTOCOUPLER_VIRTUAL
TL080CD
GND
Figura 3.13: Diseño de PCB
tipo lineal ya que los consumos de corrientes requeridos son muy pequeños y por
como las conmutadas. Los niveles de tensión requeridos son +15Vcc, +5Vcc, -
44
P15
LM7815CT LM7805CT P5
LINE VREG LINE VREG
VOLTAGE VOLTAGE
COMMON COMMON
C3 C4
C1 10uF 10uF
2
T1 2.2mF
4 1 GND
C2
3
2.2mF
C5 C6
10uF 10uF
LM7915CT LM7905CT N5
LINE VREG LINE VREG
VOLTAGE VOLTAGE
COMMON COMMON
N15
U1
TEST_PT1
TEST_PT1
U3
TS_AUDIO_10_TO_1
1B4B42
D1
TEST_PT1
TEST_PT1
TEST_PT1
U2
U4
45
MODULO RTC MODULO SD
GND VCC SDA SCL GND 5V CS MOSI SCK MISO
GND 5V 20 21 GND 5V 53 51 52 50
PC USB USB
GND
uC
30 31 32 33 34 35 36 37 A0 A1 A2 A3 A4 A5 A6 A7 2 3
220V
50Hz
F.T.
-15V -5V GND +5V +15V
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2
proyecto desarrollado.
1
Información disponible en http://pdf.datasheetcatalog.com/datasheets2/30/3055029_1.pdf
46
Módulo RTC Mantiene la hora Solo entrega
y fecha real con Hs/min/seg. En
ausencia de la caso de este
alimentación. proyecto se
necesitan
también los
miliseg.
2
Información disponible en http://pdf.datasheetcatalog.com/datasheet/texasinstruments/tl080.pdf
3
Información disponible en http://pdf.datasheetcatalog.com/datasheet2/1/02glhewsates3885ie825lrz9dcy.pdf
4
Información disponible en http://pdf.datasheetcatalog.com/datasheets/150/44435_DS.pdf
5
Información disponible en http://pdf.datasheetcatalog.com/datasheet/fairchild/LM7805.pdf
6
Información disponible en http://pdf.datasheetcatalog.com/datasheet/fairchild/LM7905.pdf
47
LM7915. 7 Mantiene -15V No se observó.
necesario para el
funcionamiento
de los
componentes del
sistema.
7
Información disponible en http://pdf.datasheetcatalog.com/datasheet/fairchildsemiconductor/LM7915.pdf
48
Transformador Transforma el Perdidas
nivel de tensión propias del
de c.a. Reduce la transformador.
tensión de Gran tamaño y
entrada de 220V peso.
a 12V+12V para Inyección de
alimentar la ruidos
fuente. eléctricos al
sistema de
medición.
3.4.1 Arduino
programación de Arduino como así también, una breve explicación de las distintas
Mega 2560.
Arduino, debido a que Arduino usa la transmisión serial de datos soportada por la
mayoría de los lenguajes mencionados. Para los que no soportan el formato serie
mensajes enviados por ambas partes para permitir una comunicación fluida.
49
y para MAC, así como las fuentes para compilarlas en LINUX. En la Figura 3.17,
que se ejecuta al iniciar la ejecución. Esta función se ejecuta una única vez y es
salidas, etc.). Arduino está basado en C y soporta todas las funciones del estándar
Sintaxis básica
Delimitadores:;, {}
50
Comentarios: //, /* */
Operadores aritméticos: +, -, *, /, %
Asignación: =
Operadores compuestos:
Estructuras de control
prueba para verificar que todo funciona correctamente con la utilización del
51
En la barra superior de la interfaz encontramos los principales botones
(nuevo, abrir, guardar, verificar y cargar) los cuales permiten iniciar un nuevo
proyecto como así también recuperar uno ya creado o guardarlo. El botón cargar,
debe almacenar este último valor en memoria junto a la hora y fecha de medición
ninguna operación.
adaptación a los pines 30 al 37, para lo cual se tuvo que definir en el programa a
dichos pines como entrada. A continuación se muestra una pequeña porción del
52
// ENTRADA DIGITAL
for (iD=30; iD<34; iD++) { //lee del pin 30 al pin 50 Ent_digital
if (digitalRead(iD) != Valor_Digital[iD-30]){ //si el nuevo estado es
diferente al anterior almacenar
Valor_Digital[iD-30] = !Valor_Digital[iD-30]; //se niega el valor existente
y se almacena
escribirDigital(iD-30, Valor_Digital[iD-30]);
}
}
digital y un timer con interrupción para realizar la medición cada 500ms (Ver
implementación.
jA++;
}
// ENTRADAS ANALOGICAS y FRECUENCIA
//Almacenamiento en memoria
if (jA==20){
escribirAnalogica();
escribirFrecuencia();
jA=0;
}
analógicas, ahora se debe que agregar que, en este caso, para realizar la medición
53
se utilizaron las entradas digitales con interrupción externa (pin 2 y pin 3) por lo
tanto se tuvo que configurar dichos pines como entrada y habilitar la interrupción.
determinar el tiempo que transcurre entre dos pulsos consecutivos y así poder
determinar la frecuencia del tren de pulso. De todos estos valores generados, solo
se almacena uno cada 500ms; esto quiere decir que los demás valores se pierden.
Valor_Frecuencia[0][jA] = Valor_Frec[0];
Valor_Frecuencia[1][jA] = Valor_Frec[1];
jA++;
}
// ENTRADAS DE FRECUENCIA
// Interrupcion de frecuencia por pin 2
ISR(INT4_vect) {
t3.bytes[0] = TCNT3;
TCNT3 = 16;
Valor_Frec[0] = (16000000.0f/t3.valor); //convierte el valor en Hz.
t3.valor = 0;
}
// Interrupcion de frecuencia por pin 2
ISR(INT5_vect) {
t4.bytes[0] = TCNT4;
TCNT4 = 16;
Valor_Frec[1] = (16000000.0f/t4.valor); //convierte el valor en Hz.
t4.valor = 0;
}
decidió crear un archivo de texto separado por comas, para cada tipo de datos
donde almacenar los valores lectura tras lectura. De esta forma, se logra un envió
54
de datos entre el Arduino y la PC de forma sencilla, ya que se lee cada archivo de
forma completa.
de la memoria SD y del archivo digital.txt junto con el código para almacenar los
valores digitales en dicho archivo. Para poder observar el código para las entradas
cronológico de las entradas. Para esto se utilizó el módulo RTC como registro de
55
que realizar de esta manera ya que el módulo RTC solo entrega información de
// MÓDULO RTC
Wire.begin(); // Inicia el puerto I2C
RTC.begin(); // Inicia la comunicación con el RTC
//RTC.adjust(DateTime(__DATE__, __TIME__)); // Actualiza hora y dia de la
computadora en la que se compile.
// HORA Y FECHA
ISR(TIMER2_OVF_vect){
TCNT2=131;
Hora.t++;
if (Hora.t>999) {
Hora.t=0;
Hora.s++;
}
if (Hora.s>59) {
Hora.s=0;
Hora.m++;
}
if (Hora.m>59) {
Hora.m=0;
Hora.h++;
}
if (Hora.h>23) {
Hora.h=0;
Fecha.d++;
}
if(Fecha.d>maxdia[Fecha.m-1]) {
Fecha.m++;
if(Fecha.m == 13) { Fecha.m = 1; Fecha.a++; }
Fecha.d = 1;
}
}
para recibir los comandos desde la PC y enviar los datos correspondientes hacia
ella. Además se puede recibir la orden de borrar por completo algún archivo en
realizar estas dos operaciones para las entradas digitales, mientras que el
// COMUNICACION USB
//si existe datos disponibles, leerlos
if (Serial.available()>0){
optionjA=jA; //Guarda posicion de memoria
option=Serial.read();//lee la opcion enviada
if(option=='d'){
File dataFile = SD.open("digital.txt"); // Abrir el archivo.
// Si se podo abrir correctamente:
56
if (dataFile) {
// Mostrar un aviso de comienzo del txt
Serial.println("* A continuacion se muestra los datos Digitales");
// Mandar sus datos por el puerto serie.
while (dataFile.available()) {
Serial.write(dataFile.read());
}
dataFile.close(); // Cerrar el archivo.
// Si no se consiguió abrir el archivo mandar un error.
}else {
Serial.println("Error al abrir digital.txt");
}
}
// borrar archivos de SD
if (option=='i'){
SD.remove("Digital.txt");
inicioArchivoDigital();
}
jA=optionjA; //Restablecer posición de memoria
}
clara, cargar los datos almacenados hasta el momento en la memoria SD, como así
etc. de forma sencilla con solo arrastrar y soltar los elementos. Luego se pueden
57
Este lenguaje toma elementos de diferentes paradigmas como el orientado a
los controles que puedes agregar al proyecto como cajas de texto, label, tablas,
combo box, listas, botones que simplemente con arrastra ya tienes tu control en el
Dentro del explorador tenemos todos los archivos que tengan que ver con nuestro
Además en la margen derecha tenemos algo muy importante para definir las
58
Figura 3.18: Entorno Visual Basic 2008
3.4.2.1 Interfaz
En esta sección se diseño la interfaz grafica del programa, la cual debe ser
clara para el usuario y permitir una utilización sencilla e intuitiva. Para cumplir
con lo anterior se decidió dividir la pantalla en cuatro pestañas, tres de las cuales
por una caja de texto en la cual se mostraran los datos relacionados. Además, en la
margen inferior izquierda se encuentran dos botones para controlar los datos en la
59
digital.txt de manera completa y un segundo llamado borrar, el cual borra todos
los datos del archivo. En la margen derecha inferior se ubican cuatro botones
(abrir, guardar, limpiar, graficar) que permiten manipular los datos en la PC.
USB.
60
3.4.2.2 Programación
Una vez diseñada la interfaz grafica, se deben definir las funciones de cada
uno de los elementos colocados en ella. Esto se realiza en la ventana de código del
lenguaje Basic.
comunicación serial, para lo cual se colocaron líneas de código que nos permiten
PrivateSub BuscarPuerto()
'Busca los puertos disponibles para establecer conexion y los muertra en ComboBox
Try
ComboBoxPuerto.Items.Clear()
ForEach puerto AsStringInMy.Computer.Ports.SerialPortNames
ComboBoxPuerto.Items.Add(puerto)
Next
If ComboBoxPuerto.Items.Count > 0 Then
ComboBoxPuerto.SelectedIndex = 0
Else
MsgBox("NO HAY PUERTOS DISPONIBLES EN TU SISTEMA")
EndIf
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical)
EndTry
EndSub
61
MsgBox(ex.Message, MsgBoxStyle.Critical)
EndTry
AddHandler SerialPort.DataReceived, AddressOf Recepcion
EndSub
establecida en el Arduino la cual espera las letras d, a y f para enviar los archivos
los mismos.
Por lo dicho anteriormente, los tres botones “cargar” del programa envían la
letra correspondiente para que el Arduino le envié los archivos y asigna la caja de
texto en la cual se mostraran los datos recibidos por el puerto, mientras que los
Basic junto con las líneas de los botones que nos permiten manipular los datos en
la PC.
62
En la figura 3.21 se observan los valores de las entradas de frecuencia en el
63
0
1
2
3
4
5
6
7
8
9
0
100
120
20
40
60
80
13:0:0:244
13:0:17:709 13:0:0:244
13:0:35:673 13:0:16:711
13:0:53:633 13:0:33:677
13:1:11:590 13:0:50:641
13:1:30:9 13:1:7:101
13:1:47:462 13:1:24:520
13:2:5:405 13:1:41:478
13:2:23:341 13:1:57:930
13:2:41:259 13:2:14:870
13:2:59:195 13:2:31:816
13:3:16:626 13:2:48:729
13:3:34:484
13:3:5:166
13:3:52:418
13:3:22:105
13:4:10:331
13:3:38:971
13:4:28:187
13:3:55:408
Velocidad %
13:5:2:463
13:5:19:313
Vel %
Temperatura
64
VCE
14
12
10
8
6
4 VCE
2
0
13:0:0:244
13:1:29:11
13:3:26:92
13:4:54:14
13:5:8:920
13:1:57:930
13:4:10:331
13:0:14:715
13:0:29:685
13:0:44:155
13:0:59:120
13:1:13:586
13:1:43:474
13:2:12:875
13:2:27:331
13:2:42:249
13:2:56:702
13:3:11:645
13:3:40:964
13:3:55:408
13:4:24:737
13:4:39:635
13:5:23:297
Figura 3.25: Curva de VCE.
65
Capítulo 4
Manual de Usuario
66
Figura 4.2: Pestaña Visualización de datos
1. Los cables que corresponden a los sensores que se encargaran de monitorear las
señales a medir, los cuales deben conectarse según el tipo de señal a medir ver en
la figura 4.1.
67
2. Debe tener además disponible un toma de energía de 220V 50Hz para energizar
figura 4.1.
Una vez cumplidos los pasos explicados en el apartado anterior puede poner
siguiente:
los cables.
68
4.4 Lectura de datos en PC
memoria SD.
figura 4.3.
memoria
posterior uso
69
1. Simplemente presione el botón de apagado y se cerraran las mediciones, usted
que pueda observar los archivos creados, deberá presentar los tres tipos de datos
4. Elija el archivo que quiera analizar y dele doble clic para abrirlo con el software
manipularlos y graficarlos.
5. Esta listo para tratar sus datos de acuerdo a sus necesidades. Por ejemplo si
70
Capítulo 5
5.1 Conclusiones
medición para dicho sistema, sino que también se ha pretendido y logrado que el
sistema sea lo más versátil posible, de modo que pueda ser adaptable a cualquier
diseñaron los circuitos de entrada, de masa aislada y alta impedancia de modo que
del funcionamiento diario de cada TG, como así también optimizar al máximo los
71
parámetros de funcionamiento, tales como consumo de combustible, temperaturas
ampliarlo son muy numerosas. Entre las cuales se puede decir, la ampliación del
Por último y con respecto al software, queda planteado como trabajo futuro
dispositivo desde dicha plataforma. El primero se debe a que en esta instancia solo
se puede visualizar y almacenar los datos en la PC, sin poder manipularlos como
configurar por parte del usuario el tipo de medición a realizar, en las cuales debe
72
poder definir el tipo de datos (digital, analógico y/o frecuencia), el número de
entradas de cada tipo y el número de datos a capturar, como así también poder
73
Capítulo 6
Bibliografía
Escocia. (1980).
Noviembre 2009.
74
Ramos, E. C. “Manual Teórico-Práctico Visual Basic 2008”. Instituto de
Enlaces Web:
http://arduino.cc/en/Main/arduinoBoardMega2560. Consultado en
septiembre 2014.
http://www.datasheetcatalog.com/
http://pdf.datasheetcatalog.com/datasheets2/30/3055029_1.pdf.
http://pdf.datasheetcatalog.com/datasheet/texasinstruments/tl080.pdf.
http://pdf.datasheetcatalog.com/datasheet2/1/02glhewsates3885ie825lrz9d
http://pdf.datasheetcatalog.com/datasheets/150/44435_DS.pdf. Consultado
en diciembre 2014.
http://pdf.datasheetcatalog.com/datasheet/fairchild/LM7805.pdf.
75
http://pdf.datasheetcatalog.com/datasheet/fairchild/LM7905.pdf.
http://pdf.datasheetcatalog.com/datasheet/fairchildsemiconductor/LM7915
76
Capítulo 7
Anexo
//********************************************************************
// DECLARACION DE VARIABLES Y CONSTANTES
//
// GENERAL
// ENTRADA DIGITAL
int iD;
int Valor_Digital[20];
// ENTRADAS ANALOGICAS
int iA;
int m, n;
volatile int jA;
volatile struct {
volatile float valor[8];
volatile int D;
volatile int M;
volatile int A;
volatile int h;
volatile int m;
volatile int s;
volatile int t;
} muestra[20];
// ENTRADA DE FRECUENCIA
volatile float Valor_Frec[2]={0,0};
volatile float Valor_Frecuencia[2][20];
union u_32b {
volatile unsigned long valor;
volatile unsigned int bytes[2]={0,0};
};
77
// HORA Y FECHA
volatile struct {
volatile int a = 0;
volatile int m = 0;
volatile int d = 0;
} Fecha;
volatile struct {
volatile int h = 0;
volatile int m = 0;
volatile int s = 0;
volatile int t = 0;
} Hora;
char maxdia[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// COMUNICACION USB
int option;
int optionjA;
//********************************************************************
// DEFINICION E INICIALIZACION
//
// INICIO FUNCIONES PARA ENTRADA DE FRECUENCIA
void configInterrupcionesFrecuencia() {
pinMode(2, INPUT_PULLUP);
EIMSK |= _BV(INT4);
EICRB |= _BV(ISC41)|_BV(ISC40);
EIMSK |= _BV(INT5);
EICRB |= _BV(ISC51)|_BV(ISC50);
}
void configInterrupcionesTimers() {
TCCR3B = 0;
TCNT3 = 0;
TIMSK3 = 0x01;
TCCR3A = 0x00;
TCCR3B = 0b00000001;
TCCR4B = 0;
TCNT4 = 0;
TIMSK4 = 0x01;
TCCR4A = 0x00;
TCCR4B = 0b00000001;
}
if (!SD.begin(53)){
Serial.println("Fallo o tarjera no presente");
}
else{
Serial.println("SD correcta");
}
}
78
File digitalFile = SD.open("digital.txt", FILE_WRITE);
String digitalString = "FECHA,HORA,ENTRADA,ESTADO";
digitalFile.println(digitalString);
digitalFile.close();
return;
}
// inicio archivo ANALOGICO
void inicioArchivoAnalogico(){
File analogFile = SD.open("analog.txt", FILE_WRITE);
String analogString =
"FECHA,HORA,ENTRADA_1,HORA,ENTRADA_2,HORA,ENTRADA_3,HORA,ENTRADA_4,HORA,ENTRADA_5,
HORA,ENTRADA_6,HORA,ENTRADA_7,HORA,ENTRADA_8";
analogFile.println(analogString);
analogFile.close();
return;
}
// inicio archivo FRECUENCIA
void inicioArchivoFrecuencia(){
File frecFile = SD.open("frec.txt", FILE_WRITE);
String frecString = "FECHA,HORA,ENTRADA_1,HORA,ENTRADA_2";
frecFile.println(frecString);
frecFile.close();
return;
}
79
frecFile.println(frecString);
}
frecFile.close();
}
//********************************************************************
// DEFINICION E INICIALIZACION
//
void setup() {
t3.valor=1;
// ENTRADA DIGITAL
for(int i = 30; i < 50; i++) { pinMode(i, INPUT); }
// HORA Y FECHA
noInterrupts();
TCCR2A=0;
//TCCR2B=0b00000101;
TCCR2B|=_BV(CS22)|_BV(CS20);
TCNT2=131; //valor para que tarde 1ms en desbordar
//TIMSK2=0b00000001;
TIMSK2|=_BV(TOIE2);
// ENTRADAS DE FRECUENCIA
configInterrupcionesFrecuencia();
configInterrupcionesTimers();
sei();
// MÓDULO RTC
Wire.begin(); // Inicia el puerto I2C
RTC.begin(); // Inicia la comunicación con el RTC
//RTC.adjust(DateTime(__DATE__, __TIME__));
// PUERTO SERIAL
Serial.begin(115200);
// MEMORIA SD
inicializarSD(); //INICIO MEMORIA
if(SD.exists("digital.txt")==0){
inicioArchivoDigital();}
if(SD.exists("analog.txt")==0){
inicioArchivoAnalogico();}
if(SD.exists("frec.txt")==0){
inicioArchivoFrecuencia();}
//********************************************************************
// DESARROLLO DE PROGRAMA
//
void loop() {
// HORA Y FECHA
if (Fecha.a == 0){
DateTime now = RTC.now();
Hora.s = now.second();
Hora.m = now.minute();
Hora.h = now.hour();
Fecha.d = now.day();
Fecha.m = now.month();
Fecha.a = now.year();
}
// ENTRADA DIGITAL
for (iD=30; iD<34; iD++) {
if (digitalRead(iD) != Valor_Digital[iD-30]){
Valor_Digital[iD-30] = !Valor_Digital[iD-30];
80
escribirDigital(iD-30, Valor_Digital[iD-30]);
}
}
// COMUNICACION USB
if (Serial.available()>0){
optionjA=jA;
option=Serial.read();
if(option=='a') {
File dataFile = SD.open("analog.txt");
if (dataFile) {
Serial.println("* A continuacion se muestra los datos Analogicos");
while (dataFile.available()) {
Serial.write(dataFile.read());
}
dataFile.close();
}else {
Serial.println("Error al abrir analog.txt");
}
}
if(option=='f'){
File dataFile = SD.open("frec.txt");
if (dataFile) {
Serial.println("* A continuacion se muestra los datos de
Frecuencia");
while (dataFile.available()) {
Serial.write(dataFile.read());
}
dataFile.close();
}else {
Serial.println("Error al abrir frec.txt");
}
}
if(option=='d'){
File dataFile = SD.open("digital.txt");
if (dataFile) {
Serial.println("* A continuacion se muestra los datos Digitales");
while (dataFile.available()) {
Serial.write(dataFile.read());
}
dataFile.close();
}else {
Serial.println("Error al abrir digital.txt");
}
}
if (option=='i'){
SD.remove("Digital.txt");
inicioArchivoDigital();
}
if (option=='n'){
SD.remove("analog.txt");
inicioArchivoAnalogico();
}
if (option=='r'){
SD.remove("frec.txt");
inicioArchivoFrecuencia();
}
jA=optionjA;
}
//********************************************************************
//DEFINICION DE FUNCIONES
//
// MUESTREO ENTRADAS ANALOGICAS y FRECUENCIA
ISR(TIMER1_OVF_vect){
TCNT1=34286;
for(iA=0; iA<8; iA++){
muestra[jA].valor[iA] = (leer_adc(iA)/51.15-10);
81
}
muestra[jA].h = Hora.h;
muestra[jA].m = Hora.m;
muestra[jA].s = Hora.s;
muestra[jA].t = Hora.t;
muestra[jA].D = Fecha.d;
muestra[jA].M = Fecha.m;
muestra[jA].A = Fecha.a;
Valor_Frecuencia[0][jA] = Valor_Frec[0];
Valor_Frecuencia[1][jA] = Valor_Frec[1];
jA++;
}
// ENTRADAS DE FRECUENCIA
ISR(INT4_vect) {
t3.bytes[0] = TCNT3;
TCNT3 = 16;
Valor_Frec[0] = (16000000.0f/t3.valor);
t3.valor = 0;
}
ISR(INT5_vect) {
t4.bytes[0] = TCNT4;
TCNT4 = 16;
Valor_Frec[1] = (16000000.0f/t4.valor);
t4.valor = 0;
}
ISR(TIMER3_OVF_vect) {
t3.bytes[1]++;
if(t3.bytes[1]==250){
t3.bytes[1]=0;
Valor_Frec[0]=0;
}
}
ISR(TIMER4_OVF_vect) {
t4.bytes[1]++;
if(t4.bytes[1]==250){
t4.bytes[1]=0;
Valor_Frec[1]=0;
}
}
// HORA Y FECHA
ISR(TIMER2_OVF_vect){
TCNT2=131;
Hora.t++;
if (Hora.t>999) {
Hora.t=0;
Hora.s++;
}
if (Hora.s>59) {
Hora.s=0;
Hora.m++;
}
if (Hora.m>59) {
Hora.m=0;
Hora.h++;
}
if (Hora.h>23) {
Hora.h=0;
Fecha.d++;
}
if(Fecha.d > maxdia[Fecha.m-1]) {
Fecha.m++;
if(Fecha.m == 13) { Fecha.m = 1; Fecha.a++; }
Fecha.d = 1;
}
82
Public Class Form1
Dim recibidos As String
Dim tipoDato As String
If .IsOpen Then
LabelEstado.Text = "Conectado"
Else
MsgBox("CONEXION FALLIDA!", MsgBoxStyle.Critical)
End If
End With
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical)
End Try
AddHandler SerialPort.DataReceived, AddressOf Recepcion
End Sub
End Sub
Private Sub actualizar(ByVal s As Object, ByVal e As EventArgs)
If tipoDato = 0 Then
TextDigital.Text = recibidos
End If
If tipoDato = 1 Then
TextAnalogico.Text = recibidos
End If
If tipoDato = 2 Then
TextFrecuencia.Text = recibidos
End If
End Sub
83
'-----------------------------------------------------------------------------
------
'ENTRADAS DIGITALES
Private Sub BotonDigitalCargar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BotonDigitalCargar.Click
If SerialPort.IsOpen Then
tipoDato = 0
recibidos = ""
SerialPort.WriteLine("d")
Else
MsgBox("NO ESTAS CONECTADO", MsgBoxStyle.Exclamation)
End If
End Sub
End Sub
End Try
End Sub
End Try
End Sub
'-----------------------------------------------------------------------------
------
'ENTRADAS ANALOGICAS
Private Sub BotonAnalogicoAbrir_Click_1(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles BotonAnalogicoAbrir.Click
TextAnalogico.Clear()
Dim Open As New OpenFileDialog()
Dim myStreamReader As System.IO.StreamReader
Open.Filter = "Text [*.txt*]|*.txt|All Files [*,*]|*,*"
Open.CheckFileExists = True
Open.Title = "Abrir Archivo Analogico"
84
Open.ShowDialog(Me)
Try
Open.OpenFile()
myStreamReader = System.IO.File.OpenText(Open.FileName)
TextAnalogico.Text = myStreamReader.ReadToEnd()
Catch ex As Exception
End Try
End Sub
End Try
End Sub
End Sub
'-----------------------------------------------------------------------------
------
'ENTRADAS DE FRECUENCIA
Private Sub BotonFrecuenciaCargar_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles BotonFrecuenciaCargar.Click
If SerialPort.IsOpen Then
tipoDato = 2
recibidos = ""
SerialPort.WriteLine("f")
Else
MsgBox("NO ESTAS CONECTADO", MsgBoxStyle.Exclamation)
End If
End Sub
85
MsgBox("NO ESTAS CONECTADO", MsgBoxStyle.Exclamation)
End If
End Sub
86
1. Central Generadora General Levalle.
87
3. La Turbina extremo motor de lanzamiento.
88
5. El Generador y la excitatriz.
6. Placa Generador.
89
7. Sala de Control
90