Monitorización de bebe avanzado con Raspberry Pi


Es realmente sorprendente   hasta donde podemos llegar con una Raspberry Pi  , donde probablemente la única limitación la pongamos nosotros mismos, pues esta versátil placa  esta muy capacitada  para tareas tan complejas , las cuales  hacen tan solo unos años hubiera  sido impensables  que se pudieran realizar  en un hw   como el de esta placa.

Como ejemplo de multi-procesamiento   vamos a ver en este post cómo  Bob Bam Mantell , montó un monitor de bebé con  una Raspberry Pi  recogiendor los datos en Splunk, mediante un lector de registro y  una herramienta de análisis, programando  los datos de una manera significativa . Como resultado de este trabajo tendremos todas las medidas en un único  tablero  de mandos  donde podremos controlar los patrones del sueño, temperatura y humedad. 

Para construir  este  monitor  necesitamos:

Con cierta supervisión y alertas deberíamos ser capaces de mantener  la comodidad óptima del bebé, pero   antes debemos instalar Raspbian. Esta versión  se  descarga a partir de una nueva imagen descargada a partir del sitio  oficial Raspbian ,

En la url de descarga podrá  apreciar en la imagen de abajo ,   se mantienen tanto la imagen de la versión previa mínima (Lite) o la nueva versión Stretch para escritorio:

raspbian.PNG

Lógicamente si la SD es suficiente grande , lo interesante es descargar la primera  en lugar de la versión mínima

Una vez decidida,  descargue la imagen correspondiente  en su ordenador y siga los siguientes pasos:

  • Inserte la tarjeta SD en el lector de tarjetas SD  de su ordenador comprobando cual es la letra de unidad asignada. Se puede ver fácilmente la letra de la unidad, tal como G :, mirando en la columna izquierda del Explorador de Windows.
  • Puede utilizar la ranura para tarjetas SD, si usted tiene uno, o un adaptador SD barato en un puerto USB.
  • Descargar la utilidad Win32DiskImager desde la página del proyecto en SourceForge como un archivo zip; puede ejecutar esto desde una unidad USB.
  • Extraer el ejecutable desde el archivo zip y ejecutar la utilidad Win32DiskImager; puede que tenga que ejecutar esto como administrador. Haga clic derecho en el archivo y seleccione Ejecutar como administrador.
  • Seleccione el archivo de imagen que ha extraído anteriormente de Raspbian.
  • Seleccione la letra de la unidad de la tarjeta SD en la caja del dispositivo. Tenga cuidado de seleccionar la unidad correcta; si usted consigue el incorrecto puede destruir los datos en el disco duro de su ordenador! Si está utilizando una ranura para tarjetas SD en su ordenador y no puede ver la unidad en la ventana Win32DiskImager, intente utilizar un adaptador SD externa.
  • Haga clic en Escribir y esperar a que la escritura se complete.
  • Salir del administrador de archivos  y expulsar la tarjeta SD.
  • Ya puede insertar la SD en su Raspberry Pi en el adaptador de micro-sd , conectar un monitor por el hdmi , conectar un teclado y ratón en los  conectores USB, conectar la  con un cable ethernet  al router  conectividad a Internet y finalmente conectar la alimentación  para comprobar que la Raspberry arranca con la nueva imagen

La versión previa basada  en  Raspbian Jessie ( Debian8 )  ya incluía  características y aplicaciones bastante interesantes así como algunos cambios más sutiles en el diseño del sistema, como por ejemplo,al iniciar ahora su Raspberry Pi que la pantalla inicial  cambiara  mostrando una imagen mas moderna .También  incluía  algunas aplicaciones como un navegador integrado , el  software  de RealVNC, para acceder a la Pi desde un escritorio remoto  , wallpapers nuevos para  decorar el fondo de escritorio de su Raspberry Pi,etc .

Ahora lo mas importante de  esta  nueva actualización es sin duda  la subida de versión hacia Debian 9 ( recordemos que la versión anterior  era Debian 8)  trayendo  ademas un gran número de cambios y mejoras internas respecto a Debian 8 destacando quizás ademas de la subida de version el  incluir un  nuevo asistente de configuración que será mostrado en el primer inicio, lo cual  ayudará a los recién llegados a configurar el sistema Raspbian a su gusto sin tener que buscar los distintos paneles de ajustes.Por supuesto este asistente de configuración se ejecutará de forma automática en el primer inicio del sistema, permitiendo que los usuarios escojan su país, lenguaje, huso horario, configuren un perfil con contraseña, agreguen una red Wi-Fi e incluso instalen actualizaciones disponibles.

Una vez hayamos arrancado la Rasberry Pi con Raspbian,   como vemos en las  pantallas anteriores  seguiremos el asistente de inicio   donde   configuramos la red wifi a la que nos conectaremos desde  la  Raspberry Pi.   

Asimismo necesitamos   permitir tanto los pines de GPIO como el de la  cámara  nativa

Además debemos confirmar que puede conectar mediante el programa SSH para acceder remotamente una vez instalado

Por ultimo  actualizaremos el so  ejecutando el comando de actualización:

sudo apt-get update

Una vez hecho esto, ya tendremos un sistema operativo base  por lo que empezaremos instalando la camara NoIR

Camara NoIr

El NoIR de Pi, es la versión de visión nocturna de la cámara, que NO tiene filtro ( es decir ‘Sin Infra rojo’) , lo que significa, si usted tiene una fuente de luz infrarroja, por la noche, la cámara puede ver en la oscuridad. Puesto que los  bebés suelen descansar  por la noche (con suerte), ese el motivo de necesitar una cámara infrarroja para no despertarlo por lo que si usted quiere imágenes  en  color o prevea usar la cámara  con  luz normal  no utilice esta cámara. El modulo de cámara de Pi  de  infrarrojos   tiene un mayor rendimiento que las cámaras USB,  por lo que lo ideal es usar  cámaras del tipo compatibles con Raspberry Pi  con interfaz . 

Estos  son los pasos para instalar la cámara Noir especifica para su uso , con la Raspberry Pi 3

Localice el puerto de la cámara y conecte la cámara:

Connect the camera

Poner en marcha la Raspberry Pi 3

Abra la Herramienta de configuración de frambuesa Pi desde el menú principal

Raspberry Pi Configuration Tool

Asegúrese de que está activado el software de la cámara

:Camera software enabled

Si no está activado, habilítelo y reinicie su Pi para comenzar.  Es decir resumidamente;  con la Raspberry Pi apagada, debe conectar el módulo de la cámara al puerto de la cámara de la Raspberry Pi, ahora encienda el Pi  y asegúrese de que se activa el software.

Alternativamente   la activación de la cámara  se puede  hacer eescribiendo los siguientes comandos:

sudo raspi-config

Select

Enable camera

Seleccione entrar, cuando haya terminado, le pedirá que reinicie siguiendo las instrucciones.

 

Conexión de un sensor  DHT22

DHT11 y  DHT22 son dos modelos de una misma familia de sensores, que permiten realizar la medición simultánea de temperatura y humedad usando ademas un único  hilo para comunicar los datos vía serie, para lo cual  ambos  disponen de un procesador interno que realiza el proceso de medición, proporcionando la medición mediante una señal digital, por lo que resulta muy sencillo obtener la medición desde un microprocesador

Ambos son similares ( DHT11 presenta una carcasa azul  , mientras que el sensor DHT22  es blanco)  compartiendo además los mismos pines  disponiendo de  4 patillas, de las cuales usaremos sólo 3: Vcc, Output y GND.  Como peculiaridad ,la  salida la conectaremos a una entrada digital  , pero necesitaremos poner una resistencia de 10K entre Vcc y el Pin Output.

El  DHT11  puede medir temperaturas entre 0 a 50, con una precisión de 2ºC, humedad entre 20 a 80%, con precisión del 5% y con una a frecuencia de muestreo de 1 muestras por segundo (1 Hz)

En clara superioridad  con el dHT11 , el modelo DHT22 tiene unas características mucho más profesionales.
  • Medición de temperatura entre -40 a 125, con una precisión de 0.5ºC
  • Medición de humedad entre 0 a 100%, con precisión del 2-5%.
  • Frecuencia de muestreo de 2 muestras por segundo (2 Hz)

Destacar que este tipo de  sensores de temperatura  ( y, aún más, los sensores de humedad) , son sensores con elevada inercia y tiempos de respuesta elevados. Es decir, al “lentos” para reflejar los cambios en la medición.

Conectar  el DHT22  a  una Raspberry Pi es  sencillo, simplemente alimentamos al sensor a través de los pines GND y Vcc del mismo. Por otro lado, conectamos la salida Output a una entrada digital . Necesitaremos poner una resistencia de 10K entre Vcc y el Pin Output , tarea  que suele hacerse mediante un jumper en la propia placa del sensor

En resumen estas son las conexiones:

  • Conecte el NARANJA( masa) al Pin 6 de las RP  (GND)
  • Conecte el ROJO(vcc) al  Pin 1 dela Rp
  • Conecte el  MARRON(output) al Pin 22   de la Rp ( GPIO25 )

Los sensores  DHT22 usan su propio sistema de comunicación bidireccional mediante un único hilo , empleando señales temporizadas por lo que en general, lo normal es que empleemos una librería existente para simplificar el procesoPara escribir el software, que puede leer el sensor, vamos a necesitar un par de cosas. Primero asegúrese de que el compilador ya está instalado con el común:

sudo apt-get install git-core

Necesitaremos clonar desde el git  el modulo  WiringPi  con el comando 

git clone git://git.drogon.net/wiringPi

Ahora vaya al directorio creado y compilaremos este modulo

cd wiringPi

git pull origin
   cd wiringPi

   ./build

 

Leer datos desde el sensor DHT22

Utilizado este sitio como una guía para escribir el software que será capaz de leer el Sensor. Aconsejaron que necesitamos utilizar un programa en C para asegurar que siempre lee el sensor. El código original has ido modificado   por  Bam Bam Mantell para evitar bucles y  mejorar el formato de las lecturas mejores para lectura en Splunk pues a Splunk le gusta el formato nombre_variable = valor para identificar fácilmente en el registro del log

Abra su  editor de texto favorito linux y cree  un archivo dat.c

Inserte  este código en ella el archivo dht.c

<p>/*<br> *  dht.c:
 *	read temperature and humidity from DHT11 or DHT22 sensor
 */
 
#include 
#include 
#include 
#include 
 
#define MAX_TIMINGS	85
#define DHT_PIN		3	/* GPIO-22 */
 
int data[5] = { 0, 0, 0, 0, 0 };
 
void read_dht_data()
{
	uint8_t laststate	= HIGH;
	uint8_t counter		= 0;
	uint8_t j			= 0, i;
 
	data[0] = data[1] = data[2] = data[3] = data[4] = 0;
 
	/* pull pin down for 18 milliseconds */
	pinMode( DHT_PIN, OUTPUT );
	digitalWrite( DHT_PIN, LOW );
	delay( 18 );
 
	/* prepare to read the pin */
	pinMode( DHT_PIN, INPUT );
 
	/* detect change and read data */
	for ( i = 0; i < MAX_TIMINGS; i++ )
	{
		counter = 0;
		while ( digitalRead( DHT_PIN ) == laststate )
		{
			counter++;
			delayMicroseconds( 1 );
			if ( counter == 255 )
			{
				break;
			}
		}
		laststate = digitalRead( DHT_PIN );
 
		if ( counter == 255 )
			break;
 
		/* ignore first 3 transitions */
		if ( (i >= 4) && (i % 2 == 0) )
		{
			/* shove each bit into the storage bytes */
			data[j / 8] <<= 1;
			if ( counter > 16 )
				data[j / 8] |= 1;
			j++;
		}
	}
 
	/*
	 * check we read 40 bits (8bit x 5 ) + verify checksum in the last byte
	 * print it out if data is good
	 */
	if ( (j >= 40) &&
	     (data[4] == ( (data[0] + data[1] + data[2] + data[3]) & 0xFF) ) )
	{
		float h = (float)((data[0] << 8) + data[1]) / 10;
		if ( h > 100 )
		{
			h = data[0];	// for DHT11
		}
		float c = (float)(((data[2] & 0x7F) << 8) + data[3]) / 10;
		if ( c > 125 )
		{
			c = data[2];	// for DHT11
		}
		if ( data[2] & 0x80 )
		{
			c = -c;
		}
				float f = c * 1.8f + 32;
		printf( "Humidity=%.1f Temperature=%.1f\n", h, c );
	}else  {
		printf( "Data not good, skip\n" );
	}
}
 
int main( void )
{
 	if ( wiringPiSetup() == -1 )
		exit( 1 );
	
		
	read_dht_data();
	 
	return(0);
}</p>

 

El código anterior del archivo dot.c ahora necesita ser compilado, para ello  escriba el comando

cc -Wall dht.c -o dht -lwiringPi

A continuación, puede ejecutar el programa con el comando

sudo ./dat

Usted debe ver algunas salida, lo cual sólo funcionará si el sensor está conectado correctamente y el código está trabajando. Se le mostrará una   salida similar a la siguiente:

Humidity=66.9 Temperature=18.3
........

 

Necesitamos  llegar  a utilizar Splunk  para que  lea archivos de registro. Así que los datos que estamos recogiendo de los sensores vamos a escribirlos en un archivo de registro, para que   Splunk pueda monitorear los cambios.

Primero vamos a crear un directorio en la carpeta de inicio pi, llamada registros, para almacenar los archivos :

mkdir /home/pi/logs

Ahora, en el directorio cree un archivo  script de bash  

touch /home/pi/temperature_script.sh

Editar el archivo anterior con su editor de texto favorito  ( vi ) e inserte este código:

#! /bin/bash

log="/home/pi/logs/"

#run the client

"/home/pi/dht" > temperature.txt

OUTPUT=`cat temperature.txt`

# Write values to the screen

TEMPERATURE=`echo "$OUTPUT"`

# Output data to a log file

echo "$(date +"%Y-%m-%d %T" ): ""$TEMPERATURE" >>"$log"temperature.log

Para automtizar la  ejecución de este script  vamos a utilizar Cron en la Raspberry Pi para ejecutar el trabajo, lo cual nos dará la flexibilidad de tiempo ejecutar cada uno de nuestros scripts

El sensor de temperatura requiere acceso de sudo (raíz) para ejecutarlos, así que tenemos que ejecutar el sudo crontab, para ello escriba el comando

sudo crontab -e

Agregue la línea en el archivo;

*/5 * * * * /home/pi/temperature_script.sh

Esto ejecutará el programa de temperatura cada cinco minutos.

 

A partir de este momento ,su registro debe empezar a mostrarse  como en  la siguiente imagen:. 

Picture of Schedule Your Scripts

Usted puede comprobar en el archivo de registro como se escriben nuevos datos  con el comando

cat /home/pi/logs/temperature.log

 Configurar la cámara web

Hemos habilitado anteriormente la cámara pero ahora vamos a instalar algun software para usarlo realmente , isa que  vamos a configurar la cámara web. 

El software se llama motion, y puede ejecutar un servidor web, para su visualización, detección de movimiento y marcos de registro y fotos. En esta configuración, se ve apagar  pues  no se cuenta con un montón de espacio para archivos de vídeo, así que se ejecutara para el control y utilizaremos el registro para el seguimiento de movimientos de sueño.

La instalación por defecto de movimiento no tiene soporte para la cámara de Pi. Así que estamos usando una compilación especial para trabajar con él. La guía completa está aquí.

Escriba el comando

sudo apt-get install motion

Ahora descargue este compilacioon  especial

wget href="https://www.dropbox.com/s/0gzxtkxhvwgfocs/motion-mmal.tar.gz

Ahora descomprimir el sw:

tar zxvf motion-mmal.tar.gz

Abra el archivo config del movimiento mmalcam.conf con su editor de texto favorito y actualize algunos de los ajustes, daemon para que se ejecute en background, aumento de altura video y video de calidad, el archivo de registro a nuestra ubicación y aumentar el nivel de registro para eventos.

daemon on

width=1280

height=720

logfile /home/pi/logs/motion.log

log_level 7

Apague el host local  para  que puede conectarse a él remotamente.

stream_localhost off

Text_Left es el texto que sale en el feed_

text_left Baby's Room %t

Hay una opción para nombre de usuario y contraseña para validarse si se conecta desde internet. De lo contrario dejarlo como está.

Guarde el archivo y empiece  a detectar el movimiento con el comando

sudo ./motion -c motion-mmalcam.conf

Ahora podrá conectarse a la corriente de la web de la cámara

El navegador web, preferentemente Chrome o Firefox en

Y debe recibir un alimento vivo. También puede comprobar el registro de movimiento y ver si se registran eventos.

cat /home/pi/logs/motion.log

Estos eventos de movimiento son lo que vamos a contar para detectar movimientos de sueño.

Si desea apagar el LED rojo, hacer más discreta la cámara, editar la configuración de arranque

sudo vim /boot/config.txt

Agregue estas líneas, y después de reiniciar no vino en.

# Turn off camera Red LED
disable_camera_led=1

 

Instalar Splunk y promotor Universal

No vamos a entrar en mucho detalles sobre el servidor de Splunk. Se puede instalar en cualquier sistema operativo  que se desee (Mac OSX ,  Linux,etc ). Tan sólo tiene que seguir la Guía de Splunk. Una vez tenga instalado Splunk, asegurase  que  se consiguió al menos una conexión receptora. El puerto predeterminado es 9997. Una vez que esto se realiza, y suponiendo que no hay cortafuegos bloqueará, puede configurar un promotor Universal para enviar datos.

Ir a Splunk y obtener el promotor universal para Linux. Necesita para obtener la versión para ARM .Siga las instrucciones en Splunk.

Ejecute al instalador de Splunk cuando tenga el archivo

tar xvzf splunkforwarder-<…>-Linux-arm.tgz -C /opt

Configurar el promotor para apuntar a su servidor de Splunk.

Editar el archivo en

sudo vim opt/splunkforwarder/etc/system/local/outputs.conf

Si su servidor es 192.168.0.10. tendrá que poner:

[tcpout:default-autolb-group]
server = 192.168.0.10:9997

Guardar y cerrar, ya puede comenzar a promotor de splunk

/splunkforwarder/bin/splunk start

No añadir un motor a nuestra ubicación archivo de registro

sudo /opt/splunkforwarder/bin/splunk add monitor /home/pi/logs

Nuestro promotor de Splunk ahora debe comenzar a recoger registros en ese directorio. Usted puede comprobar el registro de transportista de Splunk si su no va a verificar los problemas de

sudo cat /opt/splunkforwarder/var/log/splunk/splunkd.log

Crear un panel de control

Ahora inicie sesión en el servidor de Splunk y confirmar si los datos está llegando.

Realizar una búsqueda de eventos

index=main source="/home/pi/logs/temperature.log"

Si se cambia a modo detallado de Splunk, deben identificar las variables de temperatura y humedad. Ahora usted puede ver a través de una búsqueda de Splunk, como;

index=main source="/home/pi/logs/temperature.log"| timechart max(Temperature)

Puede crear una línea para la temperatura, ejecutar el debajo de buscar y salvar a un tablero de instrumentos nuevo, darle un nombre “Baby Monitor”

index=main Temperature source="/home/pi/logs/temperature.log" | stats first(Temperature)

Y otra vez para humedad, seleccione Visualización, manómetro Radial. Guardar como un tablero panel, el Panel existente, “Baby Monitor”

index=main Humidity source="/home/pi/logs/temperature.log" | stats first(Humidity)

Si el registro de movimiento es ingresado con éxito debemos tener eventos para él en Splunk ahora. Si buscamos eventos detectados, nos deberíamos volver resultados

index=main detected

Si tenemos resultados las podemos ver. Vamos a ver el volumen de eventos. Esto nos mostrará cuánto movimiento se detectó en el tiempo.

La consulta se ve así

index=main detected | timechart count span=5min

Combinando estas búsquedas y agregar a un panel de control podemos construir una gran cantidad de métricas útiles en interior y las temperaturas exteriores y movimientos del bebé.

La consulta para el interior y temperatura exterior juntos se ve así:

index=main source="/home/pi/logs/outside_weather.log"   OR source="/home/pi/logs/temperature.log" | timechart max(Temperature) AS "Baby's Room" max(Outside_Weather) AS "Outside" span=30min

 

Picture of Create a Dashboard

 

Via instructables

Anuncios

Microscopios para su uso en electronica


Es un hecho cierto que los componentes electrónicos son cada vez mas pequeños , habiéndose prácticamente generalizado el uso de las versiones de estos componentes en formato SMD ( cuyas  siglas en ingles corresponden a ” dispositivo de montaje superficial” ) . Estos componentes, aunque benefician al factor de forma donde se inserta la placa de circuito impreso  , por desgracia por su pequeño tamaño muchas veces son realmente difíciles de reparar, ajustar  o mejorar   a simple vista .

Ante el problema de no poder ver con  visión directa estos montajes , lo primero que se nos ocurre siempre es el uso de lentes de aumento con diferentes graduaciones para poder llegar a ver con detalle nuestros montajes, pero desgraciadamente estas al ser de graduaciones fijas tienen un alcance limitado y no suelen ser compatibles con la mayoría de las gafas correctoras, pero afortunadamente también , existen muchas soluciones comerciales disponibles siendo lo mas habitual el uso de Microscopios USB

Desgraciadamente muchos de estos microscopios de bajo coste no suelen estar a la altura sobre todo para el uso en electrónica y normalmente el resultado suele ser un poco decepcionante, no por los mecanismos de la lente y las distancia focales que suelen ser adecuados, sino por el tipo de sensores CMOS que llegan como máximo a alcanzar las resoluciones de 640 por 480 y con características de la luz muy pobres, razón por  la que muchos usuarios optan por fabricarlos por si mismos con cámaras de mayor calidad o optan por soluciones mas profesionales.

 

Microscopios con pantallas LCD incorporadas

Gracias al abaratamiento de los componentes hoy en día es ya es posible para un aficionado  conseguir  un microscopio electrónico  con sensor de 3.6MP    y pantalla LCD HD de 4,3 pulgadas y  aumento de 600X  por un precio  muy razonable  de unos 57€ ,  Obviamente no hablamos de una solución profesional ( no espere poder ver bacterias como anuncia )  , pero   para  su uso en electrónica  es mas que suficientes   e ideal   al integrar todos los componentes  en un único dispositivo lo cual es  una gran ventaja

En  el caso del modulo KKmon ( uno de los mas asequibles ) cuenta con  8 LED de alto brillo ajustable,, sensor  CCD de  3.6MP CCD  que le proporciona una imagen clara y le ayuda a ver objetos pequeños fácilmente con la lente microscópica profesional. Ademas gracias a la  batería de litio incorporada, puede funcionar  6 horas continuamente sin alimentación exterior.

En  este caso del modulo KKmon  la pantalla LCD es de 4.3 pulgadas, lo que le permite ver instantáneamente todas sus observaciones en detalle  con  resolución 1080P / 720P / VGA aunque muchos usuarios se les antoja algo pequeña teniendo en cuanta  las necesidades actuales

La distancia más cercana entre la lente del microscopio y el objeto es 15 mm y los tiempos de aumento serán más cortos a medida que aumenta la distancia

 

Como se ve en la imagen este tipo de microscopios “low cost” con pantalla , como “extra”  suelen llevar  un soporte  y estructura de metal para ayudar a apoyar el microscopio, lo cual lo hacen mucho mas robusto que otras soluciones mas sencillas 

Esta es  una opción  desde luego para quien disponga de presupuesto de las mejores

 

Microscopio económico con sensor de 2MP

Hay   un refinamiento  de la solución anterior , pero sin pantalla , lo cual abarata  bastante el costo del microscopio  perdiendo la funcionalidad de portátil , pero a cambio gracias a un ordenador, ofrece una ventaja adicional de  poder ampliar  la imagen a un tamaño bastante mayor que soluciones con pantallas integradas , y estos son los microscopios digitales USB

Un modulo razonable muy económico es el Microscope01  que nos ofrecen en Amazon  por  unos  22€  .  Este modulo admite resoluciones de :1600 x 1200 (2 mega píxeles), 1280 x 960 (1,3 mega píxeles), 800 x 600, 640 x 480  y en  vídeo de 1600 x 1200 (2 mega píxeles), 1280 x 960 (1,3 mega píxeles), 800 x 600, 640 x 480  siendo la velocidad de fotogramas máximo de 30 por segundo con brillo 600 Lux.

El modelo es  un  potente microscopio  con zoom digital (100X-200X, 50X-400X, 50X-500X, 50X-600X, 800X, 1000X.)  continuo de 6 niveles  mas que suficiente para nuestras necesidades en electrónica

Este microscopio digital USB 2.0  cuenta con brazo flexible ( de platico duro  ) contando con dos ajustes  en altura  y en ajuste fino (zoom) ,siendo la observación continua con el zoom  muy cómoda con una sola mano.

Como no podía ser menos lleva 8 luces LED blancas integradas , Esta iluminación es ajustable ( en el propio cable usb)  lo cual  hace que las imágenes ampliadas se vean claras y brillantes; permitiendo ver el detalle más pequeño en alta resolución directamente en su pantalla de ordenador.

Los drivers incluidos  solo se incluyen  para  Windows XP/2000/Vista/Win7/Win8 32 y 64 bits pero se incluye un potente sw llamado ampcamp para manipular tanto el vídeo como la imagen capturada . Por cierto ,se puede forzar con un botón en el propio cuerpo de Snap).

El rango de enfoque  manual  es desde  10 mm (3,94 pulgadas) hasta a 250 mm (9,84 pulgadas) lo cual no permite colocar lo que necesitemos sobre la base  y poder soldar/desoldar  sobre esta sin que el microscopio nos  interfiera

 

 

 

Por cierto   si adquiere   este económico modulo     !no olvide quitar  la tapa transparente del objetivo!( al ser transparente no se aprecia que sea un guardapolvo , pero al estar puesta esa tapa  reduce  la calidad de la imagen)

 

Soluciones casera basadas en  webcams recicladas

Una cámara web normal tiene dos partes :

  • La parte PCB con el sensor CMOS (exactamente en el PCB se ha montado un sensor CMOS en él que recibe la imagen de la lente y se proyecta una imagen muy pequeña en el CMOS . )
  • La otra parte es la lente que recibe la imagen de la parte frontal y la hace que sea muy pequeña en el otro lado de manera que se puede proyectar en el sensor CMOS .

Samaddon  observo que invirtiendo la lente del  objetivo  y  reinstalándo la  en el sensor CMOS  se consigue  un gran resultado. La recolocación se hace de forma que  la parte más pequeña de la lente reciba la forma de imagen exterior y la parte opuesta   más grande se proyecte  en el sensor  CMOS  de modo que dicha parte más pequeña de la lente amplifica  la imagen  a un gran escala

Entendido el concepto ,ahora hay  tres  factores en los que la calidad de la imagen depende  :

  • Distancia del objeto bajo observación:  desde el exterior o el lado más pequeño de la lente :este es el factor más importante , si la distancia será más la imagen se invierte y si va a ser demasiado cerca de la imagen será borrosa . Así que es importante mantener una distancia perfecta puede usted ajustar de acuerdo con usted para obtener una buena imagen.
  • Luminosidad :Debe haber una luz adecuada para ver el objeto de esto es también un factor importante cuanto menor sea la luz lo peor es la calidad de la imagen .
  • Calidad de la cámara: cuanto mejor sea la calidad del sensor c-mos de la cámara mejor sera de la imagen.

 

Solución casera  con una webcam de bajo coste

Para  conseguir este cometido partiendo de  una webcam  normal ,  se  pueden seguir los siguientes pasos:

  • Abrir la carcasa de la cámara y sacar el PCB de ella con el objetivo , ya que puede ocurrir que el objetivo y los CMOS no están unidos entre sí por medio de tornillos pueden ser unidas por la propia carcasa :con esto ya tiene la placa de circuito impreso  y la lente de la carcasa . Observe la lente cuidadosamente en busca de hilo para que se puede atornillar la lente hacia fuera de la carcasa secundaria sensor CMOS o si no hay un hilo allí, así tal vez sólo puede llevarlo a cabo desde el sensor CMOS o podría ser sostenida por tornillos. Ahora saque la lente y quite la cubierta de la lente en su caso
  • Usted verá que la parte más pequeña de la lente se enfrenta a la captura de la imagen más grande desde fuera del sensor y CMOS. Ahora tenemso que invertir la posición del objetivo para que este la  parte más grande frente al sensor CMOS y ahora fije  firmemente a la carcasa invertida o si usted no tiene ninguna carcasa interior  péguela  con pegamento caliente y pinte con negro ésta  para que la luz no se salga
  • Para contener el conjunto dado que no servirá la carcasa original ,mida todos los cuatro lados (normalmente sera  un cuadrado ) ,traze las marcas en un vaso de plástico transparente y  corte estos con un cuchillo caliente en caso de utilizar plástico transparente o con una hoja de sierra especial. Luego  tome 4 varillas cilíndricas  (pueden servir recambios usados) y corte cuatro patas para la carcasa..Ahora que ha cortado las patas  haga cuatro agujeros en las cuatro esquinas de la diapositiva transparente y ajustada al diapositivas con las patas con 4 tornillos.Entonces  si tiene agujeros en la placa de circuito impreso apriete estos también con tornillos  , o  si no tiene ningún agujero pegue la placa con pegamento caliente o algo sin hacer ningún daño a los PCB.
  • Puede conectar a su ordenador y probarlo poniéndolo cerca de cualquier objeto alguno y a  continuación, podrá ver una vista ampliada de ese objeto. 

Solución casera  con una webcam lifecam de Microsoft

La solución de usar  una web-cam  normal e invertir la lente adolece de  problemas  con la ubicación de nuestros componentes,  pero sobre todo ofrece  baja  resolución, motivo por el cual lo ideal es usar una web cam de calidad HD o mejor Full-HD como por ejemplo el modelo Lifecam de Microsoft .

Es  tan popular  este modelo , que de hecho  existe un kit   que se puede comprar para este cometido , pero la lente cuesta  $50  y cuenta con  un único  distancia focal fija asi  que una  opcion   mas económica s pasa por reciclar un viejo microscopio de juguete  y adaptar la cámara  a este , trabajo realizado por Spectrhz

Para esta tarea primero desmontaremos el microscopio y retiraremos la lente.

La lente se llevara al interior de un tubo de cobre que se montara en una base de plástico. Quitaremos el plástico base de latón y gracias a la impresión 3d   imprimiremos  una nueva base que vaya justo en el cuerpo de la lifecam con la lente original quitada.

Las  piezas necesarias se pueden descargar directamente en  thingiverse aquí

El resultado debería aparecerse al  de la siguiente imagen

 

 

La lifecam tiene una reproducción del color excelente con buen bordes definidos y una tasa de actualización rápida  así  que si cuenta con una cámara , un microscopio  y una impresora 3d  ( y por supuesto tiempo para ensamblarlos)  es una buena idea 

 

En caso contrario de no  desear reciclar viejas web cams,   el  modelos  Microscope01  que nos ofrecen en Amazon  por  unos  22€   es  una opción  mas que interesante  si se sopesa que integra  zoom digital continuo de 6 niveles admitiendo resoluciones de hasta 2 mega píxeles en  imagen o en video ( con la velocidad de fotogramas máximo de 30 por segundo )  de  modo  que   con este modelo  ya tendríamos un  potente microscopio  con resolución   mas que suficiente para nuestras necesidades en electrónica

Cerramientos caseros para la Prusa i3


Si alguna vez ha tratado de imprimir con ABS sin un cerramiento, sabrá que el olor no es precisamente placentero pues se desprenden gases nocivos y por si fuese poco es dificil de imprimir ya que tiende a despegarse la pieza levantándose de la cama e incluso apareciendo grietas,  problemas  todos ellos que con un cerramiento, se pueden solucionar   y ademas obtener algunas mejoras como el atrapar los gases dentro ,  mejorar la calidad de la impresión , y todo ello sin mencionar la reducción de ruido

No obstante si SOLO esta imprimiendo mayormente con PLA, no espere ninguna mejora en la calidad de impresión cerrando su  impresora 3d  , pues el PLA se imprime bien a temperatura ambiente, aunque obviamente al usar un receptáculo para su impresora , si mejorara la reducción de ruidos y también en la contención de gases nocivos también presentes en la impresión con PLA .

En la red mayormente hay dos cerramientos  para impresoras 3d  que destacan del resto:

  • Usar una caja de luz de uso en fotografia
  • Usar como base la famosa mesa Lack de Ikea

 

Cerramiento con caja de luz

A menudo se   pueden usar determinados productos diseñados  originalmente para un propósito completamente diferentes. En este caso  hablamos de una caja de luz plegable  que se puede comprar en Amazon por unos 17€ ,  pensada como  herramienta útil para la fotografía ,pero  que se puede  usar para nuestro fin pues  todo lo que tiene que hacer es colocar la impresora dentro de la caja de luz   y cerrar el compartimiento 

Este tipo de cajas están  hechos de materia textil, lo que significa que son herméticas  lo cual es interesante porque  no deja llegar a  altas temperaturas  (incluso puede mantener la fuente de alimentación dentro.)

Según pruebas de muchos usuarios  con la impresora dentro se puede llegar  temperaturas alrededor de 38° C después de 10 minutos de la impresión dentro de una habitación con la temperatura ambiente. de 26° C,  lo cual  es una mejora significativa ( y ademas este uso es reversible pues sigue pudiendo usar este producto como caja de luz )

Esta caja  para fotografía que podemos comprar por unos 17€ en Amazon funciona como un cerramiento al abrirla, sin necesitar mas  modificaciones .

Aunque su uso no fuese para el  cerramiento de una impresora  en realidad es una idea sencilla y barata que se puede probar , pues en un cubo de  60x60x60   nos debería haber problemas en meter nuestra impresora .Segun pruebas de usuarios podemos llegar a alcanzar temperaturas sobre 40 grados celsius después de unos minutos de impresión

 

 

Cerramiento con estructura Lack de Ikea

Usar  la estructura Lack de Ikea como receptáculo  para nuestra impresora 3d es la opción más popular entre la comunidad de impresión 3D ( de hecho si  busca en línea,  encontrará docenas de diseños ). Esta estructura a se puede comprar por menos de $10 y tiene casi el tamaño perfecto para impresoras de Prusa. Ademas puede apilar las mesas encima de la otra para crear bahías para varias impresoras, o utilizar uno para el filamento y las herramientas de almacenamiento.

A pesar de que algunos de los diseños existentes de la caja son bastante buenos, hemos elegido   un diseño bastante original  en thinginverse creado por Dominik Císař

Este diseño destaca por las  buenas mejoras incorporadas  como son  las  bisagras integradas en las esquinas , puerta doble, luz LED conectada a la fuente, un clip para ésta (se pude  mantener fuera la fuente de alimentación y  se puede quitar cuando quiera) , lados de plexiglass para que pueda ver mientra imprime in dejar salir el aire caliente y  por último, puede levantar las mesas , cuando quiera al no estar atornilladas pero perfectamente encajadas 

Estos son los elementos empleados en la fabricación de esta caja para  la Prusa I3 , pero que perfectamente podemos adaptar a otras impresoras)

Construcción

  • 2 x o 3 x falta de Ikea mesa
  • 4 imanes de neodimio 20 mm x 6 mm x 2 mm
  • 3 x Plexi 440 x 440 mm, 3 mm de espesor (si estás en Estados Unidos, intenta Reina ciudad de polímeros)
  • 2 x Plexi 220 x 440 mm, 3 mm de espesor

Electrónica

  • Detector de fuego/humo
  • Termómetro interior/exterior
  • Banda de LED 24V, 30 cm
    • 24V para MK3, 12V para MK2/S
    • Si desea utilizar una tira de LED de 12V con el MK3, utilice una fuente de alimentación separada.
  • Cable doble, 100 cm
  • 2 x 221 WAGO o similar compact conector de palanca

Tornillos

  • 12 x 6 × 20 mm (12 x 3/4)
  • 4 x 6 × 50 m m (12 x 2)

 

Construcción de la caja

El proceso empieza instalando la tira LED y un detector de humo pues tener un detector cerca siempre es una buena idea (mejor estar seguro), Después  tenemos que  colocar las cuatro esquinas impresas y las patas de las mesas.

Es hora del mejor momento del montaje así que lo siguiente es colocar el plexiglass en los 4 lados.Si estas usan  uno de 3mm, entrará muy justo . El plexiglass será fijado por las cuatro piezas  también impresas, así que se mantendrán en su lugar aunque levante la mesa . No se debe olvidar  de las manillas . Cuando se atornillen los soportes de bobina ya estarás listo  la mesa superior

La mesa inferior necesita el tope para la puerta y las 4 esquinas . La fuente que va atornillada  a la impresora la sacaremos fuera del cerramiento principal  pues la fuente no está hecha para ser usada en entornos cálidos por lo que  de incluirla en el interior acorta su vida si se mantiene dentro. para ello la fuente está soportada por 2 piezas impresas  para que se puede deslizar fácilmente la fuente hacia adentro o hacia afuera, siempre que lo necesite

Como eliminamos la fuente del marco, es una buena idea para reemplaza esta sujeción que daba la fuente con una parte impresa para mantener el marco rígido. Una de las cuatro clavijas tiene un orificio para el enrutamiento de los cables de la fuente.

Reemplazaremos la cubierta de la cama con una versión alternativa de ángulo recto, lo cual  hará que la huella de la impresora sea un poco más pequeña y previene los cables de la cama golpeen  el plexiglás en la parte posterior de el recinto.

Por ultimo queda conectar dos cables a 24V positivo y negativo en la placa EINSY

Ya solo queda apilar las dos mesas una encima de la otra, conectar la tira de LED a los dos cables y pasar los cables a la parte posterior del cerramiento. ¡Y eso es todo !0

 

En este vídeo podemos ver el proceso completo del montaje de esta caja

 

 

Ahora, por supuesto, puede acumular más mesas Lack de Ikea una encima de la otra para diferentes propósitos   , lo cual hará hacer el recinto   más alto pero mas interesante ¿no?

Por cierto todas las piezas para imprimir están https://www.thingiverse.com/thing:2864118.

Curso gratuito sobre impresión en 3D


En este blog nos intentamos hacer eco de todos los proyectos interesantes que surgen  respecto a la  impresión en 3D

Precisamente orientado  a todas aquellas personas que quieran profundizar en esta plataforma ,gracias a la plataforma de Miriadax   tenemos disponibles  en la red   un interesante  curso gratuito  online  sobre impresión en 3d   apoyado  por la UPM  (Universidad Politécnica de Madrid)

El curso esta organizado en formato MOOC, (el acrónimo en inglés de Massive Online Open Courses ) , es decir como  un curso online masivo y abierto donde toda la comunidad   colabora de forma interactiva a través de la plataforma  y el uso de redes sociales.

Si el 2018 ha sido un año donde la Impresión 3D ha sido un boom a nivel del gran público y prácticamente ya no queda nadie que no conozca de su existencia, este año 2019 va a ser un año de gran crecimiento a nivel profesional, presencia en PYMES y uso en la Industria.

Todo ello gracias al considerable abaratamiento de tecnologías como FDM o SLA, así como a la constante evolución de los materiales para impresión , lo que amplían el abanico de soluciones que podemos llegar a crear apoyándonos en la impresión 3D.

 

No hay comienzo de año que no esté lleno de buenos propósitos, así que desde el MOOC Imprimiendo en 3D desde la plataforma MiriadaX nos animan a todos los que nos interese el mundo de la impresión en 3d o queramos mejorar nuestros conocimientos a que incluyamos en esta tarea en nuestra lista de propósitos 😉 nos permitirá obtener un conocimiento global de este apasionante mundo y descubrir que áreas son más de nuestro interés.

“Imprimiendo en 3D” quiere acercar a los usuarios esta tecnología, en constante cambio, que está llamada a revolucionar el mundo productivo y las relaciones comerciales en un corto espacio de tiempo.

 

La liberalización de algunas patentes y el descenso del coste de las impresoras están acercando la impresión 3D a casi todas las personas.

Desde sus inicios en los años ochenta del siglo XX, la impresión 3D ha ido perfeccionando tanto la propia impresora como diversificando los materiales que pueden emplearse. Por esta razón, se propone este curso para conocer las herramientas básicas de este proceso aditivo de fabricación de objetos desde un soporte digital (dibujos realizados con algún software: Blender, SketchUp, etc.), animado con ejemplos para que los usuarios pueden llevarlos a cabo (piezas de drenes, etc.)

 

En próximos MOOCs ya más especializados nos prometen ir abordando y profundizando en temas similares que sean de nuestro interés como por ejemplo  “Construcción de drones apoyándose en impresión 3D”, “Diseño avanzado con softwares para impresión en 3D”, etc.).

Para los que ya esteis pensando en  comenzar este MOOC, ya hay un Foro https://miriadax.net/es/web/imprimiendo-3d-/foro en el que se pueden hacer llegar dudas y preguntas asi como debatir sobre todo lo relacionado la Impresión 3D

https://miriadax.net/es/web/imprimiendo-3d-/inicio .

 

Enchufe inteligente basado en Cayenne


Un enchufe inteligente puede ser el primer camino sencillo para empezar la automatización del hogar ,objetivo   que sin duda esta muy pronto por llegar (en cuanto bajen aun mas los precios del hardware , pero sobre todo se mejore el software respecto a la seguridad) . Como hemos visto en este blog en numerosas ocasiones, existen muchos tipos de enchufes inteligentes disponibles en el mercado , pero aunque su precio empieza a ser razonable, desgraciadamente son soluciones cerradas  y por tanto no son personalizables  estando unidos a una solución sw que es muy difícil de cambiar.

En general, un enchufe inteligente es un dispositivo compacto que se conecta a tomas de corriente tradicionales   pudiendo actualizarse   con control remoto (normalmente por wifi) y por programación mediante diversas aplicaciones a medida   ejecutadas desde un smartphone ( o desde un pagina web).

Hoy, día de año nuevo, vamos a ver lo sencillo que es construir un enchufe inteligente mediante la plataforma Cayenne y utilizando el económico módulo wifi ESP8266

Con esta solución se consiguen varios objetivos:

  • Control local y remoto – el dispositivo basado en Cayenne puede ser fácilmente encendido/apagado usando la aplicación para smartphone Cayenne o desde la página web de Cayenne.
  • Motion Control – puede automáticamente encender o apagar con su presencia así como activar o desactivar esta opción por medio de la propia app de Cayenne.
  • Control por voz – puede activar o apagado el enchufe usando el Asistente de voz de Alexa
  • Poder de programación – se puede crear fácilmente horarios de
    encendido/apagado para sus dispositivos .También fácilmente puede configurar el temporizador de Cayenne directamente desde la aplicación.
  • Protección térmica – gracias a un sensor de temperatura incorporado automáticamente se puede apagar aparatos por sobrecalentamiento y notificar esta condicion a través de SMS o correo electrónico.
  • Monitorización remota – Por medio de la aplicación de Cayenne se puede monitorear el voltaje, corriente, temperatura y estado del enchufe (o está activado o desactivado).
  • Estadísticas de uso de energía – se puede controlar el consumo de energía de los dispositivos conectados y obtener notificaciones.

 

 

 

 

El circuito

Para este proyecto se usa  la siguiente lista de componentes:

  1.  Módulo de ESP8266-12E
  2.  Adaptador  DC5V 
  3.  Regulador de 3.3V 
  4. Modulo sharp S108T02 
  5. .  Sensor de temperatura  (DS18B20)
  6.   Sensor Consumo  (ACS712)
  7.  Sensor de  presencia PIR HC-SR501 
  8.  Cables y placa de prototipos.

 

El circuito no es demasiado complejo pues básicamente consiste en conectar los    sensores al ESP8266 , sin olvidar la alimentación de 3.3v   obtenida a partir de una fuente standard conmutada de  5v DC  y un reductor de 5v y 3.3v DC .  Puede usar  un viejo cargador de teléfono móvil y realizar la conversión de 5V a 3.3V con un circuito regulador integrado como el  AMS1117 . También puede alimentar con 5v  el circuito  usando directamente un micro-usb. 

 

Usaremos el sensor digital de temperatura DS18B20 con bus de hilo de Maxim IC , componente muy usado por cierto en muchos proyectos de registro de datos y control de temperatura

Este chip envia  al bus I2C la información de la temperatura exterior en  grados C con precisión 9-12 bits, -55C a 125C (+/- 0.5C).a.

Cada sensor tiene un número de serie único de 64 bits grabado en él lo cual permite un gran número de sensores que se utilizarán en un bus de datos.

 

DS18B20

 

Para medir el interior temperatura del enchufe se  usa el sensor de temperatura DS18B20  que alimentaremos  con 5v DC  desde  el propio  ESP8266 .Respecto a la salida digital del sensor de temperatura lo conectaremos a la una entrada digital por el  pin 13.

 

Como vemos en el esquema anterior , el sensor de proximidad    lo conectaremos al  pin  4  digital  y también a la alimentación de 5v DC  de la placa.

Respecto al sensor de consumo , éste  esta  basado en el  AC712  el cual conectaremos  en derivación ( es decir en serie ) con  la carga  AC  y a su vez con el   modulo sharp S108T02  (que es un relé de estado solido ) que  a su vez   llevaremos al enchufe para conectar la carga que deseamos controlar.

El   modulo sharp S108T02  (que es un relé de estado solido ) lo comandaremos directamente  con una salida digital   por medio del pin 5  ( al pin+)  y  masa . No debemos confundir los pines de control  (+-)  con lo pines de la  carga AC controlar rotulados con el signo de ca .

Respecto al sensor de consumo eléctrico, nos basaremos en  el modulo  ACS712  , el  cual  asimismo también debe conectarse a la carga en serie   como ya comentábamos  . Para evitar precisamente problemas en las conexiones ,  el modulo  ACS712     cuenta con dos terminales  atornillables para conectar aquí la carga  en  serie  y justo en el lado opuesto tres pines donde conectaremos la alimentación  y el pin de datos (OUT) que soldaremos al pin analógico  (ADC) del ESP8266

 

El modulo  ACS712  puede medir hasta  30 amperios gracias a su tamaño compacto fácil  de usar   basándose  en el Chip IC de producto: ACS712ELC 30 A . Su tensión de alimentación es de 5V y la tensión de salida con corrientes de hasta 30A es de185 mV/A siendo el rango de temperatura de funcionamiento entre -40 °C a 85 °C

Rrefiriéndonos al sensor PIR  podemos conectar un sensor PIR HC-SR501   que alimentaremos a 5v DC

 

hcsr501.PNG

 

El  modelo HC-SR501HC-SR501 es  un Sensor infrarrojo de bajo coste (menos de 2€  por modulo en Amazon) con placa de circuito de control donde se pueden ajustar la sensibilidad y el tiempo de retención gracias a dos resistencias ajustables que dispone en un lateral.

La gama de voltaje de trabajo es  DC 5V-20V  con un consumo de corriente de  menos de 60uA. La salida  es binaria digital  siendo el voltaje de salida de  3,3 V para un nivel alto o “1” logico  y  0V para el cero lógico (no detección de movimiento).

Lo primero que hacemos es conocer el pinout del HC-SR501, pero rápidamente al ver la serigrafía  de la placa, queda perfectamente claro :GND  para la masa , VCC para la alimentación (que tomaremos desde la Orange Pi ) y un pin de salida (OUT) que será el que nos indique si ha detectado algún movimiento.

Luego lleva un par de resistencia variables o potenciómetros que nos permiten ajustar los parámetros de sensibilidad y duración de la señal, es decir, durante cuanto tiempo vamos a querer que en pin OUT tener la salida informada.

sensor

 

El primer potenciómetro hacia la derecha sirve para ajustar la distancia de modo que el , rango de detección aumenta (unos 7 metros), por el contrario, la gama de detección disminuye (unos 3 metros).El otro potenciómetro rotándolo a la derecha sirve para retrasar  el  retardo de sensor a  tiempos más largos (sobre 300s).Si se gira la contrario el retardo sera corto (sobre 5).

 

 

Plataforma Cayenne

Gracias  a la plataforma de Cayenne , de la que hemos hablado en este blog en numerosas  ocasiones es bastante sencillo monitorizar cualquier variable física  de un modo realmente sencillo  simplemente  haciendo drug &drop desde el panel de control de Cayenne utilizando internet sin tener conocimientos  de programación conseguiendo asi controlar o monitorizar una carga AC a  en tan solo unos minutos  .

En efecto, gracias  a un  framework  genérico desarrollado por  myDevices IO Project Builder llamado Cayenne , los desarrolladores , fabricantes y  también aficionados  pueden  construir rápidamente prototipos y proyectos que requieran controlar o monitorizar   cualquier cosa conectada a  una placa  con conectividad  , permitiendo con una sóla cuenta gratuita de Cayenne, crear un número ilimitado de proyectos  mediante una solución  muy sencilla  basada en arrastrar y soltar 

Obviamente el punto fuerte de Cayenne  son las  capacidades de  IO  para que pueda controlar de forma remota sensores, motores, actuadores, incluidas los puertos  de GPIO con almacenamiento ilimitado de datos recogidos por los componentes de hardware,   triggers y alertas,  que proporcionan las herramientas necesarias para la automatización y la capacidad de configurar alertas. Ademas también puede crear cuadros de mando personalizados para mostrar su proyecto con arrastrar y soltar widgets que también son totalmente personalizables.

Para  probar Cayenne  con el  ESP12E       necesitamos  programar su ESP-12E para conectarse a su punto de acceso wifi   (el código fuente a subir  se puede descargar desde https://codebender.cc/embed/sketch:398516)

Como hemos hablado en  muchas ocasiones de Cayenne  pues en realidad está concebido para  que su manejo sea realmente sencillo   de configurar,  de modo que nos iremos a  su   url :   https://cayenne.mydevices.com/  

Tras registrarnos nos iremos  al panel de control   ,pulsaremos en  Add new   y seleccionamos generic ESP8266

A continuación nos ofrece  la API key que deberemos añadir al sw del   ESP12E      y tras reiniciarlo  ya debería poderse  comunicar con el node de Cayenne

 

Ahora la placa  está configurada con el MQTT  ( username /pwd)     así como con conectividad  wifi ,  de modo que ya   debería  de  poder conectarse al framework de Cayenne   y podemos seguir hacia adelante añadiendo sensores que deberán estar de acuerdo con el sw instalado en el ESP12E

Para visualizar los datos y controlar el dispositivo basta con añadir el widget apropiado usando arrastrar y soltar el método por lo que en  primer lugar, es necesario determinar los parámetros que quieres monitorear.

Cayenne utilizar un canal separado para cada parámetro y necesita definir cuándo configurar  un widget para cada funcionalidad

 

Estos son algunos de los widges que podemos usar para este circuito   :

 

Como vemos ,en este caso , como se aprecia en la pantalla anterior se han añadido:

  • Dos valor pantalla Widgets para mostrar temperatura y corriente.
  • Un calibrador de pantalla Widget para mostrar el voltaje.
  • Un 2 Widget de pantalla de estado para monitorear el estado de la clavija
  • Tres botón controlador Widget para el torneado de encendido y apagado el enchufe, proximidad de activación/desactivación y activación/desactivación temporizador.
  • Un regulador controlador Widget para ajustar la hora.
  • Una línea gráfico pantalla Widget para mostrar el índice de consumo de energía.
  • Dos disparadores, uno por automático apagado si se sobrecalienta y otra para correo electrónico y notificación por SMS.

 

Básicamente  el código a subir al    ESP12E     usa 5 librerías:  tres de Cayenne donde  tendremos que definir el SSID y la pwd de la red wifi así como las credenciales de Cayenne    , una cuarta de temporización para enviar muestras a intervalos prefijados ( que obviamente podemos cambiar ) 

Es de destacar  la creación  de  dos puertos virtuales  para capturar  los valores  en tiempo real de la temperatura  y la humedad tomadas ambas  del DHTXX  , lo cual nos van a permitir comunicarnos con el API de Cayenne.

Este es un ejemplo muy sencillo de utilización:

#include "CayenneDefines.h"
#include "CayenneWiFi.h"
#include "CayenneWiFiClient.h"


#define CAYANNE_DEBUG
#define CAYANNE_PRINT Serial


// Cayenne authentication token. This should be obtained from the Cayenne Dashboard.
// Change the value of token, ssid, and pwd to yours
char token[] = "xxxxxx";
char ssid[] = "xxxxxx";
char pwd[] = "xxxxx";
DHT dht(DHTPIN, DHTTYPE);

void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Cayenne.begin(token, ssid, pwd);
dht.begin();
}

CAYENNE_OUT(V0)
{
float t = dht.readTemperature();
Cayenne.virtualWrite(V0, t); //virtual pin
}
......
......

void loop() {
Cayenne.run();
}
 
Como es obvio  necesitaremos actualizar  en el código anterior cambiando el valor de ssid, contraseña  configurándola para la red wifi de su hogar y  también no olvidar   registrar  el  token de Cayenne que previamente habrá solicitado  desde la propia web de cayenne.

Md Hairul ha compartido el código de su prototipo  mediante licencia GPL, código, el cual  para que sea mas legible hemos añadido  unos breves lineas explicatorias.

 

// usado para enviar datos a la nube Cayenne
#include "CayenneDefines.h"
#include "CayenneWiFi.h"
#include "CayenneWiFiClient.h"

// Incluye las bibliotecas para el sensor de temperatura DS18B20
#include <OneWire.h>
#include <DallasTemperature.h>

// Habilitando la voz de Alexa
include "WemoSwitch.h"
include "WemoManager.h"
include "CallbackFunction.h"

WemoManager wemoManager;
WemoSwitch *light = NULL;

// configurar la depuración de cayenne
define CAYENNE_PRINT Serial

// tipos de datos
define TYPE_DIGITAL_SENSOR "digital_sensor"
define TYPE_VOLTAGE "voltage"
define TYPE_CURRENT "current"

// tipos de unidades
define UNIT_DIGITAL "d"
define UNIT_VOLTS "v"
define UNIT_AMP "a"

// El pin e datos está conectado al puerto 2 del ESP8622
define ONE_WIRE_BUS 2

// Configurar una instancia de OneWire para comunicarse con cualquier dispositivo OneWire (no solo IC de temperatura Maxim / Dallas)
OneWire oneWire(ONE_WIRE_BUS);

// Pasar la referencia oneWire al sensor de temperatura.
DallasTemperature sensors(&oneWire);
define PLUG 5
define pirPin 4

//variables
int timer_flag = 0;
int timer_time = 120;
int pir_flag = 0;
long timer_millis = 0;
int calibrationTime = 30;
long unsigned int lowIn;
long unsigned int pause = 60000;
boolean lockLow = true;
boolean takeLowTime;
int PIRValue = 0;
unsigned long lastMillis = 0;
int mVperAmp = 185; // usar 100 para el modulo de 20A y 66 para el módulo
int RawValue= 0;
int ACSoffset = 500; //solo para el modulo esp8266
double Voltage = 0;
double current = 0;
float temp = 0;

// Información de la red WiFi que debe personalizarse con lso datos de su red.
const char ssid[] = "xxxxxxxx";
const char wifiPassword[] = "xxxxxxxxx";

// información de autentificación Cayenne que deben obtenerse desde el tablero de Cayenne.
const char username[] = "xxxxxxxxxxxxxxxxxxxxxx";
const char password[] = "xxxxxxxxxxxxxxxxxxxxxx";
const char clientID[] = "xxxxxxxxxxxxxxxxxxxxxx";

void setup() {
Serial.begin(9600);
pinMode(PLUG, OUTPUT);
pinMode(pirPin, INPUT);

//configurar cayenne
Cayenne.begin(username, password, clientID, ssid, wifiPassword);

// Poner en marcha la biblioteca de sensores de temperatura
sensors.begin();

// iniciar wemo library
wemoManager.begin();

// Formato: Alexa invocation name, local port no, on callback, off callback
light = new WemoSwitch("Smart Plug", 80, plugOn, plugOff);
wemoManager.addDevice(*light);
delay(100);
digitalWrite(PLUG, LOW);
}





void loop() //aquí comienza el bucle infinito de lecturas y envios
{
Cayenne.loop();
wemoManager.serverLoop();
if(timer_flag){
check_time();
}
if(pir_flag)
{
PIRSensor();
}
read_temperature();
int voltage = 220; // definir voltaje standard
read_current();
float energy = 0.7 * voltage * current * millis()/(1000 * 60);
//en kWh, asumiendo un factor de potencia de 0.7

if (millis() - lastMillis > 10000)
{
lastMillis = millis();

// Enviar datos a Cayenne desde aquí.
//Este ejemplo simplemente envía el tiempo de actividad actual en milisegundos.

Cayenne.virtualWrite(1, voltage, TYPE_VOLTAGE, UNIT_VOLTS);
Cayenne.virtualWrite(2, current, TYPE_CURRENT, UNIT_AMP);
Cayenne.virtualWrite(3, temp, TYPE_TEMPERATURE, UNIT_CELSIUS);
Cayenne.virtualWrite(4, energy, TYPE_ENERGY, UNIT_KW_PER_H);
}

}


CAYENNE_IN(5)
// recepción de datos del canal 5 (encendido / apagado)
{
int value = getValue.asInt(); //aceptar y convertir valor a entero
Serial.println(value);
digitalWrite(PLUG, value); //cambiar el estado de
Cayenne.virtualWrite(7, value, TYPE_DIGITAL_SENSOR, UNIT_DIGITAL);
}



CAYENNE_IN(6)
// recepción de datos del canal 6 (encendido / apagado)
{
int value = getValue.asInt(); //aceptar y convertir valor a entero
Serial.println(value);
timer_time = value;
}


CAYENNE_IN(8)
//Datos recibidos desde el canal 6 de proximidad on / off
{
int value = getValue.asInt(); //accept and convert value to Int
Serial.println(value);
pir_flag = value;
}
CAYENNE_IN(10)

// recepción de datos del temporizador de activación / desactivación del canal 6
{
int value = getValue.asInt();// aceptar y convertir valor a Int
 Serial.println(value);
timer_flag = value;
timer_millis = millis();
}

// Función predeterminada para procesar comandos del actuador desde el Tablero de Cayenne.
//También puede usar funciones para canales específicos, por ejemplo, CAYENNE_IN (1) para los comandos del canal 1.



CAYENNE_IN_DEFAULT()
{
CAYENNE_LOG("CAYENNE_IN_DEFAULT(%u) - %s, %s", request.channel, getValue.getId(), getValue.asString());
//Procesar mensaje aquí. Si hay un error, establezca un mensaje de error utilizando getValue.setError (),
//por ejemplo, getValue.setError ("Mensaje de error")
;
}

void read_temperature(){
// llamada a sensores.requestTemperaturas () para emitir una temperatura global // solicitud a todos los dispositivos en el bus
Serial.print("Recuperando temperaturas…");
sensors.requestTemperatures(); // Envía el comando para obtener temperaturas.
Serial.println("HECHO");
// Después de que tengamos las temperaturas, podemos imprimirlas aquí. // Usamos la función ByIndex, y como ejemplo obtenemos la temperatura solo del primer sensor.
Serial.print("Temperatura para el dispositivo 1 (indice 0) es: ");
temp = sensors.getTempCByIndex(0);
Serial.println(temp);
}


void read_current()
{
//1000 lecturas analógicas para promediar
for(int i = 0; i < 1000; i++)
{
RawValue = RawValue + analogRead(A0); // agregar cada lectura A / D a un total
}
Voltage = ((RawValue / 1000) / 1023.0) * 1000;
// Gets you mV, max is 1000mV
current = ((Voltage - ACSoffset) / mVperAmp);
}

void check_time()
{
if(((millis()-timer_millis)/60000) > timer_time)
{
digitalWrite(PLUG, !digitalRead(PLUG));
Cayenne.virtualWrite(7, !digitalRead(PLUG), TYPE_DIGITAL_SENSOR, UNIT_DIGITAL);
timer_flag = 0;
}
}


void PIRSensor()
{
if(digitalRead(pirPin) == HIGH)
{
if(lockLow)
{
PIRValue = 1;
lockLow = false;
Serial.println("Movimiento detectado.");
digitalWrite(PLUG, HIGH);
Cayenne.virtualWrite(7, 1, TYPE_DIGITAL_SENSOR, UNIT_DIGITAL);
delay(50);
}
takeLowTime = true;
}
if(digitalRead(pirPin) == LOW) {
if(takeLowTime){
lowIn = millis();takeLowTime = false;
}
if(!lockLow && millis() - lowIn > pause) {
PIRValue = 0;
lockLow = true;
Serial.println("Movimiento terminado.");
digitalWrite(PLUG, LOW);
Cayenne.virtualWrite(7, 0, TYPE_DIGITAL_SENSOR, UNIT_DIGITAL);
delay(50);
}
}
}

void plugOn()
{
Serial.print("Conmutar 1 a encendido …");
digitalWrite(PLUG, HIGH);
Cayenne.virtualWrite(7, 1, TYPE_DIGITAL_SENSOR, UNIT_DIGITAL);
}

void plugOff()
{
Serial.print("Conmutar 1 a apagado …");
digitalWrite(PLUG, LOW);
Cayenne.virtualWrite(7, 0, TYPE_DIGITAL_SENSOR, UNIT_DIGITAL);
}

En el siguiente vídeo podemos ver el resultado de este interesante proyecto

 

 

 

 

 

Fuente https://www.instructables.com/id/Smart-Plug/

Construccion casera de una regleta ahorradora de energia


En este post vamos a ver un sencillo un interruptor maestro / esclavo  casero  de bajo costo y fácil de construir para la integración en regletas de enchufes  para la conmutación automática de “esclavos” al estado del “maestro”, es decir un circuito que detecte que un dispositivo esta funcionando ( por ejemplo una TV ) y de alimentación a otra serie de dispositivos que tienen relación con la TV : el blueray, el descodificador, discos multimedia,la barra de sonido ,etc

El fundamento del circuito no es demasiado complicado basándose en un sensor incorporado que monitorea el paso de corriente de la unidad maestra, de modo que cuando la corriente supera un nivel predefinido, las salidas de esclavo se activan automáticamente. 

Concretamente este dispositivo, de hecho, está diseñado para su uso con un ordenador de escritorio :cuando se enciende el PC de escritorio, todos los periféricos como la pantalla del monitor, la impresora, el escáner, los altavoces multimedia, etc. se encienden automáticamente pero es de aplicación en muchas mas aplicaciones donde se requiera que la alimentación de un varias unidades (slave) dependa de una sola (master) .

 

Pruebas  iniciales

Antes de empezar con el circuito se pueden  realizar pruebas aleatorias en el módulo del transformador  con la resistencia de carga de 200 ohmios integrada,a la corriente máxima (5,000 mA),de modo que  se puede obtener 1,000 mV a través de la resistencia de carga, exactamente como se esperaba, con una sola vuelta .

Con cinco vueltas en el primario, la salida observada a través de la resistencia de carga puede legar a ser aproximadamente de 5,000 mV a una corriente primaria de 5,000 mA. 

Observe que como la resistencia de carga se coloca en paralelo con el devanado secundario, se monitoriza el voltaje a través de él en lugar de la corriente a través de él , porque es mucho más fácil tener un voltaje de salida con el que trabajar que una corriente de salida.

Descripción del circuito

El circuito está diseñado alrededor de dos componentes clave: un transformador de corriente y un módulo SMPS compacto. El transformador de corriente (CT) es un tipo 5-A / 1,000: 1 con una “resistencia de carga” incorporada y la fuente de alimentación es  un módulo SMPS  de un tipo 5-V / 3-W (HLK-PM01). 

El transformador de corriente está diseñado específicamente para monitorear la corriente, y se puede mejorar enrollando algunas vueltas de cable aislado a través de su núcleo para obtener una salida útil del secundario. Cuando el transformador de corriente detecta una gran cantidad de corriente de carga desde la unidad maestra, un relé electromagnético (RL1) se activa para alimentar todo lo conectado al esclavo y se duerme nuevamente cuando se apaga la unidad maestra.

Como se muestra, el circuito e trabaja en conmutación de modo que cuando pasa la tensión suficiente por el secundario de  CT , T1 entra en saturación  haciendo que T2  conduzca   dando corriente al relé de 10 A, con una resistencia de la bobina de 400 Ω o más, aunque también puede impulsar bobinas con una resistencia más baja siendo el valor sugerido una resistencia de la bobina de 200 Ω .

Todo  lo  demás es  una fuente de 5V DC integrada para alimentar el circuito    y las conexiones necesarias  para que lso contactos NA del relé de paso a los enchufes conectados  en el lado SLAVE

La lista de componentes es relativamente corta:

  • Fuente dc de 5v/3w ( por ejemplo se puede usar el modulo HLK-PM01)
  • Transformador  de corriente CT 5A 1000:1. Se puede comprar en Amazon por 1,48e
  • 2x diodos 1N4007
  • 3x  resistencias de 1K
  • 1x resistencia de 10k
  • 1x led rojo
  • Rele de 5V /10Amp
  • 1x transistor tipo  S8050
  • 1x transistor tipo  S8550

 

En realidad, detectar la corriente de carga de la unidad maestra puede ser un poco complicado, pero el empleo del transformador de corriente lo hace flexible. Debido a que la CT 5-A / 1,000: 1 (5 A a 5 mA) CT tiene una resistencia de carga / carga de 200 a través de su salida, asi que la corriente de CA puede calcularse midiendo la caída de voltaje en la resistencia; es decir, obtenemos una salida de 1 V a una corriente de carga de 5 A (corriente primaria dividida por la relación de vueltas y multiplicada por el valor del resistor de carga).

 Cuando use el CT, el número de giros primarios (bucles de cable ) necesarios depende del tipo de CT en sí y de la corriente que pase por la unidad maestra. Con el transformador mencionado aquí, simplemente comience con una a tres vueltas e intente aumentar o disminuir el número de vueltas para corrientes de carga más bajas o más altas para adaptar el circuito a su aplicacion.

Además, puede reemplazar la resistencia de carga de 200 Ω a bordo del CT por una resistencia de valor más alta (o incluso una resistencia ajustable ) porque aquí no es necesario preocuparse más por los problemas inherentes de saturación y respuesta de frecuencia * del transformador actual.

Observe que cuando “engañamos” al transformador de corriente para que vea una corriente más grande de la que realmente está presente al enrollar el cable que se está monitoreando a través del   CT dos o tres veces, la corriente que ve , se doblará o triplicará. Debido a que el  transformador de corriente utilizado en este diseño tiene una capacidad de detección de corriente máxima teórica de 5 A, intentar detectar una corriente más grande tendrá dos efectos:

  • El voltaje de salida podría aumentar,
  • Al exceder el límite de 5-A obliga al transformador a saturarse y degrada su linealidad . Para que los diseños midan con precisión el valor de la corriente que se observa, esto importaría;sin embargo, todo lo que nos importa aquí en este circuito es si está activo o no.

Consejos de construcción

El circuito está diseñado para usar componentes de bajo costo y la mayoría no son críticos. Sin embargo, a diferencia de los dispositivos comerciales, este interruptor maestro / esclavo requiere un “recorte inicial” algo molesto del umbral de carga. 

Como se mencionó anteriormente, se puede eliminar la resistencia de carga para agregar una resistencia ajustable de 1K o similar a través de la salida del CT si desea un rango bastante amplio de ajustes de umbral de carga.

Para aplicaciones de la vida real, sería mejor crear una placa única a medida, ya que lo habitual es extremadamente inseguro con los voltajes de red. El diseño terminado se puede encerrar en un contenedor aislado adecuado. 

El transformador de corriente se puede colocar cerca del enchufe maestro que se está monitoreando. Tenga en cuenta que se están detectando corrientes a voltajes fatales de la red, por lo que se debe tener cuidado para garantizar que todo lo relacionado con el lado de la red eléctrica se realice de acuerdo con las normas de cableado / seguridad adecuadas y se mantenga separado de todo lo demás. !Mucho cuidado pues un pequeño error pude provocar un descarga que puede resultar  fatal!

 

 

 

Fuente :  https://www.electroschematics.com/13509/building-smart-masterslave-switch/

 

Proyecto de navidad: construya un piano con teclas de frutas


No espere poder realizar una sonata para piano de Beethoven en este proyecto , pero  hoy vamos a cambiar de registro  en cuanto los contenidos que compartimos en este blog ,   enfocándonos en  un proyecto  muy sencillo  pensado sobre  para que los mas pequeños aprendan electrónica  y programación de un modo divertido   usando la excusa   del  las frutas para activar 8 notas  ¡y, no se preocupe si no tiene plátanos en este momento también  debería funcionar con cualquier fruta o verdura !.


El fundamento del circuito es a realmente  sencillo  pues basta  conectar a  cada fruta con una resistencia de 2,2 Mohmios ( o similar ) a una entrada analógica diferente y usar una referencia de GND como polo común    y con esto ya tenemos  junto con cualquier Arduino los fundamentos para hacer el piano frutal pues la electricidad  fluyera cuando toquemos la fruta para cerrar el circuito y, cuando lo haga, lo leeremos desde  una  Placa Arduino  pudiendo desencadenar un evento  que en este caso, sera  reproducir una nota  que sacáramos por un pin digital

Es decir cuando , usando un  pin digital de  Arduino configurado como entrada, si lo conectamos  a  un objeto con cierta resistencia , esto hará que la resistencia entre esta  y masa se desplace hacia GND (es decir a 0 V) porque el circuito está completo , el programa  leerá ese valor binario ( es decir un cero lógico)  y este evento provocara   que  Arduino reproduzca  una nota.

Para hacer el piano  de frutas  necesitará:

  • Una placa Arduino, puede usar Arduino  UNO pero también puede usar cualquier placa compatible  procedente del mercado oriental .
  • Ocho  resistencias de alto valor  de  2,2 Mega ohmios, aunque  debería funcionar con cualquier valor  entre 1 Mega-ohmios  y 10 Mega-ohmios . Si no tiene  estos valores también puede asociar varias en serie o en paralelo  hasta obtener  valores parecidos (al usar 8 entradas al menos necesitaremos pues 8 resistencias)
  • Una resistencia de 220 ohmios para no proteger  el altavoz ,( si es un altavoz de 1W  o mas puede  prescindir de esta).
  • Un altavoz de 8 ohmios.
  •  Idealmente una placa de prueba para  conectar fácilmente los cables y las resistencias al Arduino.
  • Cables rígidos  para las conexiones.
  • !Su fruta o verdura favorita!( cuanto mas agua tenga mejores resultados obtendremos)

En cuanto al circuito , vamos a usar un Arduino Uno  configurando los pines digitales 2,3,4,5,6,7 y 8, como entradas digitales  y el pin digital 12 como salida digital.  También se puede usar cualquier placa compatible  con Arduino  procedente del mercado oriental y por supuesto también   una placa  Netduino en  todas sus variantes ( tendra que adaptar el sw)

El circuito es  muy sencillo  pues  consintiendo básicamente   en   8  entradas      y una   salida.   A las entradas digitales conectaremos 8  resistencias de pull-up de 2,2 Meg Ohm entres estas y VCC(+5V), conexión esta ultima que obtendremos directamente de la propia placa de Arduino. Como se puede deducir,  estas  entradas digitales se conectan   a  una fruta  clavando el hilo en esta . Cuando tocamos esta  fruta ,al estar conectada  a  una entrada de Arduino , llevaremos  a nivel lógico BAJO etas   al conectar  a tierra cada fruta  que a su vez esta  conectada a cada entrada digital.

El circuito se complementa con una resistencia de  220 ohmios, conectada desde el pin 12 a un altavoz de 8 ohmios. Esta resistencia perfectamente se puede suprimir si conecta directamente un altavoz  y no un amplificador   

En cuanto al sketh o programa para nuestro Arduino vamos a usar el ejemplo de E.Ballew escrito en Junio de 2018 que toma prestados  las librerías de tono de Tom Igoe (puede ver mas  ejemplos  en http://arduino.cc/en/Tutorial/Tone ) utilizando  sus archivos pitches.h  con una  clausula  include     para las frecuencias de las notas.

Este código implementa una sola octava de un piano simple, es decir solo reproduce  8 sonidos diferentes .

En primer lugar en el bloque Setup  se definen los pines de entradas digitales  asi como sus correspondientes notas para lo cual se define una matriz  unidimensional llamada  digInput   

int digInput[] = { 2, 3, 4, 5, 6, 7, 8, 9 };

También se define  cual va a ser el pin digital que va a usarse como salida  para conectar el altavoz ( el pin 12)

int toneOut = 12;

Definida el array  de los pines digitales  que usaremos como entrada digital  y la variable para el pin digital de salida    simplemente  toca asignar esta como entradas   mediante la clausula  pinMode(xx INPUT )  recorriendo el array  con un  bucle for  . También para  terminar definiremos  la salida  con la clausula pinMode(yy, OUTPUT);  resultando el siguiente código:

void setup() { ;

 for (int i = 0; i < numKeys; i++)

{ pinMode(digInput[i], INPUT);

}

pinMode(toneOut, OUTPUT); }


En cuanto al   bucle principal  leemos  mediante bucle el estado de las 8 teclas de frutas mediante la instrucción sensorVal = digitalRead(digInput[j])    ,  de modo   que si detectamos un nivel bajo   reproducimos la nota asociadas a  esa tecla  mediante la instrucción  tone(toneOut, myNote[j]); 

Asimismo  debemos  evitar  falso sonidos  para lo cual  incrementaremos la variable kepressed ,que inicializamos a cero en cada pasada del bucle para  silenciar el altavoz en cuanto sepamos que no se ha pulsado ninguna fruta  

int keypressed = 0;

……

if (sensorVal == LOW)

{ ++keypressed;

// increment keypressed

digitalWrite(13, HIGH);

tone(toneOut, myNote[j]);

}

if (keypressed == 0) { noTone(toneOut); }


También  a  efectos de depuración   realizamos un retardo entre cada interacción de 250ms  mediante la clausula  delay(250);

Al  bucle principal  ademas   efectos de depuración se añade una salida a de monitor en serie (que deberemos configurar  a 9600  baudios   )  , para probar los 8 niveles lógicos correspondientes   a las 8 entradas binarias .


El código final resultante  de  todas las consideraciones anteriores es el siguiente:

#include "pitches.h"

int numKeys = 8;
int digInput[] = { 2, 3, 4, 5, 6, 7, 8, 9 };
int myNote[] = { NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5 };
int toneOut = 12;

void setup() {
  // arrnacar conexion serie
  Serial.begin(9600);
  // Configurar  pines  digitales como entrada 
  for (int i = 0; i < numKeys; i++) {
    pinMode(digInput[i], INPUT);
  }
  pinMode(toneOut, OUTPUT);
}

void loop() {
  
  int keypressed = 0;
  for (int j = 0; j < numKeys; j++) {
    int sensorVal = digitalRead(digInput[j]);
    String outStr = String("K");
      outStr = String(outStr + j);
      outStr = String(outStr + ": ");
      outStr = String(outStr + sensorVal);
    if (sensorVal == LOW) {
      ++keypressed;  // incrementar keypressed
      digitalWrite(13, HIGH);
      tone(toneOut, myNote[j]);
    }
    //outStr = String(outStr + ":");
    //outStr = String(outStr + keypressed);
    Serial.print(outStr);
    Serial.print("\t");
  }
  Serial.println("");
  if (keypressed == 0) {
    noTone(toneOut);
  }
  delay(250);
}






Fichero pitches.h

/*************************************************
* Public Constants
*************************************************/


#define NOTE_C4 262

#define NOTE_D4 294

#define NOTE_E4 330
#define NOTE_F4 349

#define NOTE_G4 392

#define NOTE_A4 440

#define NOTE_B4 494
#define NOTE_C5 523

Obviamente una vez hayamos depurado el circuito no necesitamos la salida por consola del estado de las entrada binarias , por lo que el programa puede quedar reducido las
siguientes lineas:


#include “pitches.h”

int numKeys = 8;
int digInput[] = { 2, 3, 4, 5, 6, 7, 8, 9 };
int myNote[] = { NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5 };
int toneOut = 12;

void setup() {
for (int i = 0; i < numKeys; i++) {
pinMode(digInput[i], INPUT);
}
pinMode(toneOut, OUTPUT);
}

void loop() {
int keypressed = 0;
for (int j = 0; j < numKeys; j++) {
int sensorVal = digitalRead(digInput[j]);
if (sensorVal == LOW) {
++keypressed; 
digitalWrite(13, HIGH);
tone(toneOut, myNote[j]);
}
}
if (keypressed == 0) {
noTone(toneOut);
}
delay(250);
}









Por cierto el concepto , aunque sirve para emular un mini órgano también puede servir para emular un miniteclado , un pulsador especial , o cualquir cosa que ncesiste ser activado mediante algo diferente