IMA5 2019/2020 P3 : Différence entre versions

De Wiki de Projets IMA
(Page créée avec « __TOC__ <br style="clear: both;"/> =Présentation générale= ==Description== ==Objectifs== =Préparation du projet= ==Cahier des charges== ==Choix techniques : matér... »)
 
(Soudure des autres composants)
 
(103 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 3 : Ligne 3 :
  
 
=Présentation générale=
 
=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==
 
==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==
 
==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=
 
=Préparation du projet=
  
 
==Cahier des charges==
 
==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==
 
==Choix techniques : matériel et logiciel==
 +
 +
<p align="center">
 +
{| class="wikitable"
 +
! colspan="5"| Matériel à disposition :
 +
|-
 +
! Description !! Marque !! Nombre !! Lien
 +
|-
 +
| Breadbord et câbles jumper
 +
| GoTronic
 +
| 1
 +
|
 +
|-
 +
| Board UNO R3
 +
| GoTronic
 +
| 1
 +
| [https://www.gotronic.fr/art-carte-uno-r3-uno-v3-26125.htm  UNO R3 Go Tronic]
 +
|-
 +
| Afficheur LCD 2x8 DEM 08202
 +
| Display Electronik
 +
| 1
 +
| [https://www.distrelec.be/fr/affichage-lcd-matrice-de-points-mm-display-elektronik-dem-08202-syh-ly/p/17551488  DEM 08202 SYH-LY]
 +
|-
 +
| Module Grove - MP3 v2.0
 +
| SeeedStudio
 +
| 1
 +
| [http://wiki.seeedstudio.com/Grove-MP3_v2.0 Grove-MP3 v2.0]
 +
|-
 +
| MKR SD Proto Shield
 +
| Arduino
 +
| 1
 +
| [https://store.arduino.cc/mkr-sd-proto-shield MKR SD proto shield]
 +
|-
 +
| Module d'alimentation Breadbord
 +
| N/A
 +
| 1
 +
| [https://www.vs-elec.fr/fr/alimentation/217-module-d-alimentation-33v-5v-mb102-mb-102-pour-breadboard-et-arduino-3665662005199.html module alim]
 +
|}
 +
</p>
 +
 +
 +
<p align="center">
 +
{| class="wikitable"
 +
! colspan="5"| Matériel nécessaire :
 +
|-
 +
! Description !! Fournisseur !! Nombre !! prix !! Lien/Code article
 +
|-
 +
| Crystal 16Mhz
 +
| GoTronic
 +
| 1
 +
| 1,20€
 +
| [https://www.gotronic.fr/art-quartz-bas-profil-16-0000-mhz-17101.htm 15417]
 +
|-
 +
| Module mp3 DFR0299
 +
| GoTronic
 +
| 1
 +
| 8,90€
 +
| [https://www.gotronic.fr/art-module-mp3-dfr0299-22404.htm 33392]
 +
|-
 +
| Haut parleur 8ohm 0.5W
 +
| GoTronic
 +
| 1
 +
| 2,50€
 +
| [https://www.gotronic.fr/art-haut-parleur-hp368-21019.htm 05512]
 +
|-
 +
| Condensateur 22pF
 +
| GoTronic
 +
| 2
 +
| 0,1€ (unité)
 +
| [https://www.gotronic.fr/art-condensateur-ceramique-22-pf-3178.htm 04713]
 +
|-
 +
| Condensateur 0,1uF
 +
| GoTronic
 +
| 1
 +
| 0,20€
 +
| [https://www.gotronic.fr/art-condensateur-ceramique-100-nf-3215.htm 04755]
 +
|-
 +
| Condensateur 47uF
 +
| GoTronic
 +
| 1
 +
| 0,15€
 +
| [https://www.gotronic.fr/art-condensateur-radial-47uf-25v-3370.htm 04929]
 +
|-
 +
| Resistance 10k
 +
|
 +
| 3
 +
|
 +
|
 +
|-
 +
| Led jaune
 +
|
 +
| 1
 +
|
 +
|
 +
|-
 +
| ATmega328p-AU
 +
| Mouser
 +
| 1
 +
| 1,81€
 +
| [https://www.mouser.fr/ProductDetail/Microchip-Technology-Atmel/ATMEGA328P-AU?qs=K8BHR703ZXiCmmgp6%2FGNmQ%3D%3D&gclid=Cj0KCQiAjfvwBRCkARIsAIqSWlNT_7Q4mlYaoEWDMtoU-wxH2n7oGy8smUMgH2HEBhz-iiYdRaV_93waAqR3EALw_wcB 556-ATMEGA328P-AU]
 +
|-
 +
| Module RTC
 +
| GoTronic
 +
| 1
 +
| 5,70€
 +
| [https://www.gotronic.fr/art-module-horloge-temps-reel-ada3295-25537.htm 34840]
 +
|-
 +
| Connecteurs femelles 1x6
 +
| GoTronic
 +
| 1
 +
| 0,60€
 +
| [https://www.gotronic.fr/art-connecteur-fh1x6-22732.htm 49004]
 +
|-
 +
| Connecteurs femelles 1x8
 +
| GoTronic
 +
| 2
 +
| 0,75€ (unité)
 +
| [https://www.gotronic.fr/art-connnecteur-fh1x8-22734.htm 49006]
 +
|-
 +
| Connecteurs femelles 1x16
 +
| GoTronic
 +
| 1
 +
| 1,20€
 +
| [https://www.gotronic.fr/art-connecteur-fh1x16-24495.htm 49012]
 +
|-
 +
| Boîtier à pile 9V
 +
| GoTronic
 +
| 1
 +
| 1,60 €
 +
| [https://www.gotronic.fr/art-boitier-inter-9v-bh9vb-5741.htm 09621]
 +
|-
 +
| Rotary encoder
 +
| GoTronic
 +
| 1
 +
| 2,70 €
 +
| [https://www.gotronic.fr/art-encodeur-inter-ec11e15244g1-16982.htm#complte_desc 22620 ]
 +
|-
 +
| Bouton jaune
 +
| GoTronic
 +
| 2
 +
| 1,10 € (unité)
 +
| [https://www.gotronic.fr/art-bp-rond-jaune-d6ry-4277.htm 07135]
 +
|-
 +
| Bouton rouge
 +
| GoTronic
 +
| 1
 +
| 1,10 €
 +
| [https://www.gotronic.fr/art-bp-rond-rouge-d6rr-4274.htm 07132]
 +
|}
 +
</p>
 +
 +
 +
<p align="center">
 +
{| class="wikitable"
 +
! colspan="5"| Matériel supplémentaire acquis au magasin de Polytech :
 +
|-
 +
! Description !!  Nombre 
 +
|-
 +
| Régulateur de tension L7805
 +
| 1
 +
|-
 +
| Ensemble boulon/joint
 +
| 1
 +
|-
 +
| Dissipateur thermique pour L7805
 +
| 1
 +
|-
 +
| condensateur 470nF
 +
| 2
 +
|-
 +
| Condensateur 47uF
 +
| 1
 +
|-
 +
| Potentiomètre 20k
 +
| 1
 +
|}
 +
</p>
 +
 
==Liste des tâches à effectuer==
 
==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==
 
==Calendrier prévisionnel==
 +
Nous travaillerons de manière générale de 10h à 18h, mais cela est susceptible de varier.
 +
Nous disposons de 6 semaines pour faire le projet et nous devrons attendre la réception du matériel pour effectuer le plus gros du travail concernant la partie électronique et mécanique.
 +
*Les premiers jours de travail seront donc dédiés à la réalisation du cahier des charges et au dressage de la liste des composants.
 +
*Durant les 2 semaines d'attente des composants (sujet à modification), nous développerons le code tant que possible avec le matériel disponible et réaliserons un prototype avec le matériel deja disponible. Nous commencerons également à développer le schéma électronique sur Altium Designer et à dessiner le boitier.
 +
*Une fois les composants reçus, nous pourrons alors les tester, compléter le prototype, le code, et le schéma électrique/PCB.
 +
*Une phase d'assemblage des composants (soudure, ...) se fera alors. Suivi des tests de bon fonctionnement.
 +
*Enfin dans les ultimes moments nous assemblerons le tout (boitier et carte électronique) et rédigerons le rapport.
 +
*Le wiki du projet sera également régulièrement mis à jour et compte parmi le temps de travail tout au long du projet.
 +
 +
 +
 +
  
=Etat de l'art=
 
  
 
=Réalisation du Projet=
 
=Réalisation du Projet=
  
 
==Semaine 1==
 
==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.
 +
 
==Semaine 2==
 
==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===
 +
[[Fichier:protoreveil.png | 400px]]
 +
 +
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.
 +
 +
===Recherches : Comment coder un ATmega328p-AU===
 +
Puisque l'ATmega328p-AU est un composant au forma CMS pour gagner de l'espace, on ne peut pas le coder simplement en le fixant sur une carte arduino, avant de le fixer sur une socket intégrée à notre PCB par exemple. De plus, lorsqu'on achète un micro processeur séparément, celui-ci est alors "vierge" et il n'est pas en mesure de comprendre le code issu de l'IDE arduino. Il faut donc au préalable "burn" un bootloader (sorte de BIOS pour microP) sur le micro processeur pour rendre celui-ci capable d'utiliser le code développé sous l'IDE arduino. Ensuite, une fois cette étape réalisée, il faut ensuite utiliser un module FTDI (ou carte arduino comme dit précédemment)  pour charger le code sur le micro-contrôleur.
 +
 +
En résumé, il suffit d'utiliser une carte Arduino à 2 reprises suivant un schéma différent pour encoder l'ATmega328p-AU (voir ci dessous). La première consiste à utiliser l'arduino pour burn le bootloader, et la seconde consiste à retirer l'ATmega328p-PU de la carte arduino et, avec le branchement adéquat, encoder l'ATmega328p-AU de notre PCB en faisant comme si il s'agissait de l'ATmega328p-PU de l'arduino.
 +
 +
Respectivement aux montages des 2 photos ci dessous, la démarche à effectuer dans l'IDE arduino est la suivante :
 +
*'''étape 1''' :
 +
**Aller dans <code>fichier -> exemples -> 11.ArduinoISP -> ArduinoISP</code> puis téléverser le code sur l'arduino.
 +
**Dans <code>Outils</code>,  changer  <code>Programmateur:"AVRISP mkll"</code>  vers  <code>Programmateur:"Arduino as ISP" </code>.
 +
**Finalement, <code>Outils -> Graver la séquence d'initialisation</code>.
 +
::Un message doit s'afficher attestant du bon déroulement du processus.
 +
*'''étape 2''' :
 +
::Sans oublier de remettre la valeur du programmateur par défaut <code>Programmateur:"AVRISP mkll"</code>, on peut maintenant, à l'aide su second montage, uploader du code depuis l'IDE Arduino vers l'ATmega328p monté en surface comme on le ferait avec un arduino UNO classique.
 +
 +
 +
 +
<gallery mode="packed-hover" heights="200px"  caption="Montages pour coder l'ATmega328p-AU">
 +
BootLoader.jpg | Arduino utilisé pour "Burn" le bootloader
 +
FTDI.jpg | Arduino utilisé comme module FTDI
 +
</gallery>
 +
 +
==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.
 +
 +
<gallery mode="packed-hover"  caption="Principe de fonctionnement encodeur rotatif">
 +
RotaryE.gif
 +
</gallery>
 +
 +
 +
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 :
 +
* <code>void printTime()</code> Pour afficher l'heure lorsque la valeur de ''minute'' lu sur le module RTC change.
 +
* <code>void alarm()</code> Pour définir la routine d'alarme.
 +
* <code>void setHour()</code> Pour régler l'heure.
 +
* <code>void setAlarm()</code> Pour Régler l'heure de l'alarme.
 +
* <code>void setDate()</code> Pour régler la date.
 +
* <code>void setLuminosity()</code> Pour régler la luminosité de l'afficheur LCD.
 +
* <code>void menu()</code> 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.
 +
 +
<gallery mode="packed-hover" heights="300px"  caption="Exemple réglage de l'heure et de la luminosité">
 +
demoProto.gif
 +
</gallery>
 +
 +
== Semaine 4 ==
 +
 +
===Conception du schéma électrique ===
 +
Afin de créer et d'organiser notre réveil à notre convenance, nous nous sommes attelés à créer un schéma sur Altium afin de pouvoir réaliser un circuit imprimé reprenant les différents composants qu'il nous faut contrôler avec le microcontrôleur. 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.
 +
 +
<gallery mode="packed-hover" heights="300px"  caption="Top View de l'ATmega328p-AU">
 +
Schematmega.jpg
 +
Shemaltium.png
 +
</gallery>
 +
 +
 +
 +
Au vu du nombre important de connexions à réaliser, il sera nécessaire de réaliser le PCB en double face. Une solution peut toute fois être envisagée dans le cas où ce ne serait pas possible. En résumé, nous avons fait en sorte d'organiser au mieux le PCB en respectant les différentes contrainte et au final nous avons  :
 +
* Tous les ports analogiques seront utilisés : 4 pour les 3 boutons (snooze, stop, menu) + le bouton de l'encodeur rotatif, et 2 pour le module RTC (SDA et SCL).
 +
* 2 ports digitaux pour l'encodeur rotatif, 7 pour l'afficheur lcd et 1 pour la led. Parmis ces ports digitaux utilisés, il est nécessaire que celui de la led et 1 des 7 de l'afficheur soient des ports "PWM" pour pouvoir gérer les intensités lumineuses.
 +
* Les ports Rx et Tx sont utilisé pour le lecteur mp3 SD.
 +
* Les pins de programmation sont des pins en commun avec ceux deja utilisés mais ce n'est pas grave puisque, évidemment, la programmation ne s'effectue pas en même temps que le reste des tâches.
 +
 +
 +
 +
 +
[[Fichier:L7805montage.png |200px|thumb|right| montage pour utiliser le L7805CV ]]
 +
 +
=== Modification nécessaire ===
 +
 +
Nous nous sommes rendu compte que nous avions oublié un élément essentiel dans la conception du réveil : un stabilisateur 5 Volt.
 +
En effet, jusqu'à présent en utilisant l'alimentation de l'Arduino nous n'avons pas rencontré ce problème mais lorsque le réveil utilisera un boitier à pile dont la tension doit être supérieure à 5Volt (puisque la tension chute rapidement aux bornes des piles), il faudra ensuite la stabiliser aux 5V requis pour le bon fonctionnement de l'ATmega328p  et de tous les autres composants. Nous avons donc convenu que la solution la plus simple dans le cadre de notre projet était d'utiliser un L7805.
 +
 +
 +
 +
 +
 +
 +
 +
== Semaine 5 ==
 +
 +
=== Réception et test du matériel ===
 +
 +
Le lundi soir, nous avons pu recevoir nos différents composants, essentiels pour réaliser des tests et continuer le code de notre application.
 +
Dans un premier temps nous avons pu réaliser un montage basique (avec  un ATmega328p, le cristal 16MHz et les autres composants nécessaires au fonctionnement de l'ATmega en standalone) afin de vérifier que l'on est bien capable d'encoder un ATmega328p sans la carte arduino.
 +
 +
Ensuite nous avons pu réaliser le test du module mp3, celui que nous attendions le plus pour continuer efficacement notre projet. Ce module est en réalité assez simple à prendre en main mais dans un premier temps nous avons eu un problème de son : en effet lors de la lecture d'une musique, un son très fort se faisait entendre, ce qui empêchait l'utilisation correcte du module. Nous avons rapidement compris en lisant la documentation que ce problème était du au fait que la tension de fonctionnement du module mp3 aux bornes de Tx et Rx est de 3,3V. Une simple résistance de 1k placé entre le Rx du module et le Tx de l'Atmega328p a donc solutionné le problème.
 +
 +
[[Fichier:PlayerMini.png | 300px]]
 +
 +
 +
 +
=== Complétion du code ===
 +
 +
Le matériel étant reçu, nous avons pu compléter le code de notre application en y ajoutant par exemple le menu de choix d'une musique pour se réveiller le matin, avec sélection du volume. En cas d'absence de carte SD, ou de suppression de la musique choisie, le réveil sera un buzzer.
 +
Nous avons également découvert que le module mp3 ne propose pas de fonction pour lire le titre de la musique et fonctionne par indice de musique sur la carte SD. Entre autres, on dispose des fonctions suivantes (d'autres existent mais ne nous intéresseront pas):
 +
* <code>myDFPlayer.play(1);  //Play the first mp3 </code>
 +
* <code>myDFPlayer.pause();  //pause the mp3 </code>
 +
* <code>myDFPlayer.volume(10);  //Set volume value (0~30) </code>
 +
* <code>Serial.println(myDFPlayer.readFileCounts()); //read all file counts in SD card </code>
 +
* <code>Serial.println(myDFPlayer.readCurrentFileNumber()); //read current play file number </code>
 +
 +
Nous avons donc mis en place une interface affichant l'indice de la musique sur le nombre total de musiques disponibles (cf image). Pour savoir de quelle musique il s'agit, on peut presser le bouton de la molette et cela aura pour effet de jouer la musique. A ce moment, si on tourne la molette on peut régler le volume, et une nouvelle pression permet de valider le choix du volume et de la musique. Sinon on peut presser le bouton stop pour tester et choisir une autre musique.
 +
 +
Nous avons également mis à jour l'interface graphique pour que l'utilisateur puisse voir si l'alarme est activée ou non, et la désactiver/activer aisément avec une pression sur le bouton de la molette.
 +
 +
<gallery mode="packed-hover" heights="300px"  caption="Choix de la musique de réveil et réglage volume">
 +
Testmp333.gif
 +
</gallery>
 +
 +
 +
 +
===Modification du PCB===
 +
 +
 +
Nous avons modifié le schéma électrique et complété le PCB avec les différents éléments que nous avons pu constater lors du test du matériel (ajout de résistance ...). Nous avons également changé l'empreinte de certains composants qui n'étaient pas valides. Cela nous a pris un certain temps car certaines empreintes n'étaient pas disponibles et il a fallu les réaliser à la main à partir de composants similaires.
 +
 +
<gallery mode="packed-hover" heights="200px"  caption="PCB dessiné sur Altium designer">
 +
PCBaltium.png
 +
</gallery>
 +
 +
Malheureusement, Thierry Flamen responsable du service électronique et chargé de l'impression des PCB à Polytech est tombé malade est nous n'avons pas pu accéder au service électronique jusqu'à la semaine suivante. Nous avons donc avancé sur le wiki ou d'autres tâches mais avons tout de même pris du retard quant à la réalisation du projet.
 +
 +
==semaine 6==
 +
 +
===Validation et Impression du PCB===
 +
 +
Dès le lundi nous sommes allé voir monsieur Flamen qui nous a fait part de quelques changements à effectuer avant l'impression du PCB, notamment concernant la largeur des pistes et l'écart entre elles. De plus il nous a été dit que le stabilisateur de tension L7805 en format TO220 risquait de surchauffer et d'endommager le boitier du réveil voire les autres composants. Nous avons donc également changé la disposition des éléments afin de pouvoir y intégrer un dissipateur thermique qui nous a donc été donné au même moment.
 +
 +
Ceci étant fait, nous avons pu faire valider le PCB par notre encadrant Florian Chevalier et l'avons envoyé à Thierry Flamen pour le faire imprimer. Finalement, nous avons choisi de faire un simple face pour plusieurs raisons : Les machines dont dispose Polytech rendent compliqué l'impression de 2 faces sur le PCB et de plus, il s'agit de 2 faces et non de double-face, c'est à dire qu'il n'est pas possible de faire des "vias" (changement de face d'une piste). Nous avions donc modifié la disposition des éléments afin de réaliser le plus de connexions possibles sur une seule face, et de laisser des "pads" pour réaliser les connexions manquantes avec des câbles jumpers.
 +
 +
<gallery mode="packed-hover" heights="200px"  caption="PCB imprimé">
 +
PCBreveil.jpg
 +
</gallery>
 +
 +
===Assemblages des composants de surface sur le PCB===
 +
 +
Tout d'abord nous avons réalisé un trou sur le PCB afin de pouvoir fixer le L7805 et son dissipateur avec un boulon. Ensuite nous avons fixé les composants de surfaces (l'ATmega328p-AU et la led) avec de la crème à braser, avant de les passer dans le four à braser.
 +
 +
Cette étape s'est à priori bien déroulé et les composants de surfaces sont désormais fixés sur le PCB. Toutefois, à ce moment nous nous sommes rendu comte d'un problème sur le PCB : le plan de masse n'est pas relié aux ports 3,5 et 21 (les 3 GND) de l'ATmega328p-AU. Ceci est probablement une conséquence d'une erreur de manipulation malheureuse, lors de la modification de dernière minute des règles Altium concernant la "clearance" entre les pistes. Ce problème n'est néanmoins pas insurmontable, et nous décidons de régler cela à la main à l'aide de câble le plus fin possible, de crème à braser et d'un fer à souder.
 +
 +
<gallery mode="packed-hover" heights="200px"  caption="Problème de plan de masse déconnecté">
 +
ATPB.jpg | Les 3 pins non reliées à la masse
 +
ATNOPB.jpg | Après soudure à la main
 +
</gallery>
 +
 +
 +
Nous nous sommes ensuite atteler à effectuer des test de conductivité pour vérifier que toutes les pâtes sont désormais reliées aux bons endroits et qu'il n'y a pas de court circuit. Nous avons également utilisé une loupe binoculaire pour plus de précision et pour retirer la pâtes à braser qui s'est légèrement étalée lors de la soudure manuelle des GND. Les tests se sont donc terminés sans détecter de faux contacts ou de mauvais raccords.
 +
 +
===Soudure des autres composants===
 +
 +
[[Fichier:Pcbtestok.jpg |200px|thumb|right| Premier test de bon fonctionnement ]]
 +
 +
Nous avons ensuite commencé à souder le reste des composants, c'est à dire les résistances, les différents headers, le potentiomètre, les condensateurs, le quartz et le régulateur de tension L7805, ainsi que les jumpers pour réaliser les connexions du bottom layer.
 +
 +
Tout d'abord, afin d'éviter de perdre du temps en cas de problème, nous avons soudé uniquement les composants servant à faire fonctionner un ATmega328p ainsi que les headers utiles à la programmation. Nous avons ainsi pu réaliser un premier test afin de vérifier le bon fonctionnement des composants de surface. Nous avons donc mis le bootloader suivants nos recherches préalable, à l'aide d'une carte arduino, puis avons téléversé un simple programme pour faire clignoter la led. Les opérations se sont déroulés avec succès et nous avons donc la certitude que nos composants sont bien soudé et fonctionnels.
 +
 +
Ceci étant fait nous avons pu continuer de compléter le montage des composants. Nous avons également fixé le dissipateur thermique du L7805 à l'aide d'une vis et de pâte thermique. Finalement, après avoir réglé quelques soucis, nous parvenons à finir d'assembler le tout et téléversons notre programme. Nous sommes alors confronté à plusieurs problèmes :
 +
*L'écran ne s'allume pas : nous faisons donc des tests de conductivité et identifions une soudure qui n'avait pas bien pris. Nous corrigeons cela et l'écran fonctionne alors correctement.
 +
*L'enceinte grésille au démarrage : l'ajout d'une capacité de découplage de 47uF corrige le problème.
 +
*L'enceinte sature rapidement si on pousse trop le volume (qui pourtant reste assez bas) : cette fois-ci nous ne parvenons pas à solutionner le problème, d'autant plus que tout fonctionnait correctement sur le prototype avec breadboard. Lorsque ce problème survient, le réveil devient inopérant et il est alors assez compliqué de le remettre en marche. On remarque que si on débranche le module mp3 le réveil fonctionne alors de nouveau, mais s'éteint aussi tôt le module remis en place. Nous pensons que cela provient surement d'une alimentation insuffisante, ou d'un défaut du composant mais le manque de documentation sur ce module concernant son schéma électrique nous empêche d'en être certain.
 +
'''edit :'''Finalement nous avons fait un changement de dernière minute concernant l'enceinte : en effet le modèle que nous avions commandé était différent de celui que nous avions utilisé lors du prototype, il s'agissait d'un haut-parleur plus petit pouvant ainsi être plus facilement intégré au boitier. Cependant il semblerait qu'il nécessite plus de puissance. Nous avons donc remplacé le haut parleur et on peut désormais pousser le volume plus fort sans risquer à priori d’entraîner une chute de tension.
 +
 +
Nous avons également detecté une soudure défectueuse au niveau de l'horloge et l'avons refaite.
 +
 +
<gallery mode="packed-hover" heights="200px"  caption="Réveil sans boitier">
 +
Cartesoudee2.jpg | vue de devant
 +
Cartesoudee.jpg | vue de derrière
 +
</gallery>
 +
 +
==Semaine 7==
 +
 +
Cette semaine est consacrée à la rédaction du rapport et à la complétion du wiki, le tout devant être rendu à 18h le mercredi 19.
 +
 +
Il s'agit également durant cette fin de projet d'intégrer notre solution dans un boitier. Dans un soucis de temps et de faisabilité, et suite à quelques soucis avec les imprimantes 3d de Polytech, nous choisissons d'opter pour la découpe laser sur bois. Même si évidemment cela ne représente pas une solution robuste, il s'agit d'un prototype et nous permettra de rapidement obtenir un résultat.
 +
 +
<gallery mode="packed-hover" heights="200px"  caption="Boitier du réveil ">
 +
boitierreveil.jpg
 +
</gallery>
 +
 +
 +
 +
 +
Pour des soucis de lisibilité, les tâches réalisées en rapport avec l'électronique lors de cette fin de projet sont décrites dans la section semaine 6.
  
 
=Documents Rendus=
 
=Documents Rendus=

Version actuelle datée du 19 février 2020 à 14:08


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


Matériel supplémentaire acquis au magasin de Polytech :
Description Nombre
Régulateur de tension L7805 1
Ensemble boulon/joint 1
Dissipateur thermique pour L7805 1
condensateur 470nF 2
Condensateur 47uF 1
Potentiomètre 20k 1

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

Nous travaillerons de manière générale de 10h à 18h, mais cela est susceptible de varier. Nous disposons de 6 semaines pour faire le projet et nous devrons attendre la réception du matériel pour effectuer le plus gros du travail concernant la partie électronique et mécanique.

  • Les premiers jours de travail seront donc dédiés à la réalisation du cahier des charges et au dressage de la liste des composants.
  • Durant les 2 semaines d'attente des composants (sujet à modification), nous développerons le code tant que possible avec le matériel disponible et réaliserons un prototype avec le matériel deja disponible. Nous commencerons également à développer le schéma électronique sur Altium Designer et à dessiner le boitier.
  • Une fois les composants reçus, nous pourrons alors les tester, compléter le prototype, le code, et le schéma électrique/PCB.
  • Une phase d'assemblage des composants (soudure, ...) se fera alors. Suivi des tests de bon fonctionnement.
  • Enfin dans les ultimes moments nous assemblerons le tout (boitier et carte électronique) et rédigerons le rapport.
  • Le wiki du projet sera également régulièrement mis à jour et compte parmi le temps de travail tout au long du projet.




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.

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

Protoreveil.png

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.

Recherches : Comment coder un ATmega328p-AU

Puisque l'ATmega328p-AU est un composant au forma CMS pour gagner de l'espace, on ne peut pas le coder simplement en le fixant sur une carte arduino, avant de le fixer sur une socket intégrée à notre PCB par exemple. De plus, lorsqu'on achète un micro processeur séparément, celui-ci est alors "vierge" et il n'est pas en mesure de comprendre le code issu de l'IDE arduino. Il faut donc au préalable "burn" un bootloader (sorte de BIOS pour microP) sur le micro processeur pour rendre celui-ci capable d'utiliser le code développé sous l'IDE arduino. Ensuite, une fois cette étape réalisée, il faut ensuite utiliser un module FTDI (ou carte arduino comme dit précédemment) pour charger le code sur le micro-contrôleur.

En résumé, il suffit d'utiliser une carte Arduino à 2 reprises suivant un schéma différent pour encoder l'ATmega328p-AU (voir ci dessous). La première consiste à utiliser l'arduino pour burn le bootloader, et la seconde consiste à retirer l'ATmega328p-PU de la carte arduino et, avec le branchement adéquat, encoder l'ATmega328p-AU de notre PCB en faisant comme si il s'agissait de l'ATmega328p-PU de l'arduino.

Respectivement aux montages des 2 photos ci dessous, la démarche à effectuer dans l'IDE arduino est la suivante :

  • étape 1 :
    • Aller dans fichier -> exemples -> 11.ArduinoISP -> ArduinoISP puis téléverser le code sur l'arduino.
    • Dans Outils, changer Programmateur:"AVRISP mkll" vers Programmateur:"Arduino as ISP" .
    • Finalement, Outils -> Graver la séquence d'initialisation.
Un message doit s'afficher attestant du bon déroulement du processus.
  • étape 2 :
Sans oublier de remettre la valeur du programmateur par défaut Programmateur:"AVRISP mkll", on peut maintenant, à l'aide su second montage, uploader du code depuis l'IDE Arduino vers l'ATmega328p monté en surface comme on le ferait avec un arduino UNO classique.


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.

Semaine 4

Conception du schéma électrique

Afin de créer et d'organiser notre réveil à notre convenance, nous nous sommes attelés à créer un schéma sur Altium afin de pouvoir réaliser un circuit imprimé reprenant les différents composants qu'il nous faut contrôler avec le microcontrôleur. 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.


Au vu du nombre important de connexions à réaliser, il sera nécessaire de réaliser le PCB en double face. Une solution peut toute fois être envisagée dans le cas où ce ne serait pas possible. En résumé, nous avons fait en sorte d'organiser au mieux le PCB en respectant les différentes contrainte et au final nous avons  :

  • Tous les ports analogiques seront utilisés : 4 pour les 3 boutons (snooze, stop, menu) + le bouton de l'encodeur rotatif, et 2 pour le module RTC (SDA et SCL).
  • 2 ports digitaux pour l'encodeur rotatif, 7 pour l'afficheur lcd et 1 pour la led. Parmis ces ports digitaux utilisés, il est nécessaire que celui de la led et 1 des 7 de l'afficheur soient des ports "PWM" pour pouvoir gérer les intensités lumineuses.
  • Les ports Rx et Tx sont utilisé pour le lecteur mp3 SD.
  • Les pins de programmation sont des pins en commun avec ceux deja utilisés mais ce n'est pas grave puisque, évidemment, la programmation ne s'effectue pas en même temps que le reste des tâches.



montage pour utiliser le L7805CV

Modification nécessaire

Nous nous sommes rendu compte que nous avions oublié un élément essentiel dans la conception du réveil : un stabilisateur 5 Volt. En effet, jusqu'à présent en utilisant l'alimentation de l'Arduino nous n'avons pas rencontré ce problème mais lorsque le réveil utilisera un boitier à pile dont la tension doit être supérieure à 5Volt (puisque la tension chute rapidement aux bornes des piles), il faudra ensuite la stabiliser aux 5V requis pour le bon fonctionnement de l'ATmega328p et de tous les autres composants. Nous avons donc convenu que la solution la plus simple dans le cadre de notre projet était d'utiliser un L7805.




Semaine 5

Réception et test du matériel

Le lundi soir, nous avons pu recevoir nos différents composants, essentiels pour réaliser des tests et continuer le code de notre application. Dans un premier temps nous avons pu réaliser un montage basique (avec un ATmega328p, le cristal 16MHz et les autres composants nécessaires au fonctionnement de l'ATmega en standalone) afin de vérifier que l'on est bien capable d'encoder un ATmega328p sans la carte arduino.

Ensuite nous avons pu réaliser le test du module mp3, celui que nous attendions le plus pour continuer efficacement notre projet. Ce module est en réalité assez simple à prendre en main mais dans un premier temps nous avons eu un problème de son : en effet lors de la lecture d'une musique, un son très fort se faisait entendre, ce qui empêchait l'utilisation correcte du module. Nous avons rapidement compris en lisant la documentation que ce problème était du au fait que la tension de fonctionnement du module mp3 aux bornes de Tx et Rx est de 3,3V. Une simple résistance de 1k placé entre le Rx du module et le Tx de l'Atmega328p a donc solutionné le problème.

PlayerMini.png


Complétion du code

Le matériel étant reçu, nous avons pu compléter le code de notre application en y ajoutant par exemple le menu de choix d'une musique pour se réveiller le matin, avec sélection du volume. En cas d'absence de carte SD, ou de suppression de la musique choisie, le réveil sera un buzzer. Nous avons également découvert que le module mp3 ne propose pas de fonction pour lire le titre de la musique et fonctionne par indice de musique sur la carte SD. Entre autres, on dispose des fonctions suivantes (d'autres existent mais ne nous intéresseront pas):

  • myDFPlayer.play(1); //Play the first mp3
  • myDFPlayer.pause(); //pause the mp3
  • myDFPlayer.volume(10); //Set volume value (0~30)
  • Serial.println(myDFPlayer.readFileCounts()); //read all file counts in SD card
  • Serial.println(myDFPlayer.readCurrentFileNumber()); //read current play file number

Nous avons donc mis en place une interface affichant l'indice de la musique sur le nombre total de musiques disponibles (cf image). Pour savoir de quelle musique il s'agit, on peut presser le bouton de la molette et cela aura pour effet de jouer la musique. A ce moment, si on tourne la molette on peut régler le volume, et une nouvelle pression permet de valider le choix du volume et de la musique. Sinon on peut presser le bouton stop pour tester et choisir une autre musique.

Nous avons également mis à jour l'interface graphique pour que l'utilisateur puisse voir si l'alarme est activée ou non, et la désactiver/activer aisément avec une pression sur le bouton de la molette.


Modification du PCB

Nous avons modifié le schéma électrique et complété le PCB avec les différents éléments que nous avons pu constater lors du test du matériel (ajout de résistance ...). Nous avons également changé l'empreinte de certains composants qui n'étaient pas valides. Cela nous a pris un certain temps car certaines empreintes n'étaient pas disponibles et il a fallu les réaliser à la main à partir de composants similaires.

Malheureusement, Thierry Flamen responsable du service électronique et chargé de l'impression des PCB à Polytech est tombé malade est nous n'avons pas pu accéder au service électronique jusqu'à la semaine suivante. Nous avons donc avancé sur le wiki ou d'autres tâches mais avons tout de même pris du retard quant à la réalisation du projet.

semaine 6

Validation et Impression du PCB

Dès le lundi nous sommes allé voir monsieur Flamen qui nous a fait part de quelques changements à effectuer avant l'impression du PCB, notamment concernant la largeur des pistes et l'écart entre elles. De plus il nous a été dit que le stabilisateur de tension L7805 en format TO220 risquait de surchauffer et d'endommager le boitier du réveil voire les autres composants. Nous avons donc également changé la disposition des éléments afin de pouvoir y intégrer un dissipateur thermique qui nous a donc été donné au même moment.

Ceci étant fait, nous avons pu faire valider le PCB par notre encadrant Florian Chevalier et l'avons envoyé à Thierry Flamen pour le faire imprimer. Finalement, nous avons choisi de faire un simple face pour plusieurs raisons : Les machines dont dispose Polytech rendent compliqué l'impression de 2 faces sur le PCB et de plus, il s'agit de 2 faces et non de double-face, c'est à dire qu'il n'est pas possible de faire des "vias" (changement de face d'une piste). Nous avions donc modifié la disposition des éléments afin de réaliser le plus de connexions possibles sur une seule face, et de laisser des "pads" pour réaliser les connexions manquantes avec des câbles jumpers.

Assemblages des composants de surface sur le PCB

Tout d'abord nous avons réalisé un trou sur le PCB afin de pouvoir fixer le L7805 et son dissipateur avec un boulon. Ensuite nous avons fixé les composants de surfaces (l'ATmega328p-AU et la led) avec de la crème à braser, avant de les passer dans le four à braser.

Cette étape s'est à priori bien déroulé et les composants de surfaces sont désormais fixés sur le PCB. Toutefois, à ce moment nous nous sommes rendu comte d'un problème sur le PCB : le plan de masse n'est pas relié aux ports 3,5 et 21 (les 3 GND) de l'ATmega328p-AU. Ceci est probablement une conséquence d'une erreur de manipulation malheureuse, lors de la modification de dernière minute des règles Altium concernant la "clearance" entre les pistes. Ce problème n'est néanmoins pas insurmontable, et nous décidons de régler cela à la main à l'aide de câble le plus fin possible, de crème à braser et d'un fer à souder.


Nous nous sommes ensuite atteler à effectuer des test de conductivité pour vérifier que toutes les pâtes sont désormais reliées aux bons endroits et qu'il n'y a pas de court circuit. Nous avons également utilisé une loupe binoculaire pour plus de précision et pour retirer la pâtes à braser qui s'est légèrement étalée lors de la soudure manuelle des GND. Les tests se sont donc terminés sans détecter de faux contacts ou de mauvais raccords.

Soudure des autres composants

Premier test de bon fonctionnement

Nous avons ensuite commencé à souder le reste des composants, c'est à dire les résistances, les différents headers, le potentiomètre, les condensateurs, le quartz et le régulateur de tension L7805, ainsi que les jumpers pour réaliser les connexions du bottom layer.

Tout d'abord, afin d'éviter de perdre du temps en cas de problème, nous avons soudé uniquement les composants servant à faire fonctionner un ATmega328p ainsi que les headers utiles à la programmation. Nous avons ainsi pu réaliser un premier test afin de vérifier le bon fonctionnement des composants de surface. Nous avons donc mis le bootloader suivants nos recherches préalable, à l'aide d'une carte arduino, puis avons téléversé un simple programme pour faire clignoter la led. Les opérations se sont déroulés avec succès et nous avons donc la certitude que nos composants sont bien soudé et fonctionnels.

Ceci étant fait nous avons pu continuer de compléter le montage des composants. Nous avons également fixé le dissipateur thermique du L7805 à l'aide d'une vis et de pâte thermique. Finalement, après avoir réglé quelques soucis, nous parvenons à finir d'assembler le tout et téléversons notre programme. Nous sommes alors confronté à plusieurs problèmes :

  • L'écran ne s'allume pas : nous faisons donc des tests de conductivité et identifions une soudure qui n'avait pas bien pris. Nous corrigeons cela et l'écran fonctionne alors correctement.
  • L'enceinte grésille au démarrage : l'ajout d'une capacité de découplage de 47uF corrige le problème.
  • L'enceinte sature rapidement si on pousse trop le volume (qui pourtant reste assez bas) : cette fois-ci nous ne parvenons pas à solutionner le problème, d'autant plus que tout fonctionnait correctement sur le prototype avec breadboard. Lorsque ce problème survient, le réveil devient inopérant et il est alors assez compliqué de le remettre en marche. On remarque que si on débranche le module mp3 le réveil fonctionne alors de nouveau, mais s'éteint aussi tôt le module remis en place. Nous pensons que cela provient surement d'une alimentation insuffisante, ou d'un défaut du composant mais le manque de documentation sur ce module concernant son schéma électrique nous empêche d'en être certain.

edit :Finalement nous avons fait un changement de dernière minute concernant l'enceinte : en effet le modèle que nous avions commandé était différent de celui que nous avions utilisé lors du prototype, il s'agissait d'un haut-parleur plus petit pouvant ainsi être plus facilement intégré au boitier. Cependant il semblerait qu'il nécessite plus de puissance. Nous avons donc remplacé le haut parleur et on peut désormais pousser le volume plus fort sans risquer à priori d’entraîner une chute de tension.

Nous avons également detecté une soudure défectueuse au niveau de l'horloge et l'avons refaite.

Semaine 7

Cette semaine est consacrée à la rédaction du rapport et à la complétion du wiki, le tout devant être rendu à 18h le mercredi 19.

Il s'agit également durant cette fin de projet d'intégrer notre solution dans un boitier. Dans un soucis de temps et de faisabilité, et suite à quelques soucis avec les imprimantes 3d de Polytech, nous choisissons d'opter pour la découpe laser sur bois. Même si évidemment cela ne représente pas une solution robuste, il s'agit d'un prototype et nous permettra de rapidement obtenir un résultat.



Pour des soucis de lisibilité, les tâches réalisées en rapport avec l'électronique lors de cette fin de projet sont décrites dans la section semaine 6.

Documents Rendus