気になっていたstrawberrylinuxのウェザーメーター。
https://strawberry-linux.com/catalog/items?code=18078
Sparkfun本国のサイトでarduinoのスケッチを発見したのと、DHT22を追加発注したのでついでに注文してみた。
さっそくつないでみたが、スケッチではなぜか風向きが逆方向で出力される。
ドキュメントを見ると16方向の時に得られる抵抗値が記載されている。
実際に調べてみると、若干の相違?というか誤差レベルの抵抗値も出力されているようだ。
| 抵抗値 | 方角 |
| 15 | ESE |
| 16 | ESE |
| 20 | E |
| 22 | E |
| 23 | E |
| 31 | SSE |
| 45 | SE |
| 46 | SE |
| 60 | SSW |
| 61 | SSW |
| 71 | S |
| 101 | NNE |
| 115 | NE |
| 150 | WSW |
| 157 | SW |
| 158 | SW |
| 176 | NNW |
| 196 | N |
| 197 | N |
| 207 | WNW |
| 222 | NW |
| 236 | W |
このまま得られた抵抗値をシリアルに出力して、PHPで方角に変換したほうが楽であろう。
風速は 1.492 MPh / hz だそうだ。 1マイル=1.60934キロだから? 約2.4kmか。日本では普通風速はm/sなので、÷60の÷60。2400m/60/60=0.66666m。
1秒かけて1周させれば0.67mってことか。仮に5秒置きに計測するとして5秒間で20周したら?1秒間に4周=0.67*4=2.68m/sか。
別のところから拾ってきたコードでは、km/hの計算で、下記の通り。
WindSpeed = (numRevsAnemometer/ 5) * 2.4; //2.4 K/h for one switch closure per second ってなっているから、20 /5 * 2.4 k/h = 9.6 k/h = 2.66666666m。
うん、あっている。これも指定秒間あたりの回転数を出力させてしまえば良いか。計算は母艦で。
で、スケッチ
/* Arduino sketch for Weather device from Sparkfun. これはネットで拾ったスケッチを改修しています。 私のオリジナルではありません。 ========================================================= ANEMOMETER ========================================================= 風速計はgndと2番ピンにつなぐ。 パルスを拾うために attachInterrupt ができるピンである必要がある。 1パルス = 0.67m/s となる。 初期値では5秒あたりの回転数を出力する。 風速計はモジュラーの4ピンの内、2番と3番(内側)。 極性はなさそう。 ========================================================= WIND DIRECTION VANE ========================================================= 風向計 モジュラーの1番と4番(外側)。極性はなさそう。 10kの抵抗を与えて下図のように接続。 風向に応じて抵抗値が返ってくるのでそれを変換する必要がある。 (アナログといっても風向で返ってくる値は決まっている) 実測ではこんな感じだった。 抵抗値 方角 15 ESE 16 ESE 20 E 22 E 23 E 31 SSE 45 SE 46 SE 60 SSW 61 SSW 71 S 101 NNE 115 NE 150 WSW 157 SW 158 SW 176 NNW 196 N 197 N 207 WNW 222 NW 236 W 配線図 +5V | < > 10K < Resistor < > | Analog Pin 5------| | -----------| To weather vane | (mystery resistance) -----------| | | ----- --- - *********************************************************************/ #define ulong unsigned long #define PIN_ANEMOMETER 2 // Digital 2 風速 #define PIN_VANE 5 // Analog 5 風向 // 5秒置きに出力 #define MSECS_CALC_WIND_SPEED 5000 #define MSECS_CALC_WIND_DIR 5000 volatile int numRevsAnemometer = 0; // 回転数 ulong nextCalcSpeed; // 風速を次に出力する時間(この秒になったら出力) ulong nextCalcDir; // 風向きを次に出力する時間(この秒になったら出力) ulong time; // 時間の流れ //======================================================= // 初期化 //======================================================= void setup() { Serial.begin(9600); pinMode(PIN_ANEMOMETER, INPUT); digitalWrite(PIN_ANEMOMETER, HIGH); attachInterrupt(0, countAnemometer, FALLING); //割り込み0=ピン2 の割り込み設定 nextCalcSpeed = millis() + MSECS_CALC_WIND_SPEED; //次の計測は現在の+5000ミリ秒 nextCalcDir = millis() + MSECS_CALC_WIND_DIR; } //======================================================= // メインループ //======================================================= void loop() { time = millis();//現在時刻を取得 if (time >= nextCalcSpeed) { //計測時間になったら calcWindSpeed(); nextCalcSpeed = time + MSECS_CALC_WIND_SPEED; //次の計測時間を設定 } if (time >= nextCalcDir) { calcWindDir(); nextCalcDir = time + MSECS_CALC_WIND_DIR; } } //======================================================= //風速の割り込み。回転数を+1 //======================================================= void countAnemometer() { numRevsAnemometer++; } //======================================================= // 風向を出力 //======================================================= void calcWindDir() { int val; val = analogRead(PIN_VANE); val >>=2; // Shift to 255 range(0~255の値にする?) Serial.print("Dir:"); Serial.println(val); } //======================================================= // 風速を出力 (初期値では5秒あたりの回転数となる) //======================================================= void calcWindSpeed() { Serial.print("speed:"); Serial.println(numRevsAnemometer); numRevsAnemometer = 0; // 回転数をリセット } |
春小の芽吹きは、いつになるでしょう(^_^;)
2010年度のブログを拝見させてもらうと4/17播種で5/3には芽吹いてたとの事なので16日後…4/24播種で5/3が芽吹く頃となる様ですが当年の低温.湿潤の環境では、いつになるか…
最悪、不発芽の懸念も(>_<)
コメント by レイン — 2013年5月8日 @ 6:45 PM
育苗管理を終えたシステムの他用途なんですがハウスの外(圃場や自宅周辺)での使用が可能ならばカメラの向き(欲を言えば望遠機能も)を遠隔操作できる機能が有れば活用の幅も広がるように感じます。
育苗管理システムの仕上がり期待してますよ〜(^_^)
コメント by レイン — 2013年5月8日 @ 7:07 PM
本日も天候悪く、農作業はできませんねぇ~。
すっきり晴れるのは一体いつになるのでしょうか・・・。
春小も芽が出てこないし。
さて、育苗管理システムですが、「カメラの向きを変える」というのは実は実験済みなのです。
サーボを動かすことができたのでこれにカメラを設置してしまえば
可能なんです。・・・が、左右の動き(パン)ができるようになると上下の動き(チルト)もさせたくなります。
そうなると、サーボを動かすだけではダメでカメラを設置する台なりを作らねばならなくってしまい、そのからくりが非常に手間がかかるかなぁ、と。
諦めてしまいました。3Dプリンタでもあればこの辺の工作がかなりラクにできそうなんですけどね~。
ズームに関しては使用しているUSBカメラがズームに対応していないことで、まぁ難しいですね。所詮200万画素のカメラではデジタルズームにすると画素が荒くて。
その他構想としては
・スマートフォン・PCの操作でライトをつける(実証済み)
・ソリッドステートリレーを使って、AC電源をとる。例えば設定温度を下回ったら電源を入れる、とか。
・近接センサーを使って夜間の動物侵入時にライトオン、映像記録。
と、いうのを考えており、いずれも実験のためのパーツは揃えていたりします。
コメント by pinewell — 2013年5月10日 @ 11:18 AM