Een lange tijd geleden heb ik een batterijtester gemaakt met een Attiny85. Het werkt perfect en gebruik het nog heel veel. Hieronder vind je het breadboard schema en de code. Voel je vrij om dit na te maken. Al de links voor de library's vind je onderaan.
Arduino code voor gebruik in de IDE:
______________________________________________
#include <TinyOzOLED.h>
#include <TinyWireM.h>
#define FET 1 // ATtiny Pin 6
#define ADCVOLT A2 // ATtiny Pin 3
#define ADCCURRENT A3 // ATtiny Pin 2
const float FACTOR = 2.2;
int emptyRaw ;
int emptyOld ;
float empty ;
int loadRaw ;
int currRaw ;
float load ;
float curr ;
int emptySum;
int loadSum;
void setup() {
analogReference(INTERNAL);
OzOled.init();
OzOled.clearDisplay();
OzOled.setNormalDisplay();
OzOled.sendCommand(0xA1);
OzOled.sendCommand(0xC8);
pinMode(FET, OUTPUT);
}
void loop() {
digitalWrite(FET, LOW);
do {
emptyOld = emptyRaw;
emptyRaw = analogRead(ADCVOLT);
} while (abs(emptyRaw - emptyOld) > 3);
emptySum = 0;
for (int i = 0; i < 10; i++) {
emptySum = emptySum + analogRead(ADCVOLT);
delay(1);
}
empty = emptySum / 10230.0 * FACTOR;
digitalWrite(FET, HIGH);
do {
emptyOld = loadRaw;
loadRaw = analogRead(ADCVOLT);
} while (abs(loadRaw - emptyOld) > 3);
currRaw = analogRead(ADCCURRENT);
curr = currRaw * 1.1 / 1023.0;
loadSum = 0;
for (int i = 0; i < 10; i++) {
loadSum = loadSum + analogRead(ADCVOLT);
delay(1);
}
load = loadSum / 10230.0 * FACTOR ;
digitalWrite(FET, LOW);
displayOLED();
delay(500);
}
void displayOLED() {
char tmp[10];
dtostrf(empty, 1, 2, tmp);
OzOled.printBigNumber(tmp, 0, 0, 4);
dtostrf(load, 1, 2, tmp);
OzOled.printBigNumber(tmp, 0, 4, 4);
}
______________________________________________________
Library's:
Het werkt het beste met onderstaande IDE:
Chris de professor
Geen opmerkingen:
Een reactie posten