Pense-bête électronique avec Arduino

image_pdf

Si comme moi, vous êtes un “jeune”, vous avez certainement fabriqué à l’école (il y a fort longtemps donc !) un pense-bête pour les courses alimentaires ou autre thème. Par nostalgie et parce que maintenant le post-it a remplacé ces anciens objets, je me suis dit qu’un pense-bête électronique avec Arduino pourrait être amusant à faire. Il est vrai que j’avais quelques éléments électroniques sous la main.

Pour ceux qui voient pas ce qu’est un pense-bête d’avant post-it, voici quelques photos

Arduino pense-bête électronique, pense-bête  Arduino pense-bête électronique, pense-bête Arduino pense-bête électronique, pense-bête   Arduino pense-bête électronique, pense-bête

L’idée générale

Avertissement : le câblage est très simple et n’importe qui peut le réaliser, avec quelques précautions d’usage (voir entre autres le chapitre “alimentation électrique”). La partie programmation n’est pas insurmontable mais il est préférable d’avoir quelques notions de la programmation Arduino.

C’est une construction facile, le boîtier est en bois (aggloméré fin) mais vous pouvez très bien utiliser du carton. Je me suis amusé à ajouter un afficheur à matrice de leds (4 blocs 8×5). Le résultat n’est trop catastrophique pour un objet réalisé “a la va très vite” !!

Arduino pense-bête électronique, exemple

Voici la liste du matériel :
–  Bois ou carton pour le boîtier (récupération).
– Plastique, récupération de l’emballage de recharge de produit de lessive par exemple, écriture/effacement du marqueur.
– De la colle chaude et à bois, ce que vous voulez mais cela doit coller.
– Peinture pour un peu de couleur.
– Câble électrique pour secteur avec prise (récupération).
– Alimentation 230V-5V deux possibilités, voir plus loin.
– Leds de couleurs (ou pas) 7x au minimum, moi j’ai mis 3 leds par jour pour le fun.
– Résistance (une par leds), voir plus loin.
– Afficheur matrice de leds 8×32 (de 6 à 10$), voir plus loin.
– Arduino Duemilanove, Uno, Mega ou Nano, voir plus loin.
– Un circuit pour le temps, le Tiny RTC I2C par exemple (de 1 à 2.50$), voir plus loin.
– Du fil électrique pour les liaisons 5V.

 

Arduino pense-bête électronique, matrice de leds     Arduino pense-bête électronique, leds hebdomadaires

 

Quelques vues de l’intérieur, indulgence car c’est du bricolage, mais bon j’assume !!

Arduino pense-bête électronique, lenvers du décor ! Arduino pense-bête électronique, leds hebdomadaires Arduino pense-bête électronique, alimentation 5VArduino pense-bête électronique, Arduino et la matrice de leds Arduino pense-bête électronique, Tiny RTC

Alimentation électrique

Pour l’alimentation en courant de votre installation vous avez deux chemins possibles, soit vous intégrez le 230V dans votre appareil, mais dans ce cas faites attention qu’un accident ne soit pas possible (exemple la chute de l’objet et les fils qui deviennent apparents !) ou bien vous prenez une alimentation certifiée et vous ne travaillez qu’avec de la basse tension, à vous de voir. Remarquez que vous devez toujours vous poser cette question lors de vos constructions : alimentation interne ou externe.

Alimentation externe :

Arduino pense-bête électronique, alimentation 230VArduino pense-bête électronique, connecteursUn bloc secteur avec sortie 5V mini 600mA avec connecteur type jack (de 2.5 à 4$). Les deux très grands avantages de ce type d’alimentation est la sécurité et pas de câble attaché en permanence à l’objet.

La sécurité : j’espère pour que vous optiez pour ce type d’alimentation pour votre sécurité et celle de vos proches

Alimentation interne :

Arduino pense-bête électronique, buck converter

AC-DC 5V 700mA 3.5W Precision Buck Converter (de 1 à 2$) (c’est mon choix).

L’avantage de ce type d’alimentation est le prix et l’absence de connecteur. Par contre il faut être conscient que l’on amène du courant électrique dangereux dans l’objet construit. Ne pas oublier : un pense-bête est souvent approché, manipulé, on écrit dessus, on efface, etc .. Il y a donc de grands risques de chute par exemple, et il faut que votre pense-bête y résistera.

Donc pour résumé ma pensée : NE FAITES PAS COMME MOI ! Choisissez la technique de l’alimentation externe.

Arduino et les leds hebdommadaires

Pour plus de détails sur les déclarations des entrées/sorties, voir l’article sur les IO de l’Arduino.

J’ai utilisé les connecteurs de 2 à 8 configurés en sorties pour le traitement des leds. Le branchement est simple et ne pose pas de difficultés. Pour rappel tout de même, une led est alimentée en courant et non en tension. De plus ce courant dépend  de la couleur de la led. Pour une led rouge par exemple choisir une résistance de 220 Ω sous 5V. Quelques sites pour plus d’informations : site 1, site 2, site 3.

Arduino pense-bête électronique, câblage leds hebdomadaires

Ces leds sont pilotées dans le programme par l’instruction standard : “digitalWrite( Jp[i] , HIGH/LOW);”.  Avec Jp[i] (i = 2 à 8) comme numéro du connecteur (borne, pin) piloté.

Remarquez que 3 leds par connecteur Arduino, ce n’est pas très raisonnable, car c’est environ 60mA par sortie, et cela dépasse les “recommandations Arduino” max 20mA par sortie ! 🙄

Arduino et  l’heure courante

Arduino pense-bête électronique, Arduino UNO

En photo des “Arduino Uno”, et on peut même choisir la couleur ! Le prix variant suivant l’approvisionnement et le type d’Arduino , comptez de 2 à 4$ pour du “chinois” et beaucoup plus pour l’Arduino Méga, mais je vous le déconseille car il est disproportionné pour l’application présentée.

L’Arduino est un système à microcontrôleur qui n’a pas de base de temps absolu comme votre smartphone ou bien votre ordinateur. Pour des calculs de temps relativement court pas de problème, bien que cela dépendra de la précision souhaitée. Par contre pour garder un affichage d’heure/minutes relativement acceptable sur plusieurs semaines, il est nécessaire de lui adjoindre un circuit dédié. C’est pourquoi à l’Arduino (Duemilanove pour moi), mais c’est pareil pour l’Arduino Uno ou Nano, je lui ai adjoint un circuit TinyRTC I2C.

Pourquoi une carte Tiny RTC I2C ?

Arduino pense-bête électronique, Tiny RTC

En fait : j’en avais une !! Malgré ce choix quelque peu arbitraire, voyons comment faire dialoguer la carte Tiny et l’Arduino. L’idée c’est d’utiliser une horloge temps réel avec un chip DS1307, ce qui veut dire que toute carte avec ce chip pourra en principe faire l’affaire. Vous avez une quantité incroyable de vidéos, de tutoriels et de sites qui traitent de cette intégration.

Voici néanmoins quelques liens :
– En anglais, mais court et concis : Henry’s bench
– Carnet du maker : module horloge
– Vidéo avec un Arduino Mega, mais c’est pareil (à quelques numéros de pins près). tiny RTC
– Petite astuce qui peut (non obligatoire) vous rendre service : mise à jour de l’heure d’une Tiny

Le bus I2C

Quelques mots sur le I2C, c’est un bus type sériel beaucoup implémenté dans les divers capteurs que l’on trouve sur le marché. C’est un ancien bus (pour l’informatique) début 1980 actuellement c’est la version 4 de 2014 qui d’actualité. Il est basé sur 3 fils dont un est la référence (la masse), un est le signal de données (SDA), un signal de synchronisation (SCL). Dans le monde Arduino ce bus est largement utilisé car le pilote de ce bus est inclus dans l’IDE Arduino, c’est la librairie “wire.h”, nous y reviendrons plus bas. Pour plus de renseignements comment interfacer des modules I2C avec un Arduino je vous conseille le site “Locoduino” ou “developpez.com

Pour ne pas trop alourdir ce texte, je vous indique uniquement le schéma branchement de la carte et rendez-vous dans le code pour suivre son utilisation.

Arduino pense-bête électronique, câblage Tiny RTC

La matrice de leds 8×32 mono-couleur

Arduino pense-bête électronique, matrice de leds 8x32

Donc comme indiqué précédemment, ce n’est pas un choix directement pour ce projet, mais cela découle d’une récupération de matériel. Le prix d’un tel matériel étant faible je me suis dit pourquoi pas ajouter une touche plus “high-tech” 😆

Pour piloter ce type de matériel, un ensemble de 4 matrices de leds 8×32 avec le chip MAX7219, vous trouverez, comme pour la base de temps, de multiples tutoriels et exemples sur la toile. Il est à noter que vous pouvez vous procurer également des ensembles de leds 8×32 avec un chip HT1632C. Donc vérifiez le type de chip que vous avez avant de brancher quoique ce soit. Ci-dessous quelques sites si vous voulez voir d’autres approches ou pour des compléments d’informations :
Si vous avez un chip MAX7219 :
– Les “fabriqueurs” avec un exemple assez complet
– Un tutoriel plus orienté sur un bloc 8×5 avec MAX7219
– Comment piloter une matrice de leds rudimentaire.
– De “l’ennemi” (je plaisante bien sûr 😛 ), un exemple semblable à mon application
Video, comment programmer une matrice de led (8’56)
Video, comment programmer une matrice de led 8×8 (10’46)

Si vous avez un chip HT1632C :
– Un exemple de câblage et programme
– Les caractéristiques du HT1632C
– Petit exemple de liaison avec ce chip.

Tout ce qui suit est basé sur un chip MAX7219

Câblage Arduino-matrice de leds :

C’est relativement trivial, peu de fils, la difficulté est en fait sur le programme.

Arduino pense-bête électronique, câblage matrice de leds 8x32

Principe du programme

C’est là que les difficultés et les espoirs de quelques choses de vraiment super s’estompent 😕 . Il faut comprendre que ce sont en fait 4 blocs juxtaposés de 8×5 leds pilotés chacun par un MAX7219. Je ne vous décortiquerais pas ce chip mais les liens donnés ci-dessus pourront vous aiguiller.

Arduino pense-bête électronique, organigramme programme

Vous avez l’entier du programme Arduino avec les fichiers bibliothèques non standards sont dans le fichier compressé téléchargeable .

La première partie du programme est relativement standard, on déclare les bibliothèques nécessaires au fonctionnement du logiciel et du matériel, dans notre cas 5 fichiers en tout.

#include <Wire.h>    //pour le pilotage du bus I2C
#include "RTClib.h"  //pour le dialogue avec la carte TinyRTC
#include <MD_MAXPanel.h>  //pour le pilotage de la matrice de leds

//fichier police de caractères spécifiques pour l'application
//mélange de Français et de Thailandais
#include "Font8x5.h"  //Définition de caractères en 8 leds de haut et 5 leds de large
#include "Font5x3.h"  //Définition de caractères en 5 leds de haut et 3 leds de large <span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1">​</span>

Ensuite la définition des entrées-sorties ainsi que les variables globales du programme, je vous laisse lire les commentaires du programme.

//pour la liaison avec la matrice de led
const uint8_t CLK_PIN = 13;   // CLK
const uint8_t DATA_PIN = 11;  // DIN
const uint8_t CS_PIN = 10;    // CS
..........
//Variables pour l'affichage
const MD_MAX72XX::moduleType_t HARDWARE_TYPE = MD_MAX72XX::GENERIC_HW;
const uint8_t X_DEVICES = 1; //nombre de bloc 8x8 vertical
const uint8_t Y_DEVICES = 4; //nombre de bloc 8x8 horizontal rotation de 270° pour les caractères
MD_MAXPanel mp = MD_MAXPanel(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, X_DEVICES, Y_DEVICES);

Quelques remarques sur les variables pour l’affichage par la matrice de leds. Dans mon cas, la variable “mp” sera donc la matrice de leds et c’est par son intermédiaire que l’on pilote la matrice de leds. La bibliothèque (MD_MAXPanel.h) disponible sur le github “MajicDesigns”  que je vous conseille de visiter, permet de piloter diverses configurations de matrice de leds, c’est pour cela que l’on doit définir diverses variables définissant votre matériel à la création de “mp”.

L’affichage de la matrice de leds est composée de 3 parties.
 1.- transition (), l’idée de cette partie est la gestion du changement d’affichage, comment se comporte la matrice avant et pendant le changement de texte (ou chiffres). Pour l’instant c’est l’affichage de deux points aux extrémités haut-gauche et bas-droit de la matrice de leds.
 2.- textaff(), c’est là que l’on définit la police de caractère de l’affichage
 3.- text(), on affiche la “string st” transmise à l’appel de la fonction. La ligne principale est l’appel de la fonction :
mp.drawText(  mp.getXMax()-h,mp.getYMax()-d,    st.c_str(),    MD_MAXPanel::ROT_270);

Quelques explications de cet appel : drawText() est une fonction de MD_MAXPanel.h, on fixe la position X et Y du départ (get..Max) de l’écriture ainsi que l’éventuelle rotation du caractère à écrire, ceci dépend de la configuration physique des modules d’affichage. (Voir la documentation de MD_MAXPanel)

Voilà c’est fini, à vous de jouer !

Conclusion

Un “joli résultat” (mais oui, mais oui 😛 ) très design qui utilise un peu de matériel de récupération, c’est ce qui fait son charme en fin de compte.

D’un autre côté, le système est précis et fiable alors ….. que demande le peuple !