1. Introduction

Dans la vie moderne de l’homme, l’écriture s’est imposée comme un élément de savoir essentiel. Il est de nos jours inconcevable de ne pas savoir écrire, mais avec les innovations technologiques et leur forte utilisation, nous utilisons de moins en moins un stylo ou un crayon. L’absence de pratique crée un phénomène nouveau : bien que sachant écrire, l’habileté manuelle pour exécuter cette tâche diminue et notre écriture devient malhabile. Pour pallier ce problème, une des solutions mise en place a été de mettre à disposition des polices « scripts ». Celle proposée dans ce Projet H est d’implémenter un programme, utilisant un procédé similaire à l’imprimante 3D, qui « écrirait » physiquement les entrées d’un clavier sur une feuille de papier. De là vient l’idée de la « The NOTaPrinter », un Proof of Concept (PoC), qui vise à offrir une solution d’écriture manuelle personnalisée.

2. Matériel et Méthodes

2.1 Méthodologie

Pour ce POC, nous prosédons alors ainsi:

  1. Création d'un plan
  2. Recherches sur internet
  3. Nous apprenons le code à travers d'exemple
  4. Nous écrivons le code
  5. Nous le testons à chaque nouvel ajout conséquent
  6. Nous le corrigeons si nécessaire
  7. Actualisation du plan

Nous nous sommes imposé une limite de temps ainsi que d'argent pour ce projet que nous sommes tenus de respecter.

2.2 Matériel

Pour ce POC, nous avons besoin de :

  • 1 accéléromètre de type MPU 6050

mpu-6050-1 image.jpg, janv. 2020 (MPU6050, n.d.)

  • 3 Set d'axes linéaires motorisés de 150mm à 300mm

4babe5a9-9171-43fd-96db-e5a15928b5c3.jpeg, janv. 2019 (Hanpose Linear Guide Set, n.d.)

  • Des breadboards

breadborad.jpg, janv. 2020 (Breadboard, n.d.)

  • Des vis
  • Un tournevis
  • Un raspberry Pi 3

raspberry-pi-3bplus-1.jpg, janv. 2020 (Raspberry Pi 3, n.d.)

  • Des Jumper Cable de type : Female to Male et Male to Male

jumper.jpg, janv. 2020 (Jumper cables male to female, n.d.)

  • Un stylo
  • Une planche de bois
  • Une feuille de papier
  • Un clavier d'ordinateur
  • Un marteau
  • Une scie
  • Un écran
  • Un cable HDMI

Pour ce POC, nous avons utilisé:

  • Python 2 et 3
  • PyCharm Community Edition 2019.3.1 pour windows
  Disponible sur https://www.jetbrains.com/pycharm/
  • Thonny Raspberry Pi
  • GIT
  • TextWrangler
  • Microsoft Office

2.3 Méthodes

Afin de mener à bien ce projet, nous l'avons décomposé en plusieurs parties et pris en compte plusieurs facteurs. Le premier étant le prix. Pour ce projet, nous avons décidé que le prix d'investissement maximum est donc de 150 CHF pour l'entièreté du projet. Sachant maintenant ce premier facteur, nous nous intéressons alors au deuxième facteur, le temps à disposition, et nous l'estimons à environ 1h30 par jour de cours et 4h par week-end. Une fois ces facteurs posés, nous nous occupons donc de la répartition du projet en parties. Cela nous donne ceci (lien vers l'image): Screen Shot 2020-01-30 at 18.40.41.png, janv. 2020 Une fois le plan fait, nous installons les programmes que nous pensons utile c'est-à-dire Python 2.7.17 (dernière version sortie), PyCharm pour pouvoir coder sur windows et TextWrangler pour pouvoir coder sur MAC. Après l'installation de PyCharm, de Python 2.7.17 ainsi que TextWrangler, nous commençons à créer les programmes au fil du temps. N'ayant qu'une partie du matériel, nous décidons alors de commencer à coder le programme pour enregistrer les "imputs" de l'accéléromètre et de les récupérer plus tard pour pouvoir les traiter. Pour ce faire nous pensons en premier à créer une matrice avec des données. Ne connaissant rien du language Python dans son ensemble, nous nous renseignons sur la création d'une matrice dans le language de programmation Python 2. Au bout de deux journées de travail, nous maitrisons l'insertion et récupération de données dans une matrice. Ensuite, nous nous demandons comment nous pouvons automatiser la création de matrice ainsi que de son type, mais nous ne trouvons pas et commençons à reconsidérer si nous devons utiliser des matrices pour stocker nos données. Après réflexion, nous décidons alors de créer des fichiers textes, plus flexible et plus facile à manipuler, contenant les informations nécessaire ce qui nous permet de contourner la question précédente ainsi que d'autres problèmes (perte de données, complexité, taille du programme, ainsi de suite). Subséquemment, nous nous informons, à travers de blogs et recherches sur internet, comment créer un fichier texte en Python 2. Nous savons alors comment créer un fichier texte, mais un nouveau problème se pose. Nous ne savons pas comment introduire, des informations dans le fichier ainsi que les récupérer. Nous répartissons alors le problème en deux parties. La première, enregistrer les données sur le fichier texte. La deuxième, que nous nous occuperons plus tard, récupérer les données d'un fichier texte. Comme pour les problème précédents, nous nous renseignons sur internet sur les possibles solutions au premier problème. Nous découvrons les commandes "raw_imput()" ainsi que "imput()" qui nous permettent alors, à travers de variables, enregistrer nos données dans un fichier. De plus, nous apprenons que le code "s'arrête" une fois que celui atteint un "raw_imput()" ou un "imput()" comme si celui-ci attendait une réponse à une question. Nous commençons alors le code. Celui-ci ressemble à peu près à ceci(lien vers l'image): Screen Shot 2020-02-01 at 11.56.56.png, fév. 2020 Nous décidons de vérifier comme à chaque fois le résultat de ce code. Le code nous rend ceci: Screen Shot 2020-02-01 at 12.54.20.png, fév. 2020 Nous comprenons alors que la boucle crée à chaque fois un nouveau fichier en écrasant le précédent qui fait perdre des données à chaque fois. Nous recherchons ce problème sur internet et découvrons qu'un fois un fichier est créée, pour pouvoir le modifier, on doit l'ouvrir mais au lieu de mettre en argument 'w' (pour write), nous devons mettre un 'a' (pour append). Nous corrigeons alors le code et nous le testons à nouveau afin de vérifier que le code fonctionne comme nous le voulons. Cette fois-ci, le code est donc correct. Après avoir fait le code pour rentrer les données dans un fichier texte, nous voulons que l'utilisateur aient une plus grande compréhension de ce qui se passe ainsi que l'utilisateur puisse utiliser le fichier de façon personnalisée et puisse choisir le nom du fichier qui contiendra les informations. Nous codons alors ce souhait et cela nous donne ceci: Screen Shot 2020-02-01 at 13.12.48.png, fév. 2020 Nous testons le code et il retourne ce que nous attendions. Nous pensons alors qu'il serait nécessaire que l'utilisateur ait aussi la possibilité de refaire sa saisie si elle ne lui plait pas ou qu'il n'a pas eu le temps de la faire ainsi que la possibilité de faire une nouvelle saisie pour un autre caractère. Nous le codons et cela nous donne ceci: Screen Shot 2020-02-01 at 13.18.52.png, fév. 2020 Nous le testons et le code retourne ce que nous voulons après plusieurs corrections. Nous considérons alors que ce programme est donc prêt jusqu'à l'arrivée de l'accéléromètre où nous devrons changer la partie imput en un code récupérant les informations de l'accéléromètre. Nous mettons alors à jour notre plan: Screen Shot 2020-02-01 at 13.35.01.png, fév. 2020 Nous commençons alors la deuxième partie, la récupération des données d'un fichier. En premier, nous nous occupons de faire le code qui nous permet de faire comprendre à notre programme quels fichiers le programme doit prendre pour pouvoir récupérer les données de celui-ci. Cela nous donne ceci: Screen Shot 2020-02-01 at 13.43.05.png, fév. 2020 Nous faisons notre test habituel. Ensuite nous nous informons, sur internet, comment nous pouvons récupérer les données d'un fichier. Screen Shot 2020-02-01 at 13.50.48.png, fév. 2020 Nous faisons notre test habituel. Après ceci nous voulons récupérer les données d'une ligne. Ceci nous doit rendre une seule information comme le programme précédant se charge de remettre à la ligne chaque imput de l'utilisateur. (Ici la section test du programme): Screen Shot 2020-02-01 at 13.54.44.png, fév. 2020 Nous faisons notre test habituel. Ensuite nous faisons la partie du programme qui va nous permettre répartir chaque caractère d'une phrase afin de l'associer avec le fichier texte qui fait office de protocole. Au sein de cette association nous codons aussi un moyen pour compter le nombre de lignes que le fichier comporte afin de lire une ligne différente à chaque loop pour lire l'entièreté du fichier. Screen Shot 2020-02-01 at 14.01.59.png, fév. 2020 Nous faisons notre test habituel et nous faisons ce code pour chaque caractère. Nous terminons notre programme avec une loop qui ne peut pas se finir afin de pouvoir écrire chaque phrase que l'utilisera veut faire écrire à la The NOTaPrinter. Execution program rédaction.txt Nous considérons ce code finit jusqu'à l'arrivée des axes linéaires où il faudra insérer dans le code un programme qui permet d'envoyer les données aux moteurs. Nous actualisons alors le plan: Screen Shot 2020-02-01 at 14.29.12.png, fév. 2020 Ne pouvant plus avancer, nous contactons alors Banggood, notre fournisseur pour le matériel, afin de savoir dans combien de temps notre matériel devrait arriver. Ceux-ci nous répondent après deux jours pour nous informer que le matériel est "out-of-stock". Nous contactons alors Monsieur Iglesias afin de lui informer de la situation et cherchons immédiatement un autre fournisseur. Nous trouvons alors un deuxième fournisseur, Reichelt, pour l'accéléromètre. Cependant, les axes linéaires ne sont disponibles que sur des sites chinois avec une date livraison pour mi-février. Nous sommes donc obligés d'attendre l'arrivée de notre fournisseur Banggood, pour les axes linéaires, nous promettant l'arrivée de celui-ci pour le 6 janvier. Nous actualisons alors notre plan en conséquence. En attendant l'arrivée de notre colis de chez Reichelt, nous nous informons sur le code que nous devons utiliser pour récuperer les données de l'accéléromètre. Nous continuons aussi l'écriture de notre rapport sur le document Word. Une fois le colis arrivé, nous commençons à inclure le code dans notre code de saisie. Nous commençons alors à importer les bibliothèques nécessaires pour le code. Nous rencontrons alors un premier problème. Notre version de pip est obsolète. Nous suivons alors les directives pour mettre à jour notre pip. Celles-ci sont infructueuses. Nous sommes alors contraints à réinstaller python 2 .7.17 . Après réinstallation, nous réessayons d'installer nos bibliothèques et celles-ci sont alors installées. Nous testons alors le programme et nous renvoie des erreurs au niveau des bibliothèques. Nous comprenons alors qu'une bibliothèque demandée n'était disponible seulement en Python 3. En conséquence, nous intallons alors Python 3 sur notre ordinateur dans le but de faire marcher la bibliothèque incompatible. Nous installons donc les autres bibliothèques pour la version Python 3 et testons que les bibliothèques marchent. Après quelques problèmes de version de Python sur notre ordinateur qui nous a pris 2 jours à résoudre, es bibliothèques marchent jusqu'à la bibliothèque nommée posix. Celle-ci ne pouvait être trouvée sur internet. Nous avons trouvé aucune bibliothèque se nomant posix disponnible aux téléchargement. Cependant, nous avons trouvé deux autres bibliothèques portant le nom de posix: posix_ipc et pycopy-posix. Nous installons les deux bibliothèques mais après le test, nous avons toujours la même erreur. Dans ce cas, nous avons alors décidé d'utiliser le Raspberry Pi pour la suite du programme. Nous tranférons notre travail que nous modifions de python 2 vers python 3 et testons nos deux programmes sur le Raspberry afin de voir si ceux-ci marchent encore. À notre plus grande joie, les programmes fonctionnaient. Nous incluons alors le programme de saisie des données que nous avons trouvé sur internet dans notre programe. Celui-ci ne fonctionne pas malgré tous nos essais. Nous contactons alors un de nos amis, dont je remercie son père ainsi que lui-même pour sa patience et aide, dans le but de nous aider à résoudre notre problème. Nous découvrons alors que le problème se trouve au niveau du voltage et changeons en conséquence le cablâge de l'accéléromètre. Nous testons alors notre code qui nous retourne ce que nous voulons. Nous actualisons alors notre plan. Nous attendons donc toujours les axes linéaires qui nous sont alors indispensable à la réalisation du projet. Nous continuons alors à travailler sur notre rapport. Voyant la date d'échéance arriver à grand pas et toujours aucun signe du fournisseur Bangood. Nous cherchons alors une altérnative au projet. Nous pensons alors qu'il serait possible d'au lieu de retranscrire les caractères physiquement, nous pouvons les dessiner sur l'écran. Nous commençons alors à nous y intéresser, mais lorsque nous avions proposés cette alternative à Monsieur Iglesias, il refusa. Nous nous sommes donc arrêté à ce niveau. Voici la dernière actualisation du plan.

3. Résultats

D'après notre plan, nous avons accompli 83% des tâches que nous avons évalué pour ce POC. Si nous devons considérer notre avancement par rapport à la livraison du matériel, nous nous situerons à 100%. Concernant les facteurs imposés, seul celui de l'argent a été respecté.

4. Discussion

Malgré que nous avons pas atteint le but escompté au départ, nous pouvons considérer ce projet comme réussi. Les facteurs d'approvisonement du matériel ne pouvait être prévu. Malgré ce projet n'est pas fini, nous avons pensé sur la continuation du travail. En premier, il faudra convertir les données de l'accéléromètre en données soit de déplacement soit de vecteurs. Transformer les données de façons vectoriel diminuerai la qualité de la lettre comparé au données de déplacement. Cepandant les vecteurs deviennent plus simple car moins compliqué au niveau mathématique. Ensuite, il faudra associer ces valeurs afin de faire bouger les moteurs des axes linéaires. Ceci demandera de la recherche pour pouvoir le faire. Ensuite il faudra faire le montage du projet. À partir de ce point, nous pouvons considérer faire une session de débeugage. Une fois cette session faite, le coté esthétique du projet peut commencer. Pour finir, nous allons parler de la portée de ce projet et ce qu'il peut démontrer dans notre vie. Nous pouvons imaginer que ce système peut être utilisé dans le domaine industriel. Nous pouvons dénaturer le principe de l'écriture et mettre à la place un mouvement répétitif que nous voulons que la machine nousreproduisse. Nous pouvons aussi imaginer que ce méchanisme serve dans d'autres circonstances tel que des tâches en "remote". Par exemple, controler les bras d'un sous-marin à distance en reproduisant les gestes.

5.Ce que j'ai appris

En faisant ce projet, j'ai appris plusieures choses. Les plus notables sont celles-ci :

  • Créer un fichier et y faire des manipulations
  • Envoyer et récuperer des données
  • Créer mon propre environement de travail
  • Enregistrer des mouvements d'accéléromètre
  • Mettre à jour un environment
  • Création de matrice
  • Utilisation de Go to (même si non présent dans le code final)
  • Créer et sortir de boucles
  • Ne pas mettre de résistance partout dans les circuits éléctroniques
  • Utiliser et installer des bibliothèques
  • Coder basiquement avec python 2 et 3
  • Utiliser approximativement git
  • Utiliser I2c detect / get/...
  • Utiliser pip
  • Utiliser python
  • Utiliser un Raspberry Pi (et connaître sa lenteur)
  • Essayer de déchiffrer des codes car ceux-ci ne comporte aucun ou peu de commetaires (Ne faites pas ça, mettez des commentaires)
  • Mettre un maximum de commentaire dans son code
  • Faire avec le minimum de documentation

6. Conclusion

Malgré ce projet non fini, nous pouvons considérer celui-ci comme succès car sauf cas non prévu le POC est possible.

Références

Images: MPU6050:

  • MPU6050. (n.d.). [image] Available at: https://www.makerlab-electronics.com/product/triple-axis-accelerometer-gyro-breakout-mpu6050/ [Accessed 30 Jan. 2020].

Hanpose Linear Guide Set:

  • Hanpose Linear Guide Set. (n.d.). [image] Available at: https://www.banggood.com/HANPOSE-HPV2-Linear-Guide-Set-Openbuilds-V-Linear-Actuator-Effective-Travel-100-400mm-Linear-Module-with-17HS3401S-Stepper-Motor-p-1416715.html?ID=49642&cur_warehouse=CN [Accessed 30 Jan. 2020].

Breadboard:

  • Breadboard. (n.d.). [image] Available at: https://learn.sparkfun.com/tutorials/how-to-use-a-breadboard/all Accessed 30 Jan. 2020.

Raspberry PI 3:

  • Raspberry Pi 3. (n.d.). [image] Available at: https://opensource.com/resources/raspberry-pi [Accessed 30 Jan. 2020].

Jumper cables:

  • Jumper cables male to female. (n.d.). [image] Available at: https://cpc.farnell.com/pro-signal/psg-jmp150mf/jumper-cables-m-f-150mm-pk10/dp/SC13050 [Accessed 30 Jan. 2020].

Code accéléromètre :

  • https://tutorials-raspberrypi.com/measuring-rotation-and-acceleration-raspberry-pi/

Remarques

Nous avons évalué que les programmes n'avaient pas besoin que nous incluant la bilbiothèque skel.py car, en faisant des simulations de coupure de courant, le courant ne passait pas. Nous avons alors déterminer que le Raspberry Pi avait sa propre protection contre les coupures de courant.

Annexes

Calcul de position d'un accéléromètre:

Documentations MPU 6050 :

Remerciements

Je tiens à remercier Jacek Wikiera (père et fils) ainsi que Roland Maire pour leur aide précieuse. Sans eux, le projet ne serais pas autant avancé que maintenant.