pH meterschaal

Software die niet past in bovenstaande onderwerpen
Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

pH meterschaal

Berichtdoor benvo » 16 Apr 2017, 13:47

Hallo allemaal,


Ik zou de volgende schaal willen gebruiken voor mijn pH meting.
Daar past natuurlijk een formule bij om de pH waardes om te rekenen naar cirkelgraden. pH kent geen lineaire groei maar een logaritmische.
Wie kent de bijpassende formule?
Even wat gegevens:
Het getal 6.00 staat op -45 graden. Het eindgetal 8.50 staat op 225 graden. Het bereik zou dus 270 graden zijn. De verdeling is in 10 delen.

Afbeelding

Advertisement

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

Re: pH meterschaal

Berichtdoor nicoverduin » 16 Apr 2017, 14:21

De waardes die je nu krijgt heeft toch al die log verdeling verdisconteerd? Dus kun je gewoon de map uitvoeren:
cpp code
float ph = 7.3;     // ff een voorbeeldje
phInt = ph * 100; // alles met 100 vermenigvulden om 2 decimalen te hebben

uint16_t graden = map (phInt, 600, 850, 0, 270); // nu heb je de graden.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: pH meterschaal

Berichtdoor benvo » 16 Apr 2017, 14:53

Deze had ik werkelijk nog niet bedacht, Nico!

Bij mijn lichtmeters die een schaal verdeling hebben van 0 t/m 100 gebruik ik:
0=-45 graden, 100=225 graden, bereik dus 270 graden.
Stel de lichtsterkte is 50% (50 staat dus bij deze schaal recht bovenin.)

(50/100*270)-45=90 graden.

Dus ik was mijn hoofd aan het breken om een vergelijkbare omrekening te verkrijgen.

Dank je wel!!

Groet,
Ben.

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: pH meterschaal

Berichtdoor benvo » 16 Apr 2017, 16:30

Maar nu even terug naar jou sketch voorbeeld...
Zoals hij daar staat begrijp ik het.

Toch krijg ik hem niet werkend in een proefopstelling.

cpp code
Code: Alles selecteren

#include "Nextion.h"

#define nexxSerial Serial2

NexGauge pH = NexGauge (0,1,"z0");

float phInt=0;


void setup()
{
 
}

void loop()
{
 float ph = 7.3;     // ff een voorbeeldje
phInt = ph*100// alles met 100 vermenigvulden om 2 decimalen te hebben
 
uint16_t graden = map (phInt, 600, 850, 0, 270); // nu heb je de graden.

pH.setValue(graden);

}


Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: pH meterschaal

Berichtdoor benvo » 16 Apr 2017, 16:35

oeps, de ; staan wel achter ph* 100 in mijn sketch.


Groet,
Ben.

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

Re: pH meterschaal

Berichtdoor nicoverduin » 16 Apr 2017, 17:04

Dan nog..... waarom denk je dat ik een variabele phInt noem?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: pH meterschaal

Berichtdoor benvo » 16 Apr 2017, 17:47

Ok, Nico, dit werkt zo.
Maar...
In de sketch geven we als voorbeeld een waarde van 7.3 in.
7.74 is de waarde die aangegeven wordt in de meter.

Wat gaat er dan nog fout?

Voor de zekerheid nog even de sketch:

cpp code
#include "Nextion.h"

#define nexSerial Serial2

NexGauge pH = NexGauge (0,1,"z0");

const int ledPin=16;

float phInt=0;


void setup()
{
nexInit();
pinMode(ledPin,OUTPUT);
}

void loop()

{

float ph = 7.3; // ff een voorbeeldje
phInt = ph*100;// alles met 100 vermenigvulden om een heel getal te hebben

uint16_t graden = map (phInt, 600, 850, 0, 270); // nu heb je de graden.

pH.setValue(graden);


}

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

Re: pH meterschaal

Berichtdoor nicoverduin » 16 Apr 2017, 17:50

En hoeveel graden krijg je?

En vergeet af en toe de CTRL-T functie niet..... Je code begint alweer op een zooitje te lijken

En hoelang gaat het nog duren voordat je van de phInt een unsigned int maakt?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 340
Geregistreerd: 23 Okt 2016, 20:29

Re: pH meterschaal

Berichtdoor benvo » 16 Apr 2017, 18:15

Inderdaad heb ik een uint16_t toegevoegd.

Verder was ik aanvankelijk wat in verwarring gebracht door jouw bijschrift; //alles met 100 vermenigvuldigen om 2 decimalen te hebben. Later begreep ik dat dit bedoelt was om een rond getal in map te verkrijgen.

Verder heb ik het schaal bereik aan gepast in de map dus(600,850,-45,225);

Bij 0 tot 270 wijst de meter niet juist aan.

Nu wijst de meter correct aan. Met een uitzondering; beneden de X-as, dus zodra er sprake is van min waarden geeft de meter niets aan. Eigenlijk meet hij pas vanaf 6.42. Dit begrijp ik dus niet. Komt dit door min waarden? Maar hoe verhelp ik dit dan?

Overigens vergeet ik de code niet maar doet hij het af en toe gewoon niet.

Dus, weer bedankt, Nico.

Groet,
Ben.

cpp code
Code: Alles selecteren

#include "Nextion.h"

#define nexSerial Serial2

NexGauge pH = NexGauge (0,1,"z0");

const int ledPin=16;

uint16_t phInt=0;


void setup()
{
 nexInit();
 pinMode(ledPin,OUTPUT);
}

void loop()
 
{
float ph = 8.5;
// ff een voorbeeldje
phInt = ph*100;// alles met 100 vermenigvulden om een heel getal te hebben

uint16_t graden = map (phInt, 600, 850, -45, 225); // nu heb je de graden.

pH.setValue(graden);


}
Laatst gewijzigd door benvo op 16 Apr 2017, 18:46, in totaal 1 keer gewijzigd.

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

Re: pH meterschaal

Berichtdoor nicoverduin » 16 Apr 2017, 18:44

Mag die wel -45 graden zijn? Of moet dat 315 graden zijn?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Volgende

Terug naar Overige Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 19 gasten