condensator meter

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 11
Geregistreerd: 25 Nov 2015, 13:48

condensator meter

Berichtdoor bartou » 25 Nov 2015, 14:16

Hey hallo,

Laat ik eerst zeggen dat ik beginnende noob ben in arduino land.
Maar ben zoekend naar de oplossing van een probleem.
Ik heb de condensator meter kit gebouwd zoals die op de site van Hackerstore is te vinden.
In de bijlage zit een foto zoals het hoort.
En een foto zoals het nu is.
Onderstaand de code.
cpp code
// Digitale capaciteitsmeter
// (C) 2013 Hackerstore
#include <Wire.h>
// Oude library: #include "LCDI2C4Bit.h"
#include <LiquidCrystal_I2C.h>

#define ANALOGE_PEN A3 // Analoge pen tussen R1/R2 en de condensator
#define R1_PEN 2 // Pen aan R1 (22k-weerstand)
#define R2_PEN 3 // Pen aan R2 (1,5k-weerstand)

// Oud: LCDI2C4Bit lcd(0x27,2,16)
LiquidCrystal_I2C lcd(0x27,2,16); // LCD-Display met I2C-interface

void setup() {
pinMode(R1_PEN, OUTPUT);
digitalWrite(R1_PEN, LOW);

lcd.init();
lcd.backlight();
lcd.clear();
}

void loop() {
Ontlaad();

// Meet de condensator
digitalWrite(R1_PEN, HIGH); // Laadt de condensator (indien er 1 is aangesloten tenminste) op
long tStart = millis();
while(analogRead(ANALOGE_PEN)<647);
long nDuur = abs(millis()-tStart);

// Bereken de waarde van de gemeten condensator
float fMicroFarad = ((float)nDuur/22000.0) * 1000;

// Toon de waarde op het LCD
if(fMicroFarad >= 1.0){
static char mf[3];
mf[0]=0xe4; // Dit is het micro-symbool (Griekse letter mu), voor microFarad
mf[1]='F';
mf[2]=0;
lcd.clear();
lcd.print(" ");
lcd.print(fMicroFarad);
lcd.print(" ");
lcd.print(mf);
delay(200);
}
else {
// Toon waarde in nF
lcd.clear();
lcd.print(" ");
lcd.print(fMicroFarad*1e3);
lcd.print(" ");
lcd.print("nF");
delay(500); // Iets langere delay dan bij uF!
}
}

void Ontlaad() { // Ontlaad de condensator zodat hij gereed is voor een volgende meting
digitalWrite(R1_PEN, LOW);
pinMode(R2_PEN, OUTPUT);
digitalWrite(R2_PEN, LOW);
while(analogRead(ANALOGE_PEN)>0);
pinMode(R2_PEN, INPUT);
}


Hopelijk kan iemand me op weg helpen.
Ik heb al een keer een tweede/andere float toegevoegd waar 300 uit zou moeten komen. en waar 3.00 in de display stond.
De wellicht alom bekende "Hello world" sketch.
Laat alleen maar de hoofdletter H zien.
Ik zou denken het ligt aan de combo van de sketch en de library?
Alvast keeeiiii bedankt voor het meedenken!! (nee hoor ik kom uit Limburg)

Groeten van Bart.
zoals het is.JPG
zoals het is
zoals het is.JPG (40.36 KiB) 9371 keer bekeken
zoals het hoort.jpg
zoals het hoort
zoals het hoort.jpg (26.79 KiB) 9371 keer bekeken

Advertisement

Berichten: 11
Geregistreerd: 25 Nov 2015, 13:48

Re: condensator meter

Berichtdoor bartou » 25 Nov 2015, 15:39

FF een update,

Een condensator van 220uF geeft dus in de display +- 2.00 uF aan.
Een condensator van 47uF geeft in de display +- 4.7 uF aan.
Het lijkt alsof de punt niet verschuift en de F niet geprint wordt.
Alweer alvast bedankt!

Groeten van Bart.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: condensator meter

Berichtdoor nicoverduin » 26 Nov 2015, 09:05

Heb je al 's met Serial gekeken wat er echt in staat? Overigens die 2 nullen en decimale punt komt omdat je een float print. En die krijg je standaard met met 2 decimalen.
Voor je berekening zou het zo maar eens kunnen dat hij wat moeite heeft met jouw formules.
Even wat uitleg:
De formule voor laadtijd voor een condensator = t = R * C. R = 22K = 22000. De laadtijd = 63.2% van een volledige lading.
C wil je bepalen dus wordt de formule C = t / R.
In jouw programma wordt de condensator geladen totdat de analoge waarde op 647 staat. Dat komt omdat (1023 / 1000) * 632 = 6346.536. Afgerond 647.

Om nu droog even de tijd te bepalen die je nodig zou hebben om die 220uF te laden kom je uit op
t = R * C = 22000 * 0.000220 = 4.84 seconden = 4840. Je zou dus met Serial kunnen kijken of nDuur rond die waarde uitkomt. Zo niet gaat er daar iets fout. Oorzaak zou kunnen zijn dat je een verkeerde weerstand eraan hebt hangen. 22K = rood-rood-oranje.
Klopt het wel, dan kun je dat punt uitsluiten.

Dan de formule zelf:

cpp code
float fMicroFarad = ((float)nDuur/22000.0) * 1000;


Gezien de haakjes wordt eerst de duur door 22000 gedeeld. M.a.w. daar komt uit 0.22. Daarna wordt deze vermenigvuldigd met 1000 geeft 220.
Dat zou de juiste waarde zijn. Ook dat kun je controleren met de Serial.

Dan het feitelijke displayen. De code gaat er vanuit dat het automatisch door scrolled op het display. Dat is meestal niet het geval.

Als je al floats wil printen kun je beter cursor besturing gebruiken of in een keer een fatsoenlijke string maken die je toont op regel 1 vanaf de eerste prositie. De functie die ik zelf gebruik is dtostr().

voorbeeld:
cpp code
//
// bouw de regel op
//
char floatBuffer[7];
char muString[3];
char buffer[17];
//
// creer het mu stringetje
//
mf[0]=0xe4; // Dit is het micro-symbool (Griekse letter mu), voor microFarad
mf[1]='F';
mf[2]=0;
//
// converteer de float naar een string met 1 decimaal
//
dtostrf(floatBuffer, 6, 1, fMicroFarad);
//
// bouw de display string op
//
sprintf(buffer, "%s%s", floatBuffer, muString );
//
// display de string. Die lcd functies moet je zelf maar ff controleren
//
lcd.setcursor(0,0);
lcd.print(buffer);
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: condensator meter

Berichtdoor shooter » 26 Nov 2015, 11:00

eerst maar naar die weerstand kijken zoals nico zegt.
en persoonlijk doe ik omzettingen zoals float op een aparte regel dan weet ik tenminste wat er gebeurt.
dus float rduur=float(nduur); en niet zoals in het voorbeeld (float)
paul deelen
shooter@home.nl

Berichten: 11
Geregistreerd: 25 Nov 2015, 13:48

Re: condensator meter

Berichtdoor bartou » 26 Nov 2015, 18:01

Beste Allemaal,

De waarde van de condensator is goed.
voor de rest moet ik zeggen dat ik nog niet helemaal thuis ben in deze materie.
Dus daar zal ik de komende dagen maar eens wat tijd in gaan steken.
De sketch zoals ik hem nu gebruik.
Komt van de website van hackerstore.nl
Deze verkoopt een kit die met deze sketch zou moeten werken.
Een voorbeeld foto daarvan is ook de site te zien.
En had ik ook in deze post toegevoegd.

Zo op het oog lijkt dat dan aan de sketch te liggen (of misschien zijn de elco's niet goed gedrukt).
De sketch is slechts een POC, u weet nu dat de hardware werkt, en nu kunt u desgewenst uw eigen sketch ontwikkelen of deze aanpassen (zo te zien in de software iets met een punt doen, of vermenigvuldigen met 100 of zo.


Is een antwoord wat ik kreeg op mijn vraag hoe en wat.
Hoe weet ik dus welke library ik moet gebruiken.
Het printen van "hello world" in de voorbeeld sketch van de arduino software gaat ook niet goed.
Ik zie alleen de hoofdletter H.
Zodoende.
Alvast bedankt alweer voor het meedenken.

Groeten van Bart.
(waar zouden we zijn zonder forums)

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: condensator meter

Berichtdoor nicoverduin » 26 Nov 2015, 18:32

Nou ben ik natuurlijk domme lowietje, maar klopt de waarde van de weerstand? Ik heb het niet over de condensator verder gehad.
De LCD kan kapot zijn, maar je kan met Serial allerlei tussen waarden uitprinten. De LCD reageert op zich goed dus heb je de juiste library. Anders bleef alles zwart met hooguit blokjes op de bovenste regel.
Dan blijft er over:
a) verkeerde weerstand
b) iets verkeerd aangesloten
c) rotte Arduino.
A en c lijken mij stug.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 11
Geregistreerd: 25 Nov 2015, 13:48

Re: condensator meter

Berichtdoor bartou » 26 Nov 2015, 20:39

Hey hallo,

Ik bedoelde eigenlijk ook de weerstand.
Maar dat verklaard nog niet dat dit probleem zich niet alleen zich bij deze sketch voor doet.
Zoals ik al aan gaf.
Print hij bij "Hello World"
Allen de hoofdletter H.
Ik zou denken dat het dan aan de verkeerde library ligt.
Maar om daar zeker van te zijn is mijn kennis nog niet optimaal.
Ik heb deze setting nu al op 2 verschillende Arduino Uno's geprobeerd.
Beiden hetzelfde probleem.
Allemaal nieuwe componenten met de juiste waarde.
En ik ben er 100% zeker van dat alles goed is aangesloten volgens de tekening op de site.
Ik zou het nog via een Mac mini kunnen proberen.
Maar dat moet niet zo veel uitmaken lijkt me.
Toch?

Groeten van Bart.
(die zich gaat klaarmaken voor nog een nachtdienst)

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: condensator meter

Berichtdoor nicoverduin » 26 Nov 2015, 21:06

Het maakt niet uit op welke machine je draait met de IDE. Waar heb je die LiquidCrystal_I2C lib vandaan dan dat je twijfelt?
Maar heb je nu al met Serial die tussen waarden al uitgeprint?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 11
Geregistreerd: 25 Nov 2015, 13:48

Re: condensator meter

Berichtdoor bartou » 26 Nov 2015, 22:04

Hey hallo,

De library heb ik bij o.a. github en aan aantal anderen vandaan.
Serial heb ik nog niet geprobeerd.
Ik heb Hackerstore.nl wel een mail gestuurd voor hulp.
Maar nog geen reactie.
Serial ga ik morgen proberen als ik uit mijn bedje val na de nachtdienst.
Druk, druk, druk........
Wordt vervolgd!

Groeten van Bart.

Berichten: 11
Geregistreerd: 25 Nov 2015, 13:48

Re: condensator meter

Berichtdoor bartou » 29 Nov 2015, 15:42

Hallo Allemaal,

De aanhouder wint.
Ik heb toch nog even contact kunnen hebben met Hackerstore.nl
Deze kreeg dezelfde fout als bij mij.
Ik heb van hen de goede library toegestuurd gekregen.
En met een beetje aanpassing van de sketch werkt het prima.
Nu nog even tinkeren met de formule.
En dan zou daar een accurate waarde uit moeten komen.
Ik moet eerst van een aantal condensatoren zeker weten wat de precieze waarde is.
Zodat ik de formule daarop kan aanpassen.
Zeg maar een soort van callibreren....

cpp code
// Digitale capaciteitsmeter
// (C) 2013 Hackerstore
#include <Wire.h>
// Oude library: #include "LCDI2C4Bit.h"
#include <LiquidCrystal_I2C.h>

#define ANALOGE_PEN A3 // Analoge pen tussen R1/R2 en de condensator
#define R1_PEN 2 // Pen aan R1 (22k-weerstand)
#define R2_PEN 3 // Pen aan R2 (1,5k-weerstand)

// Oud: LCDI2C4Bit lcd(0x27,2,16)
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // LCD-Display met I2C-interface

void setup() {
pinMode(R1_PEN, OUTPUT);
digitalWrite(R1_PEN, LOW);

lcd.begin(16,2);
lcd.backlight();
lcd.clear();
}

void loop() {
Ontlaad();

// Meet de condensator
digitalWrite(R1_PEN, HIGH); // Laadt de condensator (indien er 1 is aangesloten tenminste) op
long tStart = millis();
while(analogRead(ANALOGE_PEN)<647);
long nDuur = abs(millis()-tStart);

// Bereken de waarde van de gemeten condensator
float fMicroFarad = ((float)nDuur/22010.0) * 925;

// Toon de waarde op het LCD
if(fMicroFarad >= 1.0){
static char mf[3];
mf[0]=0xe4; // Dit is het micro-symbool (Griekse letter mu), voor microFarad
mf[1]='F';
mf[2]=0;
lcd.clear();
lcd.print(" ");
lcd.print(fMicroFarad);
lcd.print(" ");
lcd.print(mf);
delay(200);
lcd.setCursor ( 0, 1 ); // go to the next line
lcd.print ("Capacitor meter");
}
else {
// Toon waarde in nF
lcd.clear();
lcd.print(" ");
lcd.print(fMicroFarad*1e3);
lcd.print(" ");
lcd.print("nF");
delay(500); // Iets langere delay dan bij uF!
lcd.setCursor ( 0, 1 ); // go to the next line
lcd.print ("Capacitor meter");
}
}

void Ontlaad() { // Ontlaad de condensator zodat hij gereed is voor een volgende meting
digitalWrite(R1_PEN, LOW);
pinMode(R2_PEN, OUTPUT);
digitalWrite(R2_PEN, LOW);
while(analogRead(ANALOGE_PEN)>0);
pinMode(R2_PEN, INPUT);
}


Eind goed al goed!!

Groeten van Bart.

Volgende

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 37 gasten