Timbre a distancia por wifi


Hoy en dia es relativamente asequible poder abordar proyectos con un nivel de acabado excepcional usando tecnologia de impresión 3d por ejemplo , y al mismo tiempo emplear componentes muy compactos, económicos y muy sencillos de programar además sin necesidad de soldar nada.

En este post vamos a ver un interesante proyecto de Giovanni Aggiustatutto en su proyecto de timbre a distancia por Wifi , que básicamente se compone de un módulo de micrófono de detección compatible con Arduino y dos módulos compatibles con ESP8266 : uno para la parte de transmisión y otro para la parte de recepción. Además el circuito se completa con dos cajas impresas en 3D , aunque por su tamaño se puede usar cualquier otro soporte.

El resultado desde luego queda totalmente sorprendente como podemos ver en la imagen.

Obviamente este proyecto puede servir para reenviar el timbre a otro lugar gracias a la cobertura wifi, lo cual lo hace muy versatil por ejemplo para extender la llamada del clasico interfono, la llamada de un intercomunicador, la llamada normal de un telefono fijo/inalambrico y como no como sencilla alarma por sonido.

La electrónica de este proyecto, aunque nos pueda asustar, en realidad es bastante sencilla porque todo pasa por el módulo detector que viene ya ensamblado pero que debemos ajustar al nivel de ruido en que sea detectado la señal de timbre que generara un pulso de disparo que será recogido por un ESP8266 y enviado hacia el otro ESP8266 que presentara una alerta.

El AZDelivery KY038 es un módulo de detección de sonido de alta sensibilidad ideal para muchos proyectos y aplicaciones, por ejemplo para sistemas de alarma sonora (como el de este proyecto).

El Modulo de micrófono cuenta con un micrófono de condensador eléctrico y una salida de señal de un solo canal. La señal de salida de bajo nivel se utiliza para la luz de control de sonido. Este módulo utiliza un micrófono en miniatura para detectar los niveles de sonido. Es crucial que dispone de un comparador basado en un CI LM393 con un potenciómetro para ajustar el nivel disparo para producir una salida digital de nivel alto, que es el que utilizaremos para transmitir la señal de alarma.

Componentes

Estos son los componentes del proyecto:

2 mini placas ESP8266 Wemos D1 (en realidad puede usarse también un ESP32 adaptando el código y las librerías correspondientes)
5 LEDs rojos
1 LED verde
6 resistencias de 330 ohmios para los LEDs
1 zumbador fuerte
1 interruptor
1 módulo sensor de sonido Arduino
Conector JST de 3 pines
Cable de JST a puente
Conectores Jumper
Perfboard
Cable
8 insertos roscados M3
8 tornillos M3x12 mm

El circuito

El receptor no puede ser mas sencillo pues básicamente se compone de un pequeño display de 5 leds conectados directamente a los 5 puertos (configurados como salidas digitales del ESP8266) mediante sendas resistencias de 680 ohmios . Además también para que sea perceptible realmente la llamada, usaremos un pequeño zumbador piezoeléctrico de alta potencia conectado también a un puerto del microcontrolador con un interruptor en serie para poder cortar el sonido y no moleste si es persistente porque si lo veremos con una indicación luminosa.

La parte del transmisor es si cabe mas simple pues únicamente se compone del detector de sonido cuya salida se conecta a un pin de entrada digital del ESp8266.

En este punto es importante estudiar la parte que detecta cuando suena algun sonido fuerte como el timbre del teléfono o del interfono, pues para detectar cuando suena el teléfono, se utiliza un módulo sensor de sonido hecho para Arduino, que lleva un pequeño micrófono.

Estos módulos son muy sencillos de usar porque en los pines hay conexiones para la alimentación y una salida digital, que se activa cuando el ruido que escucha el micrófono es superior a un cierto umbral, que fijamos con el potenciómetro. Este micrófono se colocará cerca de la base del teléfono o interfono lo mas cerca del timbre o altavoz interno (en el caso de un telefono convencional) o en caso de un interfono cerca del altavoz del micro teléfono o del zumbador, por lo que activará el timbre adicional cuando haya una llamada.

Montaje

La caja exterior que contendrá la placa transmisora ESP8266 conectada al micrófono será igual que la caja del timbre, pero en la parte trasera tendrá un conector para conectar el micrófono y en la parte delantera sólo tendrá un LED, para indicar cuando se detecta un sonido y es transmitido al otro modulo receptor.

De forma practica soldamos un conector JST de 3 pines en un pequeño trozo de placa perforada , al que conectamos tres cables para 3,3v, GND y la señal digital del módulo del micrófono. Estos tres cables van a los pines correspondientes de la placa.Para conectarle el módulo de micrófono utilizamos un cable JST a jumper, con el conector JST enchufado a la caja que acabamos de hacer y el conector jumper enchufado a GND, positivo y salida digital del módulo de micrófono.

La caja para la placa conectada al receptor es exactamente igual a la del transmisor, para dar continuidad al diseño. El otro ESP8266 configurado como receptor puede ir en una placa de prototipos y encaminar los pines del ESP8266 necesarios para el módulo del micrófono y los LEDs de estado que conectaremos a la placa mediante conectores jumper. Esta vez la resistencia para el LED en la placa, y dos cables directamente entre los dos pines de un LED rojo y los dos puentes correspondientes de la placa. También esta vez pegamos el LED en el soporte del LED, y pegamos también el soporte a la caja. Luego pegamos el conector JST en el agujero del panel trasero de la caja. Al igual que con el timbre, pegamos la placa dentro de la caja con un trozo de plástico debajo, para que el puerto USB quede alineado con el agujero del panel. Como última cosa cerramos la tapa con tornillos M3 atornillados en los agujeros roscados, y podemos decir que también el sensor de sonido está terminado.

ESP-Now

Antes de realizar cualquier conexión eléctrica, primero tenemos que subir el código a las dos placas ESP8266. Para conectar el ESP8266 que estará cerca del teléfono al que está conectado al zumbador y a los LEDs, utilizamos el protocolo de comunicación WiFi ESP-NOW, que es una librería proporcionada por Espressif, el fabricante del chip ESP.

ESP-Now es otro protocolo de comunicación inalámbrica desarrollado por Lexin, que puede permitir que múltiples dispositivos se comuniquen sin Wi-Fi sin usar Wi-Fi. Este protocolo es similar a un bajo consumo de energía de una conexión inalámbrica de 2.4GHz comúnmente común en el dispositivo de ratón inalámbrico debe emparejarse antes de comunicarse. Después del emparejamiento, la conexión entre los dispositivos es continua, punto a punto, y no se requiere un protocolo de apretón de manos. Es una breve transmisión de datos y una tecnología de comunicación rápida no conectada que permite que los controladores de baja potencia controlen directamente todos los dispositivos inteligentes sin conectar enrutadores. Es adecuado para luces inteligentes, control remoto y retorno de datos del sensor.

Después de usar la comunicación ESP-Now, si un determinado dispositivo se apaga repentinamente, siempre que se reinicie, se conecta automáticamente al nodo correspondiente para volver a comunicarse.

ESP-Now admite las siguientes características:

  • Paquete de paquete de transmisión única o paquete de transmisión única sin comunicación cifrada;
  • Uso mixto de equipos de emparejamiento de cifrado y equipos no cifrados;
  • Se pueden transportar datos de carga útil que pueden transportar hasta 250 bytes;
  • Configuración de soporte para enviar una función de devolución de llamada para notificar a la fallas o éxito de envío de envío o éxito de envío de la capa de aplicación.

Del mismo modo, hay algunas restricciones en ESP-Now:

  • Los paquetes de transmisión no son compatibles temporalmente;
  • Hay restricciones en el dispositivo de emparejamiento cifrado, y el modo de estación admite hasta 10 dispositivos de emparejamiento encriptados; el modo híbrido SoftAP o SoftAP + Station admite hasta 6 dispositivos de emparejamiento cifrados en el modo mixto. Los dispositivos de emparejamiento no cifrados admiten varios, y el número total de dispositivos de cifrado no es más de 20;
  • La carga útil efectiva se limita a 250 bytes.

Elegimos esta biblioteca porque es muy fácil de usar configurando ambos ESP como una comunicación unidireccional.

FIRMWARE

En la parte transmisora usaremos los pines 12 (ledPin) y el pin 14 ( pic Pin), respectivamente el pin 12 al que conectaremos el led indicador de detección de sonido y el pin 14 al que conectaremos la salida digital del modulo detector de sonido.

Antes de subir el código a las dos placas, necesitamos saber la dirección MAC de la placa que usaremos como receptor. Para ello, podemos subir el siguiente boceto a través del IDE de Arduino.

#include "WiFi.h"

//#include <ESP8266WiFi.h>

void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_MODE_STA);
  //WiFi.mode(WIFI_AP_STA);
  Serial.println(WiFi.macAddress());
}

void loop() {
}

Una vez subido el sketch, abrimos el monitor serie y esperamos a que aparezca la dirección MAC de la placa. Esta dirección hay que copiarla de ahí y pegarla en el código de la placa transmisora, antes de subirla.

#include <ESP8266WiFi.h>
#include <espnow.h>

//Aquí es donde se inserta la dirección MAC en el código.
// REPLACE WITH RECEIVER MAC Address (example 34:94:54:8E:13:20)
uint8_t broadcastAddress[] = {0x34, 0x94, 0x54, 0x8E, 0x13, 0x20};


// Structure example to send data
// Must match the receiver structure
typedef struct struct_message {
  bool isRinging;
} struct_message;


// Create a struct_message called myData
struct_message myData;


unsigned long lastTime = 0;  
unsigned long timerDelay = 800;  // send readings timer


int micStatus = 0;


const int micPin = 14;  // D5
const int ledPin = 12;  // D6


// Callback when data is sent
void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
  Serial.print("Last Packet Send Status: ");
  if (sendStatus == 0){
    Serial.println("Delivery success");
  }
  else{
    Serial.println("Delivery fail");
  }
}

void setup() {
  // Set microphone pin as input
  pinMode(micPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);

  // Init Serial Monitor
  Serial.begin(74880);

  // Set device as a Wi-Fi Station
  WiFi.mode(WIFI_STA);


  // Init ESP-NOW
  if (esp_now_init() != 0) {
    Serial.println("Error initializing ESP-NOW");
    return;
  }


  // Once ESPNow is successfully Init, we will register for Send CB to
  // get the status of Trasnmitted packet
  esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
  esp_now_register_send_cb(OnDataSent);

  // Register peer
  esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
}

void loop() {
  if (digitalRead(micPin) == HIGH) {
    micStatus = 1;
    digitalWrite(ledPin, HIGH);
  }

  if ((millis() - lastTime) > timerDelay) {
    if (micStatus == 0) {
      myData.isRinging = false;
      digitalWrite(ledPin, LOW);
    }


    if (micStatus == 1) {
      myData.isRinging = true;
      micStatus = 0;
    }


    // Send message via ESP-NOW
    esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));

Respecto al receptor conectaremos cuatro leds indicadores de presencia de sonido en los pines 12,14,0 y 4 conformando así una especie de vu-meter . Además en el pin 13 conectaremos un led de estado , y para terminar , para que sea de verdad perceptible, en el pin 5 conectaremos un zumbador de alta potencia.

El código de la placa receptora es el siguiente, y puede cargarse sin modificaciones.

#include <ESP8266WiFi.h> 
#include <espnow.h>


// Structure example to receive data
// Must match the sender structure
typedef struct struct_message {
  bool isRinging; 
} struct_message;


// Create a struct_message called myData
struct_message myData;


const int led1 = 12;  // LEDs from the top to the bottom of the device
const int led2 = 14;
const int led3 = 0;
const int led4 = 4;
const int statusLed = 13;
const int buzzer =  5;
const long buzzerTime = 200 ;
long timeFromLastUpdate = 0;
unsigned long previousMillis = 0;
const long interval = 500;


bool produceSound = false;
bool produceLight = false;
bool flag = false;
bool previousFlag = false;
bool hasIncremented = false;
int numberOfBlinks = 10;


// Callback function that will be executed when data is received
void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) {
  memcpy(&myData, incomingData, sizeof(myData));
  Serial.println("Data received!");


  if (myData.isRinging == false) {
    produceSound = false;

    digitalWrite(statusLed, LOW);
    timeFromLastUpdate = millis();
  }


  if (myData.isRinging == true) {
    digitalWrite(statusLed, LOW);
    timeFromLastUpdate = millis();
    //produceSound = true;
    //produceLight = true;


    //numberOfBlinks = 0;
  }
}

void setup() {
  // Set LED and ring pin as output
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(statusLed, OUTPUT);
  pinMode(buzzer, OUTPUT);

  // Initialize Serial Monitor
  Serial.begin(74880);

  // Set device as a Wi-Fi Station
  WiFi.mode(WIFI_STA);


  // Init ESP-NOW
  if (esp_now_init() != 0) {
    Serial.println("Error initializing ESP-NOW");
    return;
  }

  // Once ESPNow is successfully Init, we will register for recv CB to
  // get recv packer info
  esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
  esp_now_register_recv_cb(OnDataRecv);
}


void loop() {
  unsigned long currentMillis = millis();

  if ((timeFromLastUpdate + 10000) < millis()) {
    digitalWrite(statusLed, HIGH);
  } 


  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    flag = !flag;
  }

  callRoutine();
  blinkLeds();
  soundBuzzer();
}


void blinkLeds() {
  if (flag == true && (produceLight == true || numberOfBlinks <= 5) && hasIncremented == false) {
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    numberOfBlinks++;
    hasIncremented = true;

    produceLight = false;

    Serial.print("on ");
    Serial.println(numberOfBlinks);
  }


  if (flag == false) {
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    Serial.println("off");


    hasIncremented = false;
  }
}


void soundBuzzer() {
  if (flag == true && produceSound == true) {
    digitalWrite(buzzer, HIGH);
    produceSound = false;
  }


  if (flag == false) {
    digitalWrite(buzzer, LOW);
  }
}


void callRoutine() {
  if (myData.isRinging == true && previousFlag != flag) {
    produceSound = true;
    produceLight = true;
    numberOfBlinks = 0;
  }


  else {
    previousFlag = flag;
  }
}

Mas información en https://www.instructables.com/Wireless-Loud-Phone-Ringer-Help-Elderly-With-Elect/

Cómo añadir una entrada de audio externa a un equipo que no la tiene y añadir otras mejoras


Aunque pueda parecer inverosímil, en efecto existen multitud de equipos de audio de diferentes marcas y modelos que contando con diferentes fuentes de salida ( euroconector, s-video , RCA , vídeo por componentes , etc ) así  como entradas de audio/video como pueden : conector USB, DVD,conectores  de  TV ,conector de antena de FM,etc   los  fabricantes «han olvidado», no sabemos si de forma intencionada o no, la entrada auxiliar de audio  analogico  para conectar una fuente externa  de  audio   como puede ser por ejemplo nuestro smartphone, lo cual en estos tiempos  puede que los haga completamente inservibles  dada  la forma de consumir contenido  multimedia  por ejemplo  usando servicios de streaming ( amazon music, spotify, google music, youtube , ect  ) usando por ejemplo nuestro teléfono inteligente.

En estas líneas   vamos   a ver cómo es posible añadir una entrada de audio a un equipo de audio incluso de alta gama  siempre  que este cuente con receptor de FM   en un modulo de RF externo , lo cual lo  intui reímos   si en la parte trasera  cuenta con una entrada  de antena de FM  aparte del resto de conectores  .  Si es ese su caso o simplemente tiene curuiosidad  de como hacerlo  , continue leyendo pues  veremos que en realidad  es un trabajo bastante sencillo

 

 

 

 

En el ejemplo que  hoy vamos a  ver del fabricante italiano  Supratech , un estupendo reproductor multimedia  con pantalla  TFT  de  7″  rato  que incluye  lector de DVD, entrada USB  y doble sintonizador de TV y FM.   Este  modelo  además este puede visualizar video  en múltiples formatos ( mpeg-1/mpeg-2/mpeg-4/divx 9) asi como     audio en formatos habituales ( cd/mp3/wma)  e incluso  fotos  con extensión  jpeg.

Respecto a  la potencia de salida   tampoco está mal  pues llega a unos  2×30 w rms  que consigue reproducir  gracias a dos bafles exteriores de madera de  doble vía(agudos y medios/graves),

Y ahora  viene el tema de las conexiones,   pues  cuenta con  conexiones de   salida de  a/v rca/s-video/yub/euroconector/auriculares/spdif(digital)    y las correspondientes de entrada de antena de TV y FM pero como decía al principio de este post , no han añadido entrada de audio alguna  ( de hecho solo hay salidas de audio y video ) , lo cual es un problema si queremos usar este para reproducir sonido desde una fuente exterior 

 

Aunque   la mejora    la vamos   a hacer con el modelo  Suprasound  Thalia de Supratech , esta mejora es extensible   a cualquier otro dispositivo de audio   que  cuente  con un sintonizador de FM en un módulo aparte  el cual debería  para esta  mejora contar  con un sintonizador de FM en un módulo aparte blindado 

 

Bien empecemos  desmontando el equipo de audio  que   como podemos  ver  en la siguiente imagen es un módulo aparte  blindado

 

Como vemos   queda claramente  visible  al desmontar la carcasa   en la parte trasera  en la parte  derecha de  abajo, que seria  justamente en la parte trasera donde se conectaria la antena de FM

 

 

Bien  , este tipo de módulos  receptores  integrados de FM que suelen llevar  equipos de audio  de cierta calidad ,  suelen usar varios  conectores para la alimentacion , señales de control y la salida de auddio  ( en este ejemplo precisamente usa  dos  )  .  Por tanto , iremos precisamente en uno de ellos donde  este la salida de audio analogica , el cual es claramente distinguible por el tipo de cable que es coaxial stereo ( malla, blanco y rojo )

 

Pues bien, cómo querido  lector   podría  inferir , la mejora consiste( o «hack»)   precisamente en capturar ese cable  coaxial para  poder introducir la señal de audio externa por ahí  cortando lógicamente la salida de FM dado que introduciría mucho ruido . Hay una condición extra  también importante : y es que vuelva a estar disponible la radio FM siempre que desconectemos la señal externa

 

 

Cómo debemos desviar  la señal de audio  lo podemos hacer en la salida del tuner de FM  o en la entrada de la placa base  ( ambos unidos por un cable coaxial  y varios hilos auxiliares  )  ,pero por simplicidad en vez de hacer la mejora  sobre el tuner, lo haremos sobre el conector de la placa  base    cortando los tres cablecillos de audio  y soldando a estos tres nuevos cables   procedentes del   Tuner  a  un jack externo  y los del conector de la placa madre   nuevamente al jack .

 

Es decir primero identificamos el cable

 

Si tiene  dudas , con mucho cuidado puede soltar el extremos del lado del tuner  , y conectar la radio   (y ya no debería oírse el  típico ruido blanco, que volvería a oírse en cuanto lo volvamos a conectar )

Una vez  lo tenemos claro entonces cortaremos el cable  por el lado de la parte del conector de la placa madre

 

En esta imagen se  aprecia  como se ha cortado añadiendo dos nuevos cables coaxiales :

 

 

Y ahora  vamos  a ver  el  problema  del jack  o conector de audio analógico («Plug» en inglés para señalar al conector macho, o «Jack» para señalar al conector hembra de este tipo) de señales analógicas se utiliza para conectar micrófonos, auriculares y otros sistemas de señal analógica a dispositivos electrónicos, aunque sobre todo audio.  Se le denomina también conector TS (tip-sleeve, punta-funda), de tipo desbalanceado, o conector TRS (tip-ring-sleeve, punta-anillo-funda), de tipo balanceado. ​ Los hay en distintas medidas, pero el más popular es el conector de 3,5 mm usado en la mayoría de los smartphones.En dispositivos móviles, donde los auriculares también incluyen micrófono, se denomina conector TRRS (tip-ring-ring-sleeve, punta-anillo-anillo-cuerpo) precisamente porque lleva una nueva conexión :R,L y micro   (además de la masa común).

Es por tanto un conector de audio utilizado en numerosos dispositivos para la transmisión de sonido en formato analógico.  Las siglas TS, TRS y TRRS, son el resultado del tipo de conector según su construcción. Hay conectores de varios diámetros:

  1. El conector original de 6,35 mm (¼″, es decir, un cuarto de pulgada). Año de aparición 1878, usado inicialmente por las operadores de telefonía para intercambios de líneas. Más tarde se usó para conexión de instrumentos musicales y micrófonos con amplificadores.
  2. El miniaturizado de 3,5 mm (aproximadamente ⅛″): es el tipo de conector más utilizado, usado para la salida de auriculares en dispositivos portátiles, como reproductores de mp3. Apareció en 1964 aunque su popularidad creció con la aparición la radio EFM-117J de Sony en 1979. Este diámetro de conector es también conocido informalmente como «minijack». Por su facilidad de localización  , es este el conector  que precisamente usaremos en este montaje 
  3. El conector de 2,5 mm (aproximadamente 3/32″): es el jack menos utilizado, también en dispositivos pequeños.

 

Bueno, pues  sabiendo   donde están las conexiones   y el conector a emplear ( hembra  de 3. 5mm stereo )  ya  solo nos queda  conectar los 4 cablecillos junto con la masa al jack .  Obsérvese  en el esquema que cuando el conector esta en reposo las dos  señales de audio tienen continuidad desde la placa base al módulo receptor , por lo que si no conectamos nada aquí el equipo de audio se comportara  como si no hubiese hecho ninguna mejora en el 

 

 

 

 

En el caso de que conectemos un jack macho a nuestro conector  como vemos la señal de tuner  queda interrumpida pasando ahora la  señal externa  a la entrada de audio de la placa madre   reproduciendo en el equipo de audio ( lógicamente la fuente  de entrada deberá ser FM  )

 

 

Para añadir el jack simplemente agrandamos  con una lima una ranura lo suficiente   para que quepa el jack 

 

Y  hecho el orificio  y soldado los 4 cablecillos coaxiales ( las masas  todas  unidas  )  solo queda atornillar el jack hembra al chasis  y por último conectar  un cable stereo a este y a una fuente de señal ( por ejemplo nuestro smartphone)    , seleccionar la fuente  de origen  FM ( en el equipo )  y  ya solo reproducir nuestro tema favorito .

 

 

Y por cierto ,en algunos modelos ( como en este del análisis  de Supratech) podemos  apagar la pantalla desde el mando  con desde una tecla especifica  ya que no sera necesario que el TFT esté encendido mientras lo  usamos como amplificador de audio

 

 

Integración de nuevos altavoces

 

Puestos a mejorar , si cuenta  con altavoces reciclados de otros  equipos , en este modelo hay espacio suficiente para colocar los altavoces de forma interna  para  que podemos usar este equipo sin tener que ir dependiendo de los molestos  y pesados bafles

En este modelo en la parte  trasera  hay espacio para colocar un altavoz elíptico de 30W  reciclado de un viejo TV

Fijamos con tornillos este al chasis    y el  cable lo haremos pasar  la bandeja del DVD   sacándolo al exterior por una ranura para conectarlo  al conector externo de altavoces a uno de los canales.

 

 

Para el segundo canal  conectaremos  dos altavoces en paralelo que fijaremos a las ranuras  del fondo del panel inferior ( en este modelo precisamente también tiene dos filas de ranuras de ventilación longitudinales )    y el cable  lo sacaremos al exterior por una ranura para conectarlo  al conector externo de altavoces del otro canal

 

 

Como vemos en esta última imagen , en realidad la modificación es muy pequeña  en si ,pero está  claro que añadirle una entrada de audio externa  e incorporar los altavoces  internamente , hace  que  podemos sacarle mucho partido pues podemos dar un nuevo uso al equipo