pH meterschaal

Software die niet past in bovenstaande onderwerpen
Gebruikers-avatar
Berichten: 4828
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: pH meterschaal

Berichtdoor nicoverduin » 16 Apr 2017, 18:44

Overigens een uint16-t kan nooit negatief worden.
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Advertisement

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

Re: pH meterschaal

Berichtdoor benvo » 16 Apr 2017, 18:52

nicoverduin schreef:Mag die wel -45 graden zijn? Of moet dat 315 graden zijn?


In de map mag ik wel een minwaarde gebruiken, zo lees ik. Alleen wanneer je zou zeggen dat de mapwaardes aldus ingevuld worden (phInt , 600, 850, 315, 225 ) of (phInt, 600,850,225,315) gaat de wijzer wel erg raar aanwijzen.

Daar zou een andere oplossing mogelijk moeten zijn?

Zo leerden we vroeger dat om een negatief getal weg te halen maakte je een kwadraad van een getal waar je dan vervolgens de wortel uit trok. Maar denkelijk heb ik daar niets aan in C.

Ik heb van het uint16_t een signed int gemaakt. Het geen overigens niet uit maakt, onder de x-as gebeurd er niets aan de negatieve kant.

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

Re: pH meterschaal

Berichtdoor nicoverduin » 16 Apr 2017, 19:41

Dan komt natuurlijk de eerste vraag...... bij welke waarde wijst die dan wel 6.00 aan. Dus ff een progje maken....
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: pH meterschaal

Berichtdoor benvo » 16 Apr 2017, 21:03

Ja, dat is de eerste vraag én de vraag waarop ik het antwoord niet weet. Op de een of andere manier, zo is mijn denkwijze, het stukje meter welk nu van -45 graden tot 0 graden loopt moeten vervangen door 315 graden tot 360 graden.
Dat zou dan ingevuld moeten worden in de map. Daar zit dan ook meteen het probleem. Hoe vul je dat in? Moet ik in deze richting denken? Werkt overigens nog niet onder de x-as. Code werkt weer niet...
Tips?

Groet,
Ben.


[code2=cpp][/
Code: Alles selecteren

#include "Nextion.h"

#define nexSerial Serial2            //De seriële poort naar de Nextion is Serial2

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

const int ledPin=16;               //Tx ledPin=16

uint16_t phInt=0;


void setup()
{
 nexInit();        //Initialisatie Nextion
 pinMode(ledPin,OUTPUT);   //LedPin is een OUTPUT
}

void loop()
 
{
float ph = 6.3;  //even een voorbeeld

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

signed int graden = map (phInt, 600, 850, -45, 225); // nu heb je de graden
if(graden<6.42)
{
graden =  map (phInt, 600, 850, -315, -360);
 
}
 
pH.setValue(graden);  //zet de meternaald


}
code2]

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

Re: pH meterschaal

Berichtdoor nicoverduin » 16 Apr 2017, 22:46

Je kan toch gewoon eers een eenvoudig programmatje maken meteen teller van 1 tot 360? Van mijn part met een delay van 1 seconde. De teller naar de serial en die gauge en je weet het.
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 1738
Geregistreerd: 06 Aug 2016, 01:03

Re: pH meterschaal

Berichtdoor Koepel » 16 Apr 2017, 23:11

De pH van 6.0 tot 8.5 (bereik is 2.5).
De Gauge graden van -45 tot 225 (bereik is 270 graden).
Voor zover ik weet kan de Gauge alleen positieve graden aan (niet geprobeerd met een echt display).

Dit is niet getest:
Code: Alles selecteren
float ph = 7.0;  // van de sensor

// clip de ph waarden.
if( ph < 5.8)
  ph = 5.8;

if( ph > 8.7)
  ph = 8.7;

// De eenheid van de ph wordt weggewerkt door te delen met het bereik van de ph.
// De eenheid van de Gauge graden wordt toegevoegd door te vermenigvuldigen met het bereik van de graden.
// Vooraf en achteraf de offset bijwerken.

// Haal de ph offset er af, deel door de ph range, vermenigvuldig met graden range, range offset er bij.
float graden = (( ph - 6.0 ) / 2.5 * 270.0 ) - 45.0;

// De Gauge wil de graden als geheel positief getal.
int graden_int = int( graden);

if( graden_int < 0)
  graden_int += 360;

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

Re: pH meterschaal

Berichtdoor benvo » 17 Apr 2017, 09:44

De oplossing is er:

cpp code
#include "Nextion.h"

#define nexSerial Serial2 //De seriële poort naar de Nextion is Serial2

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

const int ledPin=16; //Tx ledPin=16

int phInt=0;


void setup()
{
nexInit(); //Initialisatie Nextion
pinMode(ledPin,OUTPUT); //LedPin is een OUTPUT
}

void loop()

{
float ph = 6.80; //even een voorbeeld

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

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

if(ph<6.42) //De stand op de x-as
{
graden = map (phInt, 600, 850, -45, 225)+360; //stelt de meternaald beneden de x-as
}


pH.setValue(graden); //zet de meternaald


}


Dank jullie allemaal voor het meedenken!!

Groet,
Ben

Gebruikers-avatar
Berichten: 1738
Geregistreerd: 06 Aug 2016, 01:03

Re: pH meterschaal

Berichtdoor Koepel » 17 Apr 2017, 10:50

Zucht :(
Het principe is verkeerd. Het getal van 6.42 komt zomaar uit de lucht vallen terwijl je op dat moment al de graden hebt berekend. Als er iets verandert, dan is die 6.42 misschien niet meer geldig. Die 6.42 is ook geen garantie dat het bij 0 en -1 graden goed gaat met afrondingen en zo.

Code: Alles selecteren
phInt = ph*100; // alles met 100 vermenigvulden om een heel getal te hebben
 
signed int graden = map (phInt, 600, 850, -45, 225); // nu heb je de graden
 
if(graden<0)              // negatief getal ?
{
  graden += 360;  // maak een positief aantal graden voor de gauge
}
   
pH.setValue(graden);  //zet de meternaald

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

Re: pH meterschaal

Berichtdoor benvo » 17 Apr 2017, 19:16

Dag Koepel,

Ik begrijp je argumentatie. Vooraf, in de praktijk zal het pH gehalte zo tussen de 6.8 en 7 liggen. Het probleem speelt dan natuurlijk minder. Bij een hogere stand, hoger als 7 dus, moet er straks middels een relais CO2 toegevoegd worden. Mijn verklaring is: Het getal 6.42 komt niet zomaar uit de lucht vallen. Bij 6.42 staat de meter exact op "9 uur" of wel de x-as. Anders gezegd; op nul. Bij 6.41 werkte de meter niet meer vanwege de negatieve getallen, denk ik. Eigenlijk bevreemd mij dit wel, als je een stukje terug leest op deze topic zie je welke formule er gebruikt wordt voor mijn lichtschalen, daar heb ik geen probleem met negatieve getallen op mijn Arduino/Nextion. Waarom dat hier wel zo is? Zou natuurlijk kunnen dat dit ligt aan een ander gebruik in de programmering nl.: map? De wijzer van de pH meter trilt wel heel erg daar moet ik nog wel een vertraging op gaan toepassen.


Misschien is het ook leuk dat ik eens laat zien waar ik mee bezig ben.

Afbeelding

Die wijzers... ik blijf het maar niks vinden...

Fijn dat jullie meedenken!

Groet,
Ben.

Gebruikers-avatar
Berichten: 1738
Geregistreerd: 06 Aug 2016, 01:03

Re: pH meterschaal

Berichtdoor Koepel » 17 Apr 2017, 19:38

Je hoeft alleen maar twee regels code te vervangen om het duidelijk en correct te maken.

VorigeVolgende

Terug naar Overige Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast