Ich habe diese Sensormodulplatine gekauft, um eine Verbindung zu einem Arduino-Nano herzustellen: http://www.ebay.com/itm/For-Arduino-Liquid-PH-Value-Detection-detect-Sensor-Module -Monitoring-Controller / 321764233326
Ich nahm an, dass die beiden Schrauben zur Kalibrierung bestimmt waren (Tiefpunkt + Steigung), aber es scheint, dass die Bedienung anders ist und ich nicht herausfinden kann, wie. Ich habe zwei Referenzflüssigkeiten für pH von 4,0 und 7,0. Wenn ich die Sonde in eine der beiden stecke, erhalte ich Messwerte. Das Drehen einer der beiden Schrauben scheint den Messwert auszugleichen, so dass ich zum Beispiel einen pH-Wert von 4 = 900 und einen pH-Wert von 7 = 1000 (Bereich 0 - 1023) hatte. Das Drehen einer von zwei Schrauben würde den Wert etwas senken, aber er wird nie unter 500 oder so.
Ich kann also zwei Punkte (4.0 und 7.0) und ihre jeweiligen Messwerte messen. Auf diese Weise konnte ich Punkte dazwischen berechnen, aber soweit ich weiß, ist der pH-Wert keine lineare Skala, sondern logarithmisch. Wenn ich das falsch verstehe, scheint der Messwert richtig zu sein, zeigt aber nur 4.0 und 7.0 korrekt und nicht den Rest der Werte (ich habe momentan keine 10.0 Referenzflüssigkeit).
Nun zur zweiten Schraube, diese schien zunächst nichts zu tun. Aber dann bemerkte ich, dass es eine Art Schwellenwert festlegt, indem eine LED auf der Platine ein- und ausgeschaltet wird. Diese LED scheint mit dem gelesenen Wert verbunden zu sein, aber ist es ein weiterer Zweck? Kalibrierung? Keine Ahnung.
Ok, also im besten Fall hat jemand ein gleiches Modul und möchte detailliert beschreiben, wie es funktioniert. Ansonsten haben einige von Ihnen vielleicht gute Ideen, was ich versuchen könnte, damit dies so funktioniert, wie ich es möchte :)
Update 09-11-2015
Ich habe Feedback vom Verkäufer erhalten. Sie hat mir die folgende Postleitzahl gesendet: http://1drv.ms/1MSk1DX. Es enthält einige Dateien auf Chinesisch, aber einer hatte Quellcode. Versuchte es auf meinem Arduino, aber leider machen die Werte immer noch nicht viel Sinn. Je nachdem, wie ich den Knopf auf dem Druck drehe, erhalte ich Werte zwischen 9 und 17 für eine Flüssigkeit, die im realen Leben 7.0 ist. Ich habe nicht versucht, aber bezweifle, dass es sinnvoll ist, einen Offset von -7 zu machen.
Der Code selbst ist ziemlich einfach und nimmt einen 6-Zentren-Durchschnitt von zehn aufeinander folgenden Messungen vor. Die interessanten Zeilen sind folgende:
avgValue = 0; für (int i = 2; i<8; i ++) // nimm den Durchschnittswert von 6 Mittelstichprobe avgValue + = buf [i]; float phValue = (float) avgValue * 5.0 / 1024/6; // konvertiere das Analog in Millivolt phValue = 3.5 * phValue + Offset;
Vielleicht kann jemand einen Sinn daraus machen, weil ich es nicht kann. Ich verstehe die 5.0-Multiplikation und die 3.5 danach nicht. Woher kommen diese?
Wie auch immer, wenn ich die Sonde in die Speicherflüssigkeit tauche, sinkt mein normales Messgerät auf pH 0,5, während die Software mir 17 gibt (was ein höherer Wert ist als der, den ich beim Lesen meiner 7,0-Flüssigkeit erhalten habe). . Entweder ist mein Board kaputt oder dieser Beispielcode ist nutzlos.
Schaltpläne finden Sie übrigens in der ZIP-Datei.
Update 11-11-2015
Ich habe noch mehr experimentiert. Zuerst fand ich heraus, dass die Messwerte des Moduls für sauerere Flüssigkeiten zunahmen. Also habe ich den Wert umgekehrt, indem ich
buf [i] = 1024 - analogRead (SensorPin) verwendet habe;
Ok, jetzt machten die Werte mehr Sinn. Dann habe ich den Pot so eingestellt, dass er in der Mitte des verfügbaren Bereichs liegt. Ich tauchte die Sonde in die 7.0-Flüssigkeit, las den Wert ab und stellte den Versatz ein. Dann in 4,0 getaucht, den Topf so eingestellt, dass er mit 4,00 übereinstimmt. Hier sind die Ergebnisse:
pH 7,0 Referenz - > 6,27 Satz versetzt auf: 0,73 pH 4,0 Referenz - > 5,17 den Topf angepasst Wert also lesen 4.0pH 7.0 Referenz --> 5.86
Wie ich erwartet hatte, bringt das Einstellen des Topfes auch die 7.0 Referenzreferenz durcheinander. Ich dachte dann, es könnte an der Neigung des Topfes liegen (falls es welche geben würde), also ging ich zuerst zum niedrigsten Wert, um den geringsten Unterschied zu haben. Wieder die Messwerte:
pH 7,0 Referenz - > 8,70 Versatz auf: -1,70 pH 4,0 Referenz - > 5,17 Den Topf so einstellen, dass der Wert 4,0 lautet
pH 7,0 Referenz --> 5,70
Das Interessante dabei ist, dass der Wert 4,0 in beiden Fällen 5,17 lautet, obwohl sich der Topf in einer anderen Position befand. Ich kann aber nicht erklären warum.
Um sicherzustellen, dass die Sonde in Ordnung ist, habe ich mein normales pH-Messgerät neu kalibriert und arbeite wie gewohnt. Dieser hat auch zwei Töpfe, einen für die 7.0-Kalibrierung und einen für die 4.0-Steigung. Die Kalibrierung erfolgt durch Einstellen von 7.0, anschließendes Messen von 4.0 und Einstellen des Steigungstopfs. Messen Sie erneut 7.0, wechseln Sie den 7.0-Topf, messen Sie erneut 4.0 usw., bis die Werte mit ihren Flüssigkeiten übereinstimmen. Normalerweise brauche ich ungefähr 3 - 4 Schleifen, um es richtig zu machen.
Ein weiteres Update
nahm die beiden Behälter mit Referenzflüssigkeiten und begann zu mischen. Dies gab mir Messungen im Bereich von pH 4 - 7,5. Es wurde auch die Speicherflüssigkeit gemessen, die einen pH-Wert von 1,00 hat. Die Ergebnisse befinden sich in einer Excel-Tabelle: http://1drv.ms/1lkAO6e. Die nächste Frage ist, wie dies in eine geeignete Formel konvertiert werden kann.
Update 18-11-2015
Ich arbeite an der Lösung von @ slash-dev did:
Ich habe zuerst den Topf ganz auf den niedrigsten Wert gedreht. Die Messwerte (für pH 7,0) sind wie folgt: niedrig = 540 und hoch = 1017. Code wie folgt:
int rawValue = analogRead (SensorPin); int buf [10]; // Puffer zum Lesen analogfor (int i = 0; i<10; i ++) // 10 Abtastwerte vom Sensor abrufen, um den Wert zu glätten {buf [i] = rawValue; delay (10);} // Sortierung ausgelassen, um die Probenlänge zu reduzierenint avgValue = 0; for (int i = 2; i<8; i ++) // nimm den Durchschnittswert von 6 zentralen Samples avgValue + = (buf [i] - CENTER);
In dieser Phase drucke ich natürlich den Rohwert.
Der Kurzschluss des BNC-Steckers, den ich nicht genau verstehe, sollte ich die Innenseite (wo der Stift hingeht) oder die Außenseite des Steckers kurzschließen? Und kurz zum GND? Ich habe stattdessen die Referenzlösung verwendet.
Jetzt habe ich die Formel hinzugefügt, um die Spannung zu bestimmen. Für den niedrigen Wert, der 0,10 lautet. Ich habe jetzt den Mittelwert von 540 eingegeben, der den Spannungswert auf 0,0 bringt, scheint gut zu sein.
Nun habe ich für Schritt 2 die Sonde in die 4.0-Referenzlösung eingesetzt. Die Spannung lautet jetzt 0,48, Rohwert 637. Ich beginne, den Poti auf die Stelle einzustellen, an der die Spannung 2,25 anzeigt, und höre auf, etwas einzustellen. Raw liest jetzt 1000.
Jetzt kommt der Teil, den ich nicht genau verstehe. Sie sagen, wir können jetzt den pH / V berechnen, aber mit welchen Variablen? Ich meine, -3 / 2.25 ergibt immer -1,33, aber sollte es hier keine Variable geben, je nachdem, wie weit ich den Pot tatsächlich eingestellt habe?
Wenn ich jetzt die Formel zur Berechnung des pH-Werts wie erwartet eingebe, wird für die 4.0-Referenzlösung 4.0 angezeigt. Aber es vermasselt jetzt die 7.0-Lösung, als wir den Topf eingestellt haben, aber es nicht kompensiert haben, soweit ich sehe? Ich habe auch die angepassten pH-Formeln ausprobiert, aber ich denke, diese sind für den ersten Code gedacht, den wir hatten, und nicht für diesen angepassten.
Was fehlt mir also zwischen Schritt 2 und 3, was die Dinge hier durcheinander bringt? Sie geben auch an, dass die Invertierung durch Subtrahieren von 1024 korrekt ist, aber wenn ich das tue, werden die Spannungswerte minus.
Eine andere Sache, über die ich mich wundere; Wenn der Topf eine Steigung sein muss, sollte es nicht eine andere sein als die daneben (wo eine lineare sinnvoller ist)? Weil es nicht so ist, lesen beide "W103 / 143C". In der Zwischenzeit sendet der Anbieter freundlicherweise einen Ersatz, um sicherzustellen, dass es sich nicht irgendwo um einen Hardwaredefekt handelt.
Nächstes Update: :)
Also habe ich jetzt zu meinem ursprünglichen Code zurückgekehrt, um die angepassten pH-Berechnungen zu versuchen. Ich habe die 7.0-Referenzlösung erneut kalibriert und dann die 4.0-Lösung gemessen. Es liest 4.1! Ok, nicht ganz genau, aber auch nicht schlecht. Es ist ein kleiner Unterschied, der genauso gut von der Sonde herrühren könnte, nicht von der teuersten.
Ich frage mich also, ob wir immer noch versuchen sollten, den anderen Ansatz zum Laufen zu bringen, weil er aus irgendeinem Grund besser (wissenschaftlicher?) klingt. Wie auch immer, das ist zumindest viel besser als nichts :)
USB-Stromversorgung vs. verbunden? Eine andere seltsame Sache scheint zu passieren, wenn ich den Nano vom USB-Anschluss meines Geräts trenne Laptop und stattdessen über eine Himbeere mit Strom versorgen. Ich möchte I2C verwenden, um den Wert vom Nano an das RPi zu senden. Dies funktioniert, aber sobald ich den Nano über das RPi (5 V an vIn angeschlossen) mit Strom versorge, sinkt der berechnete pH-Wert?