Informatica Industrial

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 // Laboratorio 4 - Multimetro y Timers
00002 // Andrea Fernanda Coronado Guzman
00003 
00004 #include "mbed.h"
00005 #define TAMAÑO_ARREGLO 9 // Constante que define el tamaño del arreglo
00006  
00007 AnalogIn Volt_Out(PTA1); // Declaración del Voltímetro
00008 AnalogIn Volt_Ohmetro(PTA1); // Declaración del Óhmetro
00009 Serial pc(USBTX, USBRX); // Declaración del puerto serial
00010 Timer reloj; // Declaración de timer
00011 DigitalIn boton_medicion(PTB1); // 0 = voltimetro; 1 = ohmetro
00012 DigitalIn boton_resultado(PTB2); // Boton que calcula el promedio y despliega el resultado
00013  
00014 float Volt_In; // Voltaje de entrada
00015 float Leer_tiempo; // Variable que leera el tiempo
00016 float Promedio; // Promedio de los voltajes en el arreglo
00017 float Vout_val;
00018 float Valor_resistencia; // Valor de la resistencia desconocida
00019 float Arreglo_voltajes[]= {0}; // Inicialización en 0 de un arreglo que guardara los valores de voltaje cada segundo
00020  
00021 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
00022 {
00023     float suma_voltajes = 0; // Inicializamos en 0 la variable suma_voltajes que sumara los voltajes leidos por el timer
00024     for (int lugar_arreglo = 0; lugar_arreglo < TAMAÑO_ARREGLO; lugar_arreglo++) // Ciclo que cambia al siguiente lugar en Arreglo_voltajes
00025     { 
00026         suma_voltajes += Arreglo_voltajes[lugar_arreglo]; // Asigna a cada lugar del arreglo el voltaje leido
00027     }
00028     return suma_voltajes/TAMAÑO_ARREGLO; // Calcula el promedio de los voltajes en el arreglo y regresa el resultado
00029 }
00030  
00031 int main()
00032 {        
00033     while(1) // Ciclo infinito
00034     {
00035         reloj.start(); // Inicialización del timer
00036         Vout_val = Volt_Out*5; // Una variable que tendra el valor del voltaje de salida y se multiplica por 5
00037         Leer_tiempo = reloj.read();
00038         if(Leer_tiempo > 0 && Leer_tiempo < 0.5 ) // Toma las muestras a 2 Hz
00039         {
00040             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
00041             {
00042                 pc.printf("Modo: Voltimetro \n"); // Confirma en que modo esta el mutlimetro
00043                 for (int posicion_arreglo = 0; posicion_arreglo < TAMAÑO_ARREGLO; posicion_arreglo++) // Ciclo que actualiza los voltajes en cada espacio del arreglo
00044                 {
00045                     Arreglo_voltajes[posicion_arreglo] = Arreglo_voltajes[posicion_arreglo+1]; // Se suma a posicion_arreglo un 1 para el lugar siguiente en el arreglo
00046                     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
00047                     Arreglo_voltajes[TAMAÑO_ARREGLO-1] = Volt_In; // Elmininamos el primer valor y lo sustituimos por el siguiente
00048                     reloj.reset(); //El timer se restablece para hacer de nuevo mediciones
00049                 }
00050                 Promedio = promedio_voltajes(Arreglo_voltajes); //Uso de la funcion promedio_voltajes para calcular el promedio de los voltajes en el arreglo
00051                 pc.printf("El voltaje promedio es de %f \n", Promedio/9);
00052                 
00053             }
00054             else
00055             {
00056                 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
00057                 {
00058                     pc.printf("Modo: Ohmetro \n"); // Confirma en que modo esta el mutlimetro
00059                     Valor_resistencia = 1/(1/(Volt_Ohmetro*3.3/.176-560)-1/100);// Valor de la resistencia desconocida
00060                     pc.printf("El valor de la resistencia desconocida es de %f ohms", Valor_resistencia);
00061                     reloj.reset();
00062                 }
00063             }
00064         }
00065     }
00066 }