martes, 28 de enero de 2020

ARDUINO - Detector de pulso sanguíneo. Latidos del corazon.

ARDUINO

Detector de pulso sanguíneo.

Latidos del corazon.


A la espera del módulo MAX30102 que hace todo el trabajo, he diseñado un detector de pulso sanguíneo mediante un led blanco y detector de luz (LDR).
Con cada pulso cardíaco la sangre se desplaza por todo el cuerpo, al ser mediante impulsos, la cantidad de sangre  en cada momento varía, y esto lo medimos en los dedos.
Como la piel no es opaca completamente, mediante una luz intensa generada por un LED, la  emitimos en una parte del dedo.
En la otra parte del dedo medimos la cantidad la cantidad de luz que traspasa a través de la piel, la medición la hacemos mediante una LDR.

Como pude observa en un osciloscopio la variación es muy pequeña, pero apreciable.
Para poder observa la señal, lo primero que se me vino a la mente fue  un arduino digitalizando las pequeñas variaciones de señal, y mostrando las variaciones en una herramienta que viene en las últimas versiones de arduino, Serial Plotter.


Como podemos observar la señal es muy pequeña.
Se puede aumentar la amplificación del arduino cambiando el voltaje de referencia de convertidor.
Si lo cambiamos a 3.3V la amplificación sera de x1.5 , y se lo ponemos a 1.1V , conseguiremos una amplificación de x4.5  .
Aún así, no conseguimos una señal buena, solo detectaríamos las pulsaciones, pero no la forma de la onda, por lo que debemos utilizar un amplificador operación LM358 para amplificar la señal.

Circuito amplificador.

Ahora ya podemos visualizar perfectamente la señal.

Señal cardíaca.

Para conseguir ondas mas perfectas, o mas o menos pronunciadas , podemos jugar con los valores de C1 y C2.
En mis múltiples pruebas he empleado valores de C1= 400uF  y C2=330nF consiguiendo ondas como estas.

Onda de pulso sanguíneo después de hacer ejercicio.

El programa me costo bastante, hice muchas pruebas, el detectar los flancos de subida fueron una pesadilla, al final me quedo algo digno.
Existen dos modos, el visual para que se represente en la herramienta de arduino Serial Plotter, y otra que solo manda al terminal serie las pulsaciones por segundo.
Para cambiar de un modo a otro debemos de comentar o descomentar  la línea que pone #define VISUAL .

Después de realizar todas las pruebas todo en una placa Breadboard, lo pasé a un circuito impreso, y lo junté con un conjunto de poliespan donde se encuentra el LED y el LDR.



Como podéis observar en el circuito he añadido un zumbador para poder oír los latidos, ademas de ver como parpadea el LED del arduino que se encuentra en el PIN 13  del arduino.


PROGRAMA

Espero que les guste este montaje, es fácil de hacer y es bastante vistoso.
En internet existen bastantes montajes como este, pero yo lo he diseñado desde cero.
También tengo previsto hacer una pinza con la impresora 3D ,  como lo tienen los hospitales.
Otra idea que he visto es colocar un diodo infrarrojo para ver el % de oxigeno en sangre.

PROGRAMA

Saludos.
Juan Galaz

sábado, 18 de enero de 2020

ESP8266 - WebServer - Encender LED desde navegador


ESP8266

WebServer

Encender LED desde navegador


Una de las cosas que mejor puede hacer el ESP8266 es de un mini servidor web.
El montaje que vamos hacer es el de encender 4 LED desde el navegador.





En el programa que proporciono se debe cambiar el nombre de vuesto router y la contraseña Wifi

#ifndef STASSID
#define STASSID "router"
#define STAPSK  "contraseña"
#endif

Veremos en el terminal serie la IP que tiene nuestra placa.
Connected to setamodem3
IP address: 192.168.1.134
MDNS responder started
HTTP server started

Ahora en nuestro navegador tecleamos:
http://192.168.1.134/

En nuestro navegador veremos la siguiente página.


Aquí podemos encender y apagar los 4 LED desde cualquier navegador dentro de nuestra red.

Surgen dos problemas, debemos saber la IP que nos ha dado el router, y el modo texto es poco practico además de ser demasiado espartado.
Lo primero lo arreglamos cambiando en el programa lo siguiente:

IPAddress ip(192,168,1,200);    
IPAddress gateway(192,168,1,1);  
IPAddress subnet(255,255,255,0);

Debemos saber en que rango de direcciones esta nuestro router, en mi caso es 192.168.1.[0-254].
Para mi montaje he indicado la IP 192.168.1.200 , es una dirección lo suficiente alta para que no la dé automáticamente el router.

Para hacer nuestro interface mas agradable, he utilizado botones de colores para encender y apagar nuestros LED.



Como podemos ver la página es ahora bastante mas atractiva.

Y ya si queremos utilizar gráficos para representar a los LED.



Espero que les guste este montaje.

PROGRAMA

Saludos.
Juan Galaz

Bibliografía:

https://polaridad.es/
https://www.luisllamas.es/encender-y-apagar-un-led-en-el-esp8266-con-un-formulario-web/
https://www.instructables.com/id/Quick-Start-to-Nodemcu-ESP8266-on-Arduino-IDE/

https://randomnerdtutorials.com/projects/#esp8266
https://randomnerdtutorials.com/getting-started-with-esp8266-wifi-transceiver-review/
https://www.prometec.net/esp8266-pluggin-arduino-ide/


viernes, 17 de enero de 2020

Primeros pasos con ESP8266 IDE Arduino - BLINK

Página principal

ESP8266

BLINK


Hace 5 años había realizado montajes con el ESP8266, pero lo utilizaba con el Arduino para las comunicación.
Solo lo utilizaba mediante comando AT, a modo de modem, y la comunicación la hacia mediante el puerto serie.
    Arduino NANO - SERVER WEB con ESP8266 - Servidor de temperatura-ds18B20. ardwifi
En estos 4 años la programación del ESP8266 avanzó mucho, ahora el ESP8266 se puede programar directamente desde la IDE del Arduino. Como enseñar a configurar  la IDE de Arduino para programar el ESP8266 sería demasiado repetitivo debido a la gran cantidad de tutoriales que existen, he creído que lo mejor sería indicar los mejores enlaces que yo he encontrado.

https://polaridad.es/programar-un-modulo-wifi-esp8266-desde-el-ide-de-arduino/
https://www.luisllamas.es/programar-esp8266-con-el-ide-de-arduino/
https://www.instructables.com/id/Quick-Start-to-Nodemcu-ESP8266-on-Arduino-IDE/
https://www.esploradores.com/instalacion-del-gestor-del-microprocesador-es8266-en-el-ide-de-arduino/

En estas páginas se explica bastante bien como configurar la IDE del Arduino, seguro que existen otras muchas, pero son las que he utilizado.
Lo primero que he probado es hacer parpadear un LED , es como el hola mundo de la programación.
ESP8266 Blink
// El LED montado en el módulo está conectado a D4

#define LED D4

void setup()
{
  pinMode(LED, OUTPUT); 
}

void loop()
{
  digitalWrite(LED, LOW);
  delay(1000);                    
  digitalWrite(LED, HIGH); 
  delay(1000); 
}

Placa de desarrollo NodeMcu V3.

Lo primero que notamos al compilar y subir el programa es lo mucho que tarda, 21 segundos.
También lo que extraña es el tamaño del programa, 257672 bytes (24%), he de suponer, que sea debido a que además del programa suba un interprete o un pequeño sistema operativo.
Las siguientes modificaciones en el programa y su posterior compilación-subida a la placa solo tardan 8 segundos.
Haciendo algunas pruebas con compilación-subida a la placa, he notado que es mas rápido en versiones de sistema operativo de 32 bits que la de 64 bits , 20% mas rápido. Yo siempre he pensado que los 64 bits están sobrevalorados en muchas aplicaciones y procesadores.

Lo curioso de estas placas es el no disponer de un piloto LED que nos informe que la placa está alimentada, en muchas ocasiones no sabes si la tienes conectada.
Existe un un LED conectado al pin D4, que es el que utilizamos para nuestro montaje. En otros modelos de placa de desarrollo se encuentra conectado a otro pin.


En mi segunda prueba intento saber la máxima frecuencia de parpadeo del LED.
ESP8266 Blink-2
/*
  ESP8266 Blink
*/
// 545 KHz  y parpadeo cada 3 Segundos

#define LED D0

void setup() 
{
  pinMode(LED, OUTPUT); 
  ESP.wdtDisable();  
}

void loop()
{
volver:
  digitalWrite(LED, LOW);                   
  digitalWrite(LED, HIGH);
  ESP.wdtFeed(); //de otra forma salta el Watch Dog
  goto volver; 
}

El resultado de las pruebas me da 545 KHz  y parpadeo cada 3 Segundos, es como si hubiese una interrupción cada 3 segundos.
Después de mucho mirar por la WEB he descubierto que tiene activado por defecto el pero guardián cada 3 segundos.
Con la orden   ESP.wdtDisable();  desactivamos el Watchdog .
Aún así sigue reseteando cada 8 segundos.
Cuando el
Watchdog está desactivado durante mucho tiempo el módulo se desactiva.
Con la orden ESP.wdtFeed(); ya no se resetea el módulo, aunque pierda velocidad. ?????
El resultado es de 332KHz, y una onda que no es cuadrada.

/*
  ESP8266 Blink-2 versión 2
  384 KHz 
*/

#define LED D0

int z;

void setup()
{
  pinMode(LED, OUTPUT);
  ESP.wdtDisable(); 
}

void loop()
{
volver:
  digitalWrite(LED, LOW);                  
  digitalWrite(LED, HIGH);
  z++;
  if(z>60000)
    {
      ESP.wdtFeed(); //de otra forma salta el Watch Dog
      z=0;
    }
  goto volver;
}
Otro modo es poner cada cierto tiempo ESP.wdtFeed(); y ganamos algo de velocidad llegando a 384 KHz.

En un montaje hice pruebas stm2.html
En un  Arduino hacemos oscilar el puerto a 96 KHZ  ,y si utilizamos el 32F103C8T6 oscila a 817KHz .
Como con el Arduino tengo práctica, sé bastantes trucos, y  podemos llegar a 2.6 Mhz , incluso a 3.9 Mhz haciendo alguna trampa.

Otra de las prueba que suelo hacer es un bucle.

Bucle
//  Arduino
//  22.6 Seg.  __2000

//  STM
//  5.8 Seg.  ___2000

// ESP8266
// 6 Segundos

int n1,n2;
char z;

// STM
//#define LED PA0

//Arduino
//#define LED 13

//ESP8266
#define LED D0

void setup()
{
  pinMode(LED, OUTPUT);
  ESP.wdtDisable();
  Serial.begin(115200);
}

void loop()
{
    Serial.println("0");
    digitalWrite(LED, LOW);

    for(n1=0;n1<30000;n1++)
      {
        for(n2=0;n2<2000;n2++) { z=1; }
        ESP.wdtFeed();
      }
   
    Serial.println("1");
    digitalWrite(LED,HIGH );

    for(n1=0;n1<30000;n1++)
      {
        for(n2=0;n2<2000;n2++) { z=1; }
        ESP.wdtFeed();
      }           
}

El resultado es de 6 Segundos, parecido al  32F103C8T6 que tarda 5.8 Segundos.

Aunque me gusta el ESP8266  por su precio, tener WIFI y la memoria que lleva, veo que hay mucho que aprender en cuanto a su programación

Espero que les guste este montaje.

Saludos.
Juan Galaz

Bibliografía:

https://polaridad.es/programar-un-modulo-wifi-esp8266-desde-el-ide-de-arduino/
https://www.luisllamas.es/programar-esp8266-con-el-ide-de-arduino/
https://www.instructables.com/id/Quick-Start-to-Nodemcu-ESP8266-on-Arduino-IDE/
https://www.esploradores.com/instalacion-del-gestor-del-microprocesador-es8266-en-el-ide-de-arduino/

https://randomnerdtutorials.com/projects/#esp8266
https://randomnerdtutorials.com/getting-started-with-esp8266-wifi-transceiver-review/
https://www.prometec.net/esp8266-pluggin-arduino-ide/


lunes, 13 de enero de 2020

Caja para módulo HW-319 con freeCAD


El otro día estuve trabajando con el ESP8266 y tuve la necesidad de tener una fuente de 3.3V .
Existen multitud de módulos que proporcionan 3.3V fijos, pero me gustaba poder cambiar de tensión.
Buscando por internet encontré el módulo HW-319, que proporcionaba una tensión ajustable entre 3V y 37V, además de tener un voltímetro para ver la tensión.
Este módulo además de ser pequeño es barato 3€.


Para tener este módulo bien guardado he creado una caja con freeCAD. Para la alimentación he utilizado uno de los muchos alimentadores de router que ya no se utilizan y que proporcionan 12V y 1A.
Todo queda muy compacto y funcional.




En lo referente a freeCAD he utilizado bastantes comandos en vez de utilizar alineaciones horizontales y verticales, es por una cuestión de facilitar su aprendizaje.

Saludos
Juan Galaz