主要内容

本页采用了机器翻译。点击此处可查看英文原文。

读取 ThingSpeak 数据并通过线性拟合预测电池放电时间

此示例显示如何从 ThingSpeak™ 通道读取电池数据并分析数据以确定剩余电池寿命。使用线性拟合预测电池失效的日期,然后将剩余时间(天)写入另一个 ThingSpeak 通道。您读取连接到微处理器的 12 V 电池的数据,该微处理器每半小时向 ThingSpeak 报告一次其电压。然后使用回归预测电池出现故障的日期和时间。

从 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.

拟合数据

时间表日期时间格式对于阅读和绘图很有用。使用 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: []

结果显示写入操作成功,并报告写入的数据。

另请参阅

(MATLAB) | (MATLAB) | (MATLAB) | (MATLAB) | (MATLAB) | (MATLAB) | (MATLAB)