Arduinoで日射量を測定する
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
|
このプロジェクトについて
約
温度、湿度、光の強さなど、あらゆる気象条件を測定するために利用できるセンサーはたくさんありますが、日射量を測定するために簡単に利用できるセンサーはありません。これは、日射を毎日肌に感じても、日射量の測定が難しいためです。
太陽放射照度は、測定器の波長範囲の電磁放射の形で太陽から受け取る単位面積あたりの電力です。太陽の波長の広い範囲は、測定を困難にするもう1つの要因です。
日射計は日射計と呼ばれています。日射計は、中国のサプライヤーからでも200ドルから800ドルの費用がかかる可能性があり、平均的な趣味の人にはアクセスできません。あなたはここでそれらについてもっと読むことができます:https://en.wikipedia.org/wiki/Pyranometer
私は最近、自宅用のソーラーパネルの購入を検討していて、それが価値があるかどうかを知りたいと思ったので、私が住んでいる場所で利用できる太陽エネルギーの量を見積もりたいと思いました。
日射計を買うことに興味がなかったので、自分で作ることでお金を節約しながら楽しむことができると思いました。
これが私が自分のクールなガジェットを作るようになった理由です。これははるかに安価で、日射量を見積もるのに役立ちます。計算には、簡単にアクセスできるコンポーネントとArduinoを使用します。私はほとんどのコンポーネントをChinavasionから入手しましたが、ツールや機器はすべて一般的に入手可能であるため、他にもたくさんの場所で調達できます。
セットアップ
1.太陽電池には、2本のワイヤーが必要です。1本はアース(黒)、もう1本はライブ(赤)です。カラーコードが異なる場合、または区別できない場合は、マルチメータで確認してください。マルチメータのプローブを両方のワイヤに接続します。表示されている電圧が正の場合、黒いマルチメータプローブが接続されているワイヤがアースになり、赤いマルチメータのプローブが生きている場合、電圧が負の場合は逆になります。周り。
2.太陽電池のアース線をArduinoのアースに接続し、VCCワイヤを選択した抵抗を介して任意のアナログピンに接続します。このプロジェクトでは、アナログピンA0を使用します。抵抗は、セルの内部抵抗の何倍も大きいと予想されるため、計算にとって非常に重要です。
今のところ必要なのはそれだけです。コーディング部分に移ります。太陽電池は、太陽からの太陽エネルギーを電気エネルギーに変換することによってエネルギーを生成します。太陽からのエネルギー(放射および光エネルギー)は高くなります。生成される電圧は高くなります。この直接比例関係を使用して、日射量を推定します。
次のパラメータが必要になります:
- Arduinoアナログ基準電圧=5V(ボード上で異なる場合があります)
- 太陽電池の最大電圧出力(これは使用している太陽電池パネルによって異なります。これは計算に非常に重要であるため、これを確認する必要があります。平均的な計算機の太陽電池の場合、約5Vです) 。
- 太陽電池の寸法。これは、定規を使用して測定できます(長さ、および領域を見つけるために必要な任意のパラメーター)。
そこで、太陽電池からの電力を計算し、その面積で割ることによって、日射量を推定します。
- Power =pow(analogRead(A0)、2)/ Resistance
- 面積=長さ*幅 (長方形があると仮定)
- 日射=電力/面積
以下にサンプルコードを示します。
/ * ------------------------------------------ -------------------------------------------------- ---------------------------- * /#define ANALOG_PIN A0 //アナログピン#defineRESISTANCE 10 //数千オーム単位の抵抗# define PANEL_LENGTH 60 //太陽電池の長さ(mm)#define PANEL_WIDTH 20 //太陽電池の幅(mmvolatile float面積; volatile float Power; volatile float Radiation; / **メインセットアップ関数* / voidsetup(){//開始シリアル通信Serial.begin(9600); while(!Serial); delay(100);} / **メインセットアップ関数* / voidloop(){Area =PANEL_LENGTH * PANEL_WIDTH /(100 * 100); // 10000で割って面積を平方メートルで取得Power =pow(analogRead(ANALOG_PIN)、2)/ RESISTANCE; // powerRadiationの計算=Power / Area; char * msg; sprintf(msg、 "太陽放射は%f W / M2"、放射); //印刷するメッセージを生成しますSerial.println(msg); delay(1000);} / * ---------------------------- -------------------------------------------------- ---------------------------------------------- * / コード>
通常の日の平均放射照度値は、150〜300 W / M2の範囲です。しかし、これはあなたの場所によって大きく異なります。晴れた日や赤道周辺では900に達することがあります。
インターネット機能を追加するために、イーサネットシールドを使用できます。他に新しい接続を行う必要はありません。シールドをArduinoに取り付け、ピンをシールドの対応する位置に配置するだけです(つまり、Arduinoのピン1はシールドのピン1のままです)
コード
- 日射計のサンプルコード
- イーサネット機能コード
日射計のサンプルコード Arduino
#define ANALOG_PIN A0 //アナログピン#define RESISTANCE 10 //数千オームの抵抗
#define PANEL_LENGTH 60 //太陽電池の長さ(mm)
#define PANEL_WIDTH 20 //太陽電池の幅(mm)
揮発性フロートエリア;
揮発性フロートパワー;
揮発性フロート放射;
/ *
*メインセットアップ機能
* /
void setup(){
//シリアル通信を開始します
Serial.begin(9600);
while(!Serial);
delay(100);
}
/ *
*メインセットアップ機能
* /
void loop(){
面積=PANEL_LENGTH * PANEL_WIDTH /(100 * 100); // 10000で割って面積を平方メートルで取得します
Power =pow(analogRead(ANALOG_PIN)、2)/ RESISTANCE; //電力を計算する
放射=電力/面積;
char * msg;
sprintf(msg、 "太陽放射は%f W / M2"、放射); //印刷するメッセージを生成します
Serial.println(msg);
delay(1000);
}
プレビューなし(ダウンロードのみ)。
イーサネット機能コード Arduino
#include#include
#define ANALOG_PIN A0 //アナログピン
#define RESISTANCE 10 //数千オームの抵抗
#define PANEL_LENGTH 60 //太陽電池の長さ(mm)
#define PANEL_WIDTH 20 //太陽電池の幅(mm)
揮発性フロートエリア;
揮発性フロートパワー;
揮発性フロート放射;
//コントローラのMACアドレスとIPアドレスを以下に入力します。
// IPアドレスはローカルネットワークに依存します:
バイトmac [] ={
0xDE、0x0D、0x8E、0xEF、0xFE、0xED
};
IPアドレスip(192、168、1、177);
//イーサネットサーバーライブラリを初期化します
//使用するIPアドレスとポート
//(ポート80はHTTPのデフォルトです):
EthernetServerサーバー(80);
void setup(){
//シリアル通信を開き、ポートが開くのを待ちます:
Serial.begin(9600);
while(!Serial){
; //シリアルポートが接続するのを待ちます。ネイティブUSBポートにのみ必要
}
//イーサネット接続とサーバーを開始します:
Ethernet.begin(mac、ip);
server.begin();
Serial.print( "サーバーは");
Serial.println(Ethernet.localIP());
}
void loop(){
面積=PANEL_LENGTH * PANEL_WIDTH /(100 * 100); // 10000で割って面積を平方メートルで取得します
Power =pow(analogRead(ANALOG_PIN)、2)/ RESISTANCE; //電力を計算する
放射=電力/面積;
char * msg;
sprintf(msg、 "太陽放射は%f W / M2"、放射); //印刷するメッセージを生成します
//着信クライアントをリッスンします
EthernetClientクライアント=server.available();
if(クライアント){
Serial.println( "新しいクライアント");
// httpリクエストは空白行で終了します
boolean currentLineIsBlank =true;
while(client.connected()){
if(client.available()){
char c =client.read();
Serial.write(c);
//行の終わりに到達した場合(改行を受け取った場合
//文字)、行が空白の場合、httpリクエストは終了しました。
//返信を送信できるようにします
if(c =='\ n' &¤tLineIsBlank){
//標準のhttp応答ヘッダーを送信します
client.println( "HTTP / 1.1 200 OK");
client.println( "Content-Type:text / html");
client.println( "接続:閉じる"); //応答の完了後に接続が閉じられます
client.println( "更新:5"); // 5秒ごとにページを自動的に更新します
client.println();
client.println( "<!DOCTYPE HTML>");
client.println( "");
/ *
*クライアントにメッセージを送信する
* /
client.print(msg);
client.println( "
");
client.println( "");
壊す;
}
if(c =='\ n'){
//新しい行を開始します
currentLineIsBlank =true;
} else if(c!='\ r'){
//現在の行に文字を取得しました
currentLineIsBlank =false;
}
}
}
// Webブラウザにデータを受信する時間を与えます
delay(1);
//接続を閉じます:
client.stop();
Serial.println( "クライアントが切断されました");
}
}
プレビューなし(ダウンロードのみ)。
回路図
ソーラーパネル、抵抗器、接続の概略図 製造プロセス