Pular para o conteúdo principal

Desafio da semana de 04/05 a 09/05. Carga de um circuito RC com Arduino

Carregamento e Descarregamento 
de um Capacitor


O desafio consiste na criação de um circuito semelhante a um nobreak, utilizando um capacitor de 1 µF. O circuito acenderá um LED vermelho quando o capacitor estiver totalmente carregado, e quando o capacitor descarregar totalmente um LED verde acenderá. Para que possamos acender e apagar um LED precisaremos utilizar formulas para descobrirmos o tempo de descarregamento do Capacitor. 
Para isso iremos ver 3 fórmulas que nos proporcionará o tempo em segundos de descarga. A primeira fórmula que utilizaremos servirá para descobrir a constante de tempo:
T = Contante de tempo em segundos.
R = Resistência em ohms.
C = Capacitância total do Capacitor em Farads.

As outras duas fórmulas são derivações da formula principal (T = R X C), onde respectivamente uma servirá para descobrirmos o valor da resistência e a outra para descobrirmos a capacitância:
  

Para a montagem do circuito, utilizamos os seguintes componentes:
1 - Interruptor;
4 - Resistores: três de 100 Ω e um de 1 MΩ;
1- Capacitor polarizado de 1 µF;
2 - LEDs: 1 Verde e 1 Vermelho;

Vamos dividir o desafio em duas partes. A primeira parte é a montagem do circuito onde iremos explicar, passo a passo, a montagem para que o capacitor carregue e descarregue corretamente. A segunda parte é a criação do código que será responsável pela leitura de carga e descarga do Capacitor.

A montagem do Circuito:


Passo 1: Primeiramente devemos adicionar o interruptor na protoboard e em seguida ligar um resistor (1MΩ) no terminal 2 do interruptor. Após ter feito isso, deve-se ligar um outro resistor de modo que ambos formem um ângulo de 90º. Seu circuito deverá ficar dessa forma:



Passo 2: Neste passo devemos adicionar o Capacitor Polarizado com sua perna negativa posicionada no terminal 2 do resistor de 100Ω e conectar sua perna positiva no polo positivo. Após ter feito isso deve-se fazer uma ligação para uma porta analógica (A0 foi a escolhida).


Passo 3: Para finalizar o circuito, devemos adicionar o Terminal 2 dos resistores no polo negativo e em seguida conectar os LED'S no terminal 1. Após ter feito isso, escolha duas portas digitais (13 e 12 foram as escolhidas) para conectar os LED'S.



A criação do Código:

int VR = analogRead(A0);//Lê a porta A0


float VrVolts =(VR*(5.0/1023.0)); //Transforma em volts

A variável VR irá servir para armazenar os valores lidos pela porta A0. 
A variável VrVolts irá servir para armazenar o valor da tensão em volts.
A equação VrVolts =(VR*(5.0/1023.0)); irá transformar em volts o valor lido pela porta analógica. O valor 5.0 é a tensão total do circuito e 1023 corresponde ao valor máximo de 10 bits quando a voltagem é 5 volts.
A equação rc servirá para descobrir o intervalo de tempo necessário para carregar e descarregar o Capacitor

if (VcVolts < 4.99 ){ //Carregando/Descarregado
         digitalWrite(13, HIGH);
         digitalWrite(12, LOW);
  }else{
  digitalWrite(13, LOW);       
  digitalWrite(12, HIGH); //Totalmente Carregado
}


A primeira condição servirá para manter um LED verde aceso enquanto o Capacitor estiver carregando ou descarregado, ou seja, quando o Capacitor tiver uma medida de tensão menor que 5 volts. A segunda condição irá fazer com que um LED vermelho acenda quando o Capacitor estiver totalmente carregado, ou seja, quando tiver uma medida de tensão de 5 volts.

CÓDIGO:

unsigned long tempo;
double carregamento = 0;
void setup() {

Serial.begin(9600);
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
}

void loop() {

    tempo = millis();
    int vR = analogRead(A0);//Lê a porta A0
    float vrVolts =(vR *(5.0/1023.0)); //Transforma em volts
    float vcVolts = 5.0- vrVolts;
  float constTempo = vR * vrVolts;
  float tempoCarga = 1000000 * 0.000001;  //rc = capacitância do Capacitor  * resitência 
  if(vrVolts < 5.0){
    carregamento = carregamento + 0.08; //Acréscimo de 0.08 segundos no tempo decorrido
  // Imprime os valores lidos
Serial.print(vrVolts);
Serial.print(" ");
Serial.print(vcVolts);
Serial.print(" ");
Serial.print(tempo);
Serial.print(" ");
Serial.print(constTempo);
Serial.print(" ");
Serial.print(tempoCarga);
Serial.print(" ");
Serial.println(carregamento);
  
if (tempoCarga > carregamento ){  //Enquanto o tempo para carregar o capacitor for maior que o tempo de carga decorrido ,o led vermelho indica que não está carregado.
 
         digitalWrite(13, HIGH);
         digitalWrite(12, LOW);
  }else{
  digitalWrite(13, LOW);       
  digitalWrite(12, HIGH); //Totalmente Carregado
}

delay(500); 

}

Relatórios:

Eric Henrique de Lira:
Gabriel Greco:
Renan Alencar Dores: 

Comentários

  1. O valor base para acender Leds corresponde a obtenção do valor da constante de tempo atingida....

    ResponderExcluir
  2. 1o. Vcs devem apresentar um video indicando a realização do experimento, com legenda
    20. vcs devem adicionar a programação a ação de atuadores quando o tempo for maior que a constante de tempo, considerando o tempo inicial da medida.
    3o vcs devem apresentar uma teoria mais refinada acerca do tema
    4o vcs devem construir os graficos no mesmo sistema de eixos para constante de tepos diferentes
    5o faltou variar o capacitor
    6o efetuar associações dos capacitores.

    ResponderExcluir
  3. O programa que deveria ter sido desenvolvido apos o estudo detalhado de carga e descarga do capacitor era a construção de um capacímetro. Ou seja quando vc atingir o valor correspondente ao tempo RC deve enviar um sinal para um atuador dizendo que a tensão no resistor reduziu e o capacitor já esta próximo a atingir sua carga total. Deve imprimir o valor da constante de tempo e com o valor de R oferecer o valor de C.

    ResponderExcluir
  4. Faltou medidas para associações em serie e paralelo de capacitores

    Alem disso falta entregar relatório detalhado sobre o experimento que pode ter um link para acesso no blog para um arquivo que permita apenas visualização

    siga as orientaçoes descritas neste link para seu relatório
    http://wiki.foz.ifpr.edu.br/wiki/images/3/37/Estrutura_relatorio_geral.pdf

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Imprimindo um caractere e seu valor Binário em um visor LCD

Imprimindo um caractere e seu valor Binário  em um Display LCD Neste experimento iremos montar um circuito e desenvolver um programa que será responsável pela leitura de um caractere e sua impressão em valor binário (como visto em postagens anteriores) em um visor LCD 16 x 2.  Para a realização do experimento iremos precisar de alguns componentes: 1 - Placa Arduíno Uno; 1  - Potenciômetro 250 kΩ; 1 - Resistor de 220 Ω; 1 - Display LCD 16 X 2; 1-  Protoboard; 23 - Jumpers (Macho/Macho); Para realizar as ligações do Display LCD para que ele funcione adequadamente, precisaremos fazer um simples circuíto  seguindo a tabela a seguir:  Os pinos "Backlight Cathode" e "Backlight Anode" são os pinos responsáveis pelo acendimento do LED, portanto na saida " Backlight Cathode" deve-se ligar um resistor de  250 kΩ, e na saída  "Backlight Anode", deve-se ligar no polo negativo da protoboard.  O terminal 2 do  potenciômetro   deve ser conectado na saída VSS (G

Desafio da semana 11 a 16/05. Conversor A/D e Sistemas de Numeração (Teoria)

Um conversor Analógico/Digital (A/D) é um dispositivo capaz de converter sinais analógicos de tensão em sinais digitais trabalhando a partir de um intervalo bem definido de tensão. Sinais analógicos consistem em sinais que podem assumir infinitos valores entre um ponto e outro. Isso significa que, ao variar uma tensão de 1V até 2V, por exemplo, é possível encontrar infinitos valores (1.1V, 1.01V, 1.000001V, etc). Já um sinal digital possui uma quantidade limitada de valores entre dois pontos. No caso de um conversor A/D, a precisão da conversão e a quantidade de medidas possíveis depende de sua  resolução (medida em bits). Por exemplo: No caso de um conversor de 5 bits trabalhando em uma fonte que varia de 0V a 5V, os valores convertidos podem assumir  2 5   valores possíveis. Dessa forma, entre 0 e 5 volts, temos 32 valores medidos em intervalos de aproximadamente 0,156V. Ao aumentar a resolução do conversor, tais intervalos ficam menores e a precisão aumenta. A representação d

Desafio da semana 11 a 16/05. Conversão de um caractere para frases binária, hexadecimal e Decimal

Conversão de um caractere para frases binária, hexadecimal e Decimal O objetivo desse desafio é construir um circuito responsável pela leitura de um caractere e imprimir o valor em Decimal, Hexadecimal , Binário e Octal com base nos valores da tabela ASCII.