Simulador de ar condicionado

 

 

esquema-ventilacao.jpgÍndice

  • 1 Introdução
  • 2 Primeira Versão: montagem de ambiente
    • 2.1 1º Passo: Entrada de dimensão da sala
    • 2.2 2º Passo: Entrada de Temperatura Ambiente
    • 2.3 3º Passo: Criação da Sala na memoria do Sistema
    • 2.4 4º Passo: Entrada de numero de aparelhos Ar Condicionado
    • 2.5 5º Passo: Estrutura de dados tipo aparelho Ar Condicionado
    • 2.6 6º Passo: Criando os Aparelhos de Ar Condicionado na Memória
    • 2.7 7º Passo: Preenchimento de dados para os Aparelhos Criados
    • 2.8 8º Passo: listando para o Usuario os Aparelhos que serão Instalados
    • 2.9 9º Passo: Aplicando Aparelhos no Ambiente
    • 2.10 10º Passo: Visualizando Ambiente Alterado
    • 2.11 Exemplo Fnal 1
    • 2.12 Exemplo Fnal 2
  • 3 Segunda Versão : Pontos de calor
    • 3.1 1º Passo: Entrada de numero de Pontos de Calor
    • 3.2 2º Passo: Estrutura de dados tipo Pontos de Calor
    • 3.3 3º Passo: Criando os Pontos de Calor na Memória
    • 3.4 4º Passo: Preenchimento de dados para os Pontos de Calor
    • 3.5 5º Passo: listando para o Usuário os Pontos de calor que estarão presentes
    • 3.6 6º Passo: Aplicando Pontos de Calor no Ambiente
    • 3.7 7º Passo: Visualizando Ambiente Alterado
  • 4 Terceira Versão : Atualizando o ambiente
  • 5 Outras possibilidades

 

Introdução

É muito útil empregar simuladores de ambientes físicos testar equipamentos em situações limite. Já imaginou testar aviões sem antes ter certeza que a asa foi bem construída?

Exemplos de simuladores comuns são: simuladores de construção de pontes e simuladores de aviões.Neste exercício você vai programar o seu próprio simulador de ar condicionado.

Veja essa figura de um simulador de ar condicionado profissional:

SimuladorArCondicionado

Esse simulador pode ser inspiração para qualquer tipo de simulador de fluídos como: vento em projeto de asa de aviões, água em projeto de submarinos e petróleo em tubulações de distribuição.

Existem até simuladores de transmissão de doenças! Veja só:http://www.ted.com/talks/raymond_wang_how_germs_travel_on_planes_and_how_we_can_stop_them

 

Primeira Versão: montagem de ambiente

Na primeira versão do seu simulador de ar condicionado vamos usar um ambiente de 2 dimensões. Nele queremos somente que o usuário escolha a dimensão da sala e os pontos em que estão os aparelhos de resfriamento.

1º Passo: Entrada de dimensão da sala

A primeira coisa a fazer, é entrar com o tamanho da sala em metros quadrados, guardando esse dado em uma variável do programa.

Para ler o número de metros na sala, você pode usar o scanf.

Assim, o seu usuário digita o número do tamanho dos lados da sala quadrada:

   int dim; /* guarda tamanho dos lados da sala quadrada */
   printf("Entre com o tamanho da sala: ");        
   scanf("%d",&dim);
      

2º Passo: Entrada de Temperatura Ambiente

Depois que já temos o tamanho da sala, podemos pedir para o usuário fornecer a temperatura local. Essa temperatura será guardada em uma variável do programa.

   int tamb; /* variável para guardar a temperatura da sala */
   printf("Entre com a temperatura ambiente da sala: ");
   scanf("%d",&tamb);

3º Passo: Criação da Sala na memoria do Sistema

A sala do seu simulador será representada por uma matriz. Cada célula da matriz representa uma área de 1 metro quadrado.

Para criar essa matriz no seu programa, você pode usar a função malloc.

   int **M; // esta variável vai representar a matriz, sendo um '*' por dimensão
   
   M = (int**) malloc(dim *sizeof(int*));        /*Alocação de uma dimensão da sala*/
   for(int i = 0; i < dim; i++)
   {
       M[i] = (int*) malloc(dim *sizeof(int));  /*Alocação da segunda dimensão da sala*/
       for(int j = 0; j < dim; j++)
           M[i][j] = tamb;                      /*PREENCHIMENTO DA TEMPERATURA AMBIENTE*/
   }

Após criar a matriz com malloc, você atribuirá o valor de temperatura ambiente tamb em cada metro quadrado da matriz.

4º Passo: Entrada de numero de aparelhos Ar Condicionado

Agora é hora de instalar os aparelhos de ar condicionado. Peça para o usuário indicar a quantidade de aparelhos.

   int nac;
   /* ENTRADA E VERIFICACAO  "NUMERO DE APARELHOS" */    
   printf("Entre com o numero de Aparelhos de Resfriamento: ");
   scanf("%d",&nac);

5º Passo: Estrutura de dados tipo aparelho Ar Condicionado

Ate esse passo já temos a sala preparada, porem ela não possui nenhum aparelho de ar condicionado. Para armazenar os dados dos Aparelhos podemos criar uma estrutura especial de dados do tipo struct. Definimos a estrutura que irá representar o aparelho. Os dados que serão armazenados:

-ID (identificação do aparelho);

-posX (posição X do aparelho, representando ao eixo x da sala, plano cartesiano);

-posY (posição Y do aparelho, representando ao eixo y da sala, plano cartesiano);

-temperatura (temperatura que o aparelho exercera na simulação).

   struct ar_condicionado{
       int ID;
       int posX;
       int posY;
       int temperatura;
   };
   typedef struct ar_condicionado ArC;

6º Passo: Criando os Aparelhos de Ar Condicionado na Memória

Nesse passo, usaremos a função malloc para armazenar o numero de aparelhos(nac) tipo Arc no sistema.

   ArC *arc;
   arc = (ArC*)malloc(nac * sizeof(ArC));       /*Alocação dos dados dos APARELHOS*/

7º Passo: Preenchimento de dados para os Aparelhos Criados

Nesse passo, registraremos os dados nos aparelhos criados e armazenados na memoria anteriormente. Os dados que serão armazenados:

-ID (identificação do aparelho);

-posX (posição X do aparelho, representando ao eixo x da sala, plano cartesiano);

-posY (posição Y do aparelho, representando ao eixo y da sala, plano cartesiano);

-temperatura (temperatura que o aparelho exercera na simulação).

   /*Preenchimento de dados Aparelho */
   for( i = 0; i < nac; i++)
   {
       //---------------ID----------------------------------
       printf("\nEntrada de dados -- %d aparelho.",i+1);
       printf("\nID: ");
       scanf("%d",&arc[i].ID);
       
       printf("  *Entre com valores entre 0 e %d",dim-1);
       //-----------POSIÇÃO X-------------------------------       
       printf("\nposX: ");
       scanf("%d",&arc[i].posX);
       while(arc[i].posX < 0 || arc[i].posX > dim-1)
       {
           printf("---Entre com outro valor!---");
           printf("\nposX: ");
           scanf("%d",&arc[i].posX);
       }
       //-----------POSIÇÃO Y------------------------------
       printf("posY: ");
       scanf("%d",&arc[i].posY);
       while(arc[i].posY < 0 || arc[i].posY > dim-1)
       {
           printf("---Entre com outro valor!---");
           printf("\nposY: ");
           scanf("%d",&arc[i].posY);
       }
       //------------TEMPERATURA---------------------------
       printf("Temperatura: ");
       scanf("%d",&arc[i].temperatura);
   }

8º Passo: listando para o Usuario os Aparelhos que serão Instalados

Nesse passo iremos listar os aparelhos que seram aplicados ao ambiente.

   /*LISTANDO APARELHOS A SEREM INSTALADOS*/
   printf("\n++++APARELHOS++++\n\n");
   for(i = 0; i < nac; i++)
   {
       printf("ID:          %d\n",arc[i].ID);
       printf("posX:        %d\n",arc[i].posX);
       printf("posY:        %d\n",arc[i].posY);
       printf("Temperatura: %d\n",arc[i].temperatura);
       printf("---------------\n");
   }

9º Passo: Aplicando Aparelhos no Ambiente

Nesse passo vamos programar para que seja preenchido cada posição vizinha a posição do aparelho com o número da temperatura do mesmo. A posição vizinha deve ser verificada se esta existe, pois ela pode estar em um canto da sala e, assim, um dos lados não vai existir.Caso ocorra colisão de posição de duas temperaturas, considere a menor.

   int x, y;
   int auxX, auxY;
   //---------------APLICANDO APARELHOS--------
   for(i = 0; i< nac; i ++)
   {
       auxX = arc[i].posX;
       auxY = arc[i].posY;
       x = arc[i].posX;
       y = arc[i].posY;
       //---------------APLICANDO TEMPERATURA AO REDOR DOS APARELHOS--------
       for(auxX = arc[i].posX -1 ; auxX <= arc[i].posX +1; auxX++)
           if(auxX >= 0 && auxX < dim)                                      /*Verificação de posição dentro da sala*/
               for(auxY = arc[i].posY -1 ; auxY <= arc[i].posY +1; auxY++)
                   if((auxY >= 0) && (auxY < dim)                           /*Verificação de posição dentro da sala*/
                           && (arc[i].temperatura < M[auxX][auxY])          /*Verificação de qual temperatura considerar quando colisao*/
                           && (80 > M[auxX][auxY]))                         /*Verificação se e Temperatura ou Aparelho*/
                   {                    
                        M[auxX][auxY] = arc[i].temperatura;
                   }        
       M[x][y] = arc[i].ID;
   }

10º Passo: Visualizando Ambiente Alterado

Nesse passo teremos sera apresentado na tela como a sala esta apos aplicada os aparelhos de Ar Condicionado com a mudação de temperatura em algumasposições.

   /* INTERFACE SALA */
   printf("\nAPARELHOS INSTALADOS \n");
   for( i = 0; i < dim; i++)
       printf("  %-5d",i);
   printf("\n");
   for( i = 0; i < dim; i++)
       printf("___    ",i);
   for( i = 0; i < dim; i++)
   {
       printf("\n%d|",i);
       for(j =0; j < dim; j++)
           printf("%-5d  ",M[i][j]);
   }

Exemplo Fnal 1

  Entre com o tamanho da matriz quadrada  :   5
  Entre com a temperatura ambiente inicial:   26
  Entre com o número de aparelhos         :   2 
  .
     +++Entrada Aparelho 1+++
  ID:           101
  posX:           2
  posY:           1  
  temperatura:   21
  .
     +++Entrada Aparelho 2+++
  ID:           172
  posX:           4
  posY:           3  
  temperatura:   19
  .  
  MAPA: 
  Visão do Usuário                        
    0   1   2    3    4                           
  ___  ___ ___ ___  ___
  0|26  26  26  26   26
  1|21  21  21  26   26
  2|21 101  21  26   26
  3|21  21  19  19   19
  4|26  26  19 172   19

Repare que ocorreu uma intersecção de duas posições de resfriamento na posição 3,2 Assim consideramos a temperatura 19 por ser menor que 21

Cores usadas acima são ilustrativas. No ultimo passo apresentaremos a implementação gráfica.

Exemplo Fnal 2

  Entre com o numero da matriz:   7
  Entre com a temperatura ambiente: 20
  Entre com o número de aparelhos: 3. 
  .
     +++Entrada Aparelho 1+++
  ID:           165
  posX:           2
  posY:           2  
  temperatura:   15
  .
     +++Entrada Aparelho 2+++
  ID:           178
  posX:           3
  posY:           6  
  temperatura:   19
  .
     +++Entrada Aparelho 3+++
  ID:           200
  posX:           6
  posY:           2  
  temperatura:   10
  .  
  MAPA: 
  Visão do Usuário                        
    0    1   2    3   4   5   6
  ___  ___ ___ ___  ___ ___ ___                           
  0|20  20  20   20  20  20  20
  1|20  15  15   15  20  20  20 
  2|20  15 165   15  20  19  19
  3|20  15  15   15  20  19 178
  4|20  20  20   20  20  19  19
  5|20  10  10   10  20  20  20
  6|20  10 200   10  20  20  20

Repare que ocorreu posições não existentes por não existir a posição vizinha.

Cores usadas acima são ilustrativas. No ultimo passo apresentaremos a implementação gráfica.

Segunda Versão : Pontos de calor

1º Passo: Entrada de numero de Pontos de Calor

Nesse passo, começaremos a tratar a situação da existência de pontos de calor, ou seja, pontos de temperatura elevada em relação a temp ambiente. Entraremos com o numero de pontos de calor, salvando em uma variável do programa. O número de pontos de calor deve ser entre 0 e dim, onde dim é o numero de dimensão, assim em uma sala 3×3 pode existir 0 e no máximo 3 pontos.

   int npc;
   /* ENTRADA E VERIFICACAO  "NUMERO DE PONTOS DE CALOR" */    
   printf("Entre com o numero de Pontos de Calor: ");
   scanf("%d",&npc);    
   while(npc < 0 || npc > dim)
   {
       printf("Erro, Numero de pontos de calor indevido ou excedentes para essa sala. \n");
       printf("\nEntre com o numero de numero de Pontos de Calor: ");
       scanf("%d",&npc);
   }

2º Passo: Estrutura de dados tipo Pontos de Calor

Para armazenar os dados dos Pontos de Calor podemos criar uma estrutura especial de dados do tipo struct. Definimos a estrutura que irá representar o aparelho. Os dados que serão armazenados:

-posX (posição X do pontos de calor, representando ao eixo x da sala, plano cartesiano);

-posY (posição Y do pontos de calor, representando ao eixo y da sala, plano cartesiano);

-temperatura (temperatura que o pontos de calor exercera na simulação).

   struct ponto_calor{
       int posX;
       int posY;
       int temperatura;
   };
   typedef struct ponto_calor PtC;

3º Passo: Criando os Pontos de Calor na Memória

Nesse passo, usaremos a função malloc para armazenar o pontos de calor(npc) tipo Ptc no sistema.

   PtC *ptc;
   ptc = (PtC*)malloc(npc * sizeof(PtC));       /*Alocação dos dados dos PONTOS DE CALOR*/

4º Passo: Preenchimento de dados para os Pontos de Calor

Nesse passo, registraremos os dados dos pontos de calor criados e armazenados na memoria anteriormente. Os dados que serão armazenados:
-posX (posição X do pontos de calor, representando ao eixo x da sala, plano cartesiano);

-posY (posição Y do pontos de calor, representando ao eixo y da sala, plano cartesiano);

-temperatura (temperatura que o pontos de calor exercera na simulação).

   /*Preenchimento de dados PONTO DE CALOR*/
   for( i = 0; i < npc; i++)
   {
       //---------------Dados de Ponto de Calor----------------
       printf("\nEntrada de dados -- %d ponto de calor.",i+1);
       
       printf("  *Entre com valores entre 0 e %d",dim-1);
       //-----------POSIÇÃO X----------------------------------       
       printf("\nposX: ");
       scanf("%d",&ptc[i].posX);
       while(ptc[i].posX < 0 || arc[i].posX > dim-1)
       {
           printf("---Entre com outro valor!---");
           printf("\nposX: ");
           scanf("%d",&ptc[i].posX);
       }
       //-----------POSIÇÃO Y----------------------------------
       printf("posY: ");
       scanf("%d",&ptc[i].posY);
       while(ptc[i].posY < 0 || ptc[i].posY > dim-1)
       {
           printf("---Entre com outro valor!---");
           printf("\nposY: ");
           scanf("%d",&ptc[i].posY);
       }
       //------------TEMPERATURA-------------------------------
       printf("Temperatura: ");
       scanf("%d",&ptc[i].temperatura);
   }

5º Passo: listando para o Usuário os Pontos de calor que estarão presentes

Nesse passo iremos listar os pontos de calor que serão aplicados ao ambiente.

   /*LISTANDO OS PONTOS DE CALOR PRESENTE*/
   printf("\n++++PONTOS DE CALOR++++\n\n");
   for(i = 0; i < nac; i++)
   {
       printf("posX:        %d\n",ptc[i].posX);
       printf("posY:        %d\n",ptc[i].posY);
       printf("Temperatura: %d\n",ptc[i].temperatura);
       printf("---------------\n");
   }

6º Passo: Aplicando Pontos de Calor no Ambiente

Nesse passo vamos programar para que seja preenchido cada posição vizinha a posição do ponto de calor com o número da temperatura do mesmo. A posição vizinha deve ser verificada se esta existe, pois ela pode estar em um canto da sala e, assim, um dos lados não vai existir.Caso ocorra colisão de posição de duas temperaturas, considere a do ponto de calor.

   int Px, Py;
   int PauxX, PauxY;
   //---------------APLICANDO APARELHOS--------
   for(i = 0; i< nac; i ++)
   {
       PauxX = ptc[i].posX;
       PauxY = ptc[i].posY;
       Px = ptc[i].posX;
       Py = ptc[i].posY;
       //---------------APLICANDO TEMPERATURA AO REDOR DOS APARELHOS--------
       for(PauxX = ptc[i].posX -1 ; PauxX <= ptc[i].posX +1; PauxX++)
           if(PauxX >= 0 && PauxX < dim)                                      /*Verificação de posição dentro da sala*/
               for(PauxY = ptc[i].posY -1 ; PauxY <= ptc[i].posY +1; PauxY++)
                   if((PauxY >= 0) && (PauxY < dim)                           /*Verificação de posição dentro da sala*/
                           && (80 > M[PauxX][PauxY]))                         /*Verificação se e Temperatura ou Aparelho*/
                   {                    
                        M[PauxX][PauxY] = ptc[i].temperatura;
                   }        
   }

7º Passo: Visualizando Ambiente Alterado

Nesse passo teremos sera apresentado na tela como a sala esta apos aplicada os aparelhos de Ar Condicionado e os Pontos de Calor com a mudança de temperatura em algumas posições.

   /* INTERFACE SALA */
   printf("\nAPARELHOS INSTALADOS e PONTOS DE CALOR \n");
   for( i = 0; i < dim; i++)
       printf("  %-5d",i);
   printf("\n");
   for( i = 0; i < dim; i++)
       printf("___    ",i);
   for( i = 0; i < dim; i++)
   {
       printf("\n%d|",i);
       for(j =0; j < dim; j++)
           printf("%-5d  ",M[i][j]);
   }

Terceira Versão : Atualizando o ambiente

Nesse passo, temos o objetivo de a cada “turno” de tempo, o ambiente atualizar a temperatura. A atualização da temperatura da sala ocorre de forma que cada posição na sala, execute a media das temperaturas vizinhas. Para executar a media de temperatura se faz o seguinte:

1- Escolhe uma posição;

2- Crie uma variável Temp_soma para guardar o valor das temperaturas (da posição que foi escolhida e das posições vizinhas dessa);

3- Crie uma variável Temp_cont para guardar quantas temperaturas existe (considerando a posição escolhida e as posições vizinhas);

4- Execute a media: Temp_soma/Temp_cont e atualize a posição escolhida para essa nova temperatura.

   int Temp_cont, Temp_soma;
   int auxi, auxj;
   for(i = 0; i < dim; i++)     /*For para verificar todas posições i da matriz*/
   {
       for(j = 0; j < dim; j++) /*For para verificar todas posições j da matriz*/
       {                        
           /*Dentro destes for(s) sera executado o percorrimento da matriz para realizar a atualização em todas as posições*/ 
           
           Temp_soma = M[i][j];             /*Pegando temperatura da própria posição*/
           Temp_cont = 1;                   /*contando com a própria posição*/      
           /* EXECUTANDO MEDIA DE TEMPERATURAS VIZINHAS */
           for(auxi = i -1; auxi <= i + 1; auxi++)                     
           {   /*Neste for sera verificado em relação a i em volta da posição M[i][j] escolhida anteriormente*/
               if( (auxi >= 0) && (auxi < dim) )     /*Neste if é executado uma verificação de posição em relação a i para ver se a mesma esta                                                                                                                                                      .                                                     dentro de sala*/
               {    
                   for(auxj = j-1; auxj <= j+1; auxj++)  /*Mesma execução do for anterior em volta de M[i][j], porem agora em relação a j*/
                       if( (auxj >= 0) && (auxj < dim) ) /*Mesma verificação do if anterior, porem agora em relação a j se esta dentro da sala*/
                       {
                           Temp_cont ++;                             /*Contador de posições vizinhas existentes dentro da sala*/
                           Temp_soma = Temp_soma + M[auxi][auxj];    /*Somador das temperaturas vizinhas de M[i][j] para calcular media*/
                       }
               }
           }
           M[i][j] = Temp_soma / Temp_cont;       /*Execução da media e atribuição do novo valor para tal posição*/
       }
   }

Para as posições que possuem Aparelhos de ar Condicionado e Pontos de calor, devem ser atualizados apos o turno ter sido executado, isso para ocorrer uma nova alteração da temperatura dos aparelhos de ar condicionado e dos pontos de calor em relação ao ambiente.
Aplicar Visual Gráfico Amigável

Outras possibilidades

2) Aplicar Visual Gráfico Amigável

3) fazer um aplicativo de celular

4) incluir propaganda para ganhar $

5) incluir usar facebook