Leggi i dati ThingSpeak e prevedi il tempo di scarica della batteria con adattamento lineare
Questo esempio mostra come leggere i dati della batteria da un canale ThingSpeak ™ e analizzarli per determinare la durata residua della batteria. Utilizzare un adattamento lineare per prevedere la data in cui la batteria si esaurirà, quindi scrivere il tempo rimanente in giorni su un altro canale ThingSpeak. Si leggono i dati di una batteria da 12 V collegata a un microprocessore che segnala la sua tensione a ThingSpeak ogni mezz'ora. Quindi utilizzare la regressione per prevedere il giorno e l'ora in cui la batteria si esaurirà.
Leggi i dati dal canale ThingSpeak
Inizia memorizzando le informazioni sul canale e sulla data nelle variabili, quindi usa thingSpeakRead per leggere i dati. Il canale 592680 mostra la misurazione in scala della tensione di una batteria da 12 V. Utilizzare 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');
Convertire i dati per l'adattamento e il grafico
Il canale memorizza i dati grezzi del dispositivo. Convertire la misurazione del convertitore analogico-digitale (ADC) in tensione utilizzando il fattore di conversione determinato sperimentalmente 14,6324. Converti i timestamp in durate in giorni, quindi usa scatter per generare un grafico.
myVoltage = 14.6324 * batteryData.Voltage; battTimes = batteryData.Timestamps; battTimes = days(battTimes-battTimes(1)); scatter(battTimes,myVoltage,'b'); xlabel('Duration (days)'); ylabel('Voltage (V)'); hold on

Adattare i dati
Il formato datetime dell'orario è utile per la lettura e la rappresentazione grafica. Utilizzare polyfit per eseguire una regressione lineare sui dati e polyval per valutare l'adattamento ai valori temporali esistenti. Aggiungere la retta di adattamento al grafico precedente.
fitCoeffs = polyfit(battTimes,myVoltage,1);
fitLine = polyval(fitCoeffs,battTimes);
plot(battTimes,fitLine,'r--');
Prevedere il tempo di dimissione
La batteria non deve essere scaricata al di sotto di 10,4 V. Utilizzando la pendenza e l'intercetta da fitCoeffs, trova il numero di giorni prima che la linea di adattamento intersechi questa tensione.
endDays = (10.4-fitCoeffs(2))/fitCoeffs(1)
endDays = 13.1573
Mancano poco più di 13 giorni alla fine della carica della batteria.
Scrivi la previsione su ThingSpeak
La funzione thingSpeakWrite scrive il risultato su un canale ThingSpeak. Restituisce l'output da thingSpeakWrite per garantire un'operazione di scrittura riuscita. Modifica 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: 10-May-2024 11:01:22
LastEntryID: 866419
Altitude: []
Il risultato mostra l'operazione di scrittura riuscita e segnala i dati scritti.
Vedi anche
thingSpeakRead (MATLAB) | thingSpeakWrite (MATLAB) | datetime (MATLAB) | datnum (MATLAB) | scatter (MATLAB) | polyfit (MATLAB) | polyval (MATLAB)