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);
};
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
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)