读取 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; scatter(batteryData.Timestamps,myVoltage,'b'); ylabel('Voltage (V)'); hold on
拟合数据
时间表日期时间格式对于阅读和绘图很有用。为了适合数据,日期时间需要采用数字格式。使用 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
的输出以确保写入操作成功。将 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: 03-Jun-2019 15:24:43
LastEntryID: 50018
Altitude: []
结果显示写入操作成功,并报告写入的数据。
另请参阅
thingSpeakRead
(MATLAB) | thingSpeakWrite
(MATLAB) | datetime
(MATLAB) | datnum
(MATLAB) | scatter
(MATLAB) | polyfit
(MATLAB) | polyval
(MATLAB)