BIOSONIC Trabajo final del módulo Physical Computing del DDIT de la UAI
Se trata de un trabajo grupal, a partir de una problemática definida por el propio grupo de trabajo, y para la cual se se requiere proponer una solución que integre el uso de la placa Arduino UNO, debidamente programada, en un dispositivo, artefacto u objeto de diseño, también propuesto y desarrollado por el mismo grupo de trabajo.
El grupo 6
El grupo de trabajo estuvo constituido por las siguientes personas:
Fernanda Bisbal
Carolina D’Agostino
Sergio Hernández
Michel Jure
El problema propuesto
El problema se trata de proveer a un terapeuta de Biomagnetismo de un dispositivo que permita medir, en forma automatizada, las diferencias transitorias de longitud entre las piernas del paciente, quien se encuentra tendido en una camilla, pues esta medición, recurrente durante la sesión terapéutica, constituye el indicador fundamental para la detección de desequilibrios fisiológicos en 300 puntos claves del cuerpo, y que determinan la aplicación de imanes de diferentes polaridades y potencias en los puntos detectados como críticos, para restablecer su equilibrio, el cual se verá reflejado en el emparejamiento de la longitud de las piernas.
La solución propuesta
La solución se basa en una plataforma vertical, dispuesta a los pies de la camilla en la que se encuentra el paciente, y en la que se soportan dos sensores de distancia ultrasónicos, uno para cada pie, ajustables en su posición, de acuerdo a las medidas corporales del paciente, y que, mediante un código de lectura escrito para Arduino, detectan la diferencia de medida de longitud entre ambas piernas, entregando una salida por display de dichas diferencias, y encendiendo un LED rojo cuando esta supera el máximo admisible de 2cm, y un LED verde cuando se alcanza la condición de emparejamiento.
El código
El código se diseñó, y testeó en una simulación en Tinkercad, realizando varias iteraciones, antes de pasar a la fabricación del circuito.
La versión definitiva se encuentra completamente documentada en español, y se transcribe a continuación, como es habitual en este blog, con las líneas activas en negrita, y los comentarios en cursiva:
/* Sensores_biomagnetismo
Este código ha sido desarrollado para el módulo Physical Computing del Diplomado en Diseño, Innovación y Tecnología de la Universidad Adolfo Ibáñez, bajo la guía de la profesora Carolina Pino. El desarrollo del código ha estado a cargo del grupo de trabajo formado por:
Fernanda Bisbal Carolina D'Agostino Sergio Hernández Michel Jure
El objetivo del código es utilizar dos sensores ultrasónicos, para determinar la diferencia de distancia entre dos superficies paralelas, y encender un indicador LED rojo cuando esta diferencia supera un mínimo admisible de 2cm., y uno verde cuando esta diferencia es igual a cero. Tanto las distancias como las diferencias de distancia se imprimen en un display de visualización.
Para su implementación se requiere de: Una placa Arduino UNO Dos sensores de distancia ultrasónicos HC-SR04 Un pulsador de encendido para ejecutar la medición Un LED rojo Un LED verde Una resistencia de 10 Kohmios Una resistencia de 220 ohmios
La aplicación de este código y este circuito, está pensado en las terapias de biomagnetismo, en las que el terapeuta detecta desequilibrios fisiológicos mediante diferencias transitorias de longitud entre las dos piernas del paciente, quien se encuentra tendido en una camilla con los pies enfrentados a los sensores ultrasónicos.
Las conexiones de los dispositivos a la placa Arduino UNO son las siguientes: Las entradas VCC de los sensores ultrasónicos van conectados al pin de 5v de la placa Las entradas GND de los sensores ultrasónicos van conectados al pin de GND de la placa El Trigger del sensor izquierdo va conectado a la salida digital 2 de la placa La entrada Echo del sensor izquierdo, va conectado a la salida digital 3 de la placa El Trigger del sensor derecho va conectado a la salida digital 4 de la placa La entrada Echo del sensor derecho, va conectado a la salida digital 5 de la placa El ánodo del LED rojo, va conectado a la salida digital 6 de la placa El ánodo del LED verde, va conectado a la salida digital 7 de la placa Los cátodos de ambos LEDs van conectados a la salida GND de la placa, pasando por una resistencia de 220 ohmios Uno de los polos del pulsador va conectado a la salida 5v de la placa El otro polo del pulsador va conectado a la salida GND de la placa, a través de una resistencia de 10 Kohmios, y conecta en el lado opuesto a la salida digital 8 de la placa
V01 15-10-2020 */
// Constantes que no deben cambiarse. Usadas para definir las variables y los respectvos pines a utilizar: const int Trigger1 = 2; //Pin digital 2 para el Trigger del sensor 1 const int Echo1 = 3; //Pin digital 3 para el Echo del sensor 1
const int Trigger2 = 4; //Pin digital 4 para el Trigger del sensor 2 const int Echo2 = 5; //Pin digital 5 para el Echo del sensor 2
const int buttonPin = 8; //Pin digital 8 para iniciar el proceso de medida de los detectores const int ledPin = 13; //Sólo informativo en este caso para chequear el boton
const int LedRojo = 6; //Pin digital 6 para el encendido del LED rojo const int LedVerde = 7; //Pin digital 7 para el encendido del LED verde
// Variables que se modificarán: int buttonState =0; //Variable para la lectura del estado del pulsador
void setup() { Serial.begin(9600); //Inicializamos la comunicación
pinMode(Trigger1, OUTPUT); //Definimos el pin del Trigger1 como salida del sensor 1 pinMode(Echo1, INPUT); //Definimos el pin Echo1 como entrada del sensor 1 digitalWrite(Trigger1, LOW); //Inicializamos el pin Trigger1 con 0 (apagado)
pinMode(Trigger2, OUTPUT); //Definimos el pin del Trigger2 como salida del sensor 2 pinMode(Echo2, INPUT); //Definimos el pin Echo2 como entrada del sensor 2 digitalWrite(Trigger2, LOW); //Inicializamos el pin Trigger2 con 0 (apagado)
// Inicializamos el LED pin como salida: pinMode(ledPin, OUTPUT); // Inicializamos el pin del pulsador como entrada: pinMode(buttonPin, INPUT);
// Inicializamos los LED Verde y Rojo como salida: pinMode(LedVerde,OUTPUT); pinMode(LedRojo,OUTPUT);
} void loop() {
// Definimos variables para el loop long t1; //Tiempo que demora en llegar el eco al sensor 1 long d1; //Distancia en centimetros desde el pié hasta el sensor 1
long t2; //Tiempo que demora en llegar el eco al sensor 2 long d2; //Distancia en centimetros desde el pié hasta el sensor 2
long diferencia; //Diferencia entre las dos medidas
// El loop es el siguiente: // Lee el valor del Pin8 del pulsador, si el valor es HIGH (encendido), pasa a la subrutina de medición, si el valor es LOW (apagado), // espere1 segundo y siga leyendo, hasta que el terapeuta aprete el botón pulsador
// Lee el estado del botón pulsador: buttonState = digitalRead(buttonPin); // Seteamos la diferencia de medida entre los sensores en 0 para inicializar diferencia = 0; // Seteamos los dos LEDs en estado apagado para inicializar digitalWrite(LedRojo,LOW); digitalWrite(LedVerde,LOW);
// Iniciamos el loop de medición: if (buttonState == HIGH) { digitalWrite(ledPin, HIGH); //Si el botón pulsador ha sido activado por el terapeuta, se enciende el LED incorporado en la placa
digitalWrite(Trigger1, HIGH); delayMicroseconds(10); //Enviamos un pulso de 10 milisegundos desde el sensor 1 digitalWrite(Trigger1, LOW);
t1 = pulseIn(Echo1, HIGH); //Obtenemos el ancho del pulso en el sensor 1 d1 = t1/59; //Escalamos el tiempo del pulso del sensor 1 a una distancia en cm
digitalWrite(Trigger2, HIGH); delayMicroseconds(10); //Enviamos un pulso de 10 milisegundos desde el sensor 2 digitalWrite(Trigger2, LOW);
t2 = pulseIn(Echo2, HIGH); //Obtenemos el ancho del pulso en el sensor 2 d2 = t2/59; //Escalamos el tiempo del pulso del sensor 2 a una distancia en cm
diferencia = d2-d1; //Obtenemos la diferencia en centímetros entre la distancia del pié 1 al sensor 1 y la distancia del pié 2 al sensor 2 abs(diferencia); if (abs(diferencia) > 2) digitalWrite(LedRojo,HIGH); //Si la diferencia en centímetros es > 2 enciende el LED Rojo if (abs(diferencia) == 0) digitalWrite(LedVerde,HIGH); //Si la diferencia es cero se enciende el led Verde, está alineado
// Inicializamos la salida de los datos de distancias y diferencias a un display Serial.print("Distancia Uno: "); Serial.print(d1); //Enviamos serialmente el valor de la distancia en cm del sensor 1 Serial.print("cm"); Serial.println();
Serial.print("Distancia Dos: "); Serial.print(d2); //Enviamos serialmente el valor de la distancia en cm del sensor 2 Serial.print("cm"); Serial.println();
Serial.print("Diferencia: "); Serial.print(abs(diferencia)); //Enviamos serialmente el valor en cm de la diferencia entre las distancias de los sensores 1 y 2 Serial.print("cm"); Serial.println();
delay(5000); //Hacemos una pausa de 5 Segundos } else { delay (1000); //Si no hay lectura, hacemos una pausa de 1 segundo, y se reinicia el loop principal } }
La simulación en Tinkercad
El diseño del soporte
El diseño del soporte se realizó en AutoCAD 3D, como de muestra en el screenshot siguiente:
La presentación del proyecto
La presentación del proyecto se realizó en forma grupal, y se muestra a continuación:
Con esto finaliza este camino que nos condujo por las vías de la electrónica y la programación aplicadas al diseño
















