質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

IoT

IoT(Internet of Things)とは、インターネットがコンピュータなどの情報・通信機器のネットワークだけでなく、世の中のある様々なモノに接続されて自動認識・自動制御・遠隔計測などの能力を備えることです。「モノのインターネット」と一般的にいわれます。

Q&A

2回答

1430閲覧

ESP32で肥料濃度(EC)を計測したいけど何が間違っているかも分からない

aRyo

総合スコア23

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

IoT

IoT(Internet of Things)とは、インターネットがコンピュータなどの情報・通信機器のネットワークだけでなく、世の中のある様々なモノに接続されて自動認識・自動制御・遠隔計測などの能力を備えることです。「モノのインターネット」と一般的にいわれます。

0グッド

0クリップ

投稿2021/08/30 12:08

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}

ハードの問題かコードの問題かも分からない状態です。
ご助言頂けないでしょうか。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2021/08/31 12:00

本件に全く関係のなさそうなタグ[RaspberryPi][ESP8266]は外してください。
aRyo

2021/08/31 12:02

全くではないです。 場合によっては関係します。
thkana

2021/08/31 12:35

この質問にどう関係していますか?
aRyo

2021/08/31 12:38

ラズパイや8266でも同様に作れるので知っている方からのアドバイス待ちです。 なぜそこまで削除してほしいのでしょうか?
thkana

2021/08/31 12:38

この質問に関係ないからです。
aRyo

2021/08/31 12:41

なるほど、回答して貰えないならブラウザバックでお願いいたします。 宜しくお願いいたします。
thkana

2021/08/31 12:42

ブラウザバックってなんですか?
guest

回答2

0

サブルーチンGetECで計算された値がloopに帰ってきていない?print文に値が引き渡しされていないのでは無いでしょうか。グローバル変数なら引き渡しされるはずですが、こんなときは一つ一つの計算された値があるかを確認しましょう。私ならprint文はloop文に入れます。理由はデバックのためです。

http://www.musashinodenpa.com/arduino/ref/index.php?f=2&pos=270

以下簡単な例です。途中のRcやrawの値は取得できていますか?値が取得できていないのであれば、ハード側を見てください。

void loop(){

sensors.requestTemperatures();
Temperature=sensors.getTempCByIndex(0);
Serial.print("Temperature: "); //◆面倒と思いますが一つ一つの入力を確認ください
Serial.print(Temperature);

digitalWrite(ECPower,HIGH);
raw= analogRead(ECPin);
Serial.print("raw: "); //◆面倒と思いますが一つ一つの入力を確認ください
Serial.print(raw);

delay(2);
raw= analogRead(ECPin);
digitalWrite(ECPower,LOW);
Vdrop=(Vin*raw)/4096.0;
Serial.print("Vdrop: "); //◆面倒と思いますが一つ一つの入力を確認ください
Serial.print(Vdrop);

Rc=(Vdrop*R1)/(Vin-Vdrop);
Rc=Rc-Ra; //acounting for Digital Pin Resitance
Serial.print("Rc: "); //◆面倒と思いますが一つ一つの入力を確認ください
Serial.print(Rc);

EC = 1000/(RcK);
EC25 = EC/ (1+ TemperatureCoef
(Temperature-25.0));
Serial.print(EC25); //◆面倒と思いますが一つ一つの入力を確認ください
Serial.print(" Simens ");
Serial.print(ppm); //◆面倒と思いますが一つ一つの入力を確認ください
Serial.print(" ppm ");

ppm = (EC25)(PPMconversion1000);
Serial.print(ppm);   //◆面倒と思いますが一つ一つの入力を確認ください
Serial.println(" ppm "); 

delay(5000);
}

投稿2021/09/25 05:47

nossu

総合スコア29

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ちゃんと見てませんが、参照先ページの「Pinを変更しました」の前後のハードとソフトが入り乱れてしまっていませんか。
「少なくとも」ソース中に#define ONE_WIRE_BUS 14とあるのですから、センサーのdata端子が14ピンにつながるのが普通だと思います。で、変なところを4.7KΩで釣ってしまったので導電率の方もまともに測れていないとか?

投稿2021/08/30 13:27

thkana

総合スコア7639

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aRyo

2021/08/30 23:11 編集

回答ありがとうございます! それでは、4.7KΩを外し25Pinに繋いであるピンを14Pinにすれば良いでしょうか? 一度帰ったら試してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問