Mini-écrans

 Les écrans sont partout! Il suffit de se déplacer dans le métro pour constater que même les affiches sont progressivement remplacées par des grands écrans. Idem dans certaines communes où les informations communales et des publicités sont diffusées non-stop. Nous vous proposons de découvrir comment mettre en œuvre de petits écrans pour moderniser les décors de vos réseaux où pour d'autres applications en modélisme.


Les écrans TFT

Le premier modèle, TFT 1.8, que nous allons utiliser est le plus petit mais aussi le plus simple. Il sera associé à un Arduino Uno ou MEGA. L'alimentation est faite par le port USB.

L'écran comporte 8 broches qui sont : 

VCC (5V), GND, CS, RESET, A0, SDA, SCK, LED (3.3V)


Le schéma de câblage est simple. Le voici sous forme de tableau.

TFT        Arduino

SCK             13

SDA            11

RST              8

DC ou A0     9

CS                10

Montage avec Arduino MEGA

Pour miniaturiser votre montage, utilisez un Arduino Nano avec le même câblage :

Montage avec Arduino Nano

Voyons comment faire le petit programme

Le code :

Tout repose sur les deux librairies à télécharger pour l'ILI9341 (TFT et SPI). Pour les fonctions, vous pouvez vous référer aux liens utiles.

Voici le code de ce premier exemple de mise en œuvre avec des drapeaux de pays et un dessin de vélo :

[code]
#include <TFT.h>
#include <SPI.h>

// LCD pinout
#define cs 10
#define dc 9
#define rst 8

//Colors
#define BLACK 0x0000
#define NAVY 0x000F
#define DARKGREEN 0x03E0
#define DARKCYAN 0x03EF
#define MAROON 0x7800
#define PURPLE 0x780F
#define OLIVE 0x7BE0
#define LIGHTGREY 0xC618
#define DARKGREY 0x7BEF
#define BLUE 0x001F
#define GREEN 0x07E0
#define CYAN 0x07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define ORANGE 0xFD20
#define GREENYELLOW 0xAFE5
#define PINK 0xF81F

// create an instance of the library
TFT TFTscreen = TFT(cs, dc, rst);

void setup() {

  //initialize the library
  TFTscreen.begin();

  // clear the screen with a black background
  TFTscreen.background(0, 0, 0);
  //set the text size
  TFTscreen.setTextSize(2);
  // Screen orientation
  //TFTscreen.setRotation(0);
}

void loop() {

  //generate a random color
  int redRandom = random(0, 255);
  int greenRandom = random (0, 255);
  int blueRandom = random (0, 255);
 
  // set a random font color
  TFTscreen.stroke(redRandom, greenRandom, blueRandom);
 
  TFTscreen.text("Velodrome", 4, 10);
  TFTscreen.text("National", 4, 30);
  TFTscreen.text("de Saint", 4, 50);
  TFTscreen.text("Quentin en", 4, 70);
  TFTscreen.text("Yvelines", 4, 90);
  // wait 200 miliseconds until change to next color
  delay(2000);
 
  //draw a cycle
  TFTscreen.background(0,0,0);
  TFTscreen.circle(50,50,20);
  TFTscreen.circle(100,50,20);
  TFTscreen.triangle(60,30,90,30,80,50);
  TFTscreen.line(50,50,60,20);
  TFTscreen.line(100,50,90,30);
  TFTscreen.line(60,20,70,20);
  TFTscreen.rect(85,25,10,5);
  TFTscreen.text("Record ", 30, 70);
  TFTscreen.text("mondial!", 30, 90);
  delay(3000);
 
  // French Flag
  //function draws a filled rectangle in x and y location. w is width, h is height and t is color of the rectangle
  TFTscreen.fillRect(0,0,45,255,BLUE);
  TFTscreen.fillRect(45,0,45,255,WHITE);
  TFTscreen.fillRect(85,0,45,255,RED);
  delay(2000);

  // Belgium Flag
  TFTscreen.fillRect(0,0,45,255,BLACK);
  TFTscreen.fillRect(45,0,45,255,YELLOW);
  TFTscreen.fillRect(85,0,45,255,RED);
  delay(2000);

  // Italian Flag
  TFTscreen.fillRect(0,0,45,255,DARKGREEN);
  TFTscreen.fillRect(45,0,45,255,WHITE);
  TFTscreen.fillRect(85,0,45,255,RED);
  delay(2000);

  // German Flag
  TFTscreen.fillRect(0,0,255,45,BLACK);
  TFTscreen.fillRect(0,45,255,45,RED);
  TFTscreen.fillRect(0,85,255,45,YELLOW);
  delay(2000);

  // Holland Flag
  TFTscreen.fillRect(0,0,255,45,RED);
  TFTscreen.fillRect(0,45,255,45,WHITE);
  TFTscreen.fillRect(0,85,255,45,BLUE);
  delay(2000);

  // Russia Flag
  TFTscreen.fillRect(0,0,255,45,WHITE);
  TFTscreen.fillRect(0,45,255,45,BLUE);
  TFTscreen.fillRect(0,85,255,45,RED);
  delay(2000);

  // Austria Flag
  TFTscreen.fillRect(0,0,255,45,RED);
  TFTscreen.fillRect(0,45,255,45,WHITE);
  TFTscreen.fillRect(0,85,255,45,RED);
  delay(2000);

  // Austria Flag
  TFTscreen.fillRect(0,0,255,255,WHITE);
  TFTscreen.fillCircle(70,70,30,RED);
  delay(2000);

  // Bulgaria Flag
  TFTscreen.fillRect(0,0,255,45,WHITE);
  TFTscreen.fillRect(0,45,255,45,GREEN);
  TFTscreen.fillRect(0,85,255,45,RED);
  delay(2000);

  // light up a single point
  //TFTscreen.point(80,64);
  //delay(500);   
  //erase all figures
  TFTscreen.background(0,0,0);
}
[/code]

 

Une petite vidéo pour illustrer :


Pour voir plus grand :

Pour faire des diffusions sur un écran plus grand, il faut passer au 2.2" SPI TFT Display Module ILI9341 (240x320).   

 

Montage avec Arduino MEGA

Si vous voulez utiliser l'alimentation par le port USB, le schéma de câblage est le suivant:


Montage avec Arduino Nano

Si vous voulez utiliser l'alimentation extérieure 3,3V le schéma de câblage est le suivant:



Vue du montage avec le régulateur de tension 3,3V à gauche

Le code :

Le mieux est d'utiliser l'exemple de la librairie Adafruit ILI9341 qui se nomme graphictest. Pour être en phase avec le câblage que nous proposons, il faut faire l'adaptation suivante au début du programme :

#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"

// For the Adafruit shield, these are the default.
#define TFT_CS 8
#define TFT_RST 9
#define TFT_DC 10
#define TFT_MOSI 11
#define TFT_CLK 13
#define TFT_MISO 12

//Colors
#define BLACK 0x0000
#define NAVY 0x000F
#define DARKGREEN 0x03E0
#define DARKCYAN 0x03EF
#define MAROON 0x7800
#define PURPLE 0x780F
#define OLIVE 0x7BE0
#define LIGHTGREY 0xC618
#define DARKGREY 0x7BEF
#define BLUE 0x001F
#define GREEN 0x07E0
#define CYAN 0x07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define ORANGE 0xFD20
#define GREENYELLOW 0xAFE5
#define PINK 0xF81F

// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
// If using the breakout, change pins as desired
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);

void setup() {
  Serial.begin(9600);
  Serial.println("ILI9341 Test!");

  tft.begin();
  tft.setRotation(1);
  tft.fillScreen(GREEN);


Les images avec une cartes SD :

Il est très difficile d'afficher des images avec un Arduino Uno ou Nano car la mémoire est réduite. Il est possible d'afficher des logos en utilisant des logiciels de conversion de l'image en tableau de données (aux dimensions très réduites).  
Une autre solution consiste à utiliser une carte SD (intégrée au module TFT c'est encore mieux). Attention au câblage ! Surtout n'utilisez pas la solution avec les résistances car les niveaux des signaux d'entrée ne seront pas bon et cela ne fonctionnera pas avec la carte SD. 

Carte SD du TFT

TFT SD  fonction     TFT  SD pin     Arduino

SD_CS                        1                    5

SD_MOSI                    2                    11

SD_MISO                    3                    12

SD_SCK                      4                    13       

A ce stade de nos essais, nous n'avons pas réussi à lire la carte SD (et pourtant elle fonctionne sur le PC)... Encore un mystère à résoudre.


liens utiles :

TFT 1.8 ici

Pour tout savoir sur les fonctions graphiques ici