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

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

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

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

Q&A

1回答

4379閲覧

Arduinoで風速センサを使いたい

wai-wai

総合スコア0

Arduino

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

0グッド

1クリップ

投稿2020/11/17 14:54

編集2020/11/25 00:12

前提・実現したいこと

風速センサ(Wind Sensor Rev.C(https://moderndevice.com/product/wind-sensor/))で風速を計測したいです。
最終的にはarduinoを使って空気温度、相対湿度、黒球温度、風速を計測し、それらのデータからPMVという値を出したいと考えています。

発生している問題・エラーメッセージ

現時点では空気温度、相対湿度、黒球温度は各種センサを用いて適した値を計測することが出来ましたが、風速センサだけ値のズレが大きくなってしまいます。
具体的には、無風状態にも関わらず風速7m/s以上の値が計測されたり、息を少し吹きかけただけで風速が20m/sを超えるなどです。
時間経過で無風状態で0m/sを示すこともありますが、その場合でも息を吹きかけると20m/sを超えていました。

該当のソースコード

/* Modern Device Wind Sensor Sketch for Rev C Wind Sensor * * Hardware Setup: Wind Sensor Signals Arduino GND GND +V 5V RV A1 // modify the definitions below to use other pins TMP A0 // modify the definitions below to use other pins Paul Badger 2014 Original at https://github.com/moderndevice/Wind_Sensor Licensed for use on official Modern Device hardware Reproduced with the permission of Paul Badger Revised by John Keefe 2016 Hardware setup: Wind Sensor is powered from a regulated five volt source. RV pin and TMP pin are connected to analog inputs. */ #define analogPinForRV 1 // change to pins you the analog pins are using #define analogPinForTMP 0 const float zeroWindAdjustment = .2; int TMP_Therm_ADunits; float RV_Wind_ADunits; float RV_Wind_Volts; unsigned long lastMillis; int TempCtimes100; float zeroWind_ADunits; float zeroWind_volts; float WindSpeed_MPH; void setup() { Serial.begin(9600);//シリアル通信を9600bpsで初期化 } void loop() { if (millis() - lastMillis > 200){ TMP_Therm_ADunits = analogRead(analogPinForTMP); RV_Wind_ADunits = analogRead(analogPinForRV); RV_Wind_Volts = (RV_Wind_ADunits * 0.0048828125); // these are all derived from regressions from raw data as such they depend on a lot of experimental factors // such as accuracy of temp sensors, and voltage at the actual wind sensor, (wire losses) which were unaccouted for. TempCtimes100 = (0.005 *((float)TMP_Therm_ADunits * (float)TMP_Therm_ADunits)) - (16.862 * (float)TMP_Therm_ADunits) + 9075.4; zeroWind_ADunits = -0.0006*((float)TMP_Therm_ADunits * (float)TMP_Therm_ADunits) + 1.0727 * (float)TMP_Therm_ADunits + 47.172; // 13.0C 553 482.39 zeroWind_volts = (zeroWind_ADunits * 0.0048828125) - zeroWindAdjustment; WindSpeed_MPH = pow(((RV_Wind_Volts - zeroWind_volts) /.2300) , 2.7265); Serial.print("風速:");//文字列「風速」をシリアルモニタに送信 Serial.print(WindSpeed_MPH);//「temperature」をシリアルモニタに送信 Serial.println("m/s");//文字列「m/s」をシリアルモニタに送信、改行 lastMillis = millis(); } }

試したこと

センサ本体に問題があるかと思い、幾つか購入して試してみましたが、いずれも同様の結果となっていました。
arduino本体も幾つか変えながら行いましたがいずれも変わりませんでした。
残る可能性としてコードがおかしい可能性があると思い送らせていただきました。

このサイトで送ってよい質問なのかも分かっていない初心者ですがお力添えいただければ幸いです。

【追記】
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10234596555?fr=chie_my_notice_newans
thkanaさんからのご指摘をいただき、yahoo知恵袋のURLを追記しました。
マルチポストをした理由としては、こちらのサイトでは特定のセンサの不具合点について質問することはふさわしくない可能性があると思ってしまったためです。
このようなルールがあったことも知らずに投稿をしてしまい申し訳ございませんでした。
また、あちらにはお礼の返信を出来ていなかったことをお詫び申し上げます。
皆様本当にありがとうございました。

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

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

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

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

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

thkana

2020/11/17 23:13

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10234596555 https://teratail.com/help#posted-otherservice 「やむを得ず複数のサイトに質問を投稿された場合は、質問内容にマルチポストをする理由を書き、他のサイトの投稿へのリンクを貼ってください。また、解決した際には必ずteratail及びすべての投稿に解決した旨と、どのように解決したかを記載してください。」 だそうですので、適宜処置して下さい。
thkana

2020/11/17 23:34

最後に得られた風速だけではなく、 そのサンプルプログラムの元にあったように、直接ADして得られた値も表示して、「ナマの値」がどのような振る舞いをしているのか検討してみてはいかがでしょう。
wai-wai

2020/11/24 23:53

そのようなルールがあったのですね… ご指摘いただき誠にありがとうございます。追記致しました。 「ADする」というのは最後の風速だけでなく、それ以前の計算過程の数字を確認するという認識でよろしかったでしょうか。
thkana

2020/11/25 22:20

「ADする」はついクチが滑りましたが、「電圧値をADコンバータを通して取り込む」意です。 最後の値がおかしい、なら、入力値は、途中の値は、正しいか? と調べていくのが普通の検討過程かと思います。入力が妥当なら、途中の計算がおかしいし、入力値がおかしいならセンサ~ADの辺を疑うし。 で、解決したのなら「解決した際には必ずteratail及びすべての投稿に解決した旨と、どのように解決したかを記載してください。」の方をお願いします。https://teratail.com/help#resolve-myself に準じて、自分で回答を作成すればよいかと思います。 「あなたの問題を解決する」とともに、「将来同様の問題に捕まった人の解決のためにその道筋を記録する」ことがQ&Aサイトの目的とされているので、その視点で情報を集積して下さい。
guest

回答1

0

リファレンスにように、A*にしてください。

c

1The code reads the voltage on analogPin and displays it. 2 3int analogPin = A3; // potentiometer wiper (middle terminal) connected to analog pin 3 4 // outside leads to ground and +5V 5int val = 0; // variable to store the value read 6 7void setup() { 8 Serial.begin(9600); // setup serial 9} 10 11void loop() { 12 val = analogRead(analogPin); // read the input pin 13 Serial.println(val); // debug value 14}

投稿2020/11/25 03:45

herobo

総合スコア153

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問