Main Content

ThingSpeak データの読み取りと、線形近似によるバッテリー放電時間の予測

この例では、ThingSpeak™ チャネルからバッテリーのデータを読み取り、データを解析してバッテリー残量を判定する方法を説明します。線形近似を使用してバッテリーが切れる日付を予測し、残り時間を日数単位で別の ThingSpeak チャネルに書き込みます。30 分ごとに電圧を ThingSpeak に報告するマイクロプロセッサに接続された、12 V バッテリーのデータを読み取ります。次に、回帰を使用してバッテリーが切れる日時を予測します。

ThingSpeak チャネルからのデータの読み取り

まず、チャネルと日付の情報を変数に保存し、その後 thingSpeakRead を使用してそのデータを読み取ります。チャネル 592680 には、12 V バッテリーのスケーリングされた電圧測定値が示されます。名前と値のペア DateRange を使って、データの特定部分を選択して使用します。

batteryChannelID = 592680;
startDate = datetime('Oct 20, 2018');
endDate = datetime('Oct 23, 2018');
batteryData = thingSpeakRead(batteryChannelID,'DateRange',[startDate endDate],'Outputformat','Timetable');

近似とプロット用にデータを変換

チャネルにはデバイスからの生のデータが保存されています。実験的に決定された変換係数 14.6324 を使用して、アナログ デジタル コンバーター (ADC) の測定値を電圧に変換します。続いて、scatter を使用してプロットを生成します。

myVoltage = 14.6324 * batteryData.Voltage;
scatter(batteryData.Timestamps,myVoltage,'b');
ylabel('Voltage (V)');
hold on

データの近似

timetable の datetime 形式は読み取りとプロットに便利です。データを近似するには、datetime が数値形式であることが必要です。datenum を使用してタイムスタンプを日数に変換し、開始時の数値を減算して値を低く保ちます。polyfit を使用してデータに対し線形回帰を実行し、polyval を使用して既存の時間値での近似を評価します。近似ラインを前のプロットに追加します。

battTimes = datenum(batteryData.Timestamps);
battTimes= battTimes-battTimes(1);
myFit=polyfit(battTimes,myVoltage,1);
fitLine=polyval(myFit,battTimes);
plot(batteryData.Timestamps,fitLine,'r--');

放電時間の予測

バッテリーは電圧が 10.4 V より低くなるまで放電してはなりません。近似ラインがこの電圧と交差するまでの日数を求めます。

endDays = (10.4-myFit(2))/myFit(1)
endDays = 13.1573

バッテリーが切れるまで 13 日と少しです。

ThingSpeak への予測の書き込み

関数 thingSpeakWrite は ThingSpeak チャネルに結果を書き込みます。thingSpeakWrite からの出力を返して、書き込み操作が正常に行われていることを確認します。writeChannelIDwriteAPIKey を変更して、独自のチャネルに書き込みます。

writeChannelID = 17504;
writeAPIKey='23ZLGOBBU9TWHG2H';
result = thingSpeakWrite(writeChannelID,round(endDays,4),'WriteKey',writeAPIKey)
result = struct with fields:
         Field1: '13.1573'
         Field2: []
         Field3: []
         Field4: []
         Field5: []
         Field6: []
         Field7: []
         Field8: []
       Latitude: []
      Longitude: []
      ChannelID: 17504
        Created: 03-Jun-2019 15:24:43
    LastEntryID: 50018
       Altitude: []

結果は、書き込み操作が正常であったことを示し、書き込まれたデータが報告されます。

参考

| | | | | |