vendredi 7 décembre 2018

Présentation d'une mesure analogique sur écran Nokia 5110 (Arduino)

Après avoir exploré les différentes possibilités offertes par les bibliothèques PCD8544 et GFX d'Adafruit pour piloter un écran Nokia 5110 avec un Arduino, nous pouvons maintenant mettre en pratique nos connaissances afin de produire une application spécifique: l'affichage de la tension reçue à une des entrées analogiques de l'Arduino sous la forme d'un nombre ainsi que d'une jauge linéaire.


(Dans cet autre article, le sketch a été adapté pour un écran OLED SH1106 I2C).

Montage

L'écran Nokia est branché à l'Arduino de la même façon que dans mon article précédent (je vous invite à vous y référer pour plus de détails).  Un circuit intégré 4050 est utilisé pour abaisser à 3,3 V les signaux logiques produits par les sorties de l'Arduino, afin de respecter la fiche technique du contrôleur PCD8544.

En résumé:

  • La broche SCE de l'afficheur reçoit le signal provenant de la broche 4 de l'Arduino
  • La broche RST de l'afficheur reçoit le signal provenant de la broche 3 de l'Arduino
  • La broche D/C de l'afficheur reçoit le signal de la broche 5 de l'Arduino
  • La broche DN/MOSI de l'afficheur reçoit le signal de la broche 11 de l'Arduino
  • La broche SCLK de l'afficheur reçoit le signal de la broche 13 de l'Arduino
Pour effectuer mes tests, j'ai utilisé un potentiomètre afin de faire varier la tension appliquée à l'entrée A0 de l'Arduino. Bien entendu, vous pouvez remplacer le potentiomètre par tout autre capteur analogique (photorésistance, thermistance, etc.).  De plus, à la condition de modifier le sketch, vous pouvez remplacer le capteur analogique par un capteur numérique.



Sketch

Le sketch est plutôt simple.  À intervalles réguliers, la valeur de l'entrée analogique A0 est mesurée grâce à la fonction analogRead().

Cette valeur, qui peut varier entre 0 et 1023, est ensuite convertie en volts au moyen de la fonction map().  Vous pourrez facilement modifier le sketch si vous désirez afficher la valeur brute entre 0 et 1023, ou si vous voulez la transformer afin d'afficher autre chose qu'une tension en volts.

De plus, une jauge linéaire montre le résultat de façon graphique (il s'agit d'un mince rectangle dont la longueur horizontale est proportionnelle à la valeur mesurée).

Pour que le sketch fonctionne, il faut  avoir préalablement installé les bibliothèques Adafruit-PCD8544-Nokia-5110-LCD-library et Adafruit-GFX-Library dans votre IDE Arduino.


/*****************************************************
Affichage d'une mesure analogique sur un écran Nokia
(Arduino)
Instructions complètes:
http://electroniqueamateur.blogspot.com/2018/12/presentation-dune-mesure-analogique-sur.html
*****************************************************/
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(5, 4, 3);
void setup() {
display.begin();
display.setContrast(60); // la valeur optimale dépend de votre écran (pourrait être 40)
display.clearDisplay();
}
void loop() {
int valeur;
// mesure de la tension à l'entrée A0
valeur = map(analogRead(A0), 0, 1023, 0, 500);
// on écrit "tension", en petits caractères, centré en haut de l'écran:
display.setCursor(15, 5);
display.setTextSize(1);
display.println("Tension:");
// on écrit la valeur numérique de la tension un peu plus bas, en plus gros
display.setCursor(5, 15);
display.setTextSize(2);
display.print(valeur/100); // partie entière
display.print(","); // virgule
if ((valeur % 100) < 10){
display.print("0");
}
display.print(valeur % 100); // partie décimale, après la virgules
display.println(" V"); // unités de mesure
// enveloppe de la jauge rectangulaire
display.fillRect( 4, 35, 80, 10, WHITE);
display.drawRect( 4, 35, 80, 10, BLACK);
// partie mobile de la jauge rectangulaire
display.fillRect( 6, 37, map(valeur, 0, 500, 0, 76), 6, BLACK);
display.display();
delay(500);
display.clearDisplay();
}
view raw jauge_nokia.ino hosted with ❤ by GitHub

Vidéo

Pour terminer, voici une vidéo du montage en action.



Yves Pelletier
   (TwitterFacebook)


Aucun commentaire:

Enregistrer un commentaire