Paso 5: programación
Si usted puede proporcionar críticas y soluciones alternativas con respecto a mi código, por favor hágalo! La programación es un poco más comprensible que electrónica general para mí, pero me siento perdida más a menudo que no.
Los comentarios están en el código - he añadido en un cuadro de texto y como un archivo adjunto .ino, la biblioteca puede encontrarse aquí. Si tiene problemas de ajuste el código de detección capacitiva y conexiones, cheque este video, me salvó. Biblioteca de fader de LED se puede encontrar aquí. Bosquejo de hacer la revista proceso fue utilizado para la visualización, se puede encontrar aquí.
Antes de escribir el código tuve que entender algunas cosas básicas implicadas en el funcionamiento del corazón y el circuito que hice para la medición del pulso que brevemente explicaré aquí.
El sensor hice utiliza una LDR como sensor parte. Una LDR tiene un rango de resistencia en la que la resistencia depende de la cantidad de luz que la alcanza. La luz allí es - cuanto menor es la resistencia y viceversa. En este caso lo que sentimos como un pulso es lo que sucede después de la válvula aórtica se abre y la sangre fluye a través de nuestro sistema circulatorio. Por lo tanto, en el momento del pulso de la cantidad de sangre en dedo es diferente que le da el cambio en la lectura. Si la sangre fue empujada a través del cuerpo por el corazón, significa que el corazón se vacía en el momento del golpe, por eso he escrito un código que se oscurece el corazón a 0 cuando pega y poco después inicia regulación a un valor mayor que representa el corazón llena de sangre. Como se puede ver en el Diagrama de Wiggers - el volumen principal del corazón es no poco a poco llenando de sangre hasta el siguiente golpe, pero hay una afluencia rápida donde la mayor parte del corazón se llena y luego algunas más durante la diastasis, hasta que comienza la fase de sístole auricular. Cada una de estas tres fases parecen tomar alrededor de un tercio del tiempo entre latidos, pero otro diagrama de un ciclo cardiaco proporciona aquí se dividió entre un eje de tiempo. Así que escribí el código de acuerdo con él: una pausa de aproximadamente 100 ms después de la fusión beat, luego rápida en 90% durante la próxima 150ms y un restante más lento se descoloran durante 200ms siguiente. Esto nos deja más de medio segundo hasta que el próximo beat para una tasa normal 60BPM, un completo fundido en hasta el siguiente bate hasta 130BPM y aún la mayor parte de aparece hasta 230BPM que es apenas físicamente posible en un ser humano, tal vez podría ser un problema si usted decidió medir el pulso de algunos animales más pequeños , pero no creo que tu Yorkshire Terrier sería demasiado bien con un pulso que sea. Lo importante es que esto soluciona el problema de tener promedio y predecir el tiempo entre latidos en código para cambiar los periodos de transición.
Código v1.1 para la lámpara del corazón facetado por Raitis. Visita http://snipegift.com para mis otros proyectos. int flt = 5; luz del dedo void setup() {} void loop() {}
Completo tutorial para la lámpara en instructables:
#include
#include
#define LED_PIN 3
#define DIR_UP 1
#define DIR_DOWN -1
LEDFader conducido;
Dirección int = DIR_UP;
Lampon de CapacitiveSensor = CapacitiveSensor(4,2); interruptor principal
CapacitiveSensor hrson = CapacitiveSensor(4,6); interruptor de hrs
int h = 0; sensor de ritmo cardíaco
pinMode (capitán, salida);
LED = LEDFader(LED_PIN);
LED.Fade(0,1);
}
digitalWrite(flt,LOW);
LED.Update();
largo total1 = lampon.capacitiveSensor(30);
total2 largo = hrson.capacitiveSensor(30);
Si (total1 > 1600 & & led.get_value() > 0 & & led.is_fading() == false) {//turns lámpara off, el valor de capsense es diferente mientras que en USB y fuera de él, así que prueba tuyo
LED.Fade(0,1000);
Dirección = DIR_DOWN;
}
Si (total1 > 1600 & & led.get_value() == 0 & & led.is_fading() == false) {//turns lámpara en el descoloramiento == false condición evita apagar otra vez de un solo toque
LED.Fade(179,1000);
Dirección = DIR_UP;
}
mientras (total2 > 700) {//a bucle activo cuando el dedo se coloca en la placa de acero en el hoyo del dedo
LED.Update();
largo total1 = lampon.capacitiveSensor(30);
total2 largo = hrson.capacitiveSensor(30);
horas = analogRead(0); comienza leyendo el sensor de
digitalWrite (flt, HIGH); enciende la luz del dedo
Delay(1); para evitar el nerviosismo
Si (horas > 150) {//when la lectura de horas es superior a 150 es probablemente del pulso, no de ruido en mi caso. Depende en el transistor utilizado supongo.
LED.Fade(0,10); atenuación según cómo funciona el corazón
Dirección = DIR_DOWN;
LED.Fade(0,100);
Dirección = DIR_DOWN;
LED.Fade (225, 150);
Dirección = DIR_UP;
LED.Fade (255, 200);
Dirección = DIR_UP;
Delay(260); para evitar el nerviosismo hasta que se descolora a 225
}
¿Si (total2 < 150) {//why hago necesidad este si al mismo tiempo debe salir por debajo de 700 de todos modos?
LED.Fade (179, 1000); se desvanece hacia brillo estándar de 70% cuando la placa de acero no se toca ya
Dirección = DIR_DOWN;
rotura;
}
}
}
Como veis, no utilizo ningún suavizado para la entrada analógica. Hice prueba una versión con él sin embargo y descubrió que cuando se utiliza un medio de ejecución para un bajo número de lecturas, como 10, no es ninguna ventaja real de tenerlo. Promedio un mayor número de lecturas suaviza las cosas bastante bien, pero entonces hay un problema enorme retraso. Tengo una idea de una solución para ese retraso que probablemente eliminaría el nerviosismo al colocar el dedo (ver gif) probarlo y añadir alternativa código aquí si funciona, pero como ahora, este código estoy usando funciona y no tendría ningún problema de dejarlo como está.
Actualización: Probé una alternativa código con suavizado que reacciona a un cambio de tendencia en las lecturas promedio para identificar ritmo, pero al mismo tiempo el concepto funciona bien solo, solo no funciona como supone al intentar desaparecer. Reacciona al ritmo, pero inquietudes todo el tiempo cuando no. Si alguien realmente está haciendo esto y quiere darle una oportunidad, te puedo enviar un bosquejo del código alternativo. No subir aquí para evitar confusiones.