1. Introduction

Je me suis longtemps demandé comment ses fascinants petits jouets (CF Figure 1) fonctionnent. Comment est réaliser le circuit pour que de tels bruitages sorte du jouet? Il en était alors là l'occasion pour moi d'essayer moi-même de créer un objet de tel sorte, que en appuyant sur un bouton, un bruit en émane. L'idée m'est donc venue d'essayer de réaliser un mini piano, car il comprend des touches, et des sorties audios, tout comme un jouet. Mon projet s'est donc séparé en trois parties bien distinctes. La première étant le Software, j'ai du apprendre le langage python pour pouvoir me servir de mon Raspberry Pi B+ afin qu'un son sorte de la prise jack en appuyant sur un de mes boutons. La deuxième partie a été le Hardware, pour pouvoir lier mes boutons au Pi Wedge B+, qui lui-même est relié au Raspberry Pi B+. Et troisièmement, une partie manuelle a dû être employée, pour construire un boîtier permettant de protéger le tout. Mon but dès le départ a donc été établi; élaborer un mini piano portable comportant 5 notes.

(1) _Figure 1: jouet pour bébé_

2. Matériel et méthodes

2.1. Matériel

2.1.1. Software

  • Un ordinateur, une souris, un clavier ainsi qu'un écran
  • Un Raspberry Pi B+

2.1.2. Hardware

  • Une breadboard
  • 12 fils
  • 5 boutons
  • Une alimentation à pile
  • Un Pi Wedge B+

2.1.3. Manuelle

  • Des clous
  • Un marteau
  • Du papier ponce
  • Une scie
  • Du bois (50x50 cm)
  • Du scotch

2.2. Méthode

2.2.1. Software

La partie software de mon travail a certainement été la partie la plus longue et la plus éprouvante car j'ai du me renseigner très longuement au sujet du code. J'ai passé de multiples heures sur les forums ainsi que sur les "tutos" pour apprendre à coder, et pour comprendre comment le python fonctionne. De plus, n'ayant comme unique accès à des Windows, j'ai du m'adapter pour pouvoir me connecter à mon Raspberry.

Dans un premier temps, j'ai télécharger PuTTY pour pouvoir me connecter à la console, et j'ai également du télécharger Nmap pour pouvoir connaître l’adresse IP de mon Raspberry afin de finalement pouvoir me connecter à ce dernier. Une fois connecté à mon Raspberry, je me suis attaqué au code en python.

La première partie du code a été d'importer les programmes standards pour pouvoir relier mes boutons aux pins:

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)

Puis j'ai créé des variables pour "renommer" mes pins qui sont relié eux aux boutons:

DO = 6

RE = 12

FA = 13

SOL = 16

LA = 17

J'ai également écris du code pour qu'en appuyant sur un bouton, cela avertisse le pin en question que "ce bouton a été appuyé":

GPIO.setup(DO, GPIO.IN, pull_up_down=GPIO.PUD_UP)

GPIO.setup(RE, GPIO.IN, pull_up_down=GPIO.PUD_UP)

GPIO.setup(FA, GPIO.IN, pull_up_down=GPIO.PUD_UP)

GPIO.setup(SOL, GPIO.IN, pull_up_down=GPIO.PUD_UP)

GPIO.setup(LA, GPIO.IN, pull_up_down=GPIO.PUD_UP)

Une fois cette partie terminée, il fallait s'attaquer aux choses plus sérieuses, et comprendre comment un fichier audio pouvait être intégré dans le Raspberry. Pour se faire, j'ai téléchargé différents fichiers audios qui correspondaient aux notes voulues. Cependant, ces fichiers audios étaient en (.wav), et il me les fallait en (.mp3) pour qu'ils soient compatible avec mon programme utilisé qui sera explicité plus tard dans ce blog, et j'ai donc utilisé online-convert pour convertir mes fichiers audios (.wav) en fichiers audios (.mp3). J'ai enfin utilisé le programme Filezilla pour pouvoir importer mes fichiers audios dans mon Raspberry Pi B+.

Je me suis donc à nouveau attaqué au code, et il a fallut télécharger des programmes dans mon Raspberry, j'ai donc taper ces deux commandes une fois connecté à mon Raspberry:

sudo apt-get update

sudo apt-get install alsa-utils mpg123

J'ai ensuite importé deux librairies pour pouvoir travailler avec mes fichiers audios:

import os

from time import sleep

Une difficulté rencontrée a alors été de créer une boucle, mais il fallait que en appuyant sur un de mes boutons, la note voulue n'apparaisse seulement une fois, et non plusieurs fois. Pour se faire, j'ai écris que si un bouton est appuyé, une variable augmente de un en un. Puis, si cette variable atteint la valeur un, la note DO (donc le fichier audio) est alors jouée, mais dès lors que cette variable passe à deux, la note DO n'est plus jouée. Voici le résultat en code des variables établies:

varDO = 0

varRE = 0

varFA = 0

varSOL = 0

varLA = 0

Voici le résultat en code pour la son "DO":

while True:

#son DO

       if(GPIO.input(DO) == False):
               varDO += 1
               if(varDO == 1):
                       os.system('mpg123 -q DO.mp3 &')
                       print("DO")
       else:
               varDO = 0

J'ai ainsi répété ce code pour les 4 notes suivantes,en changeant les variables, RE, FA, SOL, LA:

#son RE

       if(GPIO.input(RE) == False):
               varRE += 1
               if(varRE == 1):
                       os.system('mpg123 -q RE.mp3 &')
                       print("RE")
       else:
               varRE = 0

#son FA

       if(GPIO.input(FA) == False):
               varFA += 1
               if(varFA == 1):
                       os.system('mpg123 -q FA.mp3 &')
                       print("FA")
       else:
               varFA = 0

#son SOL

       if(GPIO.input(SOL) == False):
               varSOL += 1
               if(varSOL == 1):
                       os.system('mpg123 -q SOL.mp3 &')
                       print("SOL")
       else:
               varSOL = 0

#son LA

       if(GPIO.input(LA) == False):
               varLA += 1
               if(varLA == 1):
                       os.system('mpg123 -q LA.mp3 &')
                       print("LA")
       else:
               varLA = 0

Le code en python sur mon Raspberry est donc à ce point terminé.

2.2.2. Hardware

La construction hardware de mon projet a été plutôt simple, il a fallut, d'un côté, relier 5 boutons aux ground de mon Pi Wedge B+, et de l'autre côté, relier les boutons aux différents pins. Pour améliorer la visibilité de mon projet, j'ai relié mes boutons au ground à l'aide de fils, qui ont été créés par mes soins. (CF Figure 2)

2.2.3. Manuelle

Dans un premier temps, il a fallut imaginer la conception du boîtier abritant la Raspberry Pi B+ ainsi que la breadboard. L'idée était de réaliser un boîtier assez grand pour qu'il puisse y contenir tout le matériel nécessaire, mais également de le faire le plus petit possible pour que mon mini piano soit le moins encombrant. Une fois les dimensions dessinées, il était évident pour moi que mon boîtier devait être construit en bois, car les pianos sont généralement fait de bois. Il a fallu dans un second temps découper pièce par pièce les différentes parties de mon boîtier, et finalement, il a aussi fallu les poncer pour les rendre lisses, et pour pouvoir les assembler plus facilement à l'aide de clous.

3. Résultats

3.1. Résultats Software

Le résultat obtenu pour le code en python est très satisfaisant, les sons sont clairs et précis, et je peux également appuyer sur plusieurs touchent en même temps pour pouvoir obtenir des accords. Cela dit, je n'ai pas accompli mon objectif de base qui était de rendre mon mini piano portable. En effet, tout marche parfaitement bien, mais pour pouvoir utiliser mon mini piano, il faut quand même avoir accès à un écran, une souris ainsi qu'un clavier, pour pouvoir lancer le programme. J'aurai donc du ajouter un programme pour que une fois le courant mis grâce à l'alimentation à pile, le programme se lance automatiquement, et que l'on puisse jouer des mélodies au milieu de nul part, tant que les piles contiennent du courant. Mais je n'ai su trouver la solution à ce problème.

3.2. Résultats Hardware

Le résultat Hardware et comme imaginé accompli, j'ai essayer de gagner de la place en créant des fils par moi-même, mais la breadboard et surtout le Pi Wedge B+ prennent une place conséquente que je ne pouvait pas réduire.

3.1. Résultats Manuelle

Le résultat obtenu pour le boîtier est plutôt satisfaisant sachant qu'il a été créé de toute pièce par mes soins. Certes il n'est pas très esthétique, mais son but majeure est de protéger le matérielle hardware de mon projet. Les dimensions ont été minimisée au maximum pour rendre le mini piano moins encombrant.

4. Discussion

Lors de mon projet, j'ai du faire face à plusieurs problèmes. Ne connaissant presque rien à l'écriture en python, j'ai à de maintes reprises oublié les ":" à la fin de ligne de commandes commençant par "if...", ou bien j'ai oublié d'incrémenté certaines ligne pour que les boucles soient écrites correctement, ou bien encore il m'est arrivé de mettre des espaces après les "if", bref pleines de petites erreurs dont j'ai appris les corrections, et qui m'ont valus plusieurs heures de relecture et de correction supplémentaire car je perdait rapidement mon sang froid... Malgré ces erreurs, énormément de progrès ont été fait, premièrement, j'ai rapidement compris que les recherches en français ne valaient pas celles en anglais, cela pourrait paraitre anodin, mais ça ne l'était pas pour moi. Deuxièmement, j'ai appris à me servir de différentes libraires, et notamment celle du son (.mp3) donc je suis ravi d'avoir compris le fonctionnement, j'ai appris énormément de détails, notamment que l'on puisse convertir un fichier audio (.wav) en fichier audio (.mp3), et encore pleins d'autres.

Concernant la partie manuelle de mon projet, une grosse erreur commise à été de dessiner sur le bois les dimensions de mes pièces à découper en crayon. En effet, étant donné que l'épaisseur de la scie est nettement plus large que celle du crayon, à la découpe, je me suis rendu compte que je n'était pas du tout précis. j'aurai du donc prendre cette notion en compte, et dessiner mes pièces sur le bois à l'aide d'un feutre, qui lui a une largeur bien plus épaisse que celle du crayon.

Le problème majeure de mon projet a été comme d'habitude la gestion du temps, c'est un problème que je rencontre depuis très longtemps car je suis un gros flemmard. En effet, dès que je peux repousser quelque chose au jour d'après, j'en saisi l'occasion, et ça a malheureusement été le cas pour ce projet. Je me suis attaqué au code bien trop tardivement, et le résultat est que je n'ai pas eut le temps d'approfondir mes recherches pour rendre mon piano mobile. Cela dit, la partie manuelle et hardware de mon projet a été réalisée assez tôt, et je n'ai pas eu de soucis à terminer cette partie du travail dans les temps.

5. Conclusion

En conclusion, l'objectif de mon travail a été partiellement atteint. Certes, les notes sont jouées lors de l'appui d'un bouton, mais je n'ai su rendre mon mini piano portable. Ce travail m'aura beaucoup servit. Je sais maintenant les bases des codes en python, et je sais également comment être efficace lors de recherches d'inspirations de codes sur le WEB. J'ai appris énormément de choses lors de se projet, notamment en Software, mais également dans la vie courante; la gestion du temps. J'ai été très stressé les jours avant la rédition de mon travail, car je sentais que ce dernier n'était pas abouti, et je pense que tout ce stresse m'a fait comme une sorte d'électro-choque, et je ne veux en aucun cas avoir à nouveau à faire à une telle angoisse, et c'est pourquoi je pense que dorénavant, je commencerai à travailler plus tôt pour des projets de tels envergures, et notamment pour le projet F qui viendra en fin d'année.

Références

Références images

(1) https://ae01.alicdn.com/kf/HTB1vD.nQFXXXXXbXpXXq6xXFXXX8/Cellulaire-T-l-phone-Pour-Enfants-B-b-lectronique-t-l-phone-portable-pour-enfants-B.jpg_640x640.jpg

Références téléchargement

(1.1) https://www.putty.org/

(1.2) https://nmap.org/download.html

(1.3) https://freesound.org/

(1.4) https://www.online-convert.com/fr

(1.5) http://www.01net.com/telecharger/windows/Internet/ftp/fiches/17966.html