Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

Lea datos de ThingSpeak y prediga el tiempo de descarga de la batería con ajuste lineal

Este ejemplo muestra cómo leer datos de la batería de un canal ThingSpeak™ y analizar los datos para determinar la duración restante de la batería. Utilice un ajuste lineal para predecir la fecha en que fallará la batería y luego escriba el tiempo restante en días en otro canal ThingSpeak. Lees datos de una batería de 12 V conectada a un microprocesador que informa su voltaje a ThingSpeak cada media hora. Luego use la regresión para predecir el día y la hora en que fallará la batería.

Leer datos del canal ThingSpeak

Comience almacenando información de canal y fecha en variables y luego use thingSpeakRead para leer los datos. El canal 592680 muestra la medición escalada de voltaje de una batería de 12 V. Utilice el par nombre-valor DateRange para utilizar una selección específica de datos.

batteryChannelID = 592680;
startDate = datetime('Oct 20, 2018');
endDate = datetime('Oct 23, 2018');
batteryData = thingSpeakRead(batteryChannelID,'DateRange',[startDate endDate],'Outputformat','Timetable');

Convierta los datos para ajustarlos y trazarlos

El canal almacena datos sin procesar del dispositivo. Convierta la medición del convertidor analógico a digital (ADC) a voltaje utilizando el factor de conversión determinado experimentalmente 14,6324. Luego use scatter para generar un gráfico.

myVoltage = 14.6324 * batteryData.Voltage;
scatter(batteryData.Timestamps,myVoltage,'b');
ylabel('Voltage (V)');
hold on

Ajustar los datos

El formato de fecha y hora del calendario es útil para leer y trazar. Para ajustarse a los datos, la fecha y hora debe estar en formato numérico. Utilice datenum para convertir las marcas de tiempo en una cantidad de días y reste el número inicial para mantener los valores bajos. Utilice polyfit para realizar una regresión lineal en los datos y polyval para evaluar el ajuste en los valores de tiempo existentes. Agregue la línea de ajuste al gráfico anterior.

battTimes = datenum(batteryData.Timestamps);
battTimes= battTimes-battTimes(1);
myFit=polyfit(battTimes,myVoltage,1);
fitLine=polyval(myFit,battTimes);
plot(batteryData.Timestamps,fitLine,'r--');

Predecir el tiempo de descarga

La batería no debe descargarse por debajo de 10,4 V. Encuentre el número de días hasta que la línea de ajuste se cruce con este voltaje.

endDays = (10.4-myFit(2))/myFit(1)
endDays = 13.1573

Faltan poco más de 13 días para que se agote la batería.

Escribir predicción en ThingSpeak

La función thingSpeakWrite escribe el resultado en un canal ThingSpeak. Devuelve la salida de thingSpeakWrite para garantizar una operación de escritura exitosa. Cambia el writeChannelID y writeAPIKey para escribir en tu propio canal.

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

El resultado muestra la operación de escritura exitosa e informa los datos que se escribieron.

Consulte también

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