Contenuto principale

Questa pagina è stata tradotta con la traduzione automatica. Fai clic qui per vedere l’originale in inglese.

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

Figure contains an axes object. The axes object with xlabel Duration (days), ylabel Voltage (V) contains an object of type scatter.

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--');

Figure contains an axes object. The axes object with xlabel Duration (days), ylabel Voltage (V) contains 2 objects of type scatter, line.

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

(MATLAB) | (MATLAB) | (MATLAB) | (MATLAB) | (MATLAB) | (MATLAB) | (MATLAB)