IMA5 2019/2020 P3 : Différence entre versions
(→Semaine 3) |
(→Réalisation d'un prototype) |
||
Ligne 244 : | Ligne 244 : | ||
=== Réalisation d'un prototype === | === Réalisation d'un prototype === | ||
− | En attendant de recevoir le matériel, nous avons réalisé un prototype à l'aide de l'arduino et de la breadboard. Nous avons pu trouver un module RTC (DS3231) ainsi que des boutons et un encodeur rotatif dans un kit d’électronique nous appartenant afin de réaliser les tests et comprendre comment utiliser de tels composants. | + | En attendant de recevoir le matériel, nous avons réalisé un prototype à l'aide de l'arduino et de la breadboard. Nous avons pu trouver un module RTC (DS3231) ainsi que des boutons et un encodeur rotatif dans un kit d’électronique nous appartenant afin de réaliser les tests et comprendre comment utiliser de tels composants. En particulier l'encodeur rotatif pour le réglage du volume ou de l'heure, qui nécessite une certaine compréhension de son fonctionnement. |
<gallery mode="packed-hover" caption="Principe de fonctionnement encodeur rotatif"> | <gallery mode="packed-hover" caption="Principe de fonctionnement encodeur rotatif"> | ||
Ligne 251 : | Ligne 251 : | ||
− | Nous avons donc défini sur quel port de l'ATmega328p brancher chacun des composants. Notamment, en raison du nombre limité de ports IO, nous avons choisi de connecter les 3 boutons du réveil sur les ports analogiques de l'ATmega328p afin de libérer des ports digitaux pour les autres composants. | + | Nous avons donc défini sur quel port de l'ATmega328p brancher chacun des composants. Notamment, en raison du nombre limité de ports IO, nous avons choisi de connecter les 3 boutons du réveil sur les ports analogiques de l'ATmega328p afin de libérer des ports digitaux pour les autres composants. |
− | |||
− | |||
=== Code de l'ATmega328p === | === Code de l'ATmega328p === |
Version du 27 janvier 2020 à 11:33
Sommaire
Présentation générale
- Nom du projet : Réveil-matin MP3 sur Arduino
- Membres du projet : Hugo Dejaegher & Flora Dziedzic
- Superviseur du projet : M. CHEVALIER Florian
- Résumé : Réalisation d'un réveil-matin lisant une musique au format MP3 sur carte micro SD
Description
La plupart des réveils-matin bon marché dans le commerce proposent uniquement un son type buzzer à volume élevé afin de se réveiller le matin. Néanmoins, chacun sa manière de se réveiller et certaines personnes préféreraient se réveiller plus calmement à l'aide d'une musique douce de leur choix et avec un volume s'amplifiant petit à petit. De plus, dans l'obscurité il n'est pas toujours aisé d'atteindre son réveil afin de l'éteindre, et il est fréquent de le faire tomber à cause d'un faux mouvement. Il serait donc intéressant de réaliser un réveil-matin palliant à tout ces problèmes afin que chacun puisse se réveiller à son rythme.
Objectifs
L'objectif principal de ce projet est donc de réaliser un réveil-matin implémentant les fonctionnalités décrites précédemment (choix de la musique, réglage du volume, packaging résistant) en plus des fonctionnalités classiques d'un réveil matin. Nous pouvons donc lister ses principales fonctionnalités :
- Réglage de l'heure
- Réglage de l'heure du réveil
- Réglage de la luminosité
- Réglage du volume du réveil
- Intensité sonore (et lumineuse) croissante si l'utilisateur n'éteint pas le réveil (s'il ne se réveille pas)
- Choix du fichier MP3 (défilement sur l'écran puis validation) / ou son type buzzer
- Bouton Snooze (relance du réveil dans 5 ou 10 minutes) en plus du bouton pour éteindre le réveil
- Packaging adapté aux potentiels faux mouvement de l'utilisateur
Il s'agira alors, après une phase d’expérimentation sur une carte Arduino, de réaliser un PCB regroupant l'ensemble des fonctionnalités.
Préparation du projet
Cahier des charges
Le réveil-matin réalisé devra être un appareil totalement autonome :
- Il devra fonctionner sur batterie/piles et ne nécessitera pas d'avoir accès au microprocesseur pour modifier le code pour utiliser ses différentes fonctions.
- Idéalement, à l'aide d'une pile secondaire, il sera capable d'afficher la bonne heure/date même s'il est éteint pendant un moment.
- La lecture de la musique se fera simplement en insérant une carte SD avec des fichiers mp3.
- Un PCB avec un microprocesseur intégré regroupera l'ensemble des fonctionnalités décrites dans les objectifs
Choix techniques : matériel et logiciel
Matériel à disposition : | ||||
---|---|---|---|---|
Description | Marque | Nombre | Lien | |
Breadbord et câbles jumper | GoTronic | 1 | ||
Board UNO R3 | GoTronic | 1 | UNO R3 Go Tronic | |
Afficheur LCD 2x8 DEM 08202 | Display Electronik | 1 | DEM 08202 SYH-LY | |
Module Grove - MP3 v2.0 | SeeedStudio | 1 | Grove-MP3 v2.0 | |
MKR SD Proto Shield | Arduino | 1 | MKR SD proto shield | |
Module d'alimentation Breadbord | N/A | 1 | module alim |
Matériel nécessaire : | ||||
---|---|---|---|---|
Description | Fournisseur | Nombre | prix | Lien/Code article |
Crystal 16Mhz | GoTronic | 1 | 1,20€ | 15417 |
Module mp3 DFR0299 | GoTronic | 1 | 8,90€ | 33392 |
Haut parleur 8ohm 0.5W | GoTronic | 1 | 2,50€ | 05512 |
Condensateur 22pF | GoTronic | 2 | 0,1€ (unité) | 04713 |
Condensateur 0,1uF | GoTronic | 1 | 0,20€ | 04755 |
Condensateur 47uF | GoTronic | 1 | 0,15€ | 04929 |
Resistance 10k | 3 | |||
Led jaune | 1 | |||
ATmega328p-AU | Mouser | 1 | 1,81€ | 556-ATMEGA328P-AU |
Module RTC | GoTronic | 1 | 5,70€ | 34840 |
Connecteurs femelles 1x6 | GoTronic | 1 | 0,60€ | 49004 |
Connecteurs femelles 1x8 | GoTronic | 2 | 0,75€ (unité) | 49006 |
Connecteurs femelles 1x16 | GoTronic | 1 | 1,20€ | 49012 |
Boîtier à pile 9V | GoTronic | 1 | 1,60 € | 09621 |
Rotary encoder | GoTronic | 1 | 2,70 € | 22620 |
Bouton jaune | GoTronic | 2 | 1,10 € (unité) | 07135 |
Bouton rouge | GoTronic | 1 | 1,10 € | 07132 |
Liste des tâches à effectuer
Voici une liste des tâches à réaliser pour mener à bien le projet :
- Lister les composants nécessaires
- Réaliser un prototype sur breadboard avec Arduino
- Développer le code de l'ATMega328p pour le contrôle de l'ensemble des tâches du réveil
- Réaliser un PCB regroupant l'ensemble des fonctionnalité
- Encoder l'ATMega328p-AU
- Réaliser un boitier pour le réveil
Calendrier prévisionnel
Etat de l'art
Réalisation du Projet
Semaine 1
Durant cette première semaine, nous n'avons eu la confirmation de notre sujet qu'en milieu de semaine et avons pu rencontrer notre encadrant à partir du jeudi pour parler du sujet du projet. Cette semaine a donc été consacrée à des tâches comme la création du wiki ou de la documentation.
Le jeudi matin, nous avons donc ensuite discuté avec notre encadrant Mr Chevalier afin de définir les objectifs et les attentes du projets. Nous avons également pu récupérer du matériel à cette occasion (cf matériel mis à disposition), notamment du matériel pour le prototypage. En effet, le but du projet n'est pas d'utiliser la carte Arduino UNO mais d'utiliser un micro contrôleur indépendant sur un PCB que nous ferons nous même. Nous avons donc entre autres récupéré une breadboard, des câbles jumper, un arduino UNO, un module mp3 et un afficheur LCD.
Nous avons alors passé le reste de cette semaine à nous documenter sur ce matériel (le module mp3 et l'afficheur) et avons écrits des codes pour commencer à les prendre en main. Par ailleurs nous avons trouvé dans le dépôt du fabricarium de Polytech un afficheur pouvant afficher 2 fois plus de caractères que celui fourni au départ (2x16 au lieu de 2x8) et avons choisi de l'utiliser afin d'avoir une interface plus agréable à regarder.
PHOTO/IMAGE
Semaine 2
Définition du matériel à commander
Après avoir étudié le matériel que nous avons deja à disposition et défini notre cahier des charges, nous avons donc pu dresser la liste du matériel à acquérir pour réaliser notre projet. Afin de dresser cette liste nous avons donc étudié les points suivants :
- Comment utiliser un ATmega328p sans carte Arduino (On gardera un ATmega328p pour la compatibilité avec le code développé lors du prototypage, mais en forma -AU pour limiter l'encombrement): Nous avons pu définir que le montage minimum nécessaire à l'utilisation de ce micro contrôleur se compose de ce dernier, d'une alimentation et d'un quartz 16Mhz relié à 2 condensateurs 22pF.
- Comment encoder un ATmega328p-AU : nous avons dans un premier temps pensé qu'un module FTDI (convertisseur USB vers port serie TTL) serait nécessaire pour réaliser cela, mais il suffit en réalité de simplement utiliser une carte Arduino sans son micro-contrôleur.
- Quel type de haut-parleur choisir et comment l'utiliser.
- Comment utiliser l'afficheur LCD et comment le connecter : Bien qu'il utilise de nombreux ports IO, l'ATmega328p en comporte normalement suffisamment pour nous permettre de tout connecter sans avoir à utiliser un module annexe tel qu'un module I2C par exemple.
De plus, afin d'avoir un calcul de l'heure précis, nous avons choisi d'utiliser un module RTC (Real Time Clock) qui est une horloge reliée à une pile, pour ne pas avoir à régler l'heure chaque fois que le réveil est éteint.
Enfin, après étude et quelques tests, nous avons réalisé que le module SD mp3 Grove fourni ne permettra pas d'utiliser une enceinte intégrée au réveil, puisqu'il ne renvoi l'audio que sur une sortie de type jack. Etant donné sa configuration, l'utilisation d'une connexion jack semble peu appropriée d'un point de vue ergonomique et de robustesse du réveil. Il faudrait donc tenter de modifier ce module (et potentiellement l'endommager) pour l'utiliser à notre convenance. Nous opterons donc pour un module SD mp3 autre, ne redirigeant pas le son sur une sortie jack.
Définition de l'interface utilisateur du réveil
Nous avons donc pensé au design ci-dessus, à savoir l'afficheur lcd accompagné d'un total de 3 boutons : 2 sur la droite de l'afficheur et un dernier sur le dessus pour la fonction snooze. Il y aura également une led jaune (dont l'intensité variera en fonction du temps que l'utilisateur met à stopper le réveil) et un encodeur rotatif sur le côté pour faire défiler les heures/minutes lors des réglages par exemple. Bien sûr, on pensera également à ajouter des trous pour laisser sortir le son et une fente pour la carte SD, mais cela reste à définir. En ce qui concerne l'utilisation du réveil, nous avons pensé à l’utilisation suivante :
- Le bouton "Snooze" qui sert à couper l'alarme temporairement.
- Le bouton "menu" permet d'accéder à un menu affichant les différents réglages possibles (régler heure, régler alarme, choisir musique, régler volume, ...).
- Le bouton stop permet d’arrêter l'alarme de manière permanente (jusqu'à la prochaine heure de réveil), et pourra aussi servir à quitter le menu.
- L'encodeur rotatif permet de naviguer dans le menu et de faire défiler les différents éléments à régler (volume, heure, minute, musique, luminosité). Il est également composé d'un bouton poussoir qui servira à la validation des choix.
Conception du PCB
Afin de créer et d'organiser notre réveil à notre convenance, nous nous sommes attelés à créer un circuit imprimé reprenant les différents composants qu'il nous faut contrôler avec le microcontroleur. Quelque soit l'application voulue, l'Atmega328p-au a besoin d'un montage de base composé de quartz et de résistances. Pour le reste des composants, l'essentiel sera implanté par des headers, des ports permettant de brancher des câbles La lecture des fichiers sonores se fait via le module MP3, directement relié via les broches de transmission et de réception Rx et Tx au microcontrôleur et aux haut-parleurs.
Semaine 3
Réalisation d'un prototype
En attendant de recevoir le matériel, nous avons réalisé un prototype à l'aide de l'arduino et de la breadboard. Nous avons pu trouver un module RTC (DS3231) ainsi que des boutons et un encodeur rotatif dans un kit d’électronique nous appartenant afin de réaliser les tests et comprendre comment utiliser de tels composants. En particulier l'encodeur rotatif pour le réglage du volume ou de l'heure, qui nécessite une certaine compréhension de son fonctionnement.
Nous avons donc défini sur quel port de l'ATmega328p brancher chacun des composants. Notamment, en raison du nombre limité de ports IO, nous avons choisi de connecter les 3 boutons du réveil sur les ports analogiques de l'ATmega328p afin de libérer des ports digitaux pour les autres composants.
Code de l'ATmega328p
Ce prototype nous a également permis de réaliser une bonne partie du code réveil. En effet seul le code pour le module SD mp3 et l'enceinte n'a pas pu être écrit vu que nous ne possédons pas ces composants. Mais nous savons d'ors et déjà que ce module sera utilisé avec la liaison série de l'ATmega328p et nous pouvons donc réaliser un code similaire envoyant des messages sur le port série au lieu d'envoyer les commandes du modules mp3 par exemple. Nous avons donc implémenté les différentes fonctions :
-
void printTime()
Pour afficher l'heure lorsque la valeur de minute lu sur le module RTC change. -
void alarm()
Pour définir la routine d'alarme. -
void setHour()
Pour régler l'heure. -
void setAlarm()
Pour Régler l'heure de l'alarme. -
void setDate()
Pour régler la date. -
void setLuminosity()
Pour régler la luminosité de l'afficheur LCD. -
void menu()
Pour afficher le menu permettant l'accès aux différents réglages.
Nous avons choisi d'utiliser le bouton snooze pour changer la luminosité facilement (seulement si le réveil de sonne pas), afin d'éviter d'avoir à accéder au menu pour effectuer ce réglage.