工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Weather Station V 2.0

気温、気圧、湿度を測定する部屋。

ストーリー

このプロジェクトでは、Raspberry Pi2キットコンポーネント上のWindows10 IoTCore用のAdafruitStarter Packを使用して、センサーを使用して温度と圧力を読み取るプロジェクトを作成します、湿度、高度。

注:キットには2つのバージョンがあり、1つにはBMP280センサーが含まれ、もう1つにはBME280が含まれています。 BMP280をお持ちの場合は、Weather Stationv1プロジェクトhttps://www.hackster.io/windows-iot/weather-station

にアクセスしてください。

ハードウェア

以下の「回路図」セクションのフリッツ図に従って、RaspberryPi2をブレッドボードおよびその他のコンポーネントに接続します。

ソフトウェア

コード開始プロジェクトはhttps://github.com/ms-iot/adafruitsampleからダウンロードでき、会話に必要なコードの追加についてご案内します。 Webサービスにアクセスして、ピンをマップに表示します。どの地図ですか?

「Lesson_203v2 \ StartSolution \ lesson_203v2.sln」を開き、mainpage.xaml.csファイルを開きます。

このソリューションの開始点として、いくつかのメソッドを入力しました。先に進みたい場合は、「Lesson_203v2 \ FullSolution \ lesson_203v2.sln」

ですべてのコードを完成させた解決策を見つけることができます。

MainPage.xaml.cs

MainPage.xaml.csファイルを開きます。

センサー(BME280)クラスへの参照を追加します。

パブリックシールされた部分クラスMainPage:Page {//センサークラスBME280BME280の新しいオブジェクトを作成します;

次に、OnNavigatedToメソッドにコードを追加して、センサー用の新しいBME280オブジェクトを作成し、オブジェクトを初期化します。

 //センサーの新しいオブジェクトを作成しますclassBME280 =new BME280Sensor(); //センサーを初期化しますBME280.Initialize(); 

次に、次のコードを追加します。

  • 温度、気圧、湿度、高度を保存する変数を作成します。それらを0に設定します。
  • 海面での圧力の変数を作成します。デフォルト値は1013.25hPaです。
  • 温度、気圧、湿度、高度を10回読み取り、その値をデバッグコンソールに出力します。
 //それらを0に初期化します。floattemp=0; float pressure =0; float altitude =0; floatdensity =0; //海面での圧力の定数を作成します。 //これは地域の海面気圧に基づいています(単位:ヘクトパスカル)const float seaLevelPressure =1022.00f; //データのサンプルを10個読み取ります(int i =0; i <10; i ++){temp =await BME280.ReadTemperature ();圧力=待機BME280.ReadPreasure(); altitude =await BME280.ReadAltitude(seaLevelPressure);湿度=待機BME280.ReadHumidity(); //値をデバッグコンソールに書き込みますDebug.WriteLine( "Temperature:" + temp.ToString()+ "deg C"); Debug.WriteLine( "湿度:" +湿度.ToString()+ "%"); Debug.WriteLine( "Pressure:" + pressure.ToString()+ "Pa"); Debug.WriteLine( "高度:" + altitude.ToString()+ "m"); Debug.WriteLine( "");} 

BME280.cs

BME280.csファイルを開きます。

コードの最初の部分は、BME280のさまざまなレジスタのアドレスのリストを作成することです。これらの値は、BMP280データシートに記載されています。

BME280クラスで、レジスタアドレスの列挙型の後に次を追加します。

 // I2Cバスコンストのフレンドリ名の文字列stringI2CControllerName ="I2C1"; // I2CデバイスのプライベートI2cDevicebme280 =null; //センサーの新しいキャリブレーションデータを作成BME280_CalibrationDataCalibrationData; / /デバイスが初期化されているかどうかを確認する変数boolinit =false; 

次に、Initialize関数に次のコードを追加します。

 // BME280センサーを初期化するメソッドpublicasync Task Initialize(){Debug.WriteLine( "BME280 ::Initialize"); try {// BME280のデバイスアドレスを使用してI2CConnectionSettingsをインスタンス化しますI2cConnectionSettingssettings =new I2cConnectionSettings(BME280_Address); //接続のI2Cバス速度を高速モード設定に設定します。BusSpeed=I2cBusSpeed.FastMode; // I2CBusデバイスセレクターを使用して、高度なクエリ構文を作成しますstring string aqs =I2cDevice.GetDeviceSelector(I2CControllerName); // Windows.Devices.Enumeration.DeviceInformationクラスを使用して、高度なクエリ構文文字列を使用してコレクションを作成しますDeviceInformationCollection dis =await DeviceInformation.FindAllAsync(aqs); // I2CBusのデバイスIDとI2CConnectionSettingsを使用してBME280I2Cデバイスをインスタンス化しますbme280 =await I2cDevice.FromIdAsync(dis [0] .Id、settings); //デバイスが見つかったかどうかを確認if(bme280 ==null){Debug.WriteLine( "デバイスが見つかりません"); }} catch(Exception e){Debug.WriteLine( "Exception:" + e.Message + "\ n" + e.StackTrace);投げる; }} 

Begin関数に次のコードを追加します。

プライベート非同期タスクBegin(){Debug.WriteLine( "BME280 ::Begin"); byte [] WriteBuffer =new byte [] {(byte)eRegisters.BMP280_REGISTER_CHIPID}; byte [] ReadBuffer =new byte [] {0xFF}; //デバイスの署名を読み取りますbmp280.WriteRead(WriteBuffer、ReadBuffer); Debug.WriteLine( "BME280署名:" + ReadBuffer [0] .ToString()); //デバイスの署名を確認するif(ReadBuffer [0]!=BMP280_Signature){Debug.WriteLine( "BMP280 ::Begin Signature Mismatch。");戻る; } // initalize変数をtrueに設定しますinit =true; //係数テーブルを読み取りますCalibrationData =await ReadCoefficeints(); //書き込み制御レジスタawaitWriteControlRegister(); //湿度制御レジスタの書き込みはWriteControlRegisterHumidity();} を待機します

次の2つの関数に次のコードを追加して、制御レジスタに書き込みます。

プライベート非同期タスクWriteControlRegisterHumidity(){byte [] WriteBuffer =new byte [] {(byte)eRegisters.BMP280_REGISTER_CONTROLHUMID、0x03}; bmp280.Write(WriteBuffer); Task.Delay(1);を待ちます。 return;} // 0x3Fを制御レジスタに書き込むメソッドprivateasync Task WriteControlRegister(){byte [] WriteBuffer =new byte [] {(byte)eRegisters.BMP280_REGISTER_CONTROL、0x3F}; bmp280.Write(WriteBuffer); Task.Delay(1);を待ちます。 return;}

次のコードをReadUInt16_LittleEndian関数に追加して:

 //レジスタから16ビット値を読み取り、リトルエンディアン形式で返すメソッドprivate UInt16 ReadUInt16_LittleEndian(byte register){UInt16 value =0; byte [] writeBuffer =new byte [] {0x00}; byte [] readBuffer =new byte [] {0x00、0x00}; writeBuffer [0] =レジスタ; bmp280.WriteRead(writeBuffer、readBuffer); int h =readBuffer [1] <<8; int l =readBuffer [0];値=(UInt16)(h + l);戻り値;} 

次のコードをReadByte関数に追加して、レジスタから8ビットデータを読み取ります。

 //レジスタから8ビット値を読み取るメソッドプライベートバイトReadByte(byte register){byte value =0; byte [] writeBuffer =new byte [] {0x00}; byte [] readBuffer =new byte [] {0x00}; writeBuffer [0] =レジスタ; bmp280.WriteRead(writeBuffer、readBuffer);値=readBuffer [0];戻り値;} 

次の3つの機能が自動的に実行されます。これらの関数を作成するために必要な情報は、データシートに記載されています。

ReadCoefficeints:これは、すべてのキャリブレーションデータがレジスタアドレスから読み取られる関数です。

BMP280_compensate_T_double:この関数では、摂氏での温度は、BMP280データシートの補正式を使用して計算されます。

BMP280_compensate_P_Int64:この関数では、Paの圧力は、BMP280データシートの補正式を使用して計算されます。

次のコードを追加して、ReadTemperature関数を完成させます。

 public async Task  ReadTemperature(){//(!init)await Begin();の場合、I2Cデバイスが初期化されていることを確認します。 // BMP280レジスタからMSB、LSB、および温度のビット7:4(XLSB)を読み取りますbyte tmsb =ReadByte((byte)eRegisters.BMP280_REGISTER_TEMPDATA_MSB);バイトtlsb =ReadByte((byte)eRegisters.BMP280_REGISTER_TEMPDATA_LSB);バイトtxlsb =ReadByte((byte)eRegisters.BMP280_REGISTER_TEMPDATA_XLSB); //ビット7:4 //値を32ビット整数に結合しますInt32t =(tmsb <<12)+(tlsb <<4)+(txlsb>> 4); //生の値をdegCの温度に変換しますdoubletemp =BMP280_compensate_T_double(t); //温度をfloat値として返しますreturn(float)temp;} 

同じ手順を繰り返して、ReadPressure関数を完了します。

 public async Task  ReadPreasure(){// I2Cデバイスが初期化されていることを確認しますif(!init)await Begin(); //最初に温度を読み取り、補正のためにt_fine値をロードしますif(t_fine ==Int32.MinValue){await ReadTemperature(); } // BMP280レジスタから圧力のMSB、LSB、およびビット7:4(XLSB)を読み取りますbyte tmsb =ReadByte((byte)eRegisters.BMP280_REGISTER_PRESSUREDATA_MSB);バイトtlsb =ReadByte((byte)eRegisters.BMP280_REGISTER_PRESSUREDATA_LSB);バイトtxlsb =ReadByte((byte)eRegisters.BMP280_REGISTER_PRESSUREDATA_XLSB); //ビット7:4 //値を32ビット整数に結合しますInt32t =(tmsb <<12)+(tlsb <<4)+(txlsb>> 4); //生の値をPaInt64の圧力に変換しますpres =BMP280_compensate_P_Int64(t); //温度をfloat値として返しますreturn((float)pres)/ 256;} 

最後にReadAltitude関数を完了します:

 // Hectopascals(hPa)の海面気圧をパラメーターとして取得し、現在の気圧を使用して高度を計算する方法。publicasyncTask  ReadAltitude(float seaLevel){//確認してください(!init)await Begin();の場合、I2Cデバイスは初期化されます。 //最初に圧力を読み取りますfloatpressure =await ReadPreasure(); //圧力をHectopascals(hPa)圧力に変換します/ =100; //国際気圧式を使用して高度を計算して返しますreturn44330.0f *(1.0f-(float)Math.Pow((pressure / seaLevel)、0.1903f));} 

これで、プロジェクトをデプロイする準備が整いました!

期待される出力

温度:24.46189℃

湿度:54.372%

圧力:99738.73 Pa

高度:205.1726 m

出典: Weather Station V 2.0


製造プロセス

  1. ラズベリーパイをベースにした気象観測所
  2. Raspberry Pi2ウェザーステーション
  3. ラズベリーパイウェザーステーション
  4. RaspberryPiを使用した天気のリモートモニタリング
  5. 気象台とIOTに参加– CWOP
  6. 天気モニター
  7. Arduino + ESPウェザーボックス
  8. $ 10ポータブルArduinoウェザーステーション(AWS)
  9. eDOT-Arduinoベースの精密時計および気象観測所
  10. ThingSpeak Arduino Weather Station
  11. ローカル気象台