1079 palabras
5 minutos
La máquina generadora de silencio

¿Qué es la máquina generadora de silencio (Silence Machine)?#

La máquina generadora de silencio es un dispositivo que te ayuda a recobrar la paz perdida cuando la bocina ruidosa de tu vecino suena a máximo volumen. Existe la versión de un sólo núcleo y dos núcleos:

Para entender su funcionamiento necesitamos entender lo siguiente:

  1. La música es la combinación de sonidos, ritmos y silencios expresados en ondas y frecuencias.
  2. Pese a las reglamentaciones locales, las autoridades informan que no pueden hacer nada en contra de las bocinas ruidosas cuando estas suenan dentro de los domicilios. Dicen que si te molesta, “pongas tu música también”.
  3. Dado lo anterior, solo quedaba una cosa por hacer. Poner mi música a todo volumen, siendo mi música una combinación de silencios a su máxima potencia.

Señoras y señores, damas y caballeros, me complace presentarles a la máquina generadora de silencio.

Nota

Puedes leer todos los artículos relacionados a este tema en:

¿Cómo funciona?#

Puedes ver una explicación profunda en:

De manera resumida, imagina que para que tu bocina reproduzca música requiere enviar datos a través de una línea teléfonica distinta a una velocidad de 1600 veces por segundo. Este proyecto busca que esas líneas estén ocupadas transmitiendo silencio. Básicamente, como cuando pones dos bocinas a todo volumen y la música se mezcla entre sí.

Componentes requeridos#

  • 1 ESP32 o similar. 30 o 38 pines, son bienvenidos.
  • 2 módulos de radio a 2.4 Ghz
  • 1 Pantala OLED con 4 botones
  • 2 Capacitores
  • 1 Protoboard
  • Cables dupont
    • 16 Female Female (1 PAQUETE DE 40, puede dar dos juegos. Sobran conexiones rojas y negras)
      • 2 AMARILLO 🟡
      • 2 NARANJA 🟠
      • 2 VERDE 🟢
      • 2 AZUL 🔵
      • 2 MORADO 🟣
      • 2 BLANCO ⚪
      • 2 GRIS 🔘
      • 2 CAFE 🟤
    • 8 Male Female (1 PAQUETE DE 40, puede dar un solo juego. Sobran todos los colores. Se recomienda suplir con café y blanco)
      • 4 ROJO 🔴 || CAFE 🟤
      • 4 NEGRO ⬛ || BLANCO ⚪

Modo de operación#

  1. Prende el dispositivo
  2. Se corre de forma automática un chequeo de salud, se muestra el resultado en la pantalla
    • Si todo sale bien, puedes proseguir
    • Si alguno de los módulos RF falla, el resultado se mostrara en pantalla
    • Si la pantalla falla, en el Serial se mostrará el error
    • En muchas ocasiones, solo con reiniciarlo, botón #, se corregirá el error
  3. Seleccionas
    • # => para reiniciar
    • * => para continuar
  4. Seleccionas un modo y generas silencio
    • ^ => arriba
    • v => abajo
    • # => reiniciar
    • * => continuar
  5. Una vez iniciada la generación de silencio, solo puedes parar mediante el botón
    • # => reiniciar

Modos de silencio (Single-core)#

  • silence_mode_1
  • silence_mode_2
  • silence_mode_3
  • silence_mode_4

Tabla de conexiones#

Silence Machine - ESP32
Componente Especificación Pin (ESP32) 10uf capacitor / 2da opción Cable
1st nRF24L01 VCC 🔴 3.3V N/A (+) capacitor Rojo
1st nRF24L01 GND ⬛ GND N/A (-) capacitor Negro
1st nRF24L01 CE 🟡 GPIO 04 Amarillo
1st nRF24L01 CSN 🟠 GPIO 05 Naranja
1st nRF24L01 SCK 🟢 GPIO 18 Verde
1st nRF24L01 MOSI 🔵 GPIO 23 Azul
1st nRF24L01 MISO 🟣 GPIO 19 Morado
1st nRF24L01 IRQ
2do nRF24L01 VCC 🔴 3.3V N/A (+) capacitor Rojo
2do nRF24L01 GND ⬛ GND N/A (-) capacitor Negro
2do nRF24L01 CE 🟡 GPIO 02 Amarillo
2do nRF24L01 CSN 🟠 GPIO 15 Naranja
2do nRF24L01 SCK 🟢 GPIO 14 Verde
2do nRF24L01 MOSI 🔵 GPIO 13 Azul
2do nRF24L01 MISO 🟣 GPIO 12 Morado
2do nRF24L01 IRQ
Button 1 - UP Terminal GPIO 25
Button 2 - DOWN Terminal GPIO 26
Button 3 - # Terminal EN
Button 4 - * Terminal GPIO 27
Display 1 VCC 🔴 3.3V Rojo
Display 1 GND ⬛ GND Negro
Display 1 SDA 🟡 GPIO 21 GPIO 32 Amarillo
Display 1 SCL 🟠 GPIO 22 GPIO 33 Naranja
  • Las otras terminales de los botones, se conectan a GND. Cuando se usa la pantalla OLED con botones integrados, estos ya están cableados a GND.
  • Si se ocupan los pines de 2da opción, se debe modificar el código correspondiente en // INICIO DE OPCIONES CONFIGURABLES

Crea tus propios modos de silencio#

Este proyecto es posible gracias a proyectos similares que eran Open Source, por lo que este proyecto también lo es y busca:

  1. Ser fácil de leer, analizar y modificar
  2. Permitir añadir modos de silencio personalizados
  3. Ser lo más eficiente posible
    • Durante el desarrollo de este proyecto se realizó un análisis y comparación de resultados, dando como resultado un proyecto más eficiente.
    • En las próximas semanas publicaré el resultado de algunas comparativas. (Espera el link aquí)

Composición del código#

  1. Librerías
  2. Sección de configuraciones que puedes modificar
    • Configuración de pantalla
    • Configuración de radios
    • Configuración de botones
    • Configuraciones adicionales
  3. Definición de variables
    • Radios
    • Botones
    • Pantalla
  4. Configuración de modos de silencio (Puedes añadir los tuyos)
    1. Array de descripciones para cada modo de silencio
    2. Funciones de los modos de silencio (La lógica del modo)
    3. Menú para los modos de silencio
  5. Funciones de operación
    • show_health_test
    • show_nav
    • show_current_mode
    • press_to_start
    • start_nav
  6. Función setup que inicializa el código

¿Cómo añadir tus propios modos de silencio?#

Puedes crear tus propios métodos para generar silencio. Para esto debes tomar en cuenta las siguientes consideraciones:

  1. Frecuencias 2.4 Ghz
    • Bluetooth Clásico (2.402 GHz y 2.480 GHz)
      • 79 canales
      • 1 MHz cada uno
      • Salto de Frecuencia (FHSS) - 1600/s
    • BLE (2.402 GHz y 2.480 GHz)
      • 40 canales
      • 2 MHz
      • Salto de Frecuencia (FHSS) - 1600/s
      • Advertising Channels - 37, 38 y 39
    • Dicho lo anterior, para la librería RF24 tenemos los siguientes canales
      • Frecuencia(MHz) = 2400 + Número de Canal
        • CH 0 => 2400
        • CH 1 => 2401
        • CH 80 => 2480

Creación de tus propios custom modes#

Modo de creación (custom_mode)

  1. Añades tu descripción de tu custom_mode al array const char* all_modes[] = {};
  2. Creas una función que coincida con el identificador numérico de tu custom_mode en void silence_mode_#() {}
  3. Añade el case correspondiente a tu custom_mode en void generate_silence(int p_index) {}

Pautas para la integración de código#

  • Identación por tabuladores de 4 espacios de longitud
  • Homologación de nombres
  • Que los modos tengan un propósito definido y útil

Diagrama de funcionamiento#

Nota final

¡Gracias por terminar de leer este artículo! uwur

— El Capitán

¿Tienes alguna duda o te gustaría comentar algo sobre este artículo?

Puedes encontrarme en:

La máquina generadora de silencio
https://elcaza.github.io/posts/maker/silence_machine/
Autor
El Capitán
Publicado el
2025-11-17
Licencia
CC BY-NC-SA 4.0