exponenta event banner

Считывание данных 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

Подгонка данных

Формат 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

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

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

См. также

| | | | | |