25-04-2019, 04:39 PM
Hola buen día, soy estudiante de Ing. Electrónica y estoy en pasantías, en estas me asignaron un proyecto en el que debo medir 3 temperaturas y estas se deben representar en una gráfica con arduino, en arduino tengo esto:
Y en Python llevo esto
Ando perdidísima con el tema de extraer la data de cada sensor, pues entiendo que python me lee la línea completa con todos los caracteres recibidos por el puerto serial, entonces cree una lista para almacenar dichos valores, mi problema en sí es que no sé como delimitar extracción de dicha data para que sepa por ejemplo que:
temp1 = 20ºC
temp2 = 19ºC
temp3 = 21ºC
Y me almacene estos datos para poder después generar de esta data una gráfica.
Si alguien puede ayudarme con este problema se lo agradecería de corazón, Gracias por su atención y disculpen lo novata xD
Código:
#include <max6675.h> //Librería del MAX6675
unsigned long interval=1000; // Tiempo de espera
unsigned long previousMillis=0; // millis() returns an unsigned long.
int ktcSO = 8;
int ktcCS1 = 9; // Termocupla 1
int ktcCLK = 10;
int ktcCS2 = 11; // Termocupla 2
int ktcCS3 = 6; // Termocupla 3
int temp1; //
int temp2; // Estas serán las temperaturas que medirán nuestras 3 termocuplas.
int temp3; //
int contadordetiempo = 0; //Contador inicia en 0 (Y me irá contando de 5 en 5 pues es el tiempo de espera que tomaremos entre una medida y otra)
MAX6675 ktc1(ktcCLK, ktcCS1, ktcSO);
MAX6675 ktc2(ktcCLK, ktcCS2, ktcSO);
MAX6675 ktc3(ktcCLK, ktcCS3, ktcSO);
//codigos para manejar el max6675, si te puedes dar cuenta, el CLK y el SO son iguales en las 3 Termocuplas, ¿Por qué?
void setup()
{
Serial.begin(9600); //Iniciamos la comunicación serial
}
void loop()
{
unsigned long currentMillis = millis();
if ((unsigned long)(currentMillis - previousMillis) >= interval)//con este condicional activo el millis
{
Serial.print("Temperatura 1= ");
temp1 = ktc1.readCelsius(); //con este código convertimos la diferencia de potencial que existe entre los terminales de
//la termocupla en ºC (Esto mismo se repite para las otras 2 termocuplas.
Serial.print(temp1);//Esto lo imprime python
Serial.print("ºC");
Serial.print(" ");
Serial.print("Temperatura 2= "); //Mido Temperatura 2
temp2 = ktc2.readCelsius();
Serial.print(temp2);
Serial.print("ºC");
Serial.print(" ");
Serial.print("Temperatura 3= "); //Mido Temperatura 3
temp3 = ktc3.readCelsius();
Serial.print(temp3);
Serial.print("ºC");
Serial.print("\n"); //Esto me imprime un enter
previousMillis = millis(); //Tal como el delay, el millis debe ser citado al final
}
}
Cita:Código:import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
import serial
COUNT=0
datos=[]
fig = plt.figure()
ax = fig.add_subplot(111, fc='black', title = "Temperaturas de la bomba")
arduino = serial.Serial('COM6', 9600)
e = arduino.readline()
def plotea(i):
temp1=[]
temp2=[]
temp3=[]
for i in range(0,100):
datosString=arduino.readline()
datos=str(datosString)
temp1.append(datos[0][2:10]) #AQUI ES LA DUDA
temp2.append(datos[1][:])
temp3.append(datos[2][:-5])
line, = plt.plot(str(datos[0]))
line2, = plt.plot(str(datos[1]))
line3, = plt.plot(str(datos[2]))
ax.set_ylim([15,30])
ax.plot(range(0,100))
try:
plt.plot(line, color= 'red', label="Temp1")
plt.plot(line2, color= 'orange', label = "Temp2")
plt.plot(line3, color= 'green', label = "Temp3")
plt.legend(loc="lower left")
plt.xlabel("Tiempo de prueba (seg.)")
plt.ylabel("Temperaturas (ºC)")
except UnicodeDecodeError: #Si se produce el error al plotear no hacemos nada y evitamos que el programa se pare.
pass
if __name__ == '__main__':
a = animation.FuncAnimation(fig, plotea, blit = False, interval = 1)
plt.show()
Ando perdidísima con el tema de extraer la data de cada sensor, pues entiendo que python me lee la línea completa con todos los caracteres recibidos por el puerto serial, entonces cree una lista para almacenar dichos valores, mi problema en sí es que no sé como delimitar extracción de dicha data para que sepa por ejemplo que:
temp1 = 20ºC
temp2 = 19ºC
temp3 = 21ºC
Y me almacene estos datos para poder después generar de esta data una gráfica.
Si alguien puede ayudarme con este problema se lo agradecería de corazón, Gracias por su atención y disculpen lo novata xD