Esta clase permite la creación y manejo del objeto Arduino.
"""
def__init__(self,baudrate,timeout,vThreshold):
"""
Método constructor para la clase Arduino. Permite la creación del objeto arduino. En caso de existir un Arduino conectado a la PC, lo detecta y guarda en este objeto el puerto COM y abre el canal serial.
:param baudrate: Es la frecuencia del canal serial
:param timeout: Es el valor máximo de tiempo antes de que el canal se cierre sin que se haya recibido ningun dato. Se recomienda no poner timeout menor a 0.1 ya que si no da la conexión da problemas.
:param vThreshold: Es el valor de voltaje a partir del cual se considera que el electrodo esta mal conectado (debe ser un float)
:exception ImpetomCError: Devuelve una excepción indicando que no se detecto ningun arduino conectado a la pc
"""
self.puerto=self.__buscarPuertoCom()
self.baudrate=baudrate
self.modo=0# Modo Setup por defecto, modo Reconstrucción = 1
Esta función permite buscar al arduino dentro de los puertos COM conectados al PC
:exception ImpetomCError: Tira un error en caso de no encontrar ningún arduino conectado al sistema
"""
ports=list(serial.tools.list_ports.comports())
ArduinoPort=''
forpinports:
if"CH340"inp.descriptionor"USB"inp.descriptionor"COM3"inp.description:# Windows reconoce así al arduino
ArduinoPort=p.name
ifArduinoPort=='':
raiseImpetomCError ("Error: No se encontró ningún dispositivo Arduino conectado.")
else:
returnArduinoPort
def__establecerComunicacion(self):
"""
Esta función establece la comunicación entre la pc y el arduino de impetomC.
:exception ImpetomCError: Devuelve una excepción indicando que el Arduino conectado no es el arduino de Impetom Clínico.
"""
data=""
intento=0
whiledata==""andintento<20:
self.ard.write(bytes("1",'utf-8'))
time.sleep(0.05)
data=self.ard.readline().decode('utf-8').rstrip()
intento+=1
ifintento==20ordata!="ImpetomC":
raiseImpetomCError("Error: No se encontró el dispositivo de ImpetomC.")
time.sleep(0.05)
defobtenerMedidas(self):
"""
Esta función obtiene las 208 medidas de tensión realizadas por el arduino ImpetomC para la reconstrucción tomográfica.
:returns: **datos** - Devuelve el vector con las 208 medidas realizadas.
**voltajesElevados** - Devuelve la cantidad de voltajes por encima de vThreshold.
**frecuenciaArd** - Retorna el valor de la frecuencia a la que esta operando el dispositivo Impetom.
**voltajesElevadosSeguidos** - Retorna la cantidad de voltajes elevados consecutivos (> vThreshold) que fueron detectados. Este dato se utiliza para verificar si hay electrodos desconectados en el dispositivo físico.
**tiraMedidaElevada** - Retorna el valor del electrodo que se detectó esta desconectado en el dispositivo físico.
:exception ImpetomCError: En caso de que el Arduino ImpetomC se haya desconectado durante la adquisición de datos devuelve una excepción.
"""
modo=str(self.modo)
try:
self.ard.write(bytes(modo,'utf-8'))# Indico al Arduino ImpetomC en que modo debe operar (0 - Setup ; 1 - Reconstrucción)
self.ard.write(bytes(self.frecuenciaDDS,'utf-8'))# Indico al Arduino ImpetomC a que frecuencia debe operar
i=0
j=0
tiraMedida=0
tiraMedidaElevada=np.zeros(16)
ele_seguidos=0
voltajesElevadosSeguidos=0
voltajesElevados=0
whilei<208:
data=self.ard.readline().decode('utf-8').rstrip()
ifdata!="":# Esto es para asegurarme que cada vez que le pido un dato al equipo, lo recibo sin problemas. A veces sucede que no da la velocidad del canal
num=float(int(data)*5/1023)
self.datos[i]=num
i+=1
ifi%13==0:# Cada par de electrodos de corriente tiene 13 medidas de tensión asosciadas, con esto identifico los electrodos de corriente