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
データの近似
timetable の datetime 形式は読み取りとプロットに便利です。polyfit
を使用してデータに対し線形回帰を実行し、polyval
を使用して既存の時間値での近似を評価します。近似ラインを前のプロットに追加します。
fitCoeffs = polyfit(battTimes,myVoltage,1);
fitLine = polyval(fitCoeffs,battTimes);
plot(battTimes,fitLine,'r--');
放電時間の予測
バッテリーは電圧が 10.4 V より低くなるまで放電してはなりません。fitCoeffs
からの傾きと切片を使用して、近似ラインがこの電圧と交差するまでの日数を求めます。
endDays = (10.4-fitCoeffs(2))/fitCoeffs(1)
endDays = 13.1573
バッテリーが切れるまで 13 日と少しです。
ThingSpeak への予測の書き込み
関数 thingSpeakWrite
は ThingSpeak チャネルに結果を書き込みます。thingSpeakWrite
からの出力を返して、書き込み操作が正常に行われていることを確認します。writeChannelID
と writeAPIKey
を変更して、独自のチャネルに書き込みます。
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: []
結果は、書き込み操作が正常であったことを示し、書き込まれたデータが報告されます。
参考
thingSpeakRead
| thingSpeakWrite
| datetime
| datnum
| scatter
| polyfit
| polyval