Чтение данных ThingSpeak и предсказание времени разряда батареи с линейной подгонкой

В этом примере показано, как считать данные о батарее из канала ThingSpeak™ и анализировать данные, чтобы определить оставшееся время автономной работы. Используйте линейную подгонку, чтобы предсказать дату сбоя аккумулятора, а затем запишите оставшееся время в днях в другой канал ThingSpeak. Вы считываете данные для батареи 12 В, подключенной к микропроцессору, сообщая о своем напряжении ThingSpeak каждые полчаса. Затем используйте регрессию, чтобы предсказать день и время, когда батарея выйдет из строя.

Чтение данных из канала 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 дней, пока батарея не умрет.

Напишите предсказание в ThingSpeak

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: []

Результат показывает успешную операцию записи и сообщает о записанных данных.

См. также

| | | | | |