Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Generar varias gráficas desde Arduino a Python (DUDAS AUXILIO :c)
#1
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:

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
   }
 }
Y en Python llevo esto
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
Responder
#2
Hola, bienvenida. ¿Podrías poner un ejemplo de una cadena de datos que recibas del puerto y cómo te gustaría delimitar esa información?

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
(25-04-2019, 09:58 PM)Francisco escribió: Hola, bienvenida. ¿Podrías poner un ejemplo de una cadena de datos que recibas del puerto y cómo te gustaría delimitar esa información?

Saludos

Los datos se me presentan así 

b'25 26 24'\n' 

Pero ya supe como separarlos, mi problema ahora es graficando estos datos.-.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)