Testador/Descarregador de baterias com Arduino

 

Basicamente utilizei um código postado aqui no laboratório de garagem e efetuei algumas mudanças, primeiramente para que o Arduino utiliza-se o monitor serial com o computador utilizei o seguinte programa:

#define LED 13
#define resistor 6.9

float capacidade=0, Valor, TBateria=0, Corrente, s=0;

void measure (void) {

Valor = analogRead(3);

TBateria = Valor/1024*5.0;

Corrente = TBateria/resistor;

capacidade = capacidade+Corrente/3600;
s++;


Serial.print("Tensao Bateria= ");
Serial.print(TBateria);

Serial.print("V Corrente= ");
Serial.print(Corrente);

Serial.print("A capacidade= ");
Serial.print(capacidade);
Serial.print("Ah ");

Serial.print("Tempo em Descarga= ");
Serial.print(s);
Serial.print("s ");

Serial.print(" ");
Serial.print("\n");
}

char x;

ISR(TIMER1_OVF_vect) {
TCNT1=0x0BDC;
x=!x;

measure();

}

void setup() {

pinMode(LED, OUTPUT);

TIMSK1=0x01; // enabled global and timer overflow interrupt;
TCCR1A = 0x00; // normal operation page 148 (mode0);
TCNT1=0x0BDC; // set initial value to remove time error (16bit counter register)
TCCR1B = 0x04; // start timer/ set clock

Serial.begin(57600);

};

void loop () {

digitalWrite(LED, x);
;
};

E o seguinte código foi utilizado para demonstrar os valores em um display 16x2:

#define LED 13

#define resistor 6.9

#include <LiquidCrystal.h>

float  valor,volt,corrente, time=0;

 LiquidCrystal lcd(12, 11, 5, 4, 3, 2);//inicializa lcd

 

void measure (void) {

 

valor= analogRead(3);

 

volt=valor/1024*5.0;

 

corrente = volt/resistor;

 

time++;

 

Serial.print("Voltage= ");

Serial.print(volt);

 lcd.setCursor(0,0);

  lcd.print("volts=");

   lcd.setCursor(7,0);

   lcd.print(volt);

 

Serial.print("V Current= ");

Serial.print(corrente);

 lcd.setCursor(0,1);

  lcd.print("Amp=");

   lcd.setCursor(6,1);

lcd.print(corrente);

 

Serial.print("time= ");

Serial.print(time);

Serial.print("s ");

lcd.setCursor(14,0);

   lcd.print("T");

lcd.setCursor(12,1);

   lcd.print(time);

Serial.print("\n");

}

char x;

 

ISR(TIMER1_OVF_vect) {

TCNT1=0x0BDC;

x=!x;

 

measure();

 

}

 

void setup() {

pinMode(LED, OUTPUT);

 

TIMSK1=0x01; // enabled global and timer overflow interrupt;

TCCR1A = 0x00; // normal operation page 148 (mode0);

TCNT1=0x0BDC; // set initial value to remove time error (16bit counter register)

TCCR1B = 0x04; // start timer/ set clock

 

Serial.begin(9600);

 

 //Define o LCD com 16 colunas e 2 linhas

  lcd.begin(16,2);

 

 

 

 

};

 

void loop () {

 

digitalWrite(LED, x);

 

};

Exibições: 687

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de jackson andrade em 25 março 2015 às 21:05

muito bom parabens

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço