Main Content

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

读取 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 的输出以确保写入操作成功。更改 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: []

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

另请参阅

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