Battery indicator

ik kan u demo niet gebruiken omdat ik de library niet werkende krijg.
zit ook op mijn werk nu en heb geen arduinosoftware hier.
ik hou van werken ..., ik kan er uren naar kijken
op breadboard aangesloten geen indicatie
hebt u het gedaan zoals ik u doorgaf

misschien iets kies nano old boardloader atmega 326 op com5
fcapri

ga vandaag de sketch testen met hardware

nogmaals hartelijke dank voor alle hulp

Gr. a.j nieuwlaat
fabri,

zoals u voorstelde met 'n potmeter op 0a en + en Gnd ksn ik de uitslag netjes regelen

nogmaals bedankt voor de moeite

Gr.
capri


Heb mijn schakeling uit gebreid met 'n paar weerstanden 100K en 10 k

beide op a0 en 100k naar + accu

10k naar - accu

gestest met 3 lege nimh accu's 1.2 v

gaf geen indicatie

Dan zou ik toch 'n indicatie moeten zien ??

Gr. a.j nieuwlaat
Zou je niet beter een schemaatje tekenen wat je doet, die tekst is heel verwarrend.
LDmicro user.
Had toch iets fout gedaan is nu ok

bedankt voor reactie MGP
Ik had enkel willen zien hoe je die weerstanden had aangesloten.
Maar als het nu werkt is dat niet meer nodig.
LDmicro user.
Capri,

had toch nog 'n vraag; als ik daar bv 2 lege (tot. 0,8V ) accu cellen op aansluit, wat zou dan volgens u de uitslag moeten zijn ??

geeft aan vol

Als ik de accu's loskoppel, geeft de indicator ook aan vol

weerstanden ( 100k en 10k )

Gr
post eens je code van het void loop() stukje?

en hoe staan je weerstanden aangesloten?
accu naar 100K en dan naar u datapin.
en van de datapin met 10K naar massa?

[Bericht gewijzigd door fcapri op 18 november 2018 19:16:19 (58%)]

ik hou van werken ..., ik kan er uren naar kijken
void loop()
{
// Some test code to scan all the battery levels
accuspanning = ((analogRead(A0) * 5.0) / 1024.0 ) *3;

percent = map(accuspanning, accuvol, acculeeg, 100, 0);
showBatteryLevel(percent);
delay(200);
}


100k accu +
datapin

10k
} accu -
arduino gnd
en wat zijn de accuvol en acculeeg waardes?

ik zie waarschijnlijk al een probleem. je hebt een 11deler gemaakt met je weerstanden.
als je 11V over de weerstanden 100 en 10K zet, dan zal de datapin 1V krijgen.
die 1V vermenigvuldig je met 5.0 en deel je door 1024. hieruit krijg je dan de 1V weer in je accuspanning.
echter vermenigvuldig je op het einde nog met 3 (omdat ik een 20K/10K spanningsdeler had). dus je arduino zal slechts 3V weergeven als je 11V hebt aangelegd.

als je daar 1.6V aan zet, dan zou de arduino dus 0,43V moeten van maken in zijn waarde en volgens mij gewoon leeg aangeven
ik hou van werken ..., ik kan er uren naar kijken
Capri,

heb hier 'n schemaatje hoe ik die aangesloten heb en hoe het zou worden wanneer het in mijn truck is geinstaleerd

nu zit er 'n aparte voeding aan van 5 V DC daarna 'n dc step down convertor 12v adj naar 5v van dezelfde accu

gr
Je code is slechts een deel van het probleem.
Volgens mij ben je verkeerd gestart als je probeert de ladingstoestand van een NiCd te bepalen aan de hand van de spanning. Anders dan bij een loodaccu is hier de klemspanning geen goede indicatie voor de laadtoestand.
Dus de toegevoegde waarde van dat soort metertjes is zeer twijfelachtig.
Een NiCd accu is leeg als bij bij belasting de klemspanning omlaag duikt. Dat gebeurt niet geleidelijk maar redelijk plots.
De accu is volgeladen als de temperatuur plots begint op te lopen. Daarom zitten in de meeste dergelijke batterijen een temperatuurvoeler in de behuizing ingebouwd. Deze stuurt ofwel een groen ledje aan om dat te tonen, en/of geeft een signaal aan de lader om ermee op te houden.
Wil je weten hoever een lege accu reeds opgeladen is, dan is een goede indicatie de laadstroom en de tijd meten.
Maar het resultaat kan afwijken. Door slijtage van de accu neemt de capaciteit af.
Deze informatie was al genoemd en is bekend, er was slechts een indicatie nodig van batterijtoestand en de code had in de gegeven omstandigheden een (bijna) lege batterij moeten aangeven.
volgens mij zit er een omrekenfout in of een weerstand zit niet goed aan massa.
met geen accu eraan zou die geen volle accu mogen weergeven.

dergelijke zaken test ik door een paar serial prints in de code te typen waar de gemeten en berekende waardes naar een terminal op de pc worden gestuurd.

zowieso ontbreek ik nog de accuvol en acculeeg waardes van TS (de mijne van 11.0 en 13.5V waren voorbeelden.
die moet TS aanpassen naar zijn correcte accu waardes.
bijkomend moet zijn berekening overeen komen met zijn spanningsdeler aan de ingang.

mijn code met:
accuspanning = ((analogRead(A0) * 5.0) / 1024.0 ) *3;
met een 20K/10K weerstand, heb je een 3deler van de spanning en moet je dus vermenigvuldigen met 3 (laatste 3 in de formule hierboven).

heb je een 11deler zoals TS met zijn 100K/10K, moet dat zijn
accuspanning = ((analogRead(A0) * 5.0) / 1024.0 ) *11;
wederom hangt dit af van de gebruikte accuspanning, de gebruikte referentie en de vereiste nauwkeurigheid.

met de 5V referentie en een 11deler kan je tot 55V meten. als je daar een accu aan zet van 11V, heb je amper resolutie (elke binaire stap is 53mV.
je kan 10.74 en 10.79V meten maar niks ertussen

met 3,3V als referentie en een 11deler kan je tot 36V meten en heb je een resolutie van 35mV

met 1.1V als referentie en een 11deler kan je tot 12V meten en heb je een nauwkeurigheid van 12mV.

met mijn voorgestelde 3deler op 5V zou je tot 15V kunnen meten en heb je een nauwkeurigheid 5mV. maar dan moet je 5V als referentie nemen EN een 20K/10K weerstandsdeler gebruiken.

ik vermoed dat er ergens een referentieprobleem is en te hoge weerstanden met de verkeerde formule.
TS gebruikt nu 100K/10K en gaat vermenigvuldigen met 3.
op 5V referentie kan hij meten tot 55V maar de arduino gaat maar weergeven tot 15V
op 3.3V referentie kan hij meten tot 36V maar gaat maar weergeven tot 9.9V
op 1.1V referentie kan hij meten tot 12V maar kan de arduino slechts spanningen weergeven tot 3.3V.

in principe allemaal geen probleem als die ook zijn accuvol en acculeeg waardes heeft aangepast.

Nu heeft TS nog zijn omrekeningen naar de accuspanning en kan je accuspanningen koppelen aan percenten
die kan dan duidelijk zien dat 11.0V overeenkomt met 0%, 13.5V overeenkomt met 100% en dat 12.5V iets in het midden is (60% ofzo) en hij kan makkelijk die waardes aanpassen als hij iets anders wil meten.


Als iets meer ervaren programmeur zou ik zelf niet omrekenen naar spanningen, maar direct de binaire waardes koppelen in de map aan een 0-100%. maar dit is dan zuiver programmeren en dan weet je TOTAAL NIET MEER wat je meet.
maar dat krijg je dan nooit uitgelegd dat 384 overeenkomt met 16% en dat je maar tot 1023 kan gaan.
de arduino in mijn auto werkt zo, en ik heb een eigen calibratie geprogrammeerd.
als mijn benzinetank leeg is, koppel ik de binaire waarde aan 0liter.
ik tank vol en koppel de binaire waarde aan VOL. en dan tik ik de VOL waarde met de liters die ik tankte. de arduino berekent zelf zijn grafiek en mij boeit niet dat de vlotterspanning 8.4V is bij vol en 3.6V bij leeg.
ik hou van werken ..., ik kan er uren naar kijken
capri

had die weerstanden 100k en 10k in 'n ander schema gezien
http://www.electronics-lab.com/arduino-voltmeter-oled-display/

heb nu 20k en 10k zoals jij voorstelde

beide aan Ao
20k aan accu +
10k aan accu - en gnd arduino

accu spanning van 2 cellen in serie 0,80 v

indicator geeft aan 50%

accu spanning van mijn 12v accu nu 13.55 v

als ik niets aansluit aan de beide weerstand wisselt de indicator van vol in stapjes naar leeg (continu)


zou dat misschien kunnen liggen aan het programma;

tussen }else{
en
bars=0
code:
if (percent >= 66)
{
// Show three bars
bars = 3;
} else if (percent >= 33)
{
// Show two bars
bars = 2;
} else if (percent > 0)
{
// Show one bar
bars = 1;
} else {
// Show nothing
bars = 0;
}


hier gebeurt maar heel weinig.
als de accu 66% of meer is, dan is de accu vol
als de accu tussen 33 en 66% zit, komen er 2 blokjes opgevult
als de accu tussen 0 en 33% zit, krijg je 1 blokje
en als de accu 0 is, dan is het icoontje leeg

als u icoontje vanzelf nog leegloopt, zit er één of andere teller in die aftelt en het percentage aanstuurd.
ik zou eens output van je berekening op het scherm of serial monitor zetten.
met name dan een print van
-(analogRead(A0)
-accuspanning
-percent
bv met dit op het einde van de loop in te voegen net voor de delay(50);
Serialprint("*****************");
Serialprint("analogread: ");
Serialprintln(analogRead(A0));
Serialprint("accuspanning: ");
Serialprintln(accuspanning);
Serialprint("percentage: ");
Serialprintln(percent);


en voeg deze ergens in setup erbij.
Serial.begin(9600);
nu kan je dan via serial monitor kijken wat de arduino nu allemaal meet
ik hou van werken ..., ik kan er uren naar kijken
capri,

sorry, maar nu gaat het en met het vorige wat u schreef al helemaal boven mijn pet

ik snap dat over 3 delers en 11 delers niet

denk dat ik daar uw hulp bij nodig heb
dat is het probleem dus.

u mist de kennis en ervaring om met arduino te programmeren, dan is dit project onbegrijpelijk en te hoog gegrepen.

heel simpel.
een arduino kan maar tot 5V aan op zijn ingangen. als u daar 12V wilt mee meten (uw accuspanning dus), dan moet je een spanningsdeler zetten.
bv met 20 en 10K maak je een 3deler.
als je 12V zet over die 10 en 20K en je meet de spanning over die 10K (wat de arduino doet als die 10K tussen zijn AO en GND staat), dan zal je daar 4V meten. (4V is kleiner dan 5V, dus de arduino gaat niet stuk).

de arduino zal dit vergelijken met zijn referentie.
een spanning van 4V met referentie van 5V, geeft 819 binair aan de arduino.
hij meet dus '819' aan zijn ingang A0.

om die binaire waarde om te zetten naar de correcte gemeten spanning, gebruiken we de formule:
accuspanning = ((analogRead(A0) * 5.0) / 1024.0 ) *3

ik zet het in stukjes
((analogRead(A0) * 5.0) / 1024.0 )
dit deel zal dan geven (819 * 5.0) / 1024 = 3.999
die 5.0 is de referentie, die 1024 is het maximaal aantal stappen dat een arduino meet (0-1023).
nu hebben wij geen 4V aan de accu maar aan de ingang. onze spanningsdeler met weerstanden zit daar nog.
we delen door 3 met de spanningsdeler, dus vermenigvuldigen we in de formule op het einde *3.
we bekomen dus 11.997V dat de arduino meet van onze 12V aangelegde accu.

als jij echter 100K/10K weerstanden gebruikt, dan deel je uw accuspanning door 11. de arduino ziet maar 1.09V aan zijn AO.
als je mijn formule van die 3deler gebruikt, dan zegt de arduino dat de accu maar 3.27V is (en niet 12V).
dit kan ook werken, maar dan moet je de arduino zeggen dat hij zijn interne referentie van 1.1V moet gebruiken en moet je in de formule vermenigvuldigen met 11.

dus de berekeningsformule moet overéénkomen met de weerstanden die je fysiek hebt gebruikt en de gewenste referentie.

een arduino kan maar 1024 binaire stapjes meten.
dus als jij de arduino op een 5V referentie zet, dan is elke binaire stap 4.88mV
0000000000 = 0V
0000000001 = 4.88mV
0000000010 = 9.76mV
0000000011
0000000100
...
tot
1111111111 = 5000mV
als jij daar nu een spanningsdeler gebruikt die je 12V gaat delen door 11, dan heb je maximaal 1.1V aan de ingang van de arduino als je accu op 12V staat.
je gaat binair niet gebruiken van 0-1023 maar 0-200.je krijgt dus een onnauwkeurig signaal.
want dat gemeten getal wordt vermenigvuldigt met 11 (spanningsdeler).
de kleinste mogelijke spanning die je kan meten wordt dan 53mV (4.88mV x 11)
met andere woorden, je arduino ziet het verschil niet tussen 12.00 en 12.05V

met een 3deler aan weerstanden, is de kleinste waarde dat de arduino kan onderscheiden maar 0.015V. (4.88mV * 3)
dus die zit het verschil al tussen 12.00 en 12.02V
hij kan 12.000, 12.015, 12.030, 12.045 meten
ik hou van werken ..., ik kan er uren naar kijken
capri

toen ik die site zag met die sketch dacht ik dat zou ik wel graag voor mijn accu willen gebruiken

Maar na informatie te hebben ingewonnen bij de programmeur van Artekit Labs bleek het om 'n demo versie te gaan

heb hem toen gevraagd of hij dat in 'n werkende versie kon maken antwoordde hij negatieve,

dacht dat het eenvoudiger was

daarom riep ik de hulp in van Circuits online

Ik begrijp nu de delers

zoals ik zei weerstanden zij nu 20k en 10k

zijn al die regels nodig voor de demo aansprakelijk voor de errors
kan het programma daardoor niet eenvoudiger
Op 19 november 2018 22:07:29 schreef Kruimel:
Deze informatie was al genoemd en is bekend, er was slechts een indicatie nodig van batterijtoestand en de code had in de gegeven omstandigheden een (bijna) lege batterij moeten aangeven.

Dan zou ik zeggen 'much to do about nothing.'
Tenzij dit enkel bedoeld is als training om met een arduino te leren werken is dit van Amsterdam naar Rotterdam reizen via Parijs. Wat een omslachtig gedoe.


Zoals gezegd houdt een Ni-Cd batterij zijn spanning vrij constant tot ie plots omlaag duikt. Dit zeer simpele snel bedachte schemaatje laat het ledje branden als de batterij zo goed als leeg is. En verbruikt slechts 1mA. Voldoende voor een modern ledje. Desnoods kun je nog wat fijner instellen door de zenerspanning aan te passen met eeen diode in serie.

Eigenlijk ook vrij zinloos, als het lampje brandt moet je de batterij laden. Op vrijwel hetzelfde moment merk je dat de batterij leeg is omdat je boortol op zn gat gaat, of je lampje zwakker gaat branden en dan moet je net hetzelfde doen.