I2L 2023 Groupe2
Proposition de système
Fonctionnement
Nous proposons un appareil de détection de bruit en fonction du volume sonore. L'appareil allumera un certain nombre de LED selon plusieurs paliers pour un maximum de 7 LEDs. Si toutes les LEDs sont allumées, c'est-à-dire si le seuil maximal (en décibels) est atteint, un son est émis tant que le bruit ne redescend pas sous ce seuil.
L'appareil est basé sur 3 seuils (en décibels) enregistrés au niveau de la mémoire interne du micro-controlleur, et sont configurables via un programme sur ordinateur. Ce système doit, en outre, pouvoir fonctionner sur batterie pour une utilisation sans connexion à un ordinateur.
Les LEDs peuvent s'allumer en vert, jaune ou rouge en fonction des seuils atteints.
Matériel et pièces nécessaires
Pour fonctionner, notre appareil de détection de bruit aura besoin de :
- 1 microcontrôleur ;
- 1 microphone, permettant d'écouter le bruit ambiant ;
- 1 haut-parleur, pour jouer le son d'alerte si le seuil maximal est atteint ;
- 7 LED et résistances associées, pour afficher l'état du bruit et des seuils ;
- 1 contrôleur USB permettant la configuration de l'appareil via une connexion à un ordinateur ;
- 1 batterie, si possible, pour pouvoir utiliser l'appareil sans connexion à un ordinateur.
Contre-proposition
Proposition définitive
Répartition du travail
Carte
Seconde version pour améliorer l'amplification avant le haut-parleur.
Code
Première approche
N'ayant pas de carte possédant un bouton physique, nous avons utilisé une carte d'un groupe de l'année précédente (cf. I2L 2022 Groupe5). Ce premier programme ayant pour but de nous familiariser avec les développement sur ce type de système embarqué, il permet simplement d'intéragir avec les LEDs en appuyant sur les boutons physiques.
#include <avr/io.h>
// Declarations
#define LED1_B_BIT 0
#define LED1_G_BIT 1
#define LED1_R_BIT 2
#define LED2_B_BIT 3
#define LED2_G_BIT 4
#define LED2_R_BIT 5
#define LED3_B_BIT 5
#define LED3_G_BIT 6
#define LED3_R_BIT 7
#define BUTTON1_BIT 2
#define BUTTON2_BIT 4
#define LED1_DDR DDRD
#define LED2_DDR DDRDun
#define LED3_DDR DDRC
#define BUTTON1_DDR DDRC
#define BUTTON2_DDR DDRC
#define BUTTON1_PORT PORTC
#define BUTTON2_PORT PORTC
#define BUTTON1_PIN PINC
#define BUTTON2_PIN PINC
/**
* Initialisation des ports
*/
void init(void) {
// Sortie pour la LED1
LED1_DDR |= (1 << LED1_B_BIT);
LED1_DDR |= (1 << LED1_G_BIT);
LED1_DDR |= (1 << LED1_R_BIT);
// Sortie pour la LED2
LED2_DDR |= (1 << LED2_B_BIT);
LED2_DDR |= (1 << LED2_G_BIT);
LED2_DDR |= (1 << LED2_R_BIT);
// Sortie pour la LED3
LED3_DDR |= (1 << LED3_B_BIT);
LED3_DDR |= (1 << LED3_G_BIT);
LED3_DDR |= (1 << LED3_R_BIT);
// Entrée pour le bouton 1
BUTTON1_DDR &= ~(1 << BUTTON1_BIT);
// Entrée pour le bouton 2
BUTTON2_DDR &= ~(1 << BUTTON2_BIT);
// Résistance de tirage pour le bouton 1
BUTTON1_PORT |= (1 << BUTTON1_BIT);
// Résistance de tirage pour le bouton 2
BUTTON2_PORT |= (1 << BUTTON2_BIT);
}
/**
* Main
*/
int main(void)
{
init();
while (1) {
// Si le bouton 1 est appuyé
if (BUTTON1_PIN & (1 << BUTTON1_BIT)) {
// Allumer la LED1
LED1_DDR &= ~(1 << LED1_B_BIT);
LED1_DDR &= ~(1 << LED1_G_BIT);
LED1_DDR &= ~(1 << LED1_R_BIT);
} else {
// Éteindre la LED1
LED1_DDR |= (1 << LED1_B_BIT);
LED1_DDR |= (1 << LED1_G_BIT);
LED1_DDR |= (1 << LED1_R_BIT);
}
// Si le bouton 2 est appuyé
if (BUTTON2_PIN & (1 << BUTTON2_BIT)) {
// Allumer la LED2
LED2_DDR &= ~(1 << LED2_B_BIT);
LED2_DDR &= ~(1 << LED2_G_BIT);
LED2_DDR &= ~(1 << LED2_R_BIT);
} else {
// Éteindre la LED2
LED2_DDR |= (1 << LED2_B_BIT);
LED2_DDR |= (1 << LED2_G_BIT);
LED2_DDR |= (1 << LED2_R_BIT);
}
}
}
Conception
Réalisation
Démonstrations
Rendus
Projet KiCAD : Fichier:I2L-2023-Carte-G2.zip
Programmes : Fichier:I2L-2022-Programmes-G2.zip