1. Introduction

Voici l'objectif que je me suis fixé pour mon séquenceur avant de commencer ce projet: "Il y aurait 16 bouton qui correspondraient aux 16 temps d’une mesure. Ensuite un microphone pourrait enregistrer de très courts sons qu’on pourrait alors placer dans l’un ou plusieurs des 16 temps en appuyant sur le bouton correspondant au temps désiré. Cette configuration tournerai donc en boucle mais ne laisserait pas beaucoup de possibilités je veux donc essayer de pouvoir mettre plusieurs sons différents et/ou de pouvoir enregistrer les mesures de 16 temps et de pouvoir les placer a nouveau dans les 16 mesures cette fois-ci, correspondant au 16 boutons. Comme autre chose à ajouter il y’aurait le fait de pouvoir ajuster à quelle vitesse les 16 temps sont joués ainsi que le volume."

2. Matériel et méthodes

  • 1 Keypad 4x4 Breakout Board Kit
  • 1 Adafruit AGC Electret Microphone Amplifier - MAX9814
  • 1 Une webcam (comme microphone)
  • 1 Boutton Tactile
  • 1 Raspberry Pi 3 (Modèle B)
  • 1 Breadboard
  • 1 Basic 16x2 Character LCD
  • 1 MCP3008 8-Channel 10-Bit ADC With SPI Interface (n'est pas utilisé dans le code final)
  • 1 Adafruit Electret Microphone Amplifier - MAX9814 (n'est pas utilisé dans le code final)
  • 1 resistance 10ohm

Tout d'abord j'ai commencé par essayer de lire le son a travers le micro(Adafruit Electret Microphone Amplifier - MAX9814), mais celui-ci émet un signal analogue qui n'est pas supporté par le rasperry. J'ai donc du utiliser le MCP3008, c'est une puce qui s'occupe de traduire les données analogiques en valeurs numériques. La prochaine étape est de transformer ces nombres en son et de les enregistrer dans un fichier. Hélas j'ai eu beaucoup de peine à ajuster le son pour qu'on distingue clairement une voix ou des bruits.

Ayant cette difficulté à obtenir un son de qualité j'ai fait des recherches sur d'autre moyens d'enregistrer du son avec le raspberry. La prise jack 3,5mm présente sur le raspberry n'est pas utilisable comme entrée audio, mais dans des forums j'ai vu que des personnes enregistraient des video, avec son, grâce à une webcam branchée sur une des entrée usb. L'obtention d'un son acceptable étais assez rapide mais la qualité reste très basse, c'est pour ça que j'ai quand même gardé l'autre micro branché sur la breadbord.

Ensuite je me suis attaqué à l'écran lcd 16x2.

lcd-display-11.gif

J'ai rapidement trouvé pleins de codes permettant de le tester, j'ai donc réutilisé ces codes très simples d'usage afin d'afficher, au lancement du programme, des messages d'acceuil tels que: "Welcome to Eliot's sequencer" Mais le but de cet écran était rendre l'usage du séquenceur accessible à n'importe qui et de savoir sur le quel des 16 temps nous travaillons. Vu que j'ai facilement comprit l'usage de l'écran lcd je me suis donc dit qu'il était mieux de faire tout le reste avant pour ajouter les différents affichages après.

Après avoir soudé les bouton et les pins au circuit imprimé, j'ai branché le clavier 4x4 a 8 pin gpio du raspberry. Pi_Keypad_Wiring.png

J'ai mit du temps bien à comprendre le fonctionnement de celui-ci, mais cela m'as beaucoup intéressé. Une fois les 16 boutons en marche je leur ai assigné à chacun de lancer l'enregistrement et d'afficher un message correspondant sur le lcd.

La dernière étape était de lire la boucle crée j'ai donc ajouté un bouton a cet effet sur la breadboard.

raspberry_pi_Button_Pi.png

Pour le tempo il est définit par la longueur des enregistrement qui est toujours identique. Et il est malheureusement impossible de la modifier sans accéder au scripte.

Voici le résultat final obtenu:

unnamed.jpg

Au lancement du fichier lcd.py, le programme va commencer par présenter, sur l'écran lcd, un message d'accueil suivi d'une invitation à appuyer sur un boutons. Il tournera donc en boucle jusqu'a ce que l'on presse un de ces 16 boutons, ou celui placé directement sur la breadboard. Quand on presse un des 16 boutons il va lancer l'enregistrement et sauvegarder un fichier sous un nom correspondant au bouton pressé et donc a son emplacement sur les 16 temps. Cette étape est a reproduire pour chaque bouton et si un enregistrement ne nous plait pas il suffit de le réenregistrer afin de remplacer le son indésirable. Une fois nos 16 sons enregistrés nous pouvons appuyer sur le bouton placé sur la breadboard qui enclenchera une lecture suivie, en boucle et dans l'ordre de ces sons.

3. Résultats

Le plus grand défaut de mon appareil est la qualité d'enregistrement. Le son obtenu avec le micro MAX9814 était à peine audible, je ne distinguais aucun son propre, j'entendais juste les différences de volume. La webcam m'a certes simplifié la tâche mais la qualité est minable et il n'est pas vraiment possible de l'améliorer car c'est le microphone lui même qui est de basse qualité, contrairement au MAX9814 ou c'es la manière dont je transforme le son qui est mauvaise. Pour remédier a cette qualité sonore médiocre je serai donc obligé de changer le code que j'ai utilisé pour le MAX9814.

L'autre défaut est la manière dont je place les sons dans les 16 temps:

Lorsque j'appuie sur le bouton 1 par exemple, le programme va démarrer un enregistrement sur l'emplacement numéro 1. Dans le cas ou je voudrai donc utiliser deux fois le même son je devrai soit reproduire exactement le même son pour l'enregistrer a un autre emplacement soit le copier manuellement dans le code, ce qui dans les deux cas n'est pas très pratique . En soit ma configuration fonctionne mais elle très rudimentaire ou simpliste et comme dit précédemment, n'est pas très pratique.

Finalement il y a un dernier souci que je n'avais pas réalisé au moment du rendu : Une fois que j'ai appuyé sur le bouton permettant la lecture de la boucle de 16 temps, je n'ai pas écrit dans le script une manière de revenir en mode enregistrement sans relancer le programme.

En plus de ces défauts il manque aussi tout un tas de petit détails:

  • Pouvoir ajuster le volume depuis la breadbord et non depuis l'interface raspberry
  • Pouvoir ajuster le tempo sans modifier manuellement la longueur des enregistrements dans le code
  • Pouvoir modifier l'ordre de lecture des sons une fois qu'on presse sur le bouton de la breadboard sans devoir les réenregistrer

4. Discussion

Lorsque j'ai démarré mon projet j'ai perdu beaucoup de temps à essayer de comprendre le fonctionnement du raspberry et de python. Je suis resté des heures à essayer de résoudre des problèmes que je ne savais même pas comment attaquer sans aucun outil apprit en cours en main, je me suis donc retrouvé à ne pas avancer du tout pendant plusieurs jours, ce qui décourage énormément. J'a donc recherché une personne qui pourrait me décoincer mais dans mon entourage personne ne s'y connait en informatique. Finalement j'ai trouvé un ami d'un ami qui à pu répondre à mes questions. Depuis ce moment la j'ai prit du plaisir à faire mon travail car enfin j'avançais. Le problème c'est que j'avais perdu beaucoup de temps au début, j'ai donc eu une grande charge de travail a la fin.

5. Conclusion

Je suis tout nouveau dans le programming et il était pour moi très difficile d'évaluer le temps que prenais la mise en place de ce programme car, malgré mes travaux sur le thymio (qui utilise tout de même un autre langage), je n'y connaissait rien du tout. Je m'y suis prit 2 semaines à l'avance mais j'ai quand même sous-estimé le temps. Je n'ai pas pu poser beaucoup de questions en classe car nous étions nombreux à avoir des problèmes, j'ai donc tout apprit sur internet et avec l'aide d'un ami qui ne connaissait pas le langage python. Celui-ci m'as aiguillé sur divers programmes de mise en pages de code permettant une écriture beaucoup plus pratique que le terminal, l'application mac utilisée en cours.

J'aurai aussi du choisir un projet moins compliqué pour commencer. J'ai choisit ce projet car il m'intéressait réellement et qu'il aborde des thèmes qui m'intriguent en ce moment, mais je me rend compte que j'aurai du choisir en fonction de la simplicité.

Appart ces cotés plutôt négatifs, j'ai l'impression d'avoir beaucoup apprit et qu'il m'étais nécessaire de faire de la pratique pour mieux comprendre les choses que nous avons vues jusqu'a maintenant en cours.