Этот пример показывает, как считать данные о батарее из 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');
Канал хранит необработанные данные от устройства. Преобразуйте измерение аналого-цифрового конвертера (ADC) в напряжение с помощью экспериментально решительного коэффициента преобразования 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 дней, пока батарея не перестает работать.
Функция 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: 10-Jan-2019 13:20:34 LastEntryID: 12543 Altitude: []
Результат показывает успешную операцию записи и сообщает о данных, которые были записаны.
datetime
| datnum
| polyfit
| polyval
| scatter
| thingSpeakRead
| thingSpeakWrite