メインコンテンツ

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;
battTimes = batteryData.Timestamps;
battTimes = days(battTimes-battTimes(1));
scatter(battTimes,myVoltage,'b');
xlabel('Duration (days)');
ylabel('Voltage (V)');
hold on

Figure contains an axes object. The axes object with xlabel Duration (days), ylabel Voltage (V) contains an object of type scatter.

データの近似

timetable の datetime 形式は読み取りとプロットに便利です。polyfit を使用してデータに対し線形回帰を実行し、polyval を使用して既存の時間値での近似を評価します。近似ラインを前のプロットに追加します。

fitCoeffs = polyfit(battTimes,myVoltage,1);
fitLine = polyval(fitCoeffs,battTimes);
plot(battTimes,fitLine,'r--');

Figure contains an axes object. The axes object with xlabel Duration (days), ylabel Voltage (V) contains 2 objects of type scatter, line.

放電時間の予測

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

endDays = (10.4-fitCoeffs(2))/fitCoeffs(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: 10-May-2024 11:01:22
    LastEntryID: 866419
       Altitude: []

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

参考

| | | | | |