
Introdução
Um resistor carrega 63,2% de um capacitor em 'TC' segundos, sendoTC = R x C
- TC: chamada de constante de tempo e dada em segundos;
- R: resistência elétrica, dada em ohms
- C: capacitância, dada em farads

Experimento
O esboço abaixo funciona porque os pinos do Arduino podem estar em um dos dois estados abaixo, que são eletricamente bem diferentes:- Estado de entrada
- Alta impedância: demanda pouca energia do circuito a ser lidoBom para ler sensores, mas não para acender LEDs
- Estado de saída
- Baixa impedância: pode ser fonte de até 40 mA (polaridade positiva) ou drenar 40 mA (polaridade negativa)Bom para acender LEDs e alimentar outros circuitos, mas não para ler sensores

Algoritmo do esboço do capacímetro
- Ajustar pino de descarga como entrada (de forma que ele não pode descarregá-lo)
- Registrar o horário inicial com millis()
- Ajustar o pino de carga para HIGH
- Averiguar continuamente a tensão no capacitor para saber se já chegou aos 63,2%
- Ao carregar o capacitor, subtrair o horário atual do horário inicial para saber o tempo de carga
- Dividir o tempo em segundos pela resistência em ohms e, assim, obter o valor da capacitância
- Descarregar o capacitor. Para isso:
- Ajustar o pino de carga como entrada
- Ajustar o pino de descarga como saída e lá pôr LOW
- Ler a tensão elétrica para certificar-se de que o capacitor está vazio
- Meia-volta ao início do algoritmo
Código
/* Capacímetro_RC* Paul Badger 2008* Demonstra uso da constante de tempo RC como meio de medir o valor do capacitor** Theory* 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)*/#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#define resistorValue 10000.0F // mude esse valor para o valor do seu resistor// o "F" informa o compilador que trata-se de um ponto flutuanteunsigned long startTime;unsigned long elapsedTime;float microFarads; // variável ponto flutuante para efetuar os cálculosfloat nanoFarads;void setup(){pinMode(chargePin, OUTPUT); // ajuste chargePin como saídadigitalWrite(chargePin, LOW);Serial.begin(9600); // inicializa a comunicação serial para fins de depuração de erros}void loop(){digitalWrite(chargePin, HIGH); // ponha HIGH em chargePinstartTime = millis();while(analogRead(analogPin) < 648){ // 647 = 63.2% de 1023, que corresponde ao fim de escala}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 serialSerial.println(" mS "); // imprima unidade e retorno de carroif (microFarads > 1){Serial.print((long)microFarads); // imprima à saída serialSerial.println(" microFarads"); // imprima unidade e retorno de carro}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 flutuantesnanoFarads = microFarads * 1000.0; // multiplique por 1000 para converter a nanofarads (10^-9 farads)Serial.print((long)nanoFarads); // imprima à saída serialSerial.println(" nanoFarads"); // imprima unidade e retornod de carro}/* descarregue capacitor */digitalWrite(chargePin, LOW); // ponha LOW em chargePinpinMode(dischargePin, OUTPUT); // ajuste dischargePin como saídadigitalWrite(dischargePin, LOW); // ponha LOWwhile(analogRead(analogPin) > 0){ // espere até esvaziar capacitor}pinMode(dischargePin, INPUT); // ajuste de novo o pino para entrada}
olá... preciso falar com vc sobre um sistema que preciso desenvolver.
ResponderExcluirGostaria que entrasse em contato comigo por favor.
meu email é djgera@ig.com.br
abs
Cara voce que gosta de C# vai gostar de saber desta noticia, a SparkFun.com esta vendendo uma placa chamada FEZ Domino que roda um micro-framework .NET e que voce pode usar o C# express Free para programar, é uma copia do Arduino.
ResponderExcluirE mais Pin e Shield compativel com o Arduino.
Ate mais Armando (armando.camara@gmail.com)
Boa noite amigo,venho acompanhando seu site a um bom tempo e sempre aprendo coisas novas com você,mas uma coisa que me interessa muinto e não consigo achar em lugar nenhum,(pelo menos não para meu nivel;novato)é acional leds e relés por contrle remoto,e principalmente como fazer o arduino"aprender"os botoes do contrle.
ResponderExcluirTa ai a dica que deve interessasr a muitos...
continue com seu excelente trabalho.
Att:Murilo M. Ag.
Ola, eu fiz a versao nacional da placa FEZ, que roda C# e tem um SOQUETE para SHIELDS ARDUIN. Se tiverem interesse, entre em contato comigo.
ResponderExcluirhttp://www.basic4ever.com/net.htm
Diga que me acharam no ARDUINO BRASIL, que baixo o preço de R$450,00 para R$350,00
T+
Miguel
Este comentário foi removido pelo autor.
ResponderExcluirOla! comercializamos a placa compativel com arduino com garantia e assistencia permanente. Visite o nosso site: www.empretecnet.com.br
ResponderExcluirEsse projeto sim é muito bom!
ResponderExcluirNa verdade, eu vou até montar agora a uma da manha, pq fiquei muito curioso pra ver se funciona de verdade, se funcionar acho que vou até montar um pra mim com plaquinha e tudo!
ResponderExcluirOdeio ler capacitores!