Fonometro

Fonometro WiFi con ESP32 e Interfaccia Web

Licenza Stato Build Versione Arduino

Questo progetto mira alla realizzazione di un fonometro (misuratore di decibel) utilizzando un microcontrollore ESP32. Il dispositivo misura il livello di rumore ambientale e lo visualizza su un display OLED. È dotato di un'interfaccia web per la configurazione remota dei parametri, come le soglie di allarme e la luminosità dei LED.

Fonometro vista frontale Fonometro vista laterale

📋 Caratteristiche Principali

  • Misurazione in Tempo Reale: Lettura continua del livello di decibel (dB) dall'ambiente.
  • Display OLED: Visualizzazione chiara del valore dB attuale e delle informazioni di stato.
  • Indicatori LED: Tre LED (verde, giallo, rosso) segnalano il superamento delle soglie di rumore preimpostate.
  • Menu Interattivo: Un menu su display OLED, navigabile tramite pulsanti fisici, permette di modificare le impostazioni direttamente dal dispositivo.
  • Configurazione Web: Server web integrato per modificare le impostazioni (soglie, luminosità, credenziali) tramite browser.
  • Access Point WiFi: L'ESP32 crea un proprio Access Point (AP) per la prima configurazione, con un SSID univoco basato sull'indirizzo MAC.
  • Configurazione Persistente: Le impostazioni vengono salvate sulla memoria flash (SPIFFS) e caricate all'avvio.
  • Aggiornamenti OTA: Supporto per aggiornamenti firmware Over-the-Air (OTA) tramite la libreria ElegantOTA.
  • Sicurezza: Accesso all'interfaccia web protetto da username e password.

⚙ Requisiti Hardware

  • Microcontrollore: ESP32 (qualsiasi modello con WiFi e pin sufficienti).
  • Sensore Audio: Un sensore di rilevazione del suono in decibel compatibile con I2C.
  • Interfaccia mosfet: Modulo driver MOSFET a 4 canali con optoisolatori, utilizzato per il controllo PWM di strisce LED in bassa tensione
  • 2x Moduli buck converter DC-DC impiegati per abbassare la tensione d’ingresso a 12V (per l’interfaccia che pilota le strisce LED) e a 5V (per l’ESP32).
  • Display: Display OLED 0,96 pollici con interfaccia I2C.
  • Indicatori: 12 LED a luce bianca da 3V.
  • Pulsanti: 3x Pulsanti per la navigazione nel menu (Più, Meno, Invio).
  • Alimentazione: Alimentatore 12V 42W 3,5A.
  • Basette millefori: per il fissaggio dei componenti elettronici (LED e pulsanti)
  • Circuito stampato: per l’ESP32 e per connettere ad esso i vari componenti.
  • Connettori DC a pannello: per il collegamento all’alimentazione.

🚀 Quick Start

  1. Clona il repository:

    git clone https://gitlab.com/poggiolevante/fonometro.git
    cd fonometro
  2. Installa le librerie: Apri l'Arduino IDE e installa le librerie elencate in docs/installation.md.

  3. Configura l'Hardware: Collega i componenti come descritto in docs/hardware.md.

  4. Compila e Carica: Apri fonometro.ino nell'Arduino IDE, seleziona la tua scheda ESP32 e la porta corretta, quindi carica lo sketch.

  5. Configurazione Iniziale:

    • Cerca una nuova rete WiFi con un nome simile a Fonometro-XX:XX:XX.
    • Connettiti a questa rete.
    • Apri un browser e vai all'indirizzo http://192.168.1.1.
    • Usa le credenziali di default (admin/admin) per accedere e configurare il dispositivo.

📂 Struttura del Progetto

.
├── LICENSE.md                      # Licenza del progetto
├── README.md                       # Documentazione principale del progetto
├── fonometro/                      # Codice sorgente
│   ├── fonometro.ino              # File principale dello sketch Arduino
│   ├── config.json                # File di configurazione
│   ├── dbmeter.ino                # Funzioni per la lettura del sensore di decibel
│   ├── handle_menu.ino            # Logica per la gestione del menu sul display
│   ├── lib.ino                    # Funzioni di utilità (gestione file, JSON)
│   ├── setup.ino                  # Codice per l'impostazione iniziale di pin, display, WiFi
│   ├── web_server.ino             # Gestione del server web asincrono e delle API
│   └── data/
│       ├── index.html             # Pagina principale dell'interfaccia web
│       ├── script.js              # Logica JavaScript per l'interfaccia
│       └── style.css              # Fogli di stile CSS
├── docs/                          # Documentazione del progetto
│   ├── api.md                     # Documentazione delle API REST
│   ├── bill-of-materials.md       # Lista dei componenti (BOM)
│   ├── configuration.md           # Dettagli sulla configurazione
│   ├── hardware.md                # Dettagli sull'hardware e collegamenti
│   ├── installation.md            # Guida all'installazione
│   └── web-interface.md           # Guida all'interfaccia web
└── img/                           # Immagini del progetto
    ├── fonometro_interno.jpg
    ├── fonometro_vista_frontale.jpg
    ├── fonometro_vista_laterale.jpg
    └── topologia.jpg

📜 Licenza

Questo progetto è rilasciato sotto la Licenza GNU AFFERO GENERAL PUBLIC LICENSE. Vedi il file LICENSE per maggiori dettagli.

👥 Realizzazione

Questo progetto è stato realizzato dai ragazzi di Poggiolevante:

  • Giovanni Pompigna
  • Francesco Sparascio