PROGRAMA PARA CONTROLAR EL PROCESO DE UN EQUIPO TOSTADOR DE CAFE

Dependencies:   mbed NextionLCD

  • PROYECTO SISTEMAS MICROPROCESADOS*

PROBLEMA

En un proceso el tanque el cual contiene un producto, necesita ser monitoreado para que cumpla algunas condiciones de trabajo entre ellas tenemos:

La temperatura debe estar en 0 y 5 °C.

La presión del producto debe estar en 4 y 20 BAR;

Sólo como referencia para controlar el batch; el operador necesita saber el nivel del producto en el tanque.

SOLUCIÓN

DISEÑAR un programa con ayuda de una tarjeta electróncia (ARM) capaz de receptar las variables de proceso, se debe usar una terminal de salida para monitorizar las variables descritas en el problema, y a su vez programar las condiciones de alerta necesarias para el efectivo proceso de dicho producto.

  • DESARROLLO*
  • ETAPA 1 - RECEPCIÓN DE VARIABLES DE PROCESO*

En esta etapa se desarrolla el circuito para simular la entrada de variables analógicas de las variables de proceso, tales como temperatura, presión y nivel para este caso.

Es necesario escalar (interpretar la señal eléctrica a un variable de proceso) para poder presentar los valores y con ellos realizar el respectivo monitoreo.

Aquí se presentan divisores de tensión con su respectivo arreglo de resistencias para simular los rangos de voltajes que recepta la tarjeta electróncia ARM.

https://os.mbed.com/media/uploads/cristhian1987/img_20200216_000436.jpg

  • ETAPA 2 - PRESENTACIÓN DE HARDWARE*

A continuación se adjunta una foto, general del proyecto.

https://os.mbed.com/media/uploads/cristhian1987/img_20200216_000428.jpg

  • ETAPA 3 - PROGRAMACIÓN*

Se detalla el código para realizar la monitorización

include the mbed library with this snippet

#include "mbed.h"

/*
Problema:
En un tanque de proceso, el producto que reposa en él debe cumplir condiciones, las cuales tenemos:

La temperatura debe estar entre 0 - 5 °C.
La presion debe cumplir de 4 a 20 BAR.
El nivel del producto sólo es indicativo.
Si el proceso varía estas condiciones mostrarán mensajes de error como advertencia o alerta para el operador.
*/

#include "mbed.h"   // libreria mbed
#include "NextionLCD.h" // libreria NextionLCD (Básica)
NextionLCD lcd(PB_6, PB_7);     //Tx, Rx

int main()
{
    char str[20];
    float v_Temp;
    float v_Presion;
    float v_Nivel;

    float Temperatura;
    float Presion;
    float Nivel;

    DigitalOut myled(PD_13); // Asignar salida digital al pin PD 13
    DigitalOut myled2(PD_12); // Asignar salida digital al pin PD 13
    AnalogIn Ain(PB_0); // Variable (Ain) para Entrada Analógica en el puerto PB_0
    AnalogIn Ain1(PB_1); // Variable (Ain) para Entrada Analógica en el puerto PB_0
    AnalogIn Ain2(PC_4); // Variable (Ain) para Entrada Analógica en el puerto PB_0
    v_Temp=0;
    v_Presion=0;
    v_Nivel=0;
    Temperatura=0;
    Presion=0;
    Nivel=0;

    lcd.ClrScr(BLACK);  //clear the display and fill it with BLACK pixels

    //draw some shapes
    //lcd.FillCircle(100,100,50,RED);
    //lcd.DrawPixel(100,100,WHITE);
    //lcd.DrawRectangle(50,50,100,100,BLUE);
    //lcd.DrawLine(50,50,100,150,YELLOW);

    /** Draws a string on the lcd at the specified xy position.
        * @param x x position.
        * @param y y position.
        * @param w Width of string area.
        * @param h Height of string area.
        * @param font Font ID to use (0:smallest - 7:largest).
        * @param fontcolor Color Integer value (0 to 65535) to represent the font color of the string - represented in 16-bit 565 color format.
        * @param backcolor Color Integer value (0 to 65535) to represent the background color of the string - represented in 16-bit 565 color format.
        * @param xcenter Horizontal alignment (0: left-aligned, 1: entered, 2: right-aligned).
        * @param ycenter Vertical alignment (0: upper-aligned, 1: entered, 2: lower-aligned).
        * @param str String content.
        */
    //void DrawString(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint8_t font, uint16_t fontcolor, uint16_t backcolor, uint8_t xcenter, uint8_t ycenter, char *str);
    //str.printf("hola mundo");
    //lcd.DrawString(0,0,50,50,20,20,20,20,20,str);

    while(1) {
        sprintf(str, "PROYECTO SISTEMAS MICROPROCESADOS"); //print to string buffer
        lcd.DrawString(10,0,300,50,0,WHITE,BLACK,0,0,str);            //display string on LCD:

        v_Temp=Ain;
        v_Presion=Ain1;
        v_Nivel=Ain2;
        myled = 1; //Asigna el valor de 1 (ON) a la variable "myled"
        wait(0.1); //Línea de espera (ms)
        //sprintf(str, "El valor analogico en voltaje es: %f",v_analogico); //print to string buffer
        //lcd.DrawString(40,100,250,20,0,GREEN,GRAY,0,0,str);            //display string on LCD:
        myled = 0; //Asigna el valor de 1 (ON) a la variable "myled"
        wait(0.1); //Línea de espera (ms)

        //Escalar variable de entrada
        Temperatura= v_Temp*10;
        Presion= v_Presion*50;
        Nivel= v_Nivel*12;

        myled = 1; //Asigna el valor de 1 (ON) a la variable "myled"
        wait(0.1); //Línea de espera (ms)

        sprintf(str,"El valor de Temperatura es: %0.1f C",Temperatura); //print to string buffer
        lcd.DrawString(40,150,250,20,0,WHITE,GRAY,0,0,str);            //display string on LCD:
        myled = 0; //Asigna el valor de 1 (ON) a la variable "myled"
        wait(0.1); //Línea de espera (ms)

        sprintf(str, "El valor de Presion es: %0.2f BAR",Presion); //print to string buffer
        lcd.DrawString(40,170,250,20,0,WHITE,GRAY,0,0,str);            //display string on LCD:
        myled = 1; //Asigna el valor de 1 (ON) a la variable "myled"
        wait(0.1); //Línea de espera (ms)

        sprintf(str, "El valor de nivel es: %0.3f m",Nivel); //print to string buffer
        lcd.DrawString(40,190,250,20,0,WHITE,GRAY,0,0,str);            //display string on LCD:
        //myled = 0; //Asigna el valor de 1 (ON) a la variable "myled"
        //wait(0.1); //Línea de espera (ms)


        //Condiciones del proceso:
        if (Temperatura >= 5 && Temperatura<=10 && Presion >= 20 && Presion <= 50) {
            sprintf(str, "ERROR EN PROCESO"); //print to string buffer
            lcd.DrawString(40,30,250,20,0,RED,GRAY,0,0,str);            //display string on LCD:
        } 
        if (Temperatura >= 0 && Temperatura<5) {
            sprintf(str, "TEMPERATURA ESTABLE"); //print to string buffer
            lcd.DrawString(40,70,250,20,0,GREEN,GRAY,0,0,str);            //display string on LCD:
        } 
        if (Temperatura >= 5 && Temperatura <= 10) {
            sprintf(str, "TEMPERATURA ELEVADA"); //print to string buffer
            lcd.DrawString(40,70,250,20,0,RED,GRAY,0,0,str);            //display string on LCD:
        } 
        if (Presion >= 4 && Presion <= 20) {
            sprintf(str, "PRESION ESTABLE"); //print to string buffer
            lcd.DrawString(40,100,250,20,0,GREEN,GRAY,0,0,str);            //display string on LCD:
        }
        if (Presion > 20 && Presion <= 40) {
            sprintf(str, "PRESION ELEVADA"); //print to string buffer
            lcd.DrawString(40,100,250,20,0,YELLOW,GRAY,0,0,str);            //display string on LCD:
        }
        if (Presion > 40 && Presion <= 50) {
            sprintf(str, "SOBREPRESION"); //print to string buffer
            lcd.DrawString(40,100,250,20,0,RED,GRAY,0,0,str);            //display string on LCD:
        }
     }
}
  • MONITORIZACIÓN DEL PROCESO*

https://os.mbed.com/media/uploads/cristhian1987/img_20200216_000511_1.jpg

https://os.mbed.com/media/uploads/cristhian1987/img_20200216_000506.jpg

https://os.mbed.com/media/uploads/cristhian1987/img_20200216_000504.jpg

https://os.mbed.com/media/uploads/cristhian1987/img_20200216_000458.jpg

https://os.mbed.com/media/uploads/cristhian1987/img_20200216_000449.jpg

https://os.mbed.com/media/uploads/cristhian1987/img_20200216_000445.jpg

https://os.mbed.com/media/uploads/cristhian1987/img_20200216_000443.jpg

Committer:
cristhian1987
Date:
Sun Feb 16 05:07:13 2020 +0000
Revision:
1:6f80c4b7b4b5
Parent:
0:d3b5106aebcf
UPS_MASTER_PROYECTO_SISTEMAS_MICROPROCESADOS

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cristhian1987 1:6f80c4b7b4b5 1 /*
cristhian1987 1:6f80c4b7b4b5 2 Poblema:
cristhian1987 1:6f80c4b7b4b5 3 En un tanque de proceso, el producto que reposa en él debe cumplir condiciones, las cuales tenemos:
cristhian1987 1:6f80c4b7b4b5 4
cristhian1987 1:6f80c4b7b4b5 5 La temperatura debe estar entre 0 - 5 °C.
cristhian1987 1:6f80c4b7b4b5 6 La presion debe cumplir de 4 a 20 BAR.
cristhian1987 1:6f80c4b7b4b5 7 El nivel del producto sólo es indicativo.
cristhian1987 1:6f80c4b7b4b5 8 Si el proceso varía estas condiciones mostrarán mensajes de error como advertencia o alerta para el operador.
cristhian1987 1:6f80c4b7b4b5 9 */
cristhian1987 1:6f80c4b7b4b5 10
cristhian1987 1:6f80c4b7b4b5 11 #include "mbed.h" // libreria mbed
cristhian1987 1:6f80c4b7b4b5 12 #include "NextionLCD.h" // libreria NextionLCD (Básica)
cristhian1987 1:6f80c4b7b4b5 13 NextionLCD lcd(PB_6, PB_7); //Tx, Rx
cristhian1987 1:6f80c4b7b4b5 14
cristhian1987 1:6f80c4b7b4b5 15 int main()
cristhian1987 1:6f80c4b7b4b5 16 {
cristhian1987 1:6f80c4b7b4b5 17 char str[20];
cristhian1987 1:6f80c4b7b4b5 18 float v_Temp;
cristhian1987 1:6f80c4b7b4b5 19 float v_Presion;
cristhian1987 1:6f80c4b7b4b5 20 float v_Nivel;
cristhian1987 1:6f80c4b7b4b5 21
cristhian1987 1:6f80c4b7b4b5 22 float Temperatura;
cristhian1987 1:6f80c4b7b4b5 23 float Presion;
cristhian1987 1:6f80c4b7b4b5 24 float Nivel;
cristhian1987 0:d3b5106aebcf 25
cristhian1987 1:6f80c4b7b4b5 26 DigitalOut myled(PD_13); // Asignar salida digital al pin PD 13
cristhian1987 1:6f80c4b7b4b5 27 DigitalOut myled2(PD_12); // Asignar salida digital al pin PD 13
cristhian1987 1:6f80c4b7b4b5 28 AnalogIn Ain(PB_0); // Variable (Ain) para Entrada Analógica en el puerto PB_0
cristhian1987 1:6f80c4b7b4b5 29 AnalogIn Ain1(PB_1); // Variable (Ain) para Entrada Analógica en el puerto PB_0
cristhian1987 1:6f80c4b7b4b5 30 AnalogIn Ain2(PC_4); // Variable (Ain) para Entrada Analógica en el puerto PB_0
cristhian1987 1:6f80c4b7b4b5 31 v_Temp=0;
cristhian1987 1:6f80c4b7b4b5 32 v_Presion=0;
cristhian1987 1:6f80c4b7b4b5 33 v_Nivel=0;
cristhian1987 1:6f80c4b7b4b5 34 Temperatura=0;
cristhian1987 1:6f80c4b7b4b5 35 Presion=0;
cristhian1987 1:6f80c4b7b4b5 36 Nivel=0;
cristhian1987 1:6f80c4b7b4b5 37
cristhian1987 1:6f80c4b7b4b5 38 lcd.ClrScr(BLACK); //clear the display and fill it with BLACK pixels
cristhian1987 0:d3b5106aebcf 39
cristhian1987 1:6f80c4b7b4b5 40 //draw some shapes
cristhian1987 1:6f80c4b7b4b5 41 //lcd.FillCircle(100,100,50,RED);
cristhian1987 1:6f80c4b7b4b5 42 //lcd.DrawPixel(100,100,WHITE);
cristhian1987 1:6f80c4b7b4b5 43 //lcd.DrawRectangle(50,50,100,100,BLUE);
cristhian1987 1:6f80c4b7b4b5 44 //lcd.DrawLine(50,50,100,150,YELLOW);
cristhian1987 1:6f80c4b7b4b5 45
cristhian1987 1:6f80c4b7b4b5 46 /** Draws a string on the lcd at the specified xy position.
cristhian1987 1:6f80c4b7b4b5 47 * @param x x position.
cristhian1987 1:6f80c4b7b4b5 48 * @param y y position.
cristhian1987 1:6f80c4b7b4b5 49 * @param w Width of string area.
cristhian1987 1:6f80c4b7b4b5 50 * @param h Height of string area.
cristhian1987 1:6f80c4b7b4b5 51 * @param font Font ID to use (0:smallest - 7:largest).
cristhian1987 1:6f80c4b7b4b5 52 * @param fontcolor Color Integer value (0 to 65535) to represent the font color of the string - represented in 16-bit 565 color format.
cristhian1987 1:6f80c4b7b4b5 53 * @param backcolor Color Integer value (0 to 65535) to represent the background color of the string - represented in 16-bit 565 color format.
cristhian1987 1:6f80c4b7b4b5 54 * @param xcenter Horizontal alignment (0: left-aligned, 1: entered, 2: right-aligned).
cristhian1987 1:6f80c4b7b4b5 55 * @param ycenter Vertical alignment (0: upper-aligned, 1: entered, 2: lower-aligned).
cristhian1987 1:6f80c4b7b4b5 56 * @param str String content.
cristhian1987 1:6f80c4b7b4b5 57 */
cristhian1987 1:6f80c4b7b4b5 58 //void DrawString(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint8_t font, uint16_t fontcolor, uint16_t backcolor, uint8_t xcenter, uint8_t ycenter, char *str);
cristhian1987 1:6f80c4b7b4b5 59 //str.printf("hola mundo");
cristhian1987 1:6f80c4b7b4b5 60 //lcd.DrawString(0,0,50,50,20,20,20,20,20,str);
cristhian1987 1:6f80c4b7b4b5 61
cristhian1987 0:d3b5106aebcf 62 while(1) {
cristhian1987 1:6f80c4b7b4b5 63 sprintf(str, "PROYECTO SISTEMAS MICROPROCESADOS"); //print to string buffer
cristhian1987 1:6f80c4b7b4b5 64 lcd.DrawString(10,0,300,50,0,WHITE,BLACK,0,0,str); //display string on LCD:
cristhian1987 1:6f80c4b7b4b5 65
cristhian1987 1:6f80c4b7b4b5 66 v_Temp=Ain;
cristhian1987 1:6f80c4b7b4b5 67 v_Presion=Ain1;
cristhian1987 1:6f80c4b7b4b5 68 v_Nivel=Ain2;
cristhian1987 1:6f80c4b7b4b5 69 myled = 1; //Asigna el valor de 1 (ON) a la variable "myled"
cristhian1987 1:6f80c4b7b4b5 70 wait(0.1); //Línea de espera (ms)
cristhian1987 1:6f80c4b7b4b5 71 //sprintf(str, "El valor analogico en voltaje es: %f",v_analogico); //print to string buffer
cristhian1987 1:6f80c4b7b4b5 72 //lcd.DrawString(40,100,250,20,0,GREEN,GRAY,0,0,str); //display string on LCD:
cristhian1987 1:6f80c4b7b4b5 73 myled = 0; //Asigna el valor de 1 (ON) a la variable "myled"
cristhian1987 1:6f80c4b7b4b5 74 wait(0.1); //Línea de espera (ms)
cristhian1987 1:6f80c4b7b4b5 75
cristhian1987 1:6f80c4b7b4b5 76 //Escalar variable de entrada
cristhian1987 1:6f80c4b7b4b5 77 Temperatura= v_Temp*10;
cristhian1987 1:6f80c4b7b4b5 78 Presion= v_Presion*50;
cristhian1987 1:6f80c4b7b4b5 79 Nivel= v_Nivel*12;
cristhian1987 1:6f80c4b7b4b5 80
cristhian1987 1:6f80c4b7b4b5 81 myled = 1; //Asigna el valor de 1 (ON) a la variable "myled"
cristhian1987 1:6f80c4b7b4b5 82 wait(0.1); //Línea de espera (ms)
cristhian1987 1:6f80c4b7b4b5 83
cristhian1987 1:6f80c4b7b4b5 84 sprintf(str,"El valor de Temperatura es: %0.1f C",Temperatura); //print to string buffer
cristhian1987 1:6f80c4b7b4b5 85 lcd.DrawString(40,150,250,20,0,WHITE,GRAY,0,0,str); //display string on LCD:
cristhian1987 1:6f80c4b7b4b5 86 myled = 0; //Asigna el valor de 1 (ON) a la variable "myled"
cristhian1987 1:6f80c4b7b4b5 87 wait(0.1); //Línea de espera (ms)
cristhian1987 1:6f80c4b7b4b5 88
cristhian1987 1:6f80c4b7b4b5 89 sprintf(str, "El valor de Presion es: %0.2f BAR",Presion); //print to string buffer
cristhian1987 1:6f80c4b7b4b5 90 lcd.DrawString(40,170,250,20,0,WHITE,GRAY,0,0,str); //display string on LCD:
cristhian1987 1:6f80c4b7b4b5 91 myled = 1; //Asigna el valor de 1 (ON) a la variable "myled"
cristhian1987 1:6f80c4b7b4b5 92 wait(0.1); //Línea de espera (ms)
cristhian1987 1:6f80c4b7b4b5 93
cristhian1987 1:6f80c4b7b4b5 94 sprintf(str, "El valor de nivel es: %0.3f m",Nivel); //print to string buffer
cristhian1987 1:6f80c4b7b4b5 95 lcd.DrawString(40,190,250,20,0,WHITE,GRAY,0,0,str); //display string on LCD:
cristhian1987 1:6f80c4b7b4b5 96 //myled = 0; //Asigna el valor de 1 (ON) a la variable "myled"
cristhian1987 1:6f80c4b7b4b5 97 //wait(0.1); //Línea de espera (ms)
cristhian1987 1:6f80c4b7b4b5 98
cristhian1987 1:6f80c4b7b4b5 99
cristhian1987 1:6f80c4b7b4b5 100 //Condiciones del proceso:
cristhian1987 1:6f80c4b7b4b5 101 if (Temperatura >= 5 && Temperatura<=10 && Presion >= 20 && Presion <= 50) {
cristhian1987 1:6f80c4b7b4b5 102 sprintf(str, "ERROR EN PROCESO"); //print to string buffer
cristhian1987 1:6f80c4b7b4b5 103 lcd.DrawString(40,30,250,20,0,RED,GRAY,0,0,str); //display string on LCD:
cristhian1987 1:6f80c4b7b4b5 104 }
cristhian1987 1:6f80c4b7b4b5 105 if (Temperatura >= 0 && Temperatura<5) {
cristhian1987 1:6f80c4b7b4b5 106 sprintf(str, "TEMPERATURA ESTABLE"); //print to string buffer
cristhian1987 1:6f80c4b7b4b5 107 lcd.DrawString(40,70,250,20,0,GREEN,GRAY,0,0,str); //display string on LCD:
cristhian1987 1:6f80c4b7b4b5 108 }
cristhian1987 1:6f80c4b7b4b5 109 if (Temperatura >= 5 && Temperatura <= 10) {
cristhian1987 1:6f80c4b7b4b5 110 sprintf(str, "TEMPERATURA ELEVADA"); //print to string buffer
cristhian1987 1:6f80c4b7b4b5 111 lcd.DrawString(40,70,250,20,0,RED,GRAY,0,0,str); //display string on LCD:
cristhian1987 1:6f80c4b7b4b5 112 }
cristhian1987 1:6f80c4b7b4b5 113 if (Presion >= 4 && Presion <= 20) {
cristhian1987 1:6f80c4b7b4b5 114 sprintf(str, "PRESION ESTABLE"); //print to string buffer
cristhian1987 1:6f80c4b7b4b5 115 lcd.DrawString(40,100,250,20,0,GREEN,GRAY,0,0,str); //display string on LCD:
cristhian1987 1:6f80c4b7b4b5 116 }
cristhian1987 1:6f80c4b7b4b5 117 if (Presion > 20 && Presion <= 40) {
cristhian1987 1:6f80c4b7b4b5 118 sprintf(str, "PRESION ELEVADA"); //print to string buffer
cristhian1987 1:6f80c4b7b4b5 119 lcd.DrawString(40,100,250,20,0,YELLOW,GRAY,0,0,str); //display string on LCD:
cristhian1987 1:6f80c4b7b4b5 120 }
cristhian1987 1:6f80c4b7b4b5 121 if (Presion > 40 && Presion <= 50) {
cristhian1987 1:6f80c4b7b4b5 122 sprintf(str, "SOBREPRESION"); //print to string buffer
cristhian1987 1:6f80c4b7b4b5 123 lcd.DrawString(40,100,250,20,0,RED,GRAY,0,0,str); //display string on LCD:
cristhian1987 1:6f80c4b7b4b5 124 }
cristhian1987 1:6f80c4b7b4b5 125 }
cristhian1987 1:6f80c4b7b4b5 126 }