Pular para o conteúdo principal

Capacímetro com Arduino




Através da compreensão das equações de carga e descarga de capacitores faremos a montagem de um protótipo de capacímetro com uso do microcontrolador Arduino UNO. 

Basicamente pode-se afirmar que após a constante de tempo t (tau) = R.C carrega-se 63,2% da carga total do capacitor. A partir desta premissa pode-se encontrar o valor do capacitor utilizando-se do tempo discorrido e um resistor base para cálculo.


Caso você já tenha algum conhecimento de eletrônica ou arduino poderá ir diretamente ao desenvolvimento do capacímetro.

Índice do Projeto:

Como a pilha, o capacitor possui dois terminais. Dentro do capacitor, os terminais conectam-se a duas placas metálicas separadas por um dielétrico. O dielétrico pode ser ar, papel, plástico ou qualquer outro material que não. conduza eletrecidade e impeça que as placas se toquem.
A capacitância, medida em Farads, depende da área das placas (A) e a distância entre elas (d) e da constante dielétrica (k). Em outras palavras, quanto maior a área (A) das armaduras, maior será a capacitância e vice versa. Quanto menor a distância (d) entre as armaduras, maior será a capacitância e vice versa. Quanto maior for a constante dielétrica K do isolante (dielétrico) maior será a capacitância e vice versa. Isso pode ser visto na equação 1:





onde “C” é a capacitância medida em Farads; 
“K” é a constante dielétrica; 
“E” é a permissividade do vácuo 8,84 x 10-12 F / m; 
“A” é a área das placas em m2; 
d” é a distância entre as placas em metros. 

Geralmente, as placas condutoras de um condensador são separados por ar ou algum tipo de material de isolamento, em vez de vácuo do espaço livre.
Por exemplo, se o material dielétrico for o ar o “K” será 1,0009. Se o dielétrico for o vácuo será de 1. Se o material do dielétrico for, em outro caso, porcelana, o K será de 6[1]. 






Em um circuito RC ideal simplificado (figura 2) — considerando a resistência interna da fonte de tensão como nula e desprezando-se a resistência dos fios condutores usados no circuito — ao aplicarmos uma tensão através de um resitor (R1), a um capacitor (C), este se carrega com um valor que depende do intervalo de tempo em que se desenvolve o processo.







Estando o capacitor inicialmente descarregado (Vc = 0 Volts, sendo Vc a tensão no capacitor), em t = 0 segundos, fechamos a chave S do circuito. Neste momento a corrente inicial do circuito(em Amperes) é





a medida que o capacitor se carrega, sua voltagem Vc  aumenta e a diferença de potencial através do resistor Vr aumenta ocorrendo em consequência uma diminuição da corrente no circuito. No entanto, a soma dessas duas voltagens(Vr e Vc) permanece constante e igual à força eletromotriz da fonte(Vt) :




depois do tempo de carga, o capacitor fica completamente carregado, a corrente torna-se nula e a diferença de potencial no resistor é igual a zero. Dessa forma a ddp final nos terminais do capacitor é igual à f.e.m. da bateria (Vt = Vc).


Equações De Carga E Descarga Do Capacitor
A equação que descreve  matematicamente a carga de um capacitor é:        





Sendo Vc(t) a tensão total do capacitor dada em volts, em função do tempo dado em segundos; Vcc a tensão da fonte também dada em volts; “e” é o número de Euller equivalente aproximadamente a 2,7128; “t” o tempo dado em segundos; R o valor do resistor em Ohms e C o valor do capacitor em Farads.
E a equação que descreve a descarga do capacitor é:





Onde  t = R . C  é a constante de tempo; sendo R o valor do Resistor em Ohms e C o valor do capacitor em Farads. A constante (t) apresentará o tempo de aproximadamente 63,2% da carga total do capacitor em segundos.

Por exemplo se t = 0s e substituirmos na equação 3 da tensão em C resultará zero e na equação da tensão na resistência resultará Vcc.
Teoricamente, de acordo com a equação 3, a carga total só acontecerá após um tempo infinito, mas na prática  bastam 5 constantes de tempo para considerarmos  o capacitor totalmente carregado (Para 5 constantes de tempo a tensão atingirá aproximadamente  99% de Vcc(tensão da fonte), ou seja, 99% da carga total possível). Veja o gráfico de carga e descarga na Figura 3. Observa-se que na constante de tempo(R.C) igual a 1 a carga do capacitor é de aproximadamente 63,2%. Este conhecimento será utilizado na produção do software de nosso capacímetro.

O comportamento da corrente no circuito, é descrito pela equação :



Onde IMax, em ampéres, pela simples aplicação da lei de Ohm, é Vcc/R .



 
  


2.4 Exemplo De Carga De Capacitor
Vejamos agora um exemplo para confirmar os cálculos. Utilizaremos para tanto o circuito modelo da figura 4:



 










Após uma constante de tempo RC, o capacitor carrega com 63,2% da tensão da fonte.( 63,2% de V ).


t = R . C  
t = 100.103. 100.10--6 =10000.10--3
t = 10 segundos


Assim, após 10 segundos o capacitor terá uma carga de 63,2% de V) e após 5.R.C, o capacitor está praticamente carregado com a tensão da fonte (99,3% de V).

t = 5.R.C = 5. (100.103. 100.10--6)
t = 50000.10--3 segundos
t = 50 segundos

Sendo “t” o tempo total de carga total ou aproximadamente 99% da tensão total fornecida, em nosso exemplo V=12volts.
Nota-se que A função do resistor R é controlar o tempo de carga do capacitor. O tempo de carga depende diretamente do produto R.C.
Observemos a tabela da figura 4 que nos permite acompanhar a evolução da carga no capacitor de nosso exemplo:






Para calcularmos a descarga do capacitor em nosso circuito modelo utilizaremos a equação 4. Observemos os resultados na tabela da figura 6:







Observemos o desenvolvimento dos gráficos de carga e descarga do capacitor de nosso circuito exemplo através da figura 7:








O protótipo mostrará o valor do capacitor a ser medido em um LCD 16x2. Para tanto utilizamos duas protoboards para que os circuitos possam ser mais facilmente compreendidos.
Um resistor carrega 63,2% de um capacitor em t segundos, sendo

t = R . C
·       t : chamada de constante de tempo e dada em segundos;
·       R: resistência elétrica, dada em ohms
·       C: capacitância, dada em farads
Isto é, a tensão elétrica no capacitor após t segundos de carga é igual à 63,2% da tensão elétrica de carga. Na prática, pode-se considerar que o capacitor carrega-se totalmente após 5 constantes de tempo.
A Figura 8 mostra o diagrama esquemático simplificado do capacímetro em conexão com o arduíno.
 



O gráfico da figura 9 permite exemplificar a carga do capacitor em função do tempo.





O Ambiente De Desenvolvimento Do  Arduino
O código deve ser digitado e carregado no Arduino através de sua interface própria. O Software de desenvolvimento Arduino é bastante fácil e intuitivo de se utilizar, não havendo qualquer nível de dificuldade. O primeiro passo consiste em efetuar o download do respectivo software de desenvolvimento, através do site oficial Arduino (www.arduino.cc).



 


Após o download e a instalação do software segue-se os passos:
  1. Montagem do protótipo no protoboard sem conexão de energia para que não se danifique o arduíno ou os componentes;
  2. Digita-se o código em seu ambiente próprio (figura 11);
  3. Compila-se e o código (figura 12). Neste momento erros de sintaxe e lógicos serão apontados pelo compilador e devem ser corrigidos.
  4. Faz-se o upload do código compilado (figura 13) sem erros no microcontrolador para ser executado.



 






 
 O CÓDIGO NO ARDUINO
O código arduíno faz uma adaptação da equação de tempo (t = RC) para C = t / R.

A chave para entendimento do código está no laço While que efetua a leitura da porta analógica do controlador até que este tenha atingido 63,2% da carga

while(analogRead(analogPin) < 648) {}

A leitura da porta analógica leva a que um valor compreendido entre 0 e 5 V, como a porta possui um conversor A/D este valor de tensão apresentar-se-á como um inteiro compreendido entre os valores (int) 0 e 1023.

O valor verificado no laço while (648)  corresponde exatamente a 63,2% de 1023.

Coleta-se o tempo discorrido até esse ponto (variável elapsedTime) e efetua-se o cálculo do valor do Capacitor

microFarads = ((float)elapsedTime / resistorValue *  1000).

A multiplicação por 1000 é para que haja a conversão do tempo de milisegundos para segundos.


A melhor compreensão deste segmento do código pode ser obtida através da observação do fluxograma da figura 16:









Abaixo o código completo a ser carregado no microcontrolador Arduino:

/* *************************************************** * 
  CAPACÍMETRO COM ARDUINO UNO


 Um capacitor carregar-se-á, via um resistor, em uma
 *  constante de tempo, definida como TC segundos onde
 *    TC = R * C
 *
 *    TC = constante de tempo expressa em segundos
 *    R = resistência em ohms
 *    C = capacitância em farads (1 microfarad (ufd) = .0000001 farad = 10^-6 farads )
 *
 *  A tensão no capacitor em uma constante de tempo
 *  é definida como 63.2% da tensão de carga.
 *
 *  ***************Montagem do hardware********************
 *  O capacitor a testar fica entre o ponto comum e o terra
 *  (não se esqueça: ligue o + do capacitor ao ponto comum)
 *  O resistor a testar fica entre o pino de carga
 *  (chargePin) e o ponto comum
 *  Um resistor de 220 ohms entre o pino de descarga
 *  (dischargePin) e o ponto comum
 *  Um fio entre o ponto comum e o pino analógico
 *  (analogPin, entrada A/D)
 */

#include <LiquidCrystal.h> //Inclui a biblioteca do LCD

LiquidCrystal lcd(9, 8, 5, 4, 3, 2); //Configura os pinos do Arduino para se comunicar com o LCD

#define analogPin      0        // pino analógico a medir tensão no capacitor
#define chargePin      13      // pino a carregar o capacitor
#define dischargePin   11    // pino a descarregar o capacitor

// valor do resistor base, o o "F" informa o compilador
// que trata-se de um ponto flutuante
#define resistorValue  10000.0F  

unsigned long startTime;
unsigned long elapsedTime;
float microFarads;                // variável ponto flutuante para efetuar os cálculos
float nanoFarads;

//Inicia uma variável inteira (temp), para escrever no LCD a //contagem do tempo
int  temp;

void setup()
{

    //Inicia o LCD com dimensões 16x2(Colunas x Linhas)
   lcd.begin(16, 2);

    //Posiciona o cursor na primeira coluna(0) e na primeira  
   // linha(0) do LCD
   lcd.setCursor(0, 0);

   lcd.print("FADEP-CapEdu 1.0"); //Escreve no LCD !"

   //Posiciona o cursor na primeira coluna(0) e na segunda  
   //linha(1) do LCD
   lcd.setCursor(0, 1);
 
   // ajuste chargePin como saída
   pinMode(chargePin, OUTPUT);          
   digitalWrite(chargePin, LOW); 

    // inicializa a comunicação serial para fins de depuração      
    //de erros
   Serial.begin(9600);           
}

void loop()
{

    lcd.setCursor(0, 1);
  
   // setar HIGH em chargePin
   digitalWrite(chargePin, HIGH);
   startTime = millis();

    // 647 = 63.2% de 1023, que corresponde ao fim de  
    // escala
    while(analogRead(analogPin) < 648)
    {     
          //Continua lendo a porta Analógica até que atinja os
          // 63,2% de carga
    }
   elapsedTime= millis() - startTime;
     
    // converta milissegundos a segundos ( 10^-3 ) e
    //farads a microfarads ( 10^6 ), líquidos 10^3 (1000) 
    microFarads = ((float)elapsedTime / resistorValue) *
                                1000;  
    Serial.print(elapsedTime);       // imprima à saída serial
    Serial.println(" mS    ");       // imprima unidade

    if ((long)microFarads > 1)
    {
          Serial.print((long)microFarads);  // imprima na  serial
          Serial.println(" microFarads");   // imprima unidade
         
          lcd.setCursor(0, 1);
          lcd.print(microFarads);
          lcd.setCursor(8, 1);
          lcd.print("microF");
    }
    else
    {
          // se o valor for menor que um microfarad, converta
          // a nanofarads (10^-9 farad).
          // trata-se de um artifício para que Serial.print imprima
          //pontos flutuantes

          // multiplique por 1000 para converter a nanofarads
         //(10^-9 farads)
          nanoFarads = (microFarads * 1000.0);                
        
         Serial.print((long)nanoFarads);         // imprima à saída
          Serial.println(" nanoFarads");          // imprima unidade
         
          lcd.setCursor(0, 1);
          lcd.print((long)nanoFarads);
          lcd.setCursor(8, 1);
          lcd.print("nanoF");
    }

    /* descarregue capacitor  */
      digitalWrite(chargePin, LOW);    //  LOW em chargePin
      pinMode(dischargePin, OUTPUT);  // ajuste  como saída
      digitalWrite(dischargePin, LOW);          // LOW

      // espere até esvaziar capacitor
      while(analogRead(analogPin) > 0)
     {  
      }
   
     // ajuste de novo o pino para entrada
     pinMode(dischargePin, INPUT);  
 }
  
Entendendo O Código Arduino
Em nosso código do capacímetro utilizaremos algumas das muitas funções do escopo do Arduíno. Abaixo segue uma explicação sintética bem como exemplo de sua utilização para que o entendimento do código se faça de forma absoluta:

Serial.begin(int baud rate)
Descrição: Instrução necessária para iniciar a comunicação série, permitindo definir qual a “baud rate” da comunicação. Os valores de velocidade de comunicação mais comuns para comunicação com um computador são: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 e 115200 (No entanto podem definir-se outros valores).

Sintaxe:  Serial.begin( int baud rate);

Exemplo:

(1) int leitura_serie=0; //Declaração de uma variável do tipo integer com o nome “leitura_serie”, inicializada com o valor “0”
(2) void setup() {
(3) Serial.begin(9600); // Permite a inicialização da comunicação Série
(4) }
(5) void loop(){
(6) if(Serial.available()>0) // Condição if que verifica se estão sendo recebidos dados por Série
(7) leitura_serie=Serial.read(); // Caso esteja-se recebendo dados por série, o seu valor é guardado na variável integer “leitura_serie”
(8) }
(9) }

Serial.read()
Descrição: Permite a leitura dos dados recebidos por série. Esta função retorna o valor “-1” se não houver dados disponíveis.

Sintaxe:  Valor recebido (int) = Serial.read();

Exemplo:

(1) int leitura_serie=0; ; //Declaração de uma variável do tipo integer com o nome “leitura_serie”, inicializada com o valor “0”
(2) void setup() {
(3) Serial.begin(9600); // Permite a inicialização da comunicação Série
(4) }
(5) void loop(){
(6) if(Serial.available()>0) ) // Condição if que verifica se estão a ser recebidos dados por Série
(7) leitura_serie=Serial.read(); // Caso se estejam a receber dados por série, o seu valor é guardado na variável integer “leitura_serie”
(8) }
(9) }

pinMode()
Descrição: Ao recorrer a esta instrução, é possível configurar o modo de comportamento de um determinado pino. Possibilitando assim defini-lo como input ou output, esta definição normalmente é efectuada recorrendo à função “void setup()”.

Sintaxe: pinMode(Número do pino, Modo);

O “Modo” acima descrito pode ser definido da seguinte forma:
  • “INPUT”
  • “OUTPUT”

Exemplo:
 (1) int botao=3,val; // Declaração de uma variável do tipo integer, com o nome “botao” inicializada com o valor “3” e de uma variável do mesmo tipo com o nome “val” não inicializada com nenhum valor
(2) void setup() {
(3) Serial.begin(9600); // Permite a inicialização da comunicação Série
(4) pinMode(botao,INPUT); // Permite definir o pino 3 como “INPUT”
(5) pinMode(13,OUTPUT); // Permite definir o pino 13 como “OUTPUT”
(6) }
(7) void loop(){
(8) val=analogRead(botao); // Permite a leitura analógica do valor do pino 3 atribuindo o seu valor à variável “val”
(9) if(val>=500) // Ciclo if que testa a condição – “val>=500” (maior ou igual a 500)
(10) digitalWrite(13,HIGH); // Se a condição for verificada, é atribuído ao pino digital 13 a condição “HIGH” (5 V)
(11) }
(12) }

digitalWrite()
Descrição: Possibilita, nos pinos configurados como output através da instrução “pinMode”, estabelecer a saída dos respectivos pinos com o valor lógico 1 (HIGH – 5 V) ou com o valor lógico 0 (LOW – 0V)

Sintaxe: digitalWrite(Número do pino, Modo);

O “Modo” acima descrito, pode ser definido como:
  • “HIGH”
  • “LOW”

Exemplo:
 (1) int botao=3,val; // Declaração de uma variável do tipo integer, com o nome “botao” inicializada com o valor “3” e de uma variável do mesmo tipo com o nome “val” não inicializada com nenhum valor
(2) void setup() {
(3) Serial.begin(9600); // Permite a inicialização da comunicação Série
(4) pinMode(botao,INPUT); // Permite definir o pino 3 como “INPUT”
(5) pinMode(13,OUTPUT); // Permite definir o pino 13 como “OUTPUT”
(6) }
(7) void loop(){
(8) val=analogRead(botao); // Permite a leitura analógica do valor do pino 3 atribuindo o seu valor à variável “val”
(9) if(val>=500) // Ciclo if que testa a condição – “val>=500” (maior ou igual a 500)
(10) digitalWrite(13,HIGH); // Se a condição for verificada, é atribuído ao pino digital 13 a condição “HIGH” (5 V)
(11) }
(12) }

digitalRead()
Descrição: Possibilita a leitura de uma entrada digital específica, retornando um valor no formato integer (int). Se obtivermos um valor de retorno de “1”,  estamos perante uma leitura do tipo “HIGH” (valor lógico 1). Se tal não se  verificar, e tivermos um valor de retorno igual a “0”, estamos perante uma  leitura do tipo “LOW” (valor lógico 0).

Sintaxe: Variável do tipo integer = digitalRead(Número do pino);

Exemplo:

(1) int botao=3,val; // Declaração de uma variável do tipo integer, com o nome “botao” inicializada com o valor “3” e de uma variável do mesmo tipo com o nome “val” não inicializada com nenhum valor
(2) void setup() {
(3) Serial.begin(9600); // Permite a inicialização da comunicação Série
(4) pinMode(botao,INPUT); // Permite definir o pino 3 como “INPUT”
(5) pinMode(13,OUTPUT); // Permite definir o pino 13 como “OUTPUT”
(6) }
(7) void loop(){
(8) val=digitalRead(botao); // Permite a leitura do valor do pino 3 digital atribuindo o seu valor à variável “val”
(9) if(val==1) // Ciclo if que testa a condição – “val>=500” (maior ou igual a 500)
(10) digitalWrite(13,HIGH); // Se a condição for verificada, é atribuído ao pino digital 13 a condição “HIGH” (5 V)
(11) }
(12) else{ // Caso a condição do ciclo if não se verifique
(13) digitalWrite(13,LOW); // Se a condição não for verificada, é atribuído ao pino digital 13 a condição “LOW” (0 V)
(14) }
(15) }


analogRead()
Descrição: Possibilita a leitura do valor analógico do pino especificado, com um conversor A/D possuindo uma resolução de 10 bits. O que leva a que um valor compreendido entre 0 e 5 V, esteja compreendido entre os valores inteiros (int) 0 e 1023.

Sintaxe: Variável do tipo integer = analogRead(Número do pino);

Exemplo:

(1) int botao=3,val; // Declaração de uma variável do tipo integer, com o nome “botao” inicializada com o valor “3” e de uma variável do mesmo tipo com o nome “val” não inicializada com nenhum valor
(2) void setup() {
(3) Serial.begin(9600); // Permite a inicialização da comunicação Série
(4) pinMode(botao,INPUT); // Permite definir o pino 3 como “INPUT”
(5) pinMode(13,OUTPUT); // Permite definir o pino 13 como “OUTPUT”
(6) }
(7) void loop(){
(8) val=analogRead(botao); // Permite a leitura analógica do valor do pino 3 atribuindo o seu valor à variável “val”
(9) if(val>=500) // Ciclo if que testa a condição – “val>=500” (maior ou igual a 500)
(10) digitalWrite(13,HIGH); // Se a condição for verificada, é atribuído ao pino digital 13 a condição “HIGH” (5 V)
(11) }
(12) }


analogWrite()
Descrição: Possibilita a utilização dos pinos PWM (Pulse Width Modulation) da placa Arduino. O sinal PWM mantém-se até ser modificado através de uma outra instrução que afete esse pino, a frequência do sinal PWM criado é de  490 Hz

Sintaxe: analogWrite(Número do pino, valor);

O “valor” referido anteriormente varia entre 0 (sempre desligado), até ao valor 255 (que representa um sinal de 5 V constante).

Exemplo:

(1) int botao=3,val; // Declaração de uma variável do tipo integer, com o nome “botao” inicializada com o valor “3” e de uma variável do mesmo tipo com o nome “val” não inicializada com nenhum valor
(2) void setup() {
(3) Serial.begin(9600); // Permite a inicialização da comunicação Série
(4) pinMode(botao,INPUT); // Permite definir o pino 3 como “INPUT”
(5) pinMode(13,OUTPUT); // Permite definir o pino 13 como “OUTPUT”
(6) }
(7) void loop(){
(8) val=analogRead(botao); // Permite a leitura analógica do valor do pino 3 atribuindo o seu valor à variável “val”
(9) if(val>=500) // Ciclo if que testa a condição – “val>=500” (maior ou igual a 500)
(10) analogWrite(9,255); // Instrução com a mesma função que  “digitalWrite(9,HIGH)”
(11) }
(12) else{
(13) analogWrite(9,0); // Instrução com a mesma função que “digitalWrite(9,LOW)”
(14) }
(15) }

millis()
Descrição: Possibilita o retorno da quantidade de tempo, em milisegundos na forma de uma variável do tipo “unsigned long”. O valor retornado representa o tempo que, passou desde que o programa atual começou a ser executado.

Sintaxe: unsigned long tempo = millis();

Exemplo:
 (1) unsigned long tempo; // Declarada uma variável do tipo unsigned long com o nome “tempo”
(2) void setup() {
(3) (…..)
(4) }
(5) void loop(){
(6) tempo = millis(); // Atribui à variável “tempo” o valor em milisegundos desde que o sketch actual começou a ser executado
(7) }

delay (milisegundos)
Descrição: Possibilita efectuar uma pausa ao programa em execução, por uma quantidade de milisegundos especificada. Útil para manter um estado durante uma certa quantidade de tempo.

Sintaxe: delay(tempo que deseja efectuar a pausa – ms);

Exemplo:
 (1) int led_pin=13; // Declaração de uma variável do tipo integer com o nome
“led_pin”, sendo-lhe atribuída o valor “13”
(2) void setup() {
(4) pinMode(led_pin,OUTPUT); // Permite definir o pino 13 como “OUTPUT”
(5) Serial.begin(9600); // Permite a inicialização da comunicação Série
(6) }
(7) void loop(){
(8) digitalWrite(led_pin,HIGH); // É atribuído ao pino digital 13 a condição “HIGH”
(5 V)
(9) delay(200); // É efectuado um delay de 200 ms, antes de efectuar a próxima instrução
(10) digitalWrite(led_pin,LOW); // É atribuído ao pino digital 13 a condição “LOW”
(0 V) (11) delay(600); // É efectuado um delay de 600 ms, antes de efectuar a próxima instrução, neste caso a função “void loop()” recomeça
(12) }

O Hardware Do Capacímetro
A montagem do protótipo foi efetuada em duas protoboards por questões didáticas. Assim, os circuitos do LCD e do Capacímetro ficam mais claros.

Lista De Componentes Necessários:
·       Arduino Uno (Rev3)          
·       LCD screen tipo Caracter; pinos 16x2
·       R1  Potenciômetro - 16mm; Linear; 10kΩ
·       R2  10k Ω Resistor          
·       R3  220 Ω Resistor


O Arduino Uno é uma placa microcontroladora baseada no chip ATmega328. Ele tem 14 pinos digitais de input/output, 6 entradas analógicas, um conector USB para alimentação via PC e carga de códigos, conector de carga (jack power) para alimentação via bateria e um botão de reset.





LCD
Atenção especial deve ser dada as conexões entre o Arduíno e o LCD (figuras 18, 19 e 20):






Pinagem Arduíno
Pinagem LCD
2
14
3
13
4
12
5
11
8
6
9
4
5V
15
GND
16
GND
1
5V
2
      Figura 20. Tabela 3. As conexões do LCD




Potenciômetro
O potenciômetro em nosso protótipo é utilizado para realizar o ajuste de contraste do LCD através da conexão do terminal base do potenciômetro (figura 21) ao pino 3 (V0) do LCD (figura 21).











Alimentação
O placa microcontrolada Arduíno permite a alimentação via bateria, mas em nosso caso usaremos a conexão via USB com o PC para que possamos demonstrar a compilação e a carga do código.


A Montagem em Protoboards
O layout completo das conexões pode ser observado na figura abaixo:





Depuração
Através do monitor do Arduíno podemos obter o tempo em milisegundos e a capacitância calculada, assim podemos ilustrar alguns valores como os da tabela da figura 28.







Esses valores são mostrados no Serial Monitor graças ao trecho do código fonte que imprime na saída serial:

Serial.print(elapsedTime);
Serial.print((long)microFarads);

Em caso de valores inferiores a microFarads:

Serial.print(elapsedTime);
Serial.print((long)nanoFarads);

No caso da figura 27, por exemplo, temos que 11 milisegundos se passaram até a carga de 63,2% do capacitor fosse atingida, ou seja, 11 milisegundos é a nossa constante de tempo. Assim , lembrando da equação:

t = R . C   ou  C = t /  R
Calculamos o valor do capacitor. Lembrando que o tempo deve ser dados em segundos, por isso a multiplicação por 1000, uma vez que o valor fornecido pelo arduino nos é dado em milisegundos:

C = (elapsedTime / resistorValue) *  1000;

E encontramos C = 1000 nF.

Observemos agora a tabela 4 da figura 25 que contém outros valores obtidos experimentalmente em nosso protótipo através da simples substituição do capacitor a ser medido e que podem ainda ser comparados através da aferição com Capacímetro comercial (figura 29):

Valor Nominal
 tempo (ms)
Valor Medido
(na unidade nominal )
Leituras
1000 nF
11
10
10
1100
1000
1000
33 µF
355
356
354
35.4
35.5
35.4
100 µF
1065
1064
1063
106.5
106.5
106.3
220 µF
2111
2109
2108
211
210.9
210.7
 470 µF
5036
5038
5026
503.6
503.8
502.6
1000 µF
10037
10035
10007
1003
1003
1000
Figura 28. Tabela 4. Amostragem de valores obtidos experimentalmente.


Valor Nominal
Maior valor Medido
no Protótipo
Aferição
1000 nF
1100 nF
1103 nF
33 µF
35.4 µF
35 µF
100 µF
106.5 µF
138.3 µF
220 µF
211 µF
276.5 µF
 470 µF
503.8 µF
450 µF
1000 µF
1003 µF
1287 µF
Figura 29. Tabela 5. Aferições com Capacímetro comercial [15].




REFERÊNCIAS BIBLIOGRÁFICAS
ARDUINIANA. (2009). "Arduino software jewellry and wisdom." http://arduiniana.org/. Acessado em 8 maio de 2014.
ARDUINO.http://www.arduino.cc. Acessado em 8 de maio de 2014.
GUSSOW, Milton. Eletricidade Básica. Ed.Pearson Makron Books, São Paulo. 1997.
LABORATÓRIO DE GARAGEM. http : // labdegaragem . com / profiles/blogs/tutorial-lcd-com-arduino. Acessado em 1 de abril de 2014.
MCROBERTS, Michael. Arduino Básico. Ed.Novatec, São Paulo-SP. 2011.
RIZZONI, Giogio. Fundamentos de Engenharia Elétrica. Bookman Editora, Porto Alegre,RS, 2013.
SADIKU, Matthew; ALEXANDER, Charles. Fundamentos de Circuitos Elétricos. AMGH Editora. Porto Alegre, RS. 2013.
SPARKFUN. https: // www.sparkfun.com / datasheets / LCD / ADM1602K-NSW-FBS-3.3v.pdf. Acessado em 8 maio de 2014.
TORRES, Gabriel. Eletrônica. Novaterra Editora, Rio de Janeiro, RJ. 2012.





[1] Tabela completa de constantes dielétricas podem ser encontradas em http:// www. foz. unioeste. br/~lamat/ downmateriais/materiaiscap18.pdf
[2] Fonte da Imagem: http : // www. Electronics –tutorials .ws/ capacitor / cap_1.html
[3] Fonte da Imagem: Instituto Federal de educação IN: http://dc372.4shared.com/doc/PccZGHTo/preview.html
[4] Gráficos produzidos com Microsoft Excel 2007 são meramente ilustrativos não sendo confiáveis em precisão matemática.
[5] Fonte da Imagem:http://playground.arduino.cc
[6] Arduino versão 1.0.5-r2 (www.arduino.cc)
[7] Fonte da Imagem: http://www. Techtudo . com . br / noticias / noticia / 2013/10/ o-que-e-um-arduino-e-o-que-pode-ser-feito-com-ele.html
[8] Fonte da Imagem : http:// pt.wikipedia. org/wiki/Arduino# mediaviewer / Ficheiro: Arduino - uno- perspective-transparent. png
[9] Fonte: https: // www.sparkfun.com / datasheets / LCD / ADM1602K-NSW-FBS-3.3v.pdf

[10] Fonte da imagem : http : //www. engineersgarage.com / electronic-components/16x2-lcd-module-datasheet
[11] Imagem adaptada do original em http: / /www . dreaminc. com.br / sala_de_aula/7a-resistencia-eletrica/
[12] Imagem adaptada do original em http : // adriandavidm. blogspot.com.br / 2010_08_01_archive.html
[13] Prototipagem feita no software Fritzing Versão Beta 0.8.7
[14] Esquemático feito no software Fritzing Versão Beta 0.8.7
[15] As aferições foram feitas com o Capacímetro HIKARI modelo HX-110.

Comentários

Postagens mais visitadas deste blog

Transistor PUT

Vamos continuar nossos estudos sobre transistores conhecendo agora o Transistor de Unijunção Programável ou PUT. Sua função mais primitiva é gerar uma corrente de pulsos. Vamos fazer uma lista de materiais e montar dois circuitos simples usando o PUT para que você veja isso na prática e possa comparar seu funcionamento com os transistores NPN e PNP. Experimento 10.1 Lista de Material - Resistores de 20K e 100K - Capacitor eletrolítico 0,01µF - LED - 2n6027 transistor PUT - Fonte de 12 V Em nosso circuito final faremos um um led ficar piscando intermitentemente. Antes de montá-lo vamos entender o transistor programável de unijunção (PUT) e montar um circuito teste.   Observe no circuito o símbolo: Ele indica que aquele ponto deve ser ligado ao Terra ou Ground, ou simplesmente ao pólo negativo da bateria. Muitas vezes utilizado para diminuir o número de linhas do circuito para que o desenho não fique visualmente muito poluído. Eis agora , ...

Circuitos Integrados

O Circuito Integrado ou abreviadamente CI, é um dispositivo eletrônico que reúne diversos componentes em uma única peça e executa diversas tarefas avançadas. No entanto, se você pegar o CI de um computador, por exemplo,  e remover sua carcaça, não verá componentes comuns. Ocorre que os atuais CIs não utilizam componentes como aprendemos até agora. Tais componentes são grandes e resultariam em um CI enorme. Dê uma olhada neste CI. Eles são assim por dentro:  Neste capítulo veremos CIs que implementam funções lógica como as que estudamos nos capítulos anteriores.  Agora de uma olhada nessas duas figuras abaixo: O que você está vendo acima são dois  Circuitos Integrados  ou CI. Eles têm esse nome porque  Integram  em uma única peça funções lógicas. Na primeira imagem (7408) repare que os terminais dos componentes correspondem a 4 portas AND, enquanto a segunda figura (7432) tem representadas 4 portar OR. Os outros pinos são o ter...

Eletrônica Digital :Álgebra de Boole

George Boole (1814-1864), matemático e filósofo britânico, no século XIX investigou as leis fundamentais das operações da mente humana ligadas ao raciocínio e criou a Álgebra  Booleana, base da atual aritmética computacional. Enquanto que a álgebra tradicional opera com relações quantitativas, a álgebra de Boole opera com relações lógicas. Enquanto que na álgebra tradicional as variáveis podem assumir  qualquer valor, na álgebra booleana, as variáveis, aqui denominadas por variáveis binárias, apenas podem assumir um de dois valores binários, “ 0”  ou “ 1” . Estes valores binários não exprimem quantidades, mas apenas, e somente, estados do sistema. Vamos simplificar isso. Dê uma olhada no circuito abaixo. Nele existem quatro interruptores e uma lâmpada. Quando essa lâmpada irá acender? Ora, ela só irá acender quando todos os interruptores estiverem ligados. Neste circuito cada interruptor só pode apresentar uma de duas posições: ligado ou desligado. Ago...