Leggi i dati ThingSpeak e prevedi il tempo di scarica della batteria con Linear Fit
Questo esempio mostra come leggere i dati della batteria da un canale ThingSpeak™ e analizzare i dati per determinare la durata rimanente della batteria. Utilizzare un adattamento lineare per prevedere la data in cui la batteria si guasterà, quindi scrivere il tempo rimanente in giorni su un altro canale ThingSpeak . Leggi i dati di una batteria da 12 V collegata a un microprocessore che segnala la sua tensione a ThingSpeak ogni mezz'ora. Quindi utilizza la regressione per prevedere il giorno e l'ora in cui la batteria si guasterà.
Leggi i dati dal canale ThingSpeak
Inizia memorizzando le informazioni su canale e data in variabili, quindi utilizza thingSpeakRead
per leggere i dati. Il canale 592680 mostra la misurazione in scala della tensione di una batteria da 12 V. Utilizza la coppia nome-valore DateRange
per utilizzare una selezione specifica di dati.
batteryChannelID = 592680; startDate = datetime('Oct 20, 2018'); endDate = datetime('Oct 23, 2018'); batteryData = thingSpeakRead(batteryChannelID,'DateRange',[startDate endDate],'Outputformat','Timetable');
Converti i dati per l'adattamento e il grafico
Il canale memorizza i dati grezzi dal dispositivo. Converti la misura del convertitore analogico-digitale (ADC) in tensione utilizzando il fattore di conversione determinato sperimentalmente 14.6324. Quindi utilizzare scatter
per generare un grafico.
myVoltage = 14.6324 * batteryData.Voltage; scatter(batteryData.Timestamps,myVoltage,'b'); ylabel('Voltage (V)'); hold on
Adatta i dati
Il formato data/ora dell'orario è utile per la lettura e il tracciamento. Per adattare i dati, la data/ora deve essere in formato numerico. Utilizza datenum
per convertire i timestamp in un numero di giorni e sottrai il numero iniziale per mantenere bassi i valori. Utilizza polyfit
per eseguire una regressione lineare sui dati e polyval
per valutare l'adattamento ai valori temporali esistenti. Aggiungi la linea di adattamento al grafico precedente.
battTimes = datenum(batteryData.Timestamps);
battTimes= battTimes-battTimes(1);
myFit=polyfit(battTimes,myVoltage,1);
fitLine=polyval(myFit,battTimes);
plot(batteryData.Timestamps,fitLine,'r--');
Prevedi il tempo di scarica
La batteria non deve essere scaricata al di sotto di 10,4 V. Trova il numero di giorni prima che la linea di adattamento si intersechi con questa tensione.
endDays = (10.4-myFit(2))/myFit(1)
endDays = 13.1573
Mancano poco più di 13 giorni all'esaurimento della batteria.
Scrivi previsione su ThingSpeak
La funzione thingSpeakWrite
scrive il risultato su un canale ThingSpeak . Restituisci l'output da thingSpeakWrite
per garantire un'operazione di scrittura riuscita. Cambia writeChannelID
e writeAPIKey
per scrivere sul tuo canale.
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: []
Il risultato mostra l'operazione di scrittura riuscita e riporta i dati che sono stati scritti.
Vedi anche
thingSpeakRead
(MATLAB) | thingSpeakWrite
(MATLAB) | datetime
(MATLAB) | datnum
(MATLAB) | scatter
(MATLAB) | polyfit
(MATLAB) | polyval
(MATLAB)