POC-メテオ

yoctopuce

USB環境センサー

*用例1/2/3
- POC光センサ100K                   
*用例1
-POC-高度計                       
*用例1
- POC-メテオ                       
*用例1/2/3/4/5/6/7/8
- POC-サーモ               
*用例1/2/3/4
- PT100                       
*用例1
- POC-VOCセンサ               
*用例1/2
 

USB電圧センサー

*用例1
*用例1/2/3/4/5/6/7/8
- POC-Amp           
*用例1/2/3/4
- POC-Knob         
*用例1/2/3/4/5/6/7/8/9/10/11/12/13
*用例1
- POC-PWM-Rx     
*用例1/2
- POC-RS232         
*用例1
- POC-ボルト
- POC-ワット
- POC-ミリボルト-Rx
- POC-ミリボルト-BNC
 

USB位置センサー

*用例1/2/3
-POC-高度計                       
*用例1
 -POC-GPS
*用例1 

USBアクチュエーター

- POC-ブザー
- POC-カラー      
*用例1/2/3/4/5/6/7/8
*用例1/2/3/4/5/6
- POC-マキシIO     
*用例1
*用例1/2/3/4/5
- POC-マキシパワーリレー
*用例1/2
- POC-モーターDC     
*用例1/2/3/4
- POC-PWM—Tx    
*用例1
*用例1/2/3/4/5
*用例1/2/3/4/5/6/7/8/9
- POC-リレー      
*用例1/2/3/4/5/6/7/8/9
- POC-サーボ      
*用例1/2/3/4/5/6
*用例1

 USBディスプレー  

*用例1/2/3/4/5
*用例1/2/3/4/5/6/7
*用例1/2/3/4/5/6/7
*用例1/2/3

 エクステンションとネットワーキング 

- POC-マイクロUSBハブ 
*用例1
*用例1/2/3/4/5/6/7
*用例1/2/3
*用例1/2/3/4/5/6/7/8/9/10/11
*用例1/2/3/4
*用例1

 アクセサリとコネクター

- POC-Board2Board-127  
*用例1

 エンクロージャー 

 
 

POC-メテオを使ってデータロガー付き天気ステーションを作りましょう。

データロガーをPOC-メテオと統合し、以前ご紹介したUSB天気測定を改良したバージョンのご紹介です。

 

前回の用例で問題だったのはコンピュータが電源オフまたは再起動中にデータが取れないことでした。実際、Windowsのアップデートは頻繁に行われているためこれは大きな問題です。データレコーディングをコンピュータからモジュール自体に移譲することでこの問題を解決します。

 

 dataLogger.set_autoStart(YDataLogger.AUTOSTART_ON);
    dataLogger.module().saveToFlash();
 
そして、コンピュータがモジュールと繋がらなくても、電源が入ったらすぐ自動的にレコーディングを始めるようにモジュールの環境設定をしなくてはなりません。継続的なパラメータのためこれを実現するためには2つのステップを取る必要があります。
 
 DateTime now = DateTime.UtcNow;
    TimeSpan span = (now - new DateTime(1970110000).ToLocalTime());
    dataLogger.set_timeUTC((int)span.TotalSeconds);
 
 
 そしてset_recording(YDataLogger.RECORDING_ON)でデータレコーディングがスタートします。
 dataLogger.set_recording(YDataLogger.RECORDING_ON);
 
これでモジュールに電源さえ供給されていれば新しいデータでフラッシュメモリが満たされます。
次にデータをモジュールから取り出しましょう。最初にフラッシュメモリのインデックスをダウンロードします。
List<YDataStream> dataStreams = new List<YDataStream>();
    dataLogger.get_dataStreams(dataStreams);
 
すべてのデータをダウンロードするには多くの時間がかかるため、背景タスクとして最後の二日分のデータのみをダウンロードします。
 
 

for (int i = startfrom; i < dataStreams.Count; i++)
{
    YDataStream stream = dataStreams[i];
    int progress = (i - startfrom) * 100 / (dataStreams.Count - startfrom);
    backgroundWorker1.ReportProgress(progress, "Loading " + dataLogger.module());
    // drop data that do not have a timestamp
    long unixtime = stream.get_startTimeUTC();
    if (unixtime == 0)
        continue;

    long utc = stream.get_startTimeUTC();
    DateTime tstart = new DateTime(197011000).AddSeconds(utc);

    Stopwatch sw = new Stopwatch();
    DateTime tend = tstart.AddSeconds(stream.get_rowCount() * stream.get_dataSamplesInterval());

    List<String> names = stream.get_columnNames();
    int increment = 1;
    if (stream.get_dataSamplesInterval() == 1)
    {
        // we take only one mesure per minute
        increment = 60;
    }

    for (int row = 0; row < stream.get_rowCount(); row += increment)
    {
        long nbsec = unixtime + row * stream.get_dataSamplesInterval();
        DateTime t = new DateTime(197011000).AddSeconds(nbsec);
        TimeSpan delta = DateTime.Now - t;
        if (delta.TotalDays > 2)
        {
            continue;
        }
        DataRow rowData = table.NewRow();
        rowData["Time"] = t;
        for (int c = 0; c < stream.get_columnCount(); c++)
        {
            switch (names[c])
            {
                case "temperature":
                    rowData["Temperature"] = stream.get_data(row, c);
                    break;
                case "pressure":
                    rowData["Pressure"] = stream.get_data(row, c);
                    break;
                case "humidity":
                    rowData["Humidity"] = stream.get_data(row, c);
                    break;
                default:
                    continue;
            }
        }
        table.Rows.Add(rowData);
    }
}
 

 
 
最後にスクリーンにデータを映してみましょう。
 
screen 1.jpg
アプリケーションの様子