ESP32Sを用いて肥料濃度(EC)と水温を計測したいのですが上手くいきません。具体的には、計測した際のシリアルモニタが表示が以下になります。値が変わらない状態です。
20:13:04.729 -> Rc: 4185315.75 EC: -0.00 Simens 0 ppm -127.00 *C 20:13:10.510 -> Rc: 4185315.75 EC: -0.00 Simens 0 ppm -127.00 *C 20:13:16.244 -> Rc: 4185315.75 EC: -0.00 Simens 0 ppm -127.00 *C 20:13:21.991 -> Rc: 4185315.75 EC: -0.00 Simens 0 ppm -127.00 *C 20:13:27.739 -> Rc: 4185315.75 EC: -0.00 Simens 0 ppm -127.00 *C 20:13:33.529 -> Rc: 4185315.75 EC: -0.00 Simens 0 ppm -127.00 *C 20:13:39.257 -> Rc: 4185315.75 EC: -0.00 Simens 0 ppm -127.00 *C 20:13:45.018 -> Rc: 4185315.75 EC: -0.00 Simens 0 ppm -127.00 *C 20:13:50.773 -> Rc: 4185315.75 EC: -0.00 Simens 0 ppm -127.00 *C 20:13:56.507 -> Rc: 4185315.75 EC: -0.00 Simens 0 ppm -127.00 *C 20:14:02.271 -> Rc: 4185315.75 EC: -0.00 Simens 0 ppm -127.00 *C 20:14:08.010 -> Rc: 4185315.75 EC: -0.00 Simens 0 ppm -127.00 *C 20:14:13.776 -> Rc: 4185315.75 EC: -0.00 Simens 0 ppm -127.00 *C 20:14:19.556 -> Rc: 4185315.75 EC: -0.00 Simens 0 ppm -127.00 *C
これを作成する際に参考にしたサイトが以下になります。
URL
1https://nomad-life.net/19341577/%e6%a0%bd%e5%9f%b9-%e7%ae%a1%e7%90%86/%e6%b0%b4%e8%80%95%e6%a0%bd%e5%9f%b9%e3%81%ab%e4%bd%bf%e3%81%88%e3%82%8bec%e8%a8%88%e3%82%92%e8%87%aa%e4%bd%9c%e3%81%99%e3%82%8b/ec%e8%a8%88%e3%82%92%e8%87%aa%e4%bd%9c%e3%81%97%e3%81%a6%e3%81%bf%e3%81%9f%e3%82%89%e6%b0%b4%e8%80%95%e6%a0%bd%e5%9f%b9%e3%81%ab%e4%bd%bf%e3%81%88%e3%81%9d%e3%81%86%e3%81%a7%e3%81%99
また、サイトから引用したコードです
Arduino
1#include <OneWire.h> 2#include <DallasTemperature.h> 3int R1= 1000; 4int Ra=22; //arduino Ra=25; eso32 Ra=22 5int ECPin= 32; //INPUT 6int ECGround=25; //OUTPUT 7int ECPower =33; //OUTPUT 8 9float PPMconversion=0.7; //セル定数 [USA] PPMconverion: 0.5 [EU] PPMconversion: 0.64 [Australia] PPMconversion: 0.7 10float TemperatureCoef = 0.019; //温度補正 0.02が多い。 11float K=2.88; 12 13#define ONE_WIRE_BUS 14 14const int TempProbePossitive =26; //ds18b20 VCC 15 16OneWire oneWire(ONE_WIRE_BUS); 17DallasTemperature sensors(&oneWire); 18 19float Temperature; 20float EC=0; 21float EC25 =0; 22int ppm =0; 23float raw= 0; 24float Vin= 3.3; //5; 25float Vdrop= 0; 26float Rc= 0; 27float buffer=0; 28 29void setup(){ 30 Serial.begin(115200); 31 pinMode(TempProbePossitive , OUTPUT ); 32 digitalWrite(TempProbePossitive , HIGH ); 33 pinMode(ECPin,INPUT); 34 pinMode(ECPower,OUTPUT); 35 pinMode(ECGround,OUTPUT); 36 digitalWrite(ECGround,LOW); 37 38 delay(100); 39 sensors.begin(); 40 delay(100); 41 R1=(R1+Ra); 42} 43void loop(){ 44 45GetEC(); 46PrintReadings(); 47 48delay(5000); 49 50} 51void GetEC(){ 52 53sensors.requestTemperatures(); 54Temperature=sensors.getTempCByIndex(0); 55 56digitalWrite(ECPower,HIGH); 57raw= analogRead(ECPin); 58delay(2); //esp32の計算速度が速いので2ミリ秒待機 59raw= analogRead(ECPin);//静電容量の影響を抑えて再度計測 60digitalWrite(ECPower,LOW); 61 62Vdrop=(Vin*raw)/4096.0; //arduinoでは4096→1024に変更する。 63Rc=(Vdrop*R1)/(Vin-Vdrop); 64Rc=Rc-Ra; //acounting for Digital Pin Resitance 65EC = 1000/(Rc*K); 66 67EC25 = EC/ (1+ TemperatureCoef*(Temperature-25.0)); 68ppm=(EC25)*(PPMconversion*1000); 69 70} 71 72void PrintReadings(){ 73Serial.print("Rc: "); 74Serial.print(Rc); 75Serial.print(" EC: "); 76Serial.print(EC25); 77Serial.print(" Simens "); 78Serial.print(ppm); 79Serial.print(" ppm "); 80Serial.print(Temperature); 81Serial.println(" *C "); 82}
ハードの問題かコードの問題かも分からない状態です。
ご助言頂けないでしょうか。
よろしくお願いいたします。