В этом примере показано, как считать данные о батарее из канала ThingSpeak™ и анализировать данные, чтобы определить оставшееся время автономной работы. Используйте линейную подгонку, чтобы предсказать дату сбоя аккумулятора, а затем запишите оставшееся время в днях в другой канал ThingSpeak. Вы считываете данные для батареи 12 В, подключенной к микропроцессору, сообщая о своем напряжении ThingSpeak каждые полчаса. Затем используйте регрессию, чтобы предсказать день и время, когда батарея выйдет из строя.
Начните, сохраняя информацию о канале и дате в переменных, а затем используйте thingSpeakRead
для чтения данных. Канал 592680 показывает масштабированное измерение напряжения от батареи 12 В. Используйте DateRange
Пара "имя-значение" для использования определенного выбора данных.
batteryChannelID = 592680; startDate = datetime('Oct 20, 2018'); endDate = datetime('Oct 23, 2018'); batteryData = thingSpeakRead(batteryChannelID,'DateRange',[startDate endDate],'Outputformat','Timetable');
Канал хранит необработанные данные с устройства. Преобразуйте измерение аналого-цифрового преобразователя (АЦП) в напряжение с помощью экспериментально определенного коэффициента преобразования 14,6324. Затем используйте scatter
чтобы сгенерировать график.
myVoltage = 14.6324 * batteryData.Voltage; scatter(batteryData.Timestamps,myVoltage,'b'); ylabel('Voltage (V)'); hold on
Формат timetable datetime полезен для чтения и графического изображения. Чтобы соответствовать данным, datetime должен быть в числовом формате. Использование 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 В. Найдите количество дней, пока линия подгонки не пересечется с этим напряжением.
endDays = (10.4-myFit(2))/myFit(1)
endDays = 13.1573
Есть чуть более 13 дней, пока батарея не умрет.
The 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: []
Результат показывает успешную операцию записи и сообщает о записанных данных.
datetime
| datnum
| polyfit
| polyval
| scatter
| thingSpeakRead
| thingSpeakWrite