Utilisation d’un écran 4D Systems : réalisation d’une commande de chauffage basée sur Arduino

Aujourd’hui, nous allons réaliser une commande de chauffage avec un afficheur 4D Systems, une carte Arduino, un capteur de température et un relais.

Matériel pour la réalisation :

Nous aurons besoin du matériel suivant :

4dsys_mat
4dsys_mat2
RVB de base

* le Shield n’est pas livré avec le 35-DCT-CLB, mais d’autres modèles d’écran comportent le Shield (exemple : le 70-DCT-CLB-AR), soyez donc vigilent lors de l’achat

Préambule

Les afficheurs 4D Systems sont équipés de leur propre microcontrôleur. Ce qui signifie qu’en plus de la programmation sous Arduino, il faut programmer indépendamment l’afficheur. C’est l’avantage principal des afficheurs 4D Systems, ils offrent de nombreuses possibilités graphiques qui seraient impossibles avec simplement une carte Arduino.

Il y aura donc deux phases de programmation.

Nous allons suivre la procédure suivante :

  • Étape 1 : Programmation de l’afficheur
  • Étape 2 : Programmation de la carte Arduino
  • Étape 3 : Raccordement et test de l’ensemble

Étape 1 : Programmation de l’afficheur

Pour programmer l’afficheur, il vous faudra installer le logiciel constructeur.
[NB : pour les utilisateurs de Linux et MacOS, le constructeur préconise d’avoir une machine virtuelle Windows avec VirtualBox]

Vous devez brancher l’afficheur à l’adaptateur micro-USB afin de le raccorder à votre ordinateur. Lors du premier branchement à votre ordinateur, assurez-vous que le driver constructeur est bien installé afin de pouvoir l’utiliser. Si ce n’est pas le cas, installez-le driver vous-même.

Les branchements des nappes se fait avec la bande bleue vers le bas (voir photo ci-dessous).

4dsys_link

Nous allons programmer l’afficheur de sorte qu’il affiche :

  • 3 boutons pour déterminer le mode de chauffage (ON / OFF / AUTO)
  • un message affichant le mode de chauffage actif
  • un curseur
  • la température de consigne (choisie par le curseur)
  • la température ambiante (captée par le DS18B20)

Présentation du logiciel

Le programme prêt à l’emploi est disponible ici. Si vous voulez réaliser ce programme vous-même, voici la procédure :

Au lancement du logiciel, cliquez sur New et choisissez le modèle 35-DTC-CLB. Choisissez ensuite Visi Genie. Il s’agit de l’interface la plus simple pour programmer l’afficheur (sans lignes de code, à la différence des autres interfaces).

Dans l’onglet Project, en cliquant sur le modèle de l’afficheur, vous pouvez choisir son orientation (ici : horizontale)

4dsys_hzt

Dans l’onglet Home, vous trouverez, dans les sections Buttons, Digits, Inputs et Labels, les éléments graphiques nécessaires.

4dsys_onglets
  • Pour le curseur, dans la partie Events à la ligne OnChanging, choisissez Report Message
  • Pour tous les boutons, dans la partie Events à la ligne OnChanged, choisissez Report Message

Cela va permettre à l’afficheur d’envoyer à la carte Arduino tous les changements d’états effectués avec ces éléments.

4dsys_event

Si vous voulez connaître toutes les possibilités disponibles, référez-vous au tutoriel constructeur (en anglais).

Téléversement

Cliquez sur Open et choisissez le fichier téléchargé.

Retirez la carte micro-SD de l’afficheur et connectez-la à votre ordinateur. Raccordez l’afficheur en USB à votre ordinateur.

Dans l’onglet Home, cliquez sur Build Copy/Load, sélectionnez le port où est connectée la carte micro-SD puis cliquez sur Ok.

Vous pouvez réinsérer la carte micro-SD.

Alimentez l’afficheur, il devrait ressembler à ceci (en concordance avec le logiciel) :

4dsys_screen2

Étape 2 : Programmation de la carte Arduino

Téléchargez et installez le logiciel Arduino adéquat à votre système d’exploitation.

Téléchargez les bibliothèques de l’afficheur et du capteur de température.

Pour installer les bibliothèques, lancez le logiciel Arduino, dans l’onglet Croquis puis dans Inclure une bibliothèque, cliquez sur Ajouter la bibliothèque .ZIP et sélectionnez les bibliothèques téléchargées.

arduino_1

Programme :

La carte Arduino va récupérer :

  • la température du capteur
  • la valeur de la consigne
  • l’état des boutons

et va transmettre :

  • la température ambiante captée à l’afficheur
  • le message affichant le bouton appuyé à l’afficheur
  • le signal d’enclenchement au relais

Télécharger le programme Arduino ici.

#include <genieArduino.h>
#include <OneWire.h>

Genie genie;
#define RESETLINE 4

int b, mode;
int slider_val;
const int chauf = 8; //on connecte le relais à l’entrée numérique 8

const int temp = 12; //on connecte le capteur de température à l’entrée numérique 12
OneWire Capt_temp(temp);

void setup() {
  genie.Begin(Serial);

  genie.AttachEventHandler(myGenieEventHandler);

  pinMode(RESETLINE, OUTPUT);
  digitalWrite(RESETLINE, 1);
  delay(100);
  digitalWrite(RESETLINE, 0);
  delay (3500);

  genie.WriteContrast(15);

  pinMode(chauf, OUTPUT);
  genie.WriteStr(0, “MODE OFF”);
  genie.WriteObject(GENIE_OBJ_LED_DIGITS, 1, 10);
  mode = 1;
  slider_val = 10;
}

void loop() {
  int temperature = getTemp();
  genie.WriteObject(GENIE_OBJ_LED_DIGITS, 0, temperature); //on affiche la température ambiante captée

  while (b < 1000) {
    genie.DoEvents();  //TEMPO
    b++;
    delay(1);
  }
  b = 0;

  if (mode == 0) {
    digitalWrite(chauf, HIGH);  //bouton ON >> chauffage ON >> relais à l’état haut #com1
  }

  if (mode == 1) {
    digitalWrite(chauf, LOW);  //bouton OFF >> chauffage OFF >> relais à l’état bas #com2
  }

  if (mode == 2) { //boutton AUTO
    //la température est inférieur à la consigne (hystérésis de 1)
    if (temperature < slider_val – 1) {
      digitalWrite(chauf, HIGH);  //chauffage ON >> #com1
    }

    //la température est supérieur à la consigne (hystérésis de 1)
    if (temperature > slider_val + 1) {
      digitalWrite(chauf, LOW);  //chauffage OFF >> #com2
    }
  }
}

void myGenieEventHandler(void) {

  genieFrame Event;
  genie.DequeueEvent(&Event);

  bool button0_state = false;  bool button1_state = false;  bool button2_state = false;

  if (Event.reportObject.cmd == GENIE_REPORT_EVENT) //on capte les informations envoyées par l’Afficheur
  {

    if (Event.reportObject.object == GENIE_OBJ_4DBUTTON) //on capte l’état des boutons
    {

      if (Event.reportObject.index == 0) //on capte l’état du bouton d’index 0 (ON)
      { button0_state = genie.GetEventData(&Event);
        if (button0_state == true) {
          genie.WriteStr(0, “MODE ON”); /* on actualise le texte annonciateur du bouton appuyé #com3 */ mode = 0; /* com#1 */
        }

      }

      if (Event.reportObject.index == 1) //on capte l’état du bouton d’index 1 (OFF)
      { button1_state = genie.GetEventData(&Event);
        if (button1_state == true) {
          genie.WriteStr(0, “MODE OFF”); /* #com3 */ mode = 1; /* #com2 */
        }

      }

      if (Event.reportObject.index == 2) //on capte l’état du bouton d’index 2 (AUTO)
      { button2_state = genie.GetEventData(&Event);
        if (button2_state == true)
        {
          genie.WriteStr(0, “MODE AUTO”); /* #com3 */ mode = 2; /* chauffage AUTO */
        }

      }
    }

    if (Event.reportObject.object == GENIE_OBJ_SLIDER) //on capte l’état du slider
    { if (Event.reportObject.index == 0)
      { slider_val = genie.GetEventData(&Event) + 10; //on sauvegarde la valeur du slider +10 d’offset
        genie.WriteObject(GENIE_OBJ_LED_DIGITS, 1, slider_val); //on affiche cette valeur au texte de consigne
      }
    }
  }
}

int getTemp() { //calcul de la température [programme constructeur]

  byte data[12];
  byte addr[8];

  if ( !Capt_temp.search(addr)) {
    Capt_temp.reset_search();
  }

  Capt_temp.reset();
  Capt_temp.select(addr);
  Capt_temp.write(0x44, 1);

  byte present = Capt_temp.reset();
  Capt_temp.select(addr);
  Capt_temp.write(0xBE);

  for (int i = 0; i < 9; i++) {
    data[i] = Capt_temp.read();
  }

  Capt_temp.reset_search();

  byte MSB = data[1];
  byte LSB = data[0];

  int Vtemp = ((MSB << 8) | LSB);
  int Temp = Vtemp / 16;

  return Temp;

}

Téléversement

L’afficheur ne doit pas être relié à la carte Arduino lors du téléversement !

Connectez en USB votre carte Arduino à votre ordinateur. Dans l’onglet Outils, puis dans Port, sélectionnez le port disponible (il doit s’appeler « COMX Arduino/Genuino Uno » où X est un chiffre). Cliquez sur l’icone en forme de flèche pour téléverser votre programme (voir photo ci-dessous).

téléverser

Étape 3 : Raccordement et test de l’ensemble

Pour connecter la carte Arduino à l’afficheur, vous devez insérer le Shield 4D System sur la carte Arduino. Reliez ensuite le Shield 4D System à la carte interface livrée avec l’afficheur. Enfin, reliez la carte interface à l’afficheur (voir photo ci-dessous).

4dsys_montage1_0

Reliez le capteur de température à l’entrée numérique 12 et le relais à l’entrée numérique 8 du Shield capteurs (voir photo ci-dessous).

4dsys_montage2_0

Enfin, insérez le Shield capteurs au dessus du Shield 4D System. Votre afficheur est prêt à l’emploi.

4dsys_final

Voici une petite vidéo de démonstration :

1Commentaire
  • Forget Jean-François
    Publié à 15:53h, 27 novembre

    Merci beaucoup à vous pour cet exemple qui permet de mieux comprendre la « philosophie » de fonctionnement des écrans 4D Systems.
    Une restriction importante à connaitre avant de les utiliser, c’est l’impossibilité d’envoyer des variables « Float » vers le processeur de l’écran, seules les « Int » sont reconnues,
    Il faut donc les convertir avant de les envoyer, en suite le point décimal affiché par les « Leddigits » permet une visualisation correcte.
    Sur le site 4D Systems, il existe une multitude d’exemples d’utilisations mais ils sont tous en anglais.
    Cordialement.

Laisser un commentaire