Un clavier dans un projet arduino

Un clavier dans un projet arduino

J’ai un clavier à 12 touches qui ressemble beaucoup à celui ci, sur amazon.fr. Je fais un essai pour voir si j’arrive à en lire les touches lorsque je le connecte à un arduino Uno.

Identification des broches

keypad pour arduino le clavier présente 10 connecteurs mais il suffit de souder les 8 du milieu.

Ensuite, avec un multimètre réglé sur 2KΩ, on regarde quels fils se connectent lorsqu’on appuie sur une touche.

Numéroter les broches de 1 à 8 : de droite à gauche lorsqu’on voit le clavier.

Le clavier est matriciel : chaque touche correspond à une colonne et une ligne que j’ai numéroté arbitrairement comme dans ce schéma :

clavier matriciel arduino

Pour savoir quelle broche est connectée à quelle colonne ou ligne, il faut déterminer quels sont les associations de broches qui entrent en contact lorsqu’on appuie sur une touche. Ainsi si j’appuie sur 1, en voyant quelles broches entrent en contact, je déterminerai que l’une des deux est « row 1 » et l’autre est « col 1 ».

J’ai déterminé que la broche 7 et la broche 4 sont connectées lorsque j’appuie sur la touche 2. J’ai continué jusqu’à ce que j’ai assez d’informations pour identifier le rôle de chaque broche.

broche broche touche
7 4 2
7 3 5
7 2 8
7 1 0
8 1 *
6 1 #
1 1 D

J’en ai donc déduit que les broches correspondent à :

broche broche
1 Row 4
2 Row 3
3 Row  2
4 Row 1
5 Col 4
6 Col 3
7 Col 2
8 Col 1

Connexion à l’Arduino

test arduino et keypad

broche broche arduino
1 Row 4 8
2 Row 3 9
3 Row  2 10
4 Row 1 11
5 Col 4 4
6 Col 3 5
7 Col 2 6
8 Col 1 7

Sketch

La bibliothèque keypad.h permet de gérer facilement un tel clavier matriciel. Voir cet article sur Arduino Playground.

Ce sketch lit correctement chaque touche appuyée et l’affiche dans la console série :

#include <Keypad.h>

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {11, 10, 9, 8}; //rows 1 to 4
byte colPins[COLS] = {7, 6, 5, 4}; //columns 4 to 1

//initialize an instance of class NewKeypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); 

void setup(){
  Serial.begin(9600);
  Serial.println("Setup done");
}

Si j’appuie sur les touches 1, 2, 3, A, 4, 5, 6, B, 7, 8, 9, C, *, 0, # puis D, j’obtiens l’affichage suivant dans la console série.

Setup done
key : 1
key : 2
key : 3
key : A
key : 4
key : 5
key : 6
key : B
key : 7
key : 8
key : 9
key : C
key : *
key : 0
key : #
key : D

Tout fonctionne donc parfaitement.

Et maintenant ?

Si j’ai besoin d’utiliser un tel clavier sur un arduino, je sais maintenant comment faire !

essai de trois afficheurs LCD sur arduino Uno

essai de trois afficheurs LCD sur arduino Uno

Un collègue du FabLab de Quimper m’a prêté deux afficheurs LCD jamais utilisés. Ils devraient en principe fonctionner avec un arduino. J’essaie donc !

Les trois afficheurs

Deux afficheurs prêtés :

L’un comporte les indications suivantes : CLCD sur le contrôleur et GDM1604B sur l’afficheur. Il ressemble à ce produit de Lextronic (35.15 €), avec une fiche technique (pdf) et un manuel utilisateur chez ComFile.

L’autre : ALCD sur le contrôleur et PMC 2004E-SBLW ou PC-2004E6-2 Rev 1 sur l’afficheur. Il paraît correspondre à cet afficheur 2 x 16 caractères de Lextronic (27.5 €).

Les deux produits semblent conçus par Comfile pour les microcontrôleurs PicBasic. Je ne parviens pas à trouver d’information intéressante sur la façon de les connecter à un arduino et surtout de les commander via les contrôleurs.

Je décide donc d’utiliser un des afficheurs sans son contrôleur pour voir ce que l’on peut en faire.

Afficheurs achetés

J’ai également acheté un jeu de 5 afficheurs LCD très économiques : Ecrans LCD 16×2 HD44780 Controleur Retro-eclairage Bleu, sur amazon.fr, à 7.24 € les 5 (oui, les 5…)

Description d’un afficheur LCD

J’ai déconnecté le contrôleur ALCD de l’afficheur PMC 2004E-SBLW. Je me retrouve avec un afficheur pourvu de 16 broches males, numérotées de 1 à 16.

La page « Arduino – Hello World » indique que de nombreux afficheurs LCD à 16 broches sont compatibles avec le driver Hitachi HD44780 (ce qui est annoncé pour l’afficheur acheté, pas pour les deux prêtés). Un autre article sur codingcolor.com montre en photo les connecteurs.

Et l’afficheur acheté séparément contient aussi 16 broches.

Connexion des 16 broches de l’afficheur LCD

Pendant un bout de temps, les trois afficheurs affichent des carrés foncés mais pas le texte prévu… J’ai fini par me rendre compte que j’avais connecté DB11 à DB14 de l’afficheur sur les broches 4 à 1 de l’arduino et non 5 à 2….

Note : on peut remplacer le potentiomètre par un fil entre GND et la broche 3 de l’afficheur avec une résistance de 1 à 1.5 kΩ. Avec mon afficheur j’ai mis une résistance de 1 KΩ et l’affichage est très bien. 

Connexions à l’arduino

afficheur fonction arduino
1 VSS GND
2 VDD 5V
3 contraste potentiomètre
4 RS (register select) D12
5 R/W Read / Write GND
6 H/L enable D11
7 DB0 (data 0)
8 DB1 (data 1)
9 DB2 (data 2)
10 DB3 (data 3)
11 DB4 (data 4) 5
12 DB5 (data 5) 4
13 DB6 (data 6) 3
14 DB7 (data 7) 2
15 LED + (5V) rétro-éclairage 220 Ω puis 5V
16 LED – (GND) Résistance 220 ohm

schéma (frietzing)

Cablage Arduino Afficheur LCD

Sketch arduino (issu d’un exemple) : test-lcd-display-yves.ino

Et le résultat, pour les 3 afficheurs, avec le même sketch. La seule chose qu’il faut régler c’est le contraste avec le potentiomètre.

Mon afficheur LCD pas cher afficheur lcd prêté n°1 afficheur lcd prêté n°2

Et on voit que les deux derniers afficheurs sont faits pour 4 lignes, il faudrait modifier le sketch pour en tirer partie.

Affichage 7 segments pas cher sur arduino

Affichage 7 segments pas cher sur arduino

Après l’essai d’un afficheur 7 segments prêté par un collègue du FabLab de Quimper, j’ai acheté un afficheur vraiment pas cher (2.64€ livraison comprise) et je l’essaie.

L’afficheur 7 segments essayé

Il s’agit d’un afficheur de marque Toogoo, à 8 chiffres, avec un circuit intégré MAX7219 , disponible ici sur Amazon.fr pour 2.64 €.  

Mon objectif

Il s’agit simplement de vérifier que je sais le connecter à un arduino Uno puis vérifier que je parviens à afficher quelque chose avec. Je n’en ai pas encore l’utilité.

Connexion à l’arduino

Après lecture de quelques pages web, dont celle-ci (en anglais, tronixstuff), j’ai compris à quoi servaient les deux jeux de 5 connecteurs présents sur l’afficheur :

Description de l'afficheur 8 chiffres 7 segments avec circuit max 7219

Du côté gauche, on trouve les connecteurs qui seront reliés à l’arduino. Du côté droit, on trouve les broches qui permettent de relier d’autres afficheurs identiques en série.

Le circuit MAX 7219 gère jusqu’à 64 leds (soit 8 chiffres de 8 leds chacun avec le point). On peut chainer les afficheurs pour en mettre deux ou trois à la suite.

Pour cet essai, je ne connecte qu’un afficheur de 8 chiffres. J’utilise donc la sortie 5V de l’arduino pour l’alimenter. Mais attention, il est possible que ça ne soit pas faisable s’il y avait plus d’un afficheur, chaque led consommant environ 15 mA (pour du rouge).

Voici les connexions que je réalise :

afficheur arduino
VCC 5V
GND GND
D IN 2
CS 3
CLK 4

Programmation de l’afficheur

On utilisera la librairie ledcontrol, téléchargeable sur GitHub, pour les MAX 7219 ou 7221. Pour installer une librairie dans un arduino, voir cet article.

Utilisation de la librairie : cf cette page du site arduino.

Puis j’utilise un sketch exemple de cette librairie (LCDemo7segment). Je modifie simplement les broches utilisées (2, 4 et 3 au lieu de 12, 11 et 10) et ça fonctionne.

Le sketch utilisé : Max7219-7Segment.ino

Le résultat

led-7-segments-max-7219-resultat

Et maintenant ?

Je vais utiliser cet afficheur sur le NoRobo prochainement !

librairies arduino : comment les installer ?

librairies arduino : comment les installer ?

Les librairies (bibliothèques en bon français) sont du code qui simplifie l’utilisation d’un capteur, d’une fonctionnalité. Elles sont chargées dans l’arduino si nécessaire. Nous allons voir ici comment faire concrètement pour les charger.

Quand charger une librairie ?

erreur lorsqu'une librairie est manquanteDès qu’un sketch arduino contient une ligne ressemblant à #include « LedControl.h » , il appelle une librairie (ici la bibliothèque LedControl). Lors de la compilation préalable à la programmation de l’arduino, l’interface arduino vérifie que la librairie est bien disponible. Si ce n’est pas le cas, un message d’erreur s’affiche et l’arduino ne peut pas recevoir le sketch.

Il est donc nécessaire de mettre la librairie à disposition de l’IDE avant de lancer la compilation.

Comment faire ?

utilisation du gestionnaire de librairies

Le gestionnaire de librairies permet d’afficher la liste des librairies prêtes à l’emploi ou prêtes à installer. Gérer les bibliothèques dans l'interface arduino

Pour plus de précisions, voir ce document arduino.

Importation d’un fichier zip

Si je veux par exemple ajouter la librairie LedControl disponible ici sur GitHub, je clique sur le bouton vert « Clone or download » (1) puis sur « Download ZIP » (2) :

github : download a zip file

J’obtiens un fichier nommé « LedControl-master.zip ». J’ai deux possibilités : par l’interface arduino ou par l’ajout manuel d’un répertoire.

méthode par l’interface arduino

La plus simple est d’utiliser la fonctionnalité ‘ajouter la bibliothèque zip » de l’interface arduino.

Ajouter une librairie ZIP dans l'interface arduino

Je clique sur « ajouter la bibliothèque ZIP » puis je choisis le fichier LedControl-master.zip que j’ai téléchargé précédemment. La bibliothèque s’installe et devient visible dans le gestionnaire de bibliothèques.

méthode manuelle

Dans certains cas la bibliothèque contient de nombreuses versions et je ne veux pas toutes les installer. Par exemple, si je n’ai pas d’arduino Yun, je peux éviter d’encombrer mon ordinateur en l’installant.

Dans ce cas,

  1. fermer l’interface arduino ;
  2. dezipper le fichier téléchargé et y sélectionner le ou les répertoires que je veux réellement installer (Copier).
  3. coller ces répertoires dans le répertoire « user/ Documents\Arduino\libraries »
  4. redémarrer l’interface arduino, la ou les librairies sont maintenant disponibles.

commander des relais 220V avec arduino Nano et bluetooth

commander des relais 220V avec arduino Nano et bluetooth

Commander deux relais 220 V à partir d’un arduino Nano, avec un téléphone android connecté en bluetooth : c’est possible pour moins de 10 €. Voici le tutoriel complet.

Cet article est l’aboutissement d’un travail d’essais et recherches relatés dans des articles précédents :

Maintenant je fais la synthèse pour une réutilisation dans d’autres configurations.

Avant toute chose, RAPPEL : on travaille avec du 220V et les risques sont réels !

Attention Danger électrique

Commander deux relais 220V avec un arduino Nano

Le schéma de connexions :

relais arduino 5V - 220V lampes

Les photos du montage :

J’ai enfermé toutes les connexions 220 V dans une boîte en plastique. L’arduino (puis le module bluetooth) sont à l’extérieur de la boîte.

Le montage sécurisé dans une boîte

Photo du premier essai :

J’ai préféré brancher l’arduino sur une alimentation USB spécifique (pas mon ordinateur) et je me suis installée sur la terrasse. Noter que la boîte en plastique sécurise bien l’installation 220V.

Relais 220V Essai sécurisé

Le sketch arduino :

test-fanch-relais-new.ino, un sketch qui allume une lampe lorsque le signal envoyé par l’arduino est LOW.

Commander par bluetooth et smartphone Android

Le schéma de montage (côté faible tension – le cablage haute tension n’est pas modifié) est le suivant :

Schéma arduino Nano - relais 220V et bluetooth HC-05

Quant au sketch, c’est celui que j’ai utilisé précédemment avec deux relais plus gros, mais il y a une différence essentielle : l’allumage est réalisé lorsque l’arduino envoie un signal LOW et non pas HIGH comme avec les autres relais.

Notre nouvel algorithme est donc légèrement différent :

bool up = true;          // pas d'ordre de montée
bool down = true;        // pas d'ordre de descente

Si up est false ou down est false (il faut bouger le store)

   si up est false ET down est false 
     on a un big problème, le moteur va devenir fou
   sinon
     allumer ou éteindre selon la valeur de up ou de down

Le sketch qui fonctionne est celui ci : Relais-BT-V1-2016-06-05.ino

Le résultat :

Lorsque j’appuie sur le bouton « UP » de mon smartphone,

Le bouton "HAUT" est appuyé

la lampe « UP » s’allume !

La lampe "UP" est allumée

Et si j’allume les deux boutons à la fois, il ne se passe rien, tout comme s’ils sont tous deux éteints. Tout fonctionne donc correctement.

Et maintenant ?

En cas d’utilisation d’un autre modèle de relais, bien vérifier si c’est un signal LOW ou HIGH qui génère l’allumage.

Pour une utilisation définitive, il faudra réaliser un boîtier plus compact et plus sécurisé. On pourra s’inspirer des plans suivants :

On en profitera pour admirer cette belle boîte qui permet de transporter un arduino Uno et un breadboard sur 3dhubs.

Tout est prêt maintenant pour que Fanch puisse mettre son store chez lui en tant que prototype !