MatrixBoy

MatrixBoy

Période de confinement oblige, et avec le matériel disponible sous la main, j’ai conçu une petite, très petite console, avec quelques composants peu onéreux :

Un peu de fil (AWG 24 ou ⌀0.5mm) multibrain de couleurs différentes, c’est plus simple pour s’y retrouver, un fer à souder 50W de l’étain (soudure d’électronicien avec âme décapante, c’est le top).

Prenons chacun des ces éléments un par un pour les décrire et les intégrer.

Je passe rapidement sur la carte “véroboard” qui va servir de support physique pour tous les autres composants et qui permet donc de les souder et de les connecter entre eux.

Arduino Nano

C’est le composant central de cette bidouille. Je remets un lien vers une page de prise en main de ce composant issue d’un autre atelier. Je rappelle aussi les caractéristiques du processeur utilisé ici :

  • Mémoire programme : 32 Ko de Flash ;
  • Fréquence CPU (MIPS/DMIPS) : jusqu’à 20 MHz ;
  • SRAM : 2,048 octets (2 Ko) ;
  • Données EEPROM/HEF : 1024 octets (1 Ko);
  • Périphériques de communication numérique : 1-UART, 2-SPI, 1-I2C ;
  • Périphériques de mesure, de comparaison ou de modulation PWM : 1 Input Capture, 1 Comparateur (2 entrées analogiques), 1 ADC (7 entrées analogiques), 6 sorties en modulation PWM ;
  • Compteurs/timers intégrés : 2 x 8-bit, 1 x 16-bit ;
  • Températures de fonctionnement : entre -40 et 85°C ;
  • Tensions de fonctionnement : entre 1.8 et 5.5 V ;
  • Nombre de broches : 32 ;
  • Faible consommation : Oui.

Dans les cartes Arduino et la Nano en particulier ce processeur est secondé par plusieurs autres composants qui complètent et en même temps qui limitent ses caractéristiques.

On trouve, un circuit de conversion USB vers port série, un régulateur de tension réglé à 5 V, ainsi que plusieurs LEDs indiquant la communication et l’alimentation, ainsi qu’une connectée à une sortie utilisable librement. L’ensemble est cadencé par un quartz accordé à 16 MHz.

L’idée pour rester sur une configuration simple, c’est de profiter de toutes les fonctions de l’Arduino plutôt que de compléter par de composants supplémentaires. C’est donc le logiciel qui devra porter toute la complexité du fonctionnement de la carte. Et il faudra bien toute la puissance de l’Atmel ATmega328P pour y arriver…

Afficheur LEDs 8×8

Commençons par un petit rappel du principe de fonctionnement des LEDs.

Ce composant est un semi-conducteur, une diode, qui émet de la lumière quand elle est traversée par un courant. L’intensité lumineuse est globalement proportionnelle au courant qui la traverse. Elle s’oppose au passage du courant en présentant une tension a peu près constante quelque soit le courant qui la traverse. Cette figure tension/courant s’appelle la fonction de transfert du composant et le caractérise :

Fonction de transfert d’une diode

Vu la pente de la courbe de fonctionnement de la diode, il faut choisir avec soin la tension à appliquer pour qu’elle brille sans se détruire. Il faut aussi éviter de la faire fonctionner dans la zone de tension inverse. Pour assurer une alimentation correcte on utilise habituellement des “drivers” chargés de s’assurer que la diode fonctionne dans sa zone de sécurité. Mais ici, nous ne mettrons pas en œuvre ce type de composant. On va utiliser une autre méthode, moins conventionnelle mais qui suffira dans le cas présent.

On va utiliser de courtes impulsions électriques, sans autre limitation du courant celles intrinsèques à l’Arduino. En effet, ses broches ne peuvent fournir plus que 20 mA chacune. En utilisant cette limite et en contrôlant la durée des impulsions, on pourra utiliser les diodes en évitant leur surchauffe et leur destruction.

Le composant “1588BS” est une matrice de 64 LEDs rouges branchées en lignes et en colonnes suivant le schéma suivant :

Brochage de la matrice de 64 leds 1588BS

Le principe de fonctionnement est simple, on va multiplexer l’allumage des LEDs, c’est à dire appliquer successivement à chaque ligne (ROW) une tension positive suivant les LEDs à éclairer et en même temps appliquer une tension nulle (zéro) à l’une des colonnes (COL.) à la fois. Ainsi les LEDs sélectionnées seront traversées par un courant qui les fera briller. Si c’est fait assez rapidement, nos yeux ne verront pas ce défilement (> 50 fois / sec).

Rappel : pour qu’un courant circule en électronique « digitale », il faut une source de courant et une « capacité absorption » (source négative, sink en anglais). Il s’agit bien de Sorties, c’est à dire de broches dont on contrôle le courant (entrant ou sortant) en les mettant à l’état Haut ou Bas. A contrario, les Entrées n’ont pas (ou presque) pas cette capacité, elles mesurent simplement la tension qui leur est appliquée, soit Haut, soit Bas.
Voir l’article sur les Entrées et Sorties numériques.

Interrupteurs

Pour interagir avec la carte, il nous faudra aussi quelques interrupteurs de type boutons poussoirs. Afin de limiter le nombre d’E/S nécessaires, on va réutiliser certaines d’entre-elles.

Comme on l’a vu précédemment, les E/S raccordées aux broches (ROW) de l’afficheur, vont passer d’un état Haut à un état Bas successivement, pour chacune d’entre-elles. On peut donc les utiliser pour alimenter un à un les interrupteurs et tester leur état (Ouvert ou Fermé). Si on utilise un schéma typique :

Matrice d’interrupteurs

Fonctionnement : Les sorties D2, D3 et D4 sont par défaut à l’état Haut. L’entrée analogique A6 est proche de 5v puisque la résistance R1 maintient ce potentiel. Si l’un des interrupteur est refermé, rien ne se passe, puisque les sorties sont toutes à l’état Haut (proche de 5v), aucun courant ne va circuler dans les diodes et l’entrée A6 reste dans son état précédent.
Si maintenant la sortie D2, par exemple, passe à l’état Bas et si l’interrupteur S3 reste ouvert, rien ne change. Par contre si l’interrupteur S3 est fermé, la sortie absorbe le courant qui traverse R1 et D3. La tension présente sur l’entrée A6 s’abaisse sensiblement, indiquant la fermeture de l’interrupteur.
Si deux interrupteurs sont pressés en même temps, seul celui dont la sortie correspondante est à l’état Bas est détecté. De plus, les diodes évitent les courts-circuits entre les sorties qui auraient des potentiels différents, car elles ne permettent que le passage du courant entre le Vcc et sa résistance limitatrice et la sortie à un potentiel Bas.

Le même circuit est donc généralisé pour les 6 interrupteurs, 4 formant une croix à gauche et 2 à droite.

Haut-parleur

Ici aussi, la simplicité va aussi conduire nos choix. On va utiliser un type de haut parleur à haute impédance (forte résistance) qui est adapté pour être connecté directement aux sorties de l’Arduino. Il s’agit d’un haut-parleur piézoélectrique qui est formé d’un cristal qui fait vibrer une feuille de métal. Ça n’a pas la qualité d’un haut-parleur à membrane, mais pour notre console c’est suffisant. On lui réservera une sortie spécifique, la D12 qui à l’avantage d’être connectée au Timer 2 (OC2). Cela pourra faciliter sa mise en œuvre.

Schémas

Voici pour conclure quelques schémas du circuit de cette carte.

Schéma électronique
Exemple d’implémentation

Cerise sur le gâteau

Pour assurer l’autonomie de l’alimentation, on peut ajouter un module de rechargement de batterie pour permettre l’alimentation avec un accumulateur Li-Po ou Li-Ion de type 18650.

Il existe alors plusieurs options. J’ai choisi un module TP4056 avec limiteur (protège des sur et de sous-tension de la batterie). Cela ressemble à l’exemple de droite. Il est aussi possible de choisir des modèles sans protection si votre accumulateur en est déjà équipé, voir même des modules intégrant un step-up booster, qui va remonter la tension de sortie de l’accumulateur proche des 3,7v.

Photo du prototype 1.0

Liste de matériel

  • 1 x Arduino Nano V3 avec broches à souder (celles du connecteur ICSP sont trop hautes, il ne faut pas le souder justement) ;
    🛒 
  • 1 x Afficheur LED matriciel 16 broches 8×8 3mm rouge Cathode commune 1588BS ;
  • 6 x boutons poussoir tactiles 6x6x5mm à souder ;
    🛒 
  • 6 x diodes signal 1N4148 ;
    🛒 
  • 1 x Haut-parleur piézoélectrique diam. 22mm ;
    🛒 
  • 6 à 8 x Bobines de fil multi-brins AWG 24 ;
    🛒 
  • 1 x carte veroboard 9x7cm.

En option :

  • 1 x module chargeur de batterie Lithium 3.7v – TP4056 avec protections ;
    🛒 
  • 1 x batterie 18650 avec cosses pour soudure.
    🛒