1. Introduction

En 2018, le cosplay est largement implanté en Suisse et les personnes qui découvrent ce milieu artistique tendent à ne plus pouvoir s'arrêter de le pratiquer. Le cosplay consiste en la création de costumes et l'incarnation de personnages de séries, mangas, films d'animation, etc. Dans ce cadre, il est parfois nécessaire de produire des artefacts, qui sont des éléments indispensables au personnage, comme des armes ou tout autre accessoire. Dès lors, il va de soit que lorsque l'électronique a commencé à devenir accessible au grand public, cette communauté l'a très vite incorporée aux costumes afin d'apporter toujours de nouvelles innovations. Ce projet s'inscrit partiellement dans ce mouvement, car il a pour but de servir d'artefact à un personnage qui vivrait dans un monde steampunk (pour illustrer ce qu'est le mouvement steampunk, voir la Figure 1). En effet, le produit fini sera une valise qui contient des parties électroniques oldschool qui permettent de jouer des morceaux de musique (Figure 2).

steampunk.png Figure 1: Trois cosplayers en costumes steampunk.

L'objectif de ce projet hiver est de construire la partie électronique d'un lecteur MP3 qui sera contenu dans une vieille valise. Le produit final sera muni de plusieurs haut-parleurs, d'un afficheur LED de 24 caractères et il fonctionnera sur batteries. L'afficheur LED, composé de caractères lumineux de 8 segments, servira à afficher le titre et auteur de la musique, le temps restant jusqu'à la fin du morceau ainsi que des informations concernant le micro-contrôleur tel que "booting" ou "shutting down". La principale particularité sera néanmoins la technique utilisée pour choisir le morceau de musique à jouer. En effet, nous utiliserons des circuits imprimés perforés ayant chacun une connectique unique qui correspond à un morceau au niveau du micro-contrôleur central. Les cartes devront être placées dans un connecteur de carte enfichable faisant partie d'un lecteur de cartes. Sur ce module, un ATmega32U4 sera alors responsable de vérifier la connectivité. Cela fait, il attribuera celle-ci à un code unique qui pourra être envoyé par I2C à un C.H.I.P. En effet, le micro-contrôleur central de ce projet sera un C.H.I.P., qui est pratique pour sa sortie audio incorporée (connecteur jack).

Ainsi, voici toutes les plaques qui ont été réalisées, soudées (en 1 copie au moins) et testées:

  • 12 plaques de 2 caractères, qui composent l'affichage LED (qu'on nomme ledDisplay)
  • 50 plaques perforées (qu'on nomme perfCard)
  • 1 lecteur de cartes perforées (qu'on nomme cardReader)

shemaValise.png Figure 2: Schéma de la valise telle qu'imaginée au début du projet.

2 Matériel

Pour réaliser un exemplaire de chacune des trois plaques, les composants suivants ont été nécessaires.

Affichage LED :

  • 2 ULN2803
  • 1 PCA9685
  • 16 résistances traversantes de 220 Ω
  • 46 LEDs rouges 5 mm
  • 1 MCP1703-50
  • 2 capacité de 1 uF

Lecteur de cartes perforées :

  • 1 ATmega32u4
  • 1 connecteur de carte enfichable de 10 pins
  • 1 bouton trois positions
  • 1 connecteur de carte affichable de 10 pôles
  • 2 x 15 cm de fil de cuivre fin (moins de 1mm de diamètre)
  • 4 shottky
  • 1 clock 8 MHz
  • 1 connecteur d'alimentation 12 V
  • 1 LM1117S-50
  • 1 connecteur mini USB
  • 2 résistances 220 Ω traversantes
  • 1 LED verte 5mm
  • 1 LED rouge 5mm
  • 1 DS18B20 (capteur de température)
  • 1 LDR traversante
  • 4 capacités 100nf
  • 3 capacités 10 uf
  • 2 capacités 18 pf
  • 2 résistances 22 Ω
  • 4 résistances 10 kΩ
  • 1 résistance 1 MΩ

Si ce n'est pas précisé, les capacités et les résistances sont des composants SMD 0805mm. Les cartes perforées n'ont pas de composants, puisqu'il suffit d'effectuer des court-circuits à certains endroits pour les rendre uniques.

Autre et outils :

  • Soudure
  • 1 fer à souder
  • Tresse à dessouder
  • 1 pince coupante
  • 1 pince à dénuder
  • 1 alimentation variable permettant d'obtenir une tension de 5 V
  • 1 voltmètre pour déverminer
  • 1 ordinateur pour écrire et lancer les tests Arduino

3 Méthode

Ce projet est centré sur l'apprentissage du programme Eagle et la réalisation de circuits imprimés. Cela implique différentes étapes:

  1. Savoir ce que les plaques doivent effectuer et donc connaître les entrées nécessaires (tension, câbles dédiés à la communication, boutons, senseurs divers) et les sorties (LEDs, tension, PWM).
  2. Se familiariser avec l'application Eagle et s'intéresser au processus de commande des circuits imprimés chez un producteur.
  3. Développer des protocoles de test et de déverminage.

3.1 Fonctionnalités désirées des plaques

Les cartes les plus simples sont les cartes perforées, car elles ne contiennent aucun composant. En effet, elles ne sont composées que de surfaces de cuivre apparentes, de jumpers et de vias. Ceux-ci sont arrangés de sorte à permettre de réaliser des groupes de pins reliés électriquement entre eux, indépendamment des autres.

L'afficheur LED est la seconde plaque quand à la difficulté de sa réalisation, car il ne doit que servir de support à deux caractères de 8 segments composés de 2 ou 3 LEDs, il ne contient donc pas de micro-contrôleur. Ainsi, pour diriger chacun des segments séparément, nous utilisons un PCA9685, qui est un contrôleur de LED I2C avec 16 sorties PWM. Ces sorties sont reliées à deux ULN2803 (8 entrées), qui permettent de contrôler un courant élevé (jusqu'à 0.5A) et une haute tension (12V dans notre cas), ce qui est nécessaire pour l'alimentation des LEDs, qui sont en série (1). Enfin, pour pouvoir modifier les adresses I2C des 12 PCA9685 de l'affichage, 4 jumpers ont été prévus. La plaque doit être alimentées en 12V.

Enfin, le lecteur de cartes perforées est le plus complexe. En effet, il fait office d'un module I2C qui est contrôlé par le C.H.I.P. Par conséquent, il contient un micro-contrôleur, en l'occurence un ATmega32u4. Les périphériques reliés à celui ci sont en premier lieu le connecteur de cartes enfichables, qui nécessite 5 pins, car une connection entre les pins opposés du connecteur a été effectuée afin de rendre les cartes lisibles dans les deux sens (voir Figure 3). Ensuite, une entrée analogique a été reliée à une LDR (Light Dependent Resistor), afin de permettre une régulation de l'intensité de l'affichage LED en fonction de la luminosité extérieure. De plus, une sonde de température a été ajoutée, car c'était un périphérique intéressant à apprendre à utiliser et c'est aussi un message qui pourrait être affiché sur ledDisplay. Afin de faciliter le déverminage lors du scan des cartes perforées, deux LED traversantes ont été rajoutées. La carte contient aussi 7 pads, dont trois permettant la lecture d'un bouton trois positions, deux sont les sorties +12V et GND et les deux dernières font office de départ pour le bus I2C, avec les deux résistances de pullup qui sont nécessaires (2). Aussi, un connecteur USB mini permet la programmation du micro-contrôleur. Finalement, l'empreinte du C.H.I.P. a été incorporée à la plaque, afin d'en faire un shield, qui est bien plus résistant que des fils. Pour permettre la programmation du MCU par USB, un micro-tag a été ajouté qui permet, au moyen d'un bootloader, ce type de communication.

Afin d'obtenir davantage d'informations permettant la compréhension du fonctionnement des plaques, s'intéresser aux documents Eagle contenus dans stea-mp-unk-3/eagle.

3.2 Design et production

Lors de ce projet, le design des trois plaques a été réalisé en utilisant le programme Eagle, dédié à cet effet. Tout d'abord, il a fallu trouver et analyser les feuilles de données des différents composants, afin de:

  • Savoir quels pins connecter à quoi (terres, entrées de courant, pins analogiques, pins I/O).
  • Connaître les composants à ajouter autour des composants principaux (résistances et capacités).
  • Connaître les limitations en courant que les composants supportent.
  • Avoir des informations supplémentaire, telles les adresses des composants (pour l'I2C).

Ces feuilles de données ont été réunies dans stea-mp-unk-3/datasheets. Elles ont servi de référence à une partie de la conception des circuits imprimés.

Lorsque les designs des plaques ont été vérifiés, un Gerber viewer en ligne (https://gerber-viewer.easyeda.com) a été utilisé afin de vérifier ce qui devrait être obtenu après la production des plaques. En effet, ces visualisateurs permettent d'obtenir les images de la Figure 3. L'étape suivante a été d'envoyer les modèles Eagle à un producteur. Les plaques arrivées, un exemplaire de chacune a été soudé, puis, des tests spécifiques pour chacune des fonctionnalités des plaques ont été réalisés. De plus, des circuits simples ont été réalisés en utilisant une breadboard afin de déduire la résistance nécessaire au niveau des LEDs en série. Ce montage est représenté à la figure 4.

Figure 3 : Images de cardReader générées par le Gerber viewer.

Figure 4 : Circuit simple servant à estimer la résistance nécessaire au niveau des LEDs.

3.3 Phase de test

Pour tester les plaques, il a été décidé d'utiliser le language de programmation Arduino, puisque le lecteur de cartes a ce type de micro-contrôleur. Le but recherché avec les tests est premièrement de vérifier de façon spécifique si chaque partie des plaques fonctionne et que le design des plaques est donc correct. En second lieu, ils doivent permettre de vérifier rapidement si les circuits imprimés d'une série sont correctement soudés, ce cas s'applique en particulier aux modules de ledDisplay. Les tests qui se trouvent sur le git ont les fonctionnalités suivantes (dans stea-mp-unk-3/arduino).

Attention! Puisque l'ATmega32u4 a une horloge externe de 8MHz, il est nécessaire de le programmer en tant qu'un Lilipad Arduino USB, au risque de ne plus pouvoir le programmer par USB, auquel cas il serait nécessaire d'utiliser un bootloader avec un micro-tag pour le réparer (sur le programme Arduino, aller dans Tools -> Burn Boatloader).

Tests de stea-mp-unk-3/arduino/cardReader/

  • cardScan : scan de la carte perforée qui a été introduite dans le lecteur de cartes, retourne quelque chose de la forme montrée à la Figure 5: les x indiquent le pin qui est HIGH, les 0 les pins qui y sont connectés électriquement.
  • cardScanWithLed : même chose que cardScan, mais les deux LEDs de cardReader clignotent lors du scan.
  • ledsBlink : fait clignoter les LEDs de cardReader.
  • returnTemperature : retourne la température mesurée par le capteur de température situé sur cardReader (basé sur le code Arduino d'exemple par défaut AnalogInput).
  • scanToHash : retourne un code unique de 32 bits qui est une combinaison du résultat rendu par cardScan (basé sur (3)).

Tests de stea-mp-unk-3/arduino/ledDisplay/

  • driverOnOff : fait clignoter tous les segments de ledDisplay simultanément (basé sur l'exemple BasicLEDTest de la librairie PCA9685).
  • segmentsTest : fait clignoter les segments de ledDisplay l'un après l'autre (basé sur l'exemple BasicLEDTest de la librairie PCA9685).
  • testHi : affiche HI sur un des éléments de ledDisplay.
  • LDR : adapte l'intensité de l'affichage à la luminosité ambiante (basé sur le code Arduino d'exemple par défaut Blink).

Pour réaliser ces tests, plusieurs librairies Arduino ont été nécessaires:

  • Wire : supervision des communications en I2C.
  • PCA9685 : contrôle du composant homonyme en I2C.

Figure 5: Comparaison du scan produit par cardScan et du hash de scanToHash pour trois cartes perforées différentes.

3.3 Divergence quand au projet de base : matrice LED 5x5

Lors du développement du projet, il a été remarqué que les cartes perforées permettaient, avec un programme Arduino adapté, de contrôler une matrice de 25 LEDs de format carré. Pour obtenir celle-ci, il est nécessaire de souder 25 LEDs SMD d'un côté de la plaque perforée et de souder 5 LEDs sur la diagonale libre, comme montré à la Figure 6. Par conséquent, cette possibilité a été testée et différents programmes ont été écrits à cet effet (dans stea-mp-unk-3/arduino/ledMatrix/). Il est en effet possible d'écrire toutes les lettres de l'alphabet avec cette matrice, de plus, on peut l'utiliser pour faire de petites animations. La Vidéo 2 montre ce résultat.

Figure 6: Principe permettant de produire la matrice LED.

3.4 Autres avancées

Aussi, une grande quantité de composants ont été rassemblés pour la suite du projet, entre autre, un support en énergie a été obtenu. Il consiste en un powerpack à tension de sortie variable (de 5 à 12 V) qui contient 6 batteries NCR18650B, ce qui représente une très grande possibilité de stockage d'énergie. De plus, les modèles FreeCAD de la base permettant de fixer les modules de l'affichage LED ont été réalisés afin de permettre leur découpe à la découpeuse laser. Nous nous sommes aussi procuré des vis M3 par 20 en plastique pour fixer ces modules sans craindre de court-circuits. D'autre part, nous nous sommes procuré un bouton 3 positions à ajouter à cardReader.

4. Résultats

Figure 7 : Une des cartes de l'affichage LED entièrement soudée.

Vidéo 1 : Une des cartes de l'affichage LED avec un programme de test.

Figure 8 : CardReader entièrement soudée.

Vidéo 2 : La matrice LED affichant une animation (squaresOnMatrix).

5. Discussion

Dans l'ensemble, les objectifs de ce projet ont été atteints, car toutes les plaques ont été produites et testées. Néanmoins, il va de soit que celles-ci n'ont pas été sans fautes dès le premier essai, bien qu'en tout, très peu d'erreurs aient été commises si l'on prend en compte la complexité des plaques. Ainsi, deux connections ont été oubliées sur cardReader : les fils I2C allant du micro-contrôleur à l'empreinte du CHIP. Cette erreur a été corrigée par la suite. Aussi, ce n'est qu'après la production que les noms et les valeurs des composants ont été déplacés de manière à ce qu'ils soient lisibles. En effet, il est complexe de souder les composants appropriés au bon endroit sans ces informations.

Concernant ledDisplay, quelques difficultés ont été rencontrées quand au composant à utiliser pour la baisse de tension. En effet, la tension en entrée est de 12V et celle nécessaire au PCA9685 qui se trouve sur ces mêmes plaques est de 5V. Le composant que nous désirions utiliser permet cette conversion, mais c'est un composant inaproprié qui a été soudé sur les plaques (convertisseur de maximum 8V à 3.3V). Par conséquent, la tension d'entrée de ces PCB est pour le moment de 8V pour effectuer les tests. Les soumettre à une tension plus élevée risque de faire partir la magic smoke du composant.

Un autre élément, qui n'est pas à proprement parler une erreur, est le fait que sur ledDisplay, les empreintes des LEDs ont été placées à l'envers, ceci n'a pas été corrigé car c'eût été trop chronophage. Il est donc nécessaire de faire bien attention lors de l'assemblage de ces plaques à souder les LEDs à l'envers par rapport aux marques. En ce qui concerne ledDisplay, 6 plaques ont déjà été soudées, bien que toutes ne fonctionnent pas encore. Néanmoins, cela a permis d'évaluer le temps nécessaire à cette activité, qui est conséquent. De ce fait, il est possible que nous ne produisions que 12 modules au lieu de 16, si le temps ou la patience viennent à manquer. En effet, le problème ne se situe pas en le fait en soi de souder, mais davantage dans la phase qui inévitable qui la suit: celle du déverminage. Or celle-ci demande une grande inventivité et de la méthode, afin de trouver les erreurs, qui peuvent être des mauvaises soudures, un composant mal placé, un composant dysfonctionnel, ou un problème de soft...

D'autre part, il a été intéressant de réaliser des protocoles de test pour faciliter le déverminage de plaques que nous avons développées nous-même, car cela a permis de s'initier au language de programmation Arduino, qui étant fondamentalement du C est intéressant à connaître. Ainsi, ces tests font office de base au code qui devra être réalisé lors du projet de printemps pour obtenir le produit final, qui sera un ensemble de code Arduino, mais aussi de JavaScript, pour la programmation du C.H.I.P.

En tout, toutes les plaques sont fonctionnelles et sont prêtes à être incorporées à la suite du projet en même temps que le matériel qui a été réuni lors de ce projet hiver. La totalité de ce matériel n'a pas été testée, comme par exemple l'amplificateur, mais ce sera l'une des choses à faire lors de la suite. Ces pièces vont néanmoins faciliter et accélérer la suite du déroulement du projet. Pour l'instant, la prochaine étape est l'assemblage de toutes les parties, c'est à dire l'affichage LED, le lecteur de cartes, l'amplificateur et les haut-parleur. Puis, il faudra s'occuper des interactions entre ces différentes parties.

6. Conclusion

Globalement, les trois circuits imprimés que nous voulions réaliser ont été produits et testés et ils font tous ce qu'ils sont supposés faire. Malgré quelques erreurs de concept des PCB et de longues phases de déverminage, il n'y a pas eu de problèmes majeurs lors de ce projet. Les résultats finaux que nous avons obtenus sont la possibilité d'écrire n'importe quel message de deux lettre avec les circuits imprimés de l'affichage LED ainsi que le PCB cardReader fonctionnel, qui permet de retourner un code unique de 32 bits pour une carte qui y est insérée. Enfin, le contrôle d'une matrice de 5x5 LEDs qui seraient soudées sur une des cartes perforées a été développé. Celle-ci permet l'affichage de lettres ou d'autres animations simples.

En tout, les objectifs de ce projets ont été atteints, ce qui signifie que nous sommes parés à la suite de ce projet et donc à la partie software, qui se devra d'exploiter au mieux le hardware produit cet hiver.

Références

Figure 1 : Paul Davis. (2016). Mas afinal, o que é Steampunk? - Luana Botelho. Récupéré le 25 janvier 2018 sur http://editoramorrobranco.com.br/wordpress/2016/09/15/mas-afinal-o-que-e-steampunk/

Pinout du C.H.I.P. pour le shield de cardReader : GitHub, WereCatf/CHIP-pinout/chip-pinout.svg, commit: 029656e le 30 Jan 2017, https://github.com/WereCatf/CHIP-pinout/blob/master/chip-pinout.svg (visité le 30.01.2018).

(1) : Information tirée de la feuille de données de l'ULN2803A qui se trouve dans stea-mp-unk-3/datasheets/.

(2): Semiconductors, N. (n.d.). UM10204 I 2 C-bus specification and user manual Rev. 6 — 4 April 2014 User manual, https://www.nxp.com/docs/en/user-guide/UM10204.pdf (visité le 31.01.2018).

(3) : GitHub, badboy/inthash.md , Integer Hash Function, Thomas Wang, janvier 1997, dernières modifications mars 2007, version 3.1, https://gist.github.com/badboy/6267743 (visité le 30.01.2018).