Lisez les données ThingSpeak et prédisez le temps de décharge de la batterie avec l'ajustement linéaire
Cet exemple montre comment lire les données de batterie d'un canal ThingSpeak ™ et analyser les données pour déterminer la durée de vie restante de la batterie. Utilisez un ajustement linéaire pour prédire la date à laquelle la batterie tombera en panne, puis écrivez le temps restant en jours sur un autre canal ThingSpeak . Vous lisez les données d'une batterie 12 V connectée à un microprocesseur qui signale sa tension à ThingSpeak toutes les demi-heures. Utilisez ensuite la régression pour prédire le jour et l'heure où la batterie tombera en panne.
Lire les données du canal ThingSpeak
Commencez par stocker les informations sur le canal et la date dans des variables, puis utilisez thingSpeakRead
pour lire les données. Le canal 592680 montre la mesure mise à l'échelle de la tension d'une batterie de 12 V. Utilisez la paire nom-valeur DateRange
pour utiliser une sélection spécifique de données.
batteryChannelID = 592680; startDate = datetime('Oct 20, 2018'); endDate = datetime('Oct 23, 2018'); batteryData = thingSpeakRead(batteryChannelID,'DateRange',[startDate endDate],'Outputformat','Timetable');
Convertir les données pour l'ajustement et générer un tracé
Le canal stocke les données brutes de l' appareil. Convertissez la mesure du convertisseur analogique-numérique (CAN) en tension à l'aide du facteur de conversion 14,6324 déterminé expérimentalement. Utilisez ensuite scatter
pour générer un tracé.
myVoltage = 14.6324 * batteryData.Voltage; scatter(batteryData.Timestamps,myVoltage,'b'); ylabel('Voltage (V)'); hold on
Adapter les données
Le format datetime de timetable est utile pour la lecture et le traçage. Pour s'adapter aux données, la date et l'heure doivent être au format numérique. Utilisez datenum
pour convertir les horodatages en un nombre de jours et soustrayez le nombre de départ pour maintenir les valeurs faibles. Utilisez polyfit
pour effectuer une régression linéaire sur les données, et polyval
pour évaluer l'ajustement aux valeurs temporelles existantes. Ajoutez la ligne d'ajustement au tracé précédent.
battTimes = datenum(batteryData.Timestamps);
battTimes= battTimes-battTimes(1);
myFit=polyfit(battTimes,myVoltage,1);
fitLine=polyval(myFit,battTimes);
plot(batteryData.Timestamps,fitLine,'r--');
Prédire le temps de décharge
La batterie ne doit pas être déchargée en dessous de 10,4 V. Trouvez le nombre de jours jusqu'à ce que la ligne d'ajustement croise cette tension.
endDays = (10.4-myFit(2))/myFit(1)
endDays = 13.1573
Il reste un peu plus de 13 jours avant que la batterie ne meure.
Écrire la prédiction dans ThingSpeak
La fonction thingSpeakWrite
écrit le résultat dans un canal ThingSpeak . Renvoyez la sortie de thingSpeakWrite
pour garantir une opération d’écriture réussie. Changez les writeChannelID
et writeAPIKey
pour écrire sur votre propre 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: []
Le résultat montre l'opération d'écriture réussie et rapporte les données qui ont été écrites.
Voir aussi
thingSpeakRead
(MATLAB) | thingSpeakWrite
(MATLAB) | datetime
(MATLAB) | datnum
(MATLAB) | scatter
(MATLAB) | polyfit
(MATLAB) | polyval
(MATLAB)