Aller au contenu

Sonomètre connecté

Sonomètre terminé

Ce projet est un sonomètre connecté utilisé dans la salle des machine d’Eirlab. Il permet d’avertir les utilisateurs en cas d’intensité sonore trop importante, via une LED RGB et un afficheur LCD.

L’ESP32 lance un serveur répondant aux URI /sound et /history. Ceux-ci sont utilisés par le serveur web lancé sur une autre machine, qui fait une requête toutes les secondes pour mettre à jour la page web.

Matériel

  • Un ESP32 (ref)
  • Un afficheur LCD de type 1602
  • Une LED RGB
  • Un microphone amplifieur MAX4466 de la marque Adafruit (ref)

Interface

L’interface utilisateur affiche la valeur en décibels actuelle, ainsi qu’un historique des valeurs moyennes sur 5 secondes sur la minute passée.

Interface web

Installation

Le fichier à envoyer à l’ESP 32 est situé dans le dossier code. Remplissez le ssid et le mot de passe de votre réseau et envoyez le via l’IDE Arduino de votre choix. À l’initialisation, l’ESP 32 envoie sur le port Serial son adresse IP locale. Celle-ci est à reporter dans la variable ESP32url du fichier app.py. L’installation du serveur se fait via uWSGI (plus d’infos ici). Assurez vous d’avoir python installé sur votre machine. Les bibliothèques nécessaires sont entre autres pyuwsgi (à installer via la commande pip install pyuwsgi).

Pour lancer le serveur, il suffit d’entrer les commandes suivantes:

cd server
uwsgi --http 0.0.0.0:8000 -p 4 -w app:app

Le serveur sera hébergé sur votre machine et accessible à toutes les machines connectées à votre routeur. Pour connaître votre ip locale, utilisez la commande ifconfig sur linux.

Calibrage du micro

Cette fonction permet de faire le lien entre l’amplitude mesurée (ampl). Pour plus de précisions, modifiez-la en testant avec votre micro. Ici j’ai opté pour une approche linéaire par morceaux, mais la vraie manière de calculer le volume en décibels est d’utiliser sa définition logarithmique, si votre micro est assez précis.

int matchDB(double vol)
{
	if (ampl < 150)
	{
		return 38;
	}
	if (ampl < 500)
	{
		return 0.062 * ampl + 39;
	}
	double temp = 0.02 * ampl + 60;
	if(temp > 100) temp = 100;
	return temp;
}

Ressources

Ce dossier contient le fichier .ino de l’ESP32 dans /code, le serveur web dans /serveur et le modèle svg de la boîte. Celle-ci a été découpée dans du pmma opaque rouge 3mm.

Page github du projet