sábado, 18 de fevereiro de 2017

Medindo a temperatura com um termistor

O hardware do projeto. O circuito do termistor utilizado neste projeto corresponde ao circuito presente na placa shield RAMPS 1.4 para Arduino Mega. É composto por um resistor de 4k7  formando  um divisor de tensão com um termistor de 100k. Um filtro com capacitor 100nF e resitor de 100k conecta o divisor de tensão a porta analógica do  Arduino(A0). O circuito está ilustrado no fritzing abaixo.


Leitura da porta A0: A leitura da Porta A0 é uma medida de temperatura, mas por causa das caracteristicas do termistor não é linear e nem está em graus centigrados. Uma conversão para graus centigrados deve ser realizada.

Conversão para °C: Como falta uma fórmula matemática para esta conversão para graus centígrados, a maneira de realizá-la é utilizando uma tabela de valores aferidos e depois calcular a medida interpolando valores de duas linha da tabela.

Criação da Tabela. Alguém precisa criar uma tabela, que normalmente é levantada por aferição da tempertura com termometro preciso. Na construção da tabela, para cada leitura da porta analógica do Arduino, deve-se registrar a temperatura no termõmetro. Tem uma tabela pronta lá embaixo que foi contruída para termistores de 100k bastante utilizados nas medições de temperatura de impressoras 3D open source e serve para o circuito do projeto. Se o seu termistor é diferente, você terá que obter a tabela.

Exemplo 1 de conversão: Se a leitura da porta A0 for 205, conforme a tabela abaixo a temperatura corrrespondente é 165°C.

Exemplo 2 de conversão:  Se a leitura da porta A0 for  135, conforme a tabela abaixo a temperatura deve estar entre 190°C e 185°C. O valor exato será:

190 + (135-131)*(185-190)/(143-131) = 188,33 °C

Cálculo: O cálculo do valor foi realizado por interpolação na tabela. Se você se interessar pesquise sobre como interpolar.

Tabela de conversão Leitura digital na porta A0 para °C

A0°CA0°CA0°C
23300109200591100
2529512019562895
2729013119066590
2828514318570285
3128015618073780
3327517117577075
3527018717080170
3826520516583065
4126022416085760
4425524515588155
4825026815090350
5224529314592245
5624032014093940
6123534813595435
6623037913096630
7122541112597725
7822044512098520
8421548011599315
9221051611099910
10020555310510045
10080


Sketch A sketch Arduino abaixo realiza a leitura, converte e envia para o computador via monitor serial 1 vez a cada segundo.

\\ tabela de conversão AD para graus centígrados
const short temptable[][2] = {   
{       23 ,       300     },
{       25 ,       295     },
{       27 ,       290     },
{       28 ,       285     },
{       31 ,       280     },
{       33 ,       275     },
{       35 ,       270     },
{       38 ,       265     },
{       41 ,       260     },
{       44 ,       255     },
{       48 ,       250     },
{       52 ,       245     },
{       56 ,       240     },
{       61 ,       235     },
{       66 ,       230     },
{       71 ,       225     },
{       78 ,       220     },
{       84 ,       215     },
{       92 ,       210     },
{       100 ,       205     },
{       109 ,       200     },
{       120 ,       195     },
{       131 ,       190     },
{       143 ,       185     },
{       156 ,       180     },
{       171 ,       175     },
{       187 ,       170     },
{       205 ,       165     },
{       224 ,       160     },
{       245 ,       155     },
{       268 ,       150     },
{       293 ,       145     },
{       320 ,       140     },
{       348 ,       135     },
{       379 ,       130     },
{       411 ,       125     },
{       445 ,       120     },
{       480 ,       115     },
{       516 ,       110     },
{       553 ,       105     },
{       591 ,       100     },
{       628 ,       95      },
{       665 ,       90      },
{       702 ,       85      },
{       737 ,       80      },
{       770 ,       75      },
{       801 ,       70      },
{       830 ,       65      },
{       857 ,       60      },
{       881 ,       55      },
{       903 ,       50      },
{       922 ,       45      },
{       939 ,       40      },
{       954 ,       35      },
{       966 ,       30      },
{       977 ,       25      },
{       985 ,       20      },
{       993 ,       15      },
{       999 ,       10      },
{       1004 ,       5       },
{       1008 ,       0       }
};

void setup() {
  Serial.begin(9600);
}

void loop() {
  short a = 0 ;
  int i;
  float celsius;
  a = analogRead(A1) ;
  for (i=1; i<sizeof(temptable)/(2*sizeof(short)); i++) {
      if ( temptable[i][0] > a){ // calculo interpolação
        celsius = temptable[i-1][1] + (a - temptable[i-1][0]) * (
          (float)(temptable[i][1] - temptable[i-1][1]) /
          (float)(temptable[i][0] - temptable[i-1][0]));
        break;
      }
  }
  Serial.print( a ); // enviando medidas de temperatura para monitor
  Serial.print( " - ");
  Serial.print(celsius);
  Serial.println( " C");
  delay(1000);
}


Visualizaçao do resultado: Visualização da saída do programa no monitor é conforme a figura abaixo:


Blink com o ArduBlock

Esta é uma das sketchs mais simples que podemos esperimentar com o Ardublocks. Faz piscar o led onboard conectado ao pino 13. Como o led está montado onboard dispensa montagens eletrônicas extras, bastando conectar o Arduino na USB do computador.


A sketch correpondente em comandos é:

void setup()
{
  pinMode( 13 , OUTPUT);
}

void loop()
{
  digitalWrite( 13 , HIGH );
  delay( 1000 );
  digitalWrite( 13 , LOW );
  delay( 1000 );
}

Que mais você pode fazer agora:  Experimente trocar os tempos de piscagem do led alterando os valores na funçao delay(). No exemplo original aparece 1000 ms = 1segundo nos dois delays() do led aceso e do led apagado. tente fazer:
  • piscar muito rápido
  • ficar mais tempo aceso do que apagado
  • ficar mais tempo apagado do que aceso


Hello, Monitor!

O que é o  monitor? O monitor é uma ferramenta do software IDE que serve como console do Arduino. O que é console? Console é uma janela de entrada e saida que o permite que você interaja com o programa que você criou para o Arduino. Nesta janela da console serão impressas as mensagens vindas do Arduino e a partir dela serão enviados dados do teclado para o seu programa no Arduino .

Como a prender a utilizá-lo:
  • Abra o Software IDE arduino
  • Digite a sketch abaixo
  • Clique no botao upload para compilar e carregar o Arduino
  • Selcione menu <Tools><Monitor> para abrir monitor
void setup() {
      // initialize serial ports:
        Serial.begin(9600);
      }
        void loop() {
            Serial.println("Hello, Monitor!");
            }

            O que acontece então: A janela do monitor deve se abrir e aparecer a mensagem "Hello, monitor!" repetidas vezes.

            E se der errado: Confira no monitor se a velocidade da serial é 9600 baud conforme a sketch configurou o Arduino.

            O que mais você pode fazer agora: 
            • Experimente trocar o baud rate de 9600 para 115200 e observe se você percebe um aumento da velocidade das mensagens. 
            • Experimente o programa exemplo ASCIItable, selecionando no menu <File><Examples><Communications> e carregue no arduino e abra o monitor para conferir o que acontece.

            Hello, Arduino World!

            O que você precisa para começar a usar o Arduino:
            • um computador
            • software IDE Arduino instalado
            • um arduino com um cabo USB
            Como fazer o primeiro programa:
            • Baixe  e instale o software IDE arduino no seu computador.
            • Conecte o Arduino a uma USB do seu computador.
            • No software,  no menu <tools><board> selecione o seu modelo Arduino.
            • No menu <File><Examples><Basics> selecione o exemplo Blink.
            • No <Tools><Port> selecione a porta serial onde esta conectado o seu Arduino.
            • com o mouse, localize e clique o botão upload para carreghar o programa Blink no Arduino.
            O que acontece então: O programa será compilado e carregado no Arduino e , em seguida será executado. Se tudo estiver instalado e funcionando, você observará na placa um led piscando num frequência determinada pelo programa.

            E se não funcionar: Os problemas mais comuns são:
            • porta selecionada errada
            • tipo de placa arduino selecionada diferente da que está concetada.
            O codigo da sketch do exemplo Blink deve estar aparecendo na area de trabalaho do software Arduino conforme abaixo:

            // the setup function runs once when you press reset or power the board

            void setup() {
              // initialize digital pin 13 as an output.
              pinMode(13, OUTPUT);
            }

            // the loop function runs over and over again forever
            void loop() {
              digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
              delay(1000);              // wait for a second
              digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
              delay(1000);              // wait for a second
            }


            Que mais você pode fazer agora:  Experimente trocar os tempos de piscagem do led alterando os valores na funçao delay(). No exemplo original aparece 1000 ms = 1segundo nos dois delays() do led aceso e do led apagado. tente fazer:
            • piscar muito rápido
            • ficar mais tempo aceso do qeu apagado
            • ficar mais tempo apagado do que aceso

            Arduino para makers

            Este blog foi criado para compartilhar pequenos projetos com arduino numa linguagem voltada para makers sem um formação técnica.