Zelfbouw Arduinio Ph controller

Discussie in 'Zelfbouw projecten' gestart door jan fokke, 9 okt 2015.

View Users: View Users
  1. jan fokke

    jan fokke

    Lid geworden:
    11 aug 2011
    Berichten:
    1.743
    Locatie:
    leeuwarden
    Ik ben van plan om zelf een ph controller te gaan maken.
    Ik heb net het spul besteld via ebay.

    De functies voor het apparaat worden gewoon pH meten en dan de klep van de co2 open of dicht zetten aan de hand van de met de hand ingestelde kH waarde.
    Mischien wil ik hem dan ook nog uitbreiden met een temperatuur sensor maar dat weet ik nog niet.
    Dit ook omdat de pH ook temperatuur afhankelijk is en dus deze ook wel mee genomen moet worden in de berekening die het apparaat moet maken.

    Kan alleen nu zo snel even niet de juiste formules vinden voor het berekenen van de co2 aan de hand van kH en pH waarde met en zonder correctie van de temperatuur.
     
  2. Stefanfr

    Stefanfr

    Lid geworden:
    23 sep 2015
    Berichten:
    271
  3. TS
    TS
    jan fokke

    jan fokke

    Lid geworden:
    11 aug 2011
    Berichten:
    1.743
    Locatie:
    leeuwarden
    ja die formule zocht ik nog. Bedankt
     
  4. TS
    TS
    jan fokke

    jan fokke

    Lid geworden:
    11 aug 2011
    Berichten:
    1.743
    Locatie:
    leeuwarden
    197567jan_fokke_0_85_nieuwe_ma.jpg
    835469jan_fokke_0_85_nieuwe_ma.jpg
    Deze foto's zijn van 2 weken geleden

    717896jan_fokke_0_85_nieuwe_ma.jpg

    Gister weer er mee verder gegaan en nu ziet het bordje er zo uit als op de boven staande foto.



    de code tot nu toe.

    Wat ik er nog bij wil hebben is een automatische calibratie functie.
    En verderder wordt die nog uitgebreid met een temperatuur sensor die mijn verwarming gaat aansturen.
     
  5. TS
    TS
    jan fokke

    jan fokke

    Lid geworden:
    11 aug 2011
    Berichten:
    1.743
    Locatie:
    leeuwarden
    Ik zie ook dat er op het bordje voor mijn pH electrode 2 stelschroefjes zijn en ik weet dat deze er voor zijn om de electrode handmatig te kunnen calibreren maar nu is mijn vraag weet iemand welk schroefje voor welke pH is.
    Mocht het niet gaan lukken om een automatische calibratie in het programma te zetten.
     
  6. Anagorn

    Anagorn

    Lid geworden:
    22 okt 2015
    Berichten:
    65
    Welke sensoren heb je nu precies in gebruik?
    Een temperatuur sensor en wat nog meer?

    Leuk project trouwens :)
     
  7. TS
    TS
    jan fokke

    jan fokke

    Lid geworden:
    11 aug 2011
    Berichten:
    1.743
    Locatie:
    leeuwarden
    Temperatuur sensor heb ik nog niet in gebruik.
    Enige sensor wat hier in in gebruik is op dit moment is de pH elektrode.
    Temperatuur sensor heb ik vandaag besteld dus als die binnen is ga ik die ook installeren.

    Nu het eerst volgende ding wat ik er in ga verwerken is dat de pH elektrode het magneet ventiel gaat aansturen.

    aan de hand van dit schema

    127128jan_fokke_0_85_picture.jpg
     
  8. Coulibaly

    Coulibaly

    Lid geworden:
    29 okt 2015
    Berichten:
    2.644
    Ik heb nog een andere formule die een klein beetje afwijkt, geen idee welke 'juister' is...

    Co2 = kH / 2,8 * 10^(7,91-pH)

    Ik dacht wel dat die formules alleen tellen wanneer de temperatuur 25� is.
     
  9. Bertus

    Bertus

    Lid geworden:
    2 sep 2008
    Berichten:
    47.157
    Locatie:
    Schiedam.
    Of deze.
    NTC-Temperatursensor -30 - +105 �C MJSTS-103-3950-1-600-3D ...

    17. Nov. 2015 ... NTC-Temperatursensor -30 - +105 �C MJSTS-103-3950-1-600-3D .... temperature sensor, thermistor, capteur temp�rature, k�ltef�hler, temp ...
    https://www.conrad.de/.../ntc-temperatu ... 23879.html -
    losse draadaansluiting.

    of deze
    Temperatuursensoren bij Conrad.nl online bestellen

    Dallas DS18S20 Temperatuursensor met directe digitale uitgang -50 tot +125 �C in .... NTC-temperatuursensor -30 - +105 �C MJSTS-502-3470-1-600-XH Soort ...
    https://www.conrad.nl/nl/temperatuursen ... 31030.html

    met stekkeraansluiting.
     
  10. TS
    TS
    jan fokke

    jan fokke

    Lid geworden:
    11 aug 2011
    Berichten:
    1.743
    Locatie:
    leeuwarden
    Ik heb er al een besteld via ebay hoop hem volgende week binnen te hebben.
    zodat ik dan weer verder kan gaan met dit project
     
  11. Stefanfr

    Stefanfr

    Lid geworden:
    23 sep 2015
    Berichten:
    271
    Heb je de waterproof versie besteld? die zijn vrij handig moet ik zeggen.
    Om hem aan te sluiten gebruik ik geen pullup resistor of dergelijke dit kan arduino namelijk zelf.
    Deze library heb je daar voor nodig
    daar in zit deze code voor de no-pullup die kun je dus een beetje tweaken voor jou programma:
    Code:
    #include <OneWire.h>
    #include <DallasTemperature.h>
    
    // This is an updated version of the Tester program that comes with the DallasTemp library
    // It will drive a DS18x20 tempurature sensor plugged directly to the Arduino header pins 8,9, and 10.
    // The flat side of the sensor should face into the center of the board.
    // More info and a video here...
    // http://wp.josh.com/2014/06/23/no-external-pull-up-needed-for-ds18b20-temp-sensor/#more-1892
    
    
    // Data wire is plugged into port 2 on the Arduino
    #define ONE_WIRE_BUS 9
    
    // Uncomment this line if you are using the updated dallas_temp_library that 
    // supports the busFail() method to diagnose bus problems
    // #define BUSFAIL 
    
    // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
    OneWire oneWire(ONE_WIRE_BUS);
    
    // Pass our oneWire reference to Dallas Temperature. 
    DallasTemperature sensors(&oneWire);
    
    void setup(void)
    {
      
      // This lines just make it so you can plug a DS18B20 directly into 
      // digitial pins 8-10. 
      
      digitalWrite( 8 , LOW );
      pinMode( 8  , OUTPUT );
      digitalWrite( 10 , LOW );  
      pinMode( 10 , OUTPUT );
      
      // start serial port
      Serial.begin(9600);
      Serial.println("Dallas Temperature IC Control Library Demo");
      
    }
    
    
    void loop(void)
    { 
      
      #ifdef BUSFAIL
      
        Serial.print(" Test:");
          
        if (sensors.reset()) {
          
          Serial.print("good");
          
        } else {
          
          if (sensors.busFail()) {
            
            Serial.print("fail");
            
          } else {
            
            Serial.print("empty");
            
          }
            
        }
        
      #endif 
    
      int numberOfDevices; // Number of temperature devices found
    
      DeviceAddress tempDeviceAddress; // We'll use this variable to store a found device address    
      
      // For testing purposes, reset the bus every loop so we can see if any devices appear or fall off
      sensors.begin();
    
      // Grab a count of devices on the wire
      numberOfDevices = sensors.getDeviceCount();
    
      Serial.print(" Parasite:"); 
      if (sensors.isParasitePowerMode()) Serial.print("ON ");
      else Serial.print("OFF ");
        
      Serial.print("Count:");
      Serial.print(numberOfDevices, DEC);
     // report parasite power requirements
    
      sensors.requestTemperatures(); // Send the command to get temperatures
      
      // Loop through each device, print out temperature data
      for(int i=0;i<numberOfDevices; i++)
      {
        // Search the wire for address
        if(sensors.getAddress(tempDeviceAddress, i))
    	{
    		// Output the device ID
    		Serial.print(" #");
    		Serial.print(i,DEC);
    		Serial.print("=");
    
    
                    float tempC = sensors.getTempC(tempDeviceAddress);
    
                    Serial.print(DallasTemperature::toFahrenheit(tempC)); // Converts tempC to Fahrenheit
    
    	} 
    	//else ghost device! Check your power requirements and cabling
    	
      }
      
     Serial.println("");
      
     delay(1000);
    }
    
    // function to print a device address
    void printAddress(DeviceAddress deviceAddress)
    {
      for (uint8_t i = 0; i < 8; i++)
      {
        if (deviceAddress[i] < 16) Serial.print("0");
        Serial.print(deviceAddress[i], HEX);
      }
    }
    

    Voor het digitaal (automatisch) kalibreren van de ph probe moet je de analoge versie op het bord, de schroefjes, helemaal open draaien en dan in je programma de waarde opslaan in je EEPROM die je krijgt bij een lage eikvloeistof als 0 punt voor je metingen en daarna met een hogere eikvloeistof controleren of hij accuraat is
     
  12. TS
    TS
    jan fokke

    jan fokke

    Lid geworden:
    11 aug 2011
    Berichten:
    1.743
    Locatie:
    leeuwarden
    oke ik zal morgen avond er weer even verder mee gaan prutsen en hopelijk heb ik dan ook de temperatuursensor binnen en zo. en anders eerst met het bestaande spul verder af maken en dan kan de rest er later als ik het binnen heb nog ingebouwd worden.

    Want ik wil het volgende nog gaan doen:

    temperatuur meten en bijstellen met verwarming.

    Menu maken zodat ik daar als startscherm de parameters zie van temperatuur en pH
    en dan in het menu een ding waar ik de pH kan instellen en nog een voor de temperatuur

    en misschien komen er in de toekomst ook nog wel meer dingen bij maar dat moet ik nog even zien.
     
  13. Stefanfr

    Stefanfr

    Lid geworden:
    23 sep 2015
    Berichten:
    271
    Wanneer je dit met de temperatuursensor gaat realiseren zou ik een relais op je heater maken zodat je deze via je programma uit en aan kunt zetten. Dan de heater op max zetten of voor wat meer veiligheid 1 a 2 graden warmer dan je je aquarium wilt hebben zodat wanneer je programma niet goed functioneert je aquarium niet aan de kook gaat.
    Dit is vrij makkelijk te maken en z'n relaisbordje kost een paar euro.
    http://www.ebay.com/itm/5V-Two-2-Channel-Relay-Module-With-optocoupler-For-PIC-AVR-DSP-ARM-Arduino-/181026509345?hash=item2a26055221:g:aVcAAOSw0e9UvczK
    Dit is er een met 2 relais kun je eventueel je co2 of licht er ook op aansluiten en ook deze via het programma uit en aan zetten
     
  14. TS
    TS
    jan fokke

    jan fokke

    Lid geworden:
    11 aug 2011
    Berichten:
    1.743
    Locatie:
    leeuwarden
    CO2 wordt al aangestuurd via een relais en dit ga ik ook met de verwarming doen en ik gan ze zelf maken is wel zo leuk en waar ik het doe hebben ze ook de techniek om zelf van die bordjes te maken.
    Zie ook schema hier boven is van het solid state relais voor de CO2
     
  15. Stefanfr

    Stefanfr

    Lid geworden:
    23 sep 2015
    Berichten:
    271
    Nice, Maar ik hoop niet etsen enz?
    Dit zal in het begin wel werken maar is zeer gevoelig voor kortsluiting en beschadigingen dat het enkel voor prototyping gebruikt word. Je kunt dual layer printplaten ook uit china laten komen, zijn sites die dit goedkoop aanbieden en als je langer kan wachten doen ze het ook in bulk (met andere klanten) krijg je extra korting
     
  16. TS
    TS
    jan fokke

    jan fokke

    Lid geworden:
    11 aug 2011
    Berichten:
    1.743
    Locatie:
    leeuwarden
    oke ik weet niet wat ik gebrukt heb maar heb hem nog niet verder in elkaar gezet. Gister eerst wat testjes uitgevoerd en nu blijkt dat ik verkeerde pH waarden krijg want bij natrium hydroxide krijg ik een waarde van 2,00. Kan iemand mij vertellen of het aan de code ligt die ik gebruikt heb of dat er in de aansluiting iets fout zit.
     
  17. TS
    TS
    jan fokke

    jan fokke

    Lid geworden:
    11 aug 2011
    Berichten:
    1.743
    Locatie:
    leeuwarden
    iemand een idee
     
  18. TS
    TS
    jan fokke

    jan fokke

    Lid geworden:
    11 aug 2011
    Berichten:
    1.743
    Locatie:
    leeuwarden
    klopt de code wel want ik krijg vreemde waarden als ik de ph meter in ph vloeistof hang.
     
  19. @Tom

    @Tom Erelid

    Lid geworden:
    3 apr 2003
    Berichten:
    6.314
    Locatie:
    Eindhoven
    Er bestaan van 1 merk kleine zakjes met de standaard calibreer-vloeistoffen.
    Misschien is het handiger om daarmee eerst eens de analoge procedure te doorlopen.
     
  20. Peter_w

    Peter_w

    Lid geworden:
    22 jun 2009
    Berichten:
    3.730
    Locatie:
    Nijmegen
    Je moet de pH circuit wel eerst kalibreren. Die schroefjes zijn waarschijnlijk voor de gain en nulpunt(pH7) van het circuit af te stellen, je moet hem dus afstellen, de tong in juiste hoek houden en met schroevendraaier aan de slag gaan met beide potmeters.

    Wat een karige informatie geven die chinezen(?) weer, als het nu printje was van 1 a 2 euro, maar ze reken iets van 15 a 20 euro voor pH circuit printje. Ik denk dat je beste flesje pH4 en pH7 kan kopen, en dan twee kleine smalle flesjes regelt waar je tekens wat kan overgieten, heb maar iets van 5ml nodig per keer, Sera heeft flesjes van 100ML voor 6 euro ongeveer. En dan maar gewoon gaan testen hoe hij reageert op de potmeters.

    Tijdens paar dagen testen hoef je niet steeds nieuwe te pakken, zorg dat je de probe goed droog maakt als je hem van pH4 naar pH7 overzet om besmetting te voorkomen, en na gebruik afsluit om verdamping te voorkomen. Heb het wel eens weken gebruikt en dan week het maar 0.2 af na die tijd, dat afwijken maakt tijdens het testen niks uit en scheelt je hoop geld.

    Heb je pH meter bij de hand, dat is wel handig om er pH meter bij te hebben zodat je ze parallel naast elkaar kan laten draaien om te kijken of alles goed gaat.
     
  21. TS
    TS
    jan fokke

    jan fokke

    Lid geworden:
    11 aug 2011
    Berichten:
    1.743
    Locatie:
    leeuwarden
    Oke ik zal er vrijdag of van het weekend wel eens weer mee gaan prutsen en kijken of ik er een beetje goede waarden uit krijg.
    Ja de pH buffers heb ik al gehaald.
    en nee ik heb er niet naast nog een pH meter liggen.
     
  22. TS
    TS
    jan fokke

    jan fokke

    Lid geworden:
    11 aug 2011
    Berichten:
    1.743
    Locatie:
    leeuwarden
    vandaag wat aan de potmeters lopen draaien maar krijg de ph niet naar 7 :S

    Dus mijn vraag klopt de code van pH meter wel. Of moet ik een andere code gaan gebruiken.
     
  23. TS
    TS
    jan fokke

    jan fokke

    Lid geworden:
    11 aug 2011
    Berichten:
    1.743
    Locatie:
    leeuwarden
    ik snap niet wat er mis gaat en waarom ik er geen normale waarden uit kan krijgen ook bij de buffer van 4 krijg ik een waarde van rond de 14 of zo ongeveer.
     
  24. tuinkabouter

    tuinkabouter

    Lid geworden:
    18 jan 2010
    Berichten:
    4.629
    Locatie:
    alkmaar
    ik denk dat je offset voltage niet geheel klopt.
    aan de code te zien is het de DFrobot PH-probe?
    je moet dan volgens mij in de code de offset aanpassen aan de hand van het terug gegeven voltage.

    ik heb me er ooit eens in verdiept maar vond het teveel werk :P
    de potmeter op het printplaatje doet niet heel veel volgens mij
     
  25. tuinkabouter

    tuinkabouter

    Lid geworden:
    18 jan 2010
    Berichten:
    4.629
    Locatie:
    alkmaar
    #define Offset 0.00 //deviation compensate
    deze waarde moet geen 0 zijn als ik het goed heb, je zou even rond kunnen neuzen op plantedtank.net daar zijn meerdere DIY ph meters gemaakt met de DFrobot code, misschien dat ze je daar verder kunnen helpen
     
  26. TS
    TS
    jan fokke

    jan fokke

    Lid geworden:
    11 aug 2011
    Berichten:
    1.743
    Locatie:
    leeuwarden
    ik heb de probe via e bay gekocht net als het print plaatje.
    deze code heb ik gewoon op internet gevonden en ik zou het ook niet wten of het wel de juiste code is voor dit plaatje en probe.
     
  27. Stefanfr

    Stefanfr

    Lid geworden:
    23 sep 2015
    Berichten:
    271
    Heb je een linkje van ebay waar je em gekocht hebt?
     
  28. Stefanfr

    Stefanfr

    Lid geworden:
    23 sep 2015
    Berichten:
    271
    Code:
    #define SensorPin A0            //pH meter Analog output to Arduino Analog Input 0
    #define Offset 0.00            //deviation compensate
    #define LED 13
    #define samplingInterval 20
    #define printInterval 800
    #define ArrayLenth  40    //times of collection
    int pHArray[ArrayLenth];   //Store the average value of the sensor feedback
    int pHArrayIndex=0;    
    void setup(void)
    {
      pinMode(LED,OUTPUT);  
      Serial.begin(9600);  
      Serial.println("pH meter experiment!");    //Test the serial monitor
    }
    void loop(void)
    {
      static unsigned long samplingTime = millis();
      static unsigned long printTime = millis();
      static float pHValue,voltage;
      if(millis()-samplingTime > samplingInterval)
      {
          pHArray[pHArrayIndex++]=analogRead(SensorPin);
          if(pHArrayIndex==ArrayLenth)pHArrayIndex=0;
          voltage = avergearray(pHArray, ArrayLenth)*5.0/1024;
          pHValue = 3.5*voltage+Offset;
          samplingTime=millis();
      }
      if(millis() - printTime > printInterval)   //Every 800 milliseconds, print a numerical, convert the state of the LED indicator
      {
        Serial.print("Voltage:");
            Serial.print(voltage,2);
            Serial.print("    pH value: ");
        Serial.println(pHValue,2);
            digitalWrite(LED,digitalRead(LED)^1);
            printTime=millis();
      }
    }
    double avergearray(int* arr, int number){
      int i;
      int max,min;
      double avg;
      long amount=0;
      if(number<=0){
        Serial.println("Error number for the array to avraging!/n");
        return 0;
      }
      if(number<5){   //less than 5, calculated directly statistics
        for(i=0;i<number;i++){
          amount+=arr[i];
        }
        avg = amount/number;
        return avg;
      }else{
        if(arr[0]<arr[1]){
          min = arr[0];max=arr[1];
        }
        else{
          min=arr[1];max=arr[0];
        }
        for(i=2;i<number;i++){
          if(arr[i]<min){
            amount+=min;        //arr<min
            min=arr[i];
          }else {
            if(arr[i]>max){
              amount+=max;    //arr>max
              max=arr[i];
            }else{
              amount+=arr[i]; //min<=arr<=max
            }
          }//if
        }//for
        avg = (double)amount/(number-2);
      }//if
      return avg;
    }
    
     
  29. TS
    TS
    jan fokke

    jan fokke

    Lid geworden:
    11 aug 2011
    Berichten:
    1.743
    Locatie:
    leeuwarden
  30. Tempest67

    Tempest67

    Lid geworden:
    15 jun 2014
    Berichten:
    168
    Locatie:
    Omgeving Delfzijl
  31. TS
    TS
    jan fokke

    jan fokke

    Lid geworden:
    11 aug 2011
    Berichten:
    1.743
    Locatie:
    leeuwarden
    Die had ik zelf ook al gevonden en geprobeerd maar nog steeds niet heel veel er uit weten te krijgen

     
  32. Stefanfr

    Stefanfr

    Lid geworden:
    23 sep 2015
    Berichten:
    271
    Wat versta je onder rare waardes?
    Zijn deze constant of vari�ren deze?
     
  33. TS
    TS
    jan fokke

    jan fokke

    Lid geworden:
    11 aug 2011
    Berichten:
    1.743
    Locatie:
    leeuwarden
    de waarden zijn wel constant maar gewoon dat als je de electrode in ph buffer van 4 steekt je iets van 14 er uit komt.
     
  34. tuinkabouter

    tuinkabouter

    Lid geworden:
    18 jan 2010
    Berichten:
    4.629
    Locatie:
    alkmaar
    kan je verschillende waardes meten op de probe zelf als je hem in verschillende vloeistoffen doopt?
    verschillen zitten in millivolten op een analoge ph meter
     
  35. TS
    TS
    jan fokke

    jan fokke

    Lid geworden:
    11 aug 2011
    Berichten:
    1.743
    Locatie:
    leeuwarden
    Ja dat kan ik wel maar het probleem zit hem in die gain snap niet welke aarden die daarvoor gebruikt