Informatica Industrial

Dependencies:   mbed

Committer:
AndreaC
Date:
Fri Oct 10 12:45:03 2014 +0000
Revision:
0:3febc025a28e
Laboratorio 4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AndreaC 0:3febc025a28e 1 // Laboratorio 4 - Multimetro y Timers
AndreaC 0:3febc025a28e 2 // Andrea Fernanda Coronado Guzman
AndreaC 0:3febc025a28e 3
AndreaC 0:3febc025a28e 4 #include "mbed.h"
AndreaC 0:3febc025a28e 5 #define TAMAÑO_ARREGLO 9 // Constante que define el tamaño del arreglo
AndreaC 0:3febc025a28e 6
AndreaC 0:3febc025a28e 7 AnalogIn Volt_Out(PTA1); // Declaración del Voltímetro
AndreaC 0:3febc025a28e 8 AnalogIn Volt_Ohmetro(PTA1); // Declaración del Óhmetro
AndreaC 0:3febc025a28e 9 Serial pc(USBTX, USBRX); // Declaración del puerto serial
AndreaC 0:3febc025a28e 10 Timer reloj; // Declaración de timer
AndreaC 0:3febc025a28e 11 DigitalIn boton_medicion(PTB1); // 0 = voltimetro; 1 = ohmetro
AndreaC 0:3febc025a28e 12 DigitalIn boton_resultado(PTB2); // Boton que calcula el promedio y despliega el resultado
AndreaC 0:3febc025a28e 13
AndreaC 0:3febc025a28e 14 float Volt_In; // Voltaje de entrada
AndreaC 0:3febc025a28e 15 float Leer_tiempo; // Variable que leera el tiempo
AndreaC 0:3febc025a28e 16 float Promedio; // Promedio de los voltajes en el arreglo
AndreaC 0:3febc025a28e 17 float Vout_val;
AndreaC 0:3febc025a28e 18 float Valor_resistencia; // Valor de la resistencia desconocida
AndreaC 0:3febc025a28e 19 float Arreglo_voltajes[]= {0}; // Inicialización en 0 de un arreglo que guardara los valores de voltaje cada segundo
AndreaC 0:3febc025a28e 20
AndreaC 0:3febc025a28e 21 float promedio_voltajes (float arreglo[TAMAÑO_ARREGLO]) // Función que calcula el promedio de los voltajes leidos y los guarda en el arreglo mediante un contador
AndreaC 0:3febc025a28e 22 {
AndreaC 0:3febc025a28e 23 float suma_voltajes = 0; // Inicializamos en 0 la variable suma_voltajes que sumara los voltajes leidos por el timer
AndreaC 0:3febc025a28e 24 for (int lugar_arreglo = 0; lugar_arreglo < TAMAÑO_ARREGLO; lugar_arreglo++) // Ciclo que cambia al siguiente lugar en Arreglo_voltajes
AndreaC 0:3febc025a28e 25 {
AndreaC 0:3febc025a28e 26 suma_voltajes += Arreglo_voltajes[lugar_arreglo]; // Asigna a cada lugar del arreglo el voltaje leido
AndreaC 0:3febc025a28e 27 }
AndreaC 0:3febc025a28e 28 return suma_voltajes/TAMAÑO_ARREGLO; // Calcula el promedio de los voltajes en el arreglo y regresa el resultado
AndreaC 0:3febc025a28e 29 }
AndreaC 0:3febc025a28e 30
AndreaC 0:3febc025a28e 31 int main()
AndreaC 0:3febc025a28e 32 {
AndreaC 0:3febc025a28e 33 while(1) // Ciclo infinito
AndreaC 0:3febc025a28e 34 {
AndreaC 0:3febc025a28e 35 reloj.start(); // Inicialización del timer
AndreaC 0:3febc025a28e 36 Vout_val = Volt_Out*5; // Una variable que tendra el valor del voltaje de salida y se multiplica por 5
AndreaC 0:3febc025a28e 37 Leer_tiempo = reloj.read();
AndreaC 0:3febc025a28e 38 if(Leer_tiempo > 0 && Leer_tiempo < 0.5 ) // Toma las muestras a 2 Hz
AndreaC 0:3febc025a28e 39 {
AndreaC 0:3febc025a28e 40 if(boton_medicion == 0 && boton_resultado == 1) // Si el boton_medicion esta en modo voltimetro y boton_resultado se presiona, calculael promedio de voltajes en ese instante
AndreaC 0:3febc025a28e 41 {
AndreaC 0:3febc025a28e 42 pc.printf("Modo: Voltimetro \n"); // Confirma en que modo esta el mutlimetro
AndreaC 0:3febc025a28e 43 for (int posicion_arreglo = 0; posicion_arreglo < TAMAÑO_ARREGLO; posicion_arreglo++) // Ciclo que actualiza los voltajes en cada espacio del arreglo
AndreaC 0:3febc025a28e 44 {
AndreaC 0:3febc025a28e 45 Arreglo_voltajes[posicion_arreglo] = Arreglo_voltajes[posicion_arreglo+1]; // Se suma a posicion_arreglo un 1 para el lugar siguiente en el arreglo
AndreaC 0:3febc025a28e 46 Volt_In = 9*((Volt_Out*51000)/18000); // Al voltaje de salida se multiplica por la suma de R1+R2 y se divide entre R1,se multiplica de nuevo por 5 por ser el voltaje con que alimentamos
AndreaC 0:3febc025a28e 47 Arreglo_voltajes[TAMAÑO_ARREGLO-1] = Volt_In; // Elmininamos el primer valor y lo sustituimos por el siguiente
AndreaC 0:3febc025a28e 48 reloj.reset(); //El timer se restablece para hacer de nuevo mediciones
AndreaC 0:3febc025a28e 49 }
AndreaC 0:3febc025a28e 50 Promedio = promedio_voltajes(Arreglo_voltajes); //Uso de la funcion promedio_voltajes para calcular el promedio de los voltajes en el arreglo
AndreaC 0:3febc025a28e 51 pc.printf("El voltaje promedio es de %f \n", Promedio/9);
AndreaC 0:3febc025a28e 52
AndreaC 0:3febc025a28e 53 }
AndreaC 0:3febc025a28e 54 else
AndreaC 0:3febc025a28e 55 {
AndreaC 0:3febc025a28e 56 if(boton_medicion == 1 && boton_resultado == 1) // Si el boton_medicion esta en modo ohmetro y boton_resultado se presiona, calcula la resistencia desconocida en el circuito
AndreaC 0:3febc025a28e 57 {
AndreaC 0:3febc025a28e 58 pc.printf("Modo: Ohmetro \n"); // Confirma en que modo esta el mutlimetro
AndreaC 0:3febc025a28e 59 Valor_resistencia = 1/(1/(Volt_Ohmetro*3.3/.176-560)-1/100);// Valor de la resistencia desconocida
AndreaC 0:3febc025a28e 60 pc.printf("El valor de la resistencia desconocida es de %f ohms", Valor_resistencia);
AndreaC 0:3febc025a28e 61 reloj.reset();
AndreaC 0:3febc025a28e 62 }
AndreaC 0:3febc025a28e 63 }
AndreaC 0:3febc025a28e 64 }
AndreaC 0:3febc025a28e 65 }
AndreaC 0:3febc025a28e 66 }