Components and supplies
Resistor 1 M ohm
MPX2050DP
Resistor 100k ohm
Rotary potentiometer (generic)
Arduino UNO
Tools and machines
inflatable armband
Project description
Code
Python Code
python
python code that analyzes the slopes
1import serial 2import time 3from pylab import * 4 5#Se inicia 6 comunicacin con Arduino 7ser = serial.Serial('COM3', baudrate=9600, timeout=1 8 ) ## Donde COM= puerto del arduino, 9 #9600 10 baudios de Serial.begin, timeout = timepo que recoge datos 11 12time.sleep(3) 13 #Se tiene un tiempo de espera para obtener el primer dato, ya que sin el , el primer 14 dato obtiene basura 15Puntos =160 #Se Define el numero de datos que se quieren 16 obtener en funcion del tiempo de medicin 17ListaDatos= [0]*Puntos #Se crea una 18 lista de la dimension de puntos. 19 20 21def Valores(): # Se declara una funcion 22 que arroje una lista con los datos que recibe de arduino 23 ser.write(b'g') 24 # Se manda al arduino la letra g para que lea datos cuando nosotros lo indiquemos 25 26 ArduinoDatos= ser.readline().decode().split('\ \ 27') #Se crea la variable 28 donde se guardan los datos donde se docodifica en codigo ASCII 29 30 return 31 ArduinoDatos[0] 32 33while 1: #Se incializa un ciclo que siempre se cumple para 34 estar en sintonia con el loop de arduino 35 36 Input= input('Empezar a 37 tomar datos?') #Se declara una variable que pregunte al usuario si ya quiere tomar 38 datos 39 40 if Input == 'y': #Si el usuario pone la letra y = si , entonces 41 comienza el conteo y analisis de datos 42 pendientes=[] #Se declara una 43 lista vacia donde se guarden las pendientes 44 maximos=[] #Se declara una 45 lista vacia donde se guarden los maximos 46 diastolica=[] #Se declara una 47 lista vacia donde se guarden las presiones diastolicas,osea las presiones mas bajas 48 49 sistolica=[] #Se declara una lista vacia donde se guarden las presiones 50 sistolicas,osea las presiones mas altas 51 for i in range(0,Puntos): #Se 52 inicializa un ciclo donde se cambian los valores de voltaje a presion 53 Dato=Valores() 54 55 56 Dato=int(Dato) #Se cambia los valores tipo str a int 57 58 ListaDatos[i]=(Dato-562.5555556)/3.08 +15 # Se hace la conversion y 59 se guarda en una lista 60 61 for i in range(1,Puntos): #Se inicializa 62 un ciclo donde se guarden las pendientes de los datos 63 m=(ListaDatos[i]-ListaDatos[i-1])/2 64 #Se hac la pendiente para cada valor 65 pendientes.append(m) 66 for 67 i in range(1,len(pendientes)):#Se crea un ciclo donde se analizan las pendientes 68 69 if(pendientes[i]==0): #si la pendiente entre dos puntos es cero no hace 70 nada 71 continue 72 else: #si la pendiente es negativa 73 y es mayor que la pendiente anterior se guardan esos valores de la lista de datos 74 como maximos 75 if(pendientes[i-1]/pendientes[i] < 0 and pendientes[i-1] 76 > pendientes[i]): 77 maximos.append(ListaDatos[i]) 78 for 79 i in range(len(maximos)): # En estos dos for se guardan los valores que pasen 80 estas cotas y se guardan en dos listas , en la sistolia y diastolica 81 if(maximos[i] 82 < 130 ): 83 sistolica.append(maximos[i]) 84 for i in range(len(maximos)): 85 86 if(maximos[i] > 70 ): 87 diastolica.append(maximos[i]) 88 89 90 91 92 plt.rcParams['figure.figsize'] 93 = (7,7) # En estas cuatro lineas unicamente imprimimos la grafica de la lista de 94 datos 95 t=arange(0,len(ListaDatos),1) 96 plot(t,ListaDatos,'r') 97 98 ylabe('voltaje (presion)',fontsize=14) 99 xlabel('tiempo (100ms)',fontsize=14) 100 101 grid(True) 102 show() 103 104 #yprint(dataList) 105 106 #print(maximos) 107 print("presin diastolica %f " %diastolica[-1]) 108 #se imprime el ultimo valor de la lista de diastolica 109 print("presin 110 sistolica %f"%sistolica[0]) #se imprime el primer valor de la lista de sistolica 111 112
IDE code
arduino
1int datos ; //Se declara una variable entera que se llama datos 2char 3 Input; //Se declara una variable entera que se llama input 4void setup() { 5 6 // put your setup code here, to run once: 7 8Serial.begin(9600); //Se inicializa 9 el monitor serial. 10 11} 12 13void loop() { 14 // put your main code here, 15 to run repeatedly: 16if(Serial.available()>0){ // Si la comunicacion serial es 17 un valor mayor que cero entonces lera lo que hay en el monitor serial guardandolo 18 en la variable input , si lo que le es 19 // la letra 20 g entonces lera la entrada analoga A0 y guardara esos valores en la variable datos 21 e imprimir esos datos en el monitor serial. 22 23 Input=Serial.read(); 24 25 26 if(Input == 'g'){ 27datos=analogRead(A0); 28Serial.println(datos); 29 30 31 } 32 33} 34 35delay(100); 36 37} 38 39//Este codigo unicamente 40 nos da comunicagion con el monitor serial y que nos imprima cada vez que queramos 41 los valores obtenidos en la entrada analoga A0 42
Python Code
python
python code that analyzes the slopes
1import serial 2import time 3from pylab import * 4 5#Se inicia comunicacin con Arduino 6ser = serial.Serial('COM3', baudrate=9600, timeout=1 ) ## Donde COM= puerto del arduino, 7 #9600 baudios de Serial.begin, timeout = timepo que recoge datos 8 9time.sleep(3) #Se tiene un tiempo de espera para obtener el primer dato, ya que sin el , el primer dato obtiene basura 10Puntos =160 #Se Define el numero de datos que se quieren obtener en funcion del tiempo de medicin 11ListaDatos= [0]*Puntos #Se crea una lista de la dimension de puntos. 12 13 14def Valores(): # Se declara una funcion que arroje una lista con los datos que recibe de arduino 15 ser.write(b'g') # Se manda al arduino la letra g para que lea datos cuando nosotros lo indiquemos 16 ArduinoDatos= ser.readline().decode().split('\ \ 17') #Se crea la variable donde se guardan los datos donde se docodifica en codigo ASCII 18 19 return ArduinoDatos[0] 20 21while 1: #Se incializa un ciclo que siempre se cumple para estar en sintonia con el loop de arduino 22 23 Input= input('Empezar a tomar datos?') #Se declara una variable que pregunte al usuario si ya quiere tomar datos 24 25 if Input == 'y': #Si el usuario pone la letra y = si , entonces comienza el conteo y analisis de datos 26 pendientes=[] #Se declara una lista vacia donde se guarden las pendientes 27 maximos=[] #Se declara una lista vacia donde se guarden los maximos 28 diastolica=[] #Se declara una lista vacia donde se guarden las presiones diastolicas,osea las presiones mas bajas 29 sistolica=[] #Se declara una lista vacia donde se guarden las presiones sistolicas,osea las presiones mas altas 30 for i in range(0,Puntos): #Se inicializa un ciclo donde se cambian los valores de voltaje a presion 31 Dato=Valores() 32 33 Dato=int(Dato) #Se cambia los valores tipo str a int 34 ListaDatos[i]=(Dato-562.5555556)/3.08 +15 # Se hace la conversion y se guarda en una lista 35 36 for i in range(1,Puntos): #Se inicializa un ciclo donde se guarden las pendientes de los datos 37 m=(ListaDatos[i]-ListaDatos[i-1])/2 #Se hac la pendiente para cada valor 38 pendientes.append(m) 39 for i in range(1,len(pendientes)):#Se crea un ciclo donde se analizan las pendientes 40 if(pendientes[i]==0): #si la pendiente entre dos puntos es cero no hace nada 41 continue 42 else: #si la pendiente es negativa y es mayor que la pendiente anterior se guardan esos valores de la lista de datos como maximos 43 if(pendientes[i-1]/pendientes[i] < 0 and pendientes[i-1] > pendientes[i]): 44 maximos.append(ListaDatos[i]) 45 for i in range(len(maximos)): # En estos dos for se guardan los valores que pasen estas cotas y se guardan en dos listas , en la sistolia y diastolica 46 if(maximos[i] < 130 ): 47 sistolica.append(maximos[i]) 48 for i in range(len(maximos)): 49 if(maximos[i] > 70 ): 50 diastolica.append(maximos[i]) 51 52 53 54 plt.rcParams['figure.figsize'] = (7,7) # En estas cuatro lineas unicamente imprimimos la grafica de la lista de datos 55 t=arange(0,len(ListaDatos),1) 56 plot(t,ListaDatos,'r') 57 ylabe('voltaje (presion)',fontsize=14) 58 xlabel('tiempo (100ms)',fontsize=14) 59 grid(True) 60 show() 61 62 #yprint(dataList) 63 #print(maximos) 64 print("presin diastolica %f " %diastolica[-1]) #se imprime el ultimo valor de la lista de diastolica 65 print("presin sistolica %f"%sistolica[0]) #se imprime el primer valor de la lista de sistolica 66
IDE code
arduino
1int datos ; //Se declara una variable entera que se llama datos 2char Input; //Se declara una variable entera que se llama input 3void setup() { 4 // put your setup code here, to run once: 5 6Serial.begin(9600); //Se inicializa el monitor serial. 7 8} 9 10void loop() { 11 // put your main code here, to run repeatedly: 12if(Serial.available()>0){ // Si la comunicacion serial es un valor mayor que cero entonces lera lo que hay en el monitor serial guardandolo en la variable input , si lo que le es 13 // la letra g entonces lera la entrada analoga A0 y guardara esos valores en la variable datos e imprimir esos datos en el monitor serial. 14 15 Input=Serial.read(); 16 17 if(Input == 'g'){ 18datos=analogRead(A0); 19Serial.println(datos); 20 21 } 22 23} 24 25delay(100); 26 27} 28 29//Este codigo unicamente nos da comunicagion con el monitor serial y que nos imprima cada vez que queramos los valores obtenidos en la entrada analoga A0 30
Downloadable files
Protoboard
Potoboard scheme
Protoboard
Protoboard
Potoboard scheme
Protoboard
Diagram
Diagram of the circuit
Diagram
Comments
Only logged in users can leave comments
jaf_soldier009
0 Followers
•0 Projects
Table of contents
Intro
6
0