Setup3 - SMARTPLAYER

Le matériel

1 Arduino MEGA 2560 + cable USB

prix : 8 euros

1 Ecran TFT 3.95 (NEW)

Prix  : 6 euros

1 Module Wifi ESP01s

Prix : 1,50 euros

2 Modules RFID MFRC522 135Mhz

Prix unitaire : 1,50 euros

1 batterie 1 port USB -10000mAh

Prix unitaire : 7 euros - probablement insuffisante, compter 10 euros pour une batterie 30 000 mAH

 

colle : 0,20 euro

50 câbles : 1 euro

3*6 broches coudées

2 mini aimants  : 0,25 euros

1 interrupteur On/Off : 0,15 euros

1 connecteur mini usb male : 0,15 euros

1 cable usb : 0,20 euros

1 connecteur femelle USB : 0,15 euros

 

Prix : 3,5 euros ( voir dessin)

Sous Total  : 32 euros


Le montage

23/07/19

On commence par le calibrage de l’écran

Chaque binôme Ecran/Arduino Mega nécessite un calibrage et un ajustement du code car les cases de l’écran n'ont pas une valeur homogène d'un bout à l'autre de l’écran

 

exemple : aspect_kbv.ino

Télécharger
mcufriend- aspect_kbv.ino.pdf
Document Adobe Acrobat 26.5 KB
Télécharger
Touchscreen_calibr_nativ-ino.pdf
Document Adobe Acrobat 113.9 KB

Personnalisation du code a partir du résultat du calibrage

 

résultat du calibrage


cx=383 cy=642 cz=160 LEFT, TOP, Pressure
cx=378 cy=670 cz=160 LEFT, MIDH, Pressure
cx=375 cy=716 cz=160 LEFT, BOT, Pressure
cx=447 cy=522 cz=161 MIDW, TOP, Pressure
cx=431 cy=754 cz=161 MIDW, BOT, Pressure
cx=486 cy=597 cz=161 RT, TOP, Pressure
cx=511 cy=655 cz=160 RT, MIDH, Pressure
cx=504 cy=744 cz=160 RT, BOT, Pressure
MCUFRIEND_kbv ID=0x7793  240 x 400

const int XP=6,XM=A1,YP=A2,YM=7; //240x400 ID=0x7793
const int TS_LEFT=372,TS_RT=505,TS_TOP=583,TS_BOT=741;
PORTRAIT CALIBRATION     240 x 400
x = map(p.x, LEFT=372, RT=505, 0, 240)
y = map(p.y, TOP=583, BOT=741, 0, 400)
Touch Pin Wiring XP=6 XM=A1 YP=A2 YM=7
LANDSCAPE CALIBRATION    400 x 240
x = map(p.y, LEFT=583, RT=741, 0, 400)
y = map(p.x, TOP=505, BOT=372, 0, 240)

 

ancien code du programme SMP

const int TS_LEFT=372,TS_RT=476,TS_TOP=672,TS_BOT=761;

 

nouveau code du programme SMP

const int TS_LEFT=372,TS_RT=505,TS_TOP=583,TS_BOT=741;

 

 

 



Test et dernier ajustement

 

23/07/19

Mettre en commentaire l'appel à "init_connexion_esp01()"

 

/************** Fonction ecran  **************/
int affiche_version()
{.......

 

tft.println("-----------------------------------");
 tft.println("WIFI");
 if (ipaddress=="")
   {
      //premiere connection, attendre 20 secondes
      Serial.println("Please Wait 20 secondes");
      tft.println("Attendez 20 secondes pour l'init Wifi");
      delay(5000);
    }   
// init_connexion_esp01();
 tft.print("Ip addresse : ");
 tft.println(ipaddress);

 

Dans la fonction : bool Touch_getXY(void)

enlever les commentaires pour tp.x et tp.y

 

/identification de la touche
        //redressement des coordonnées
       
       /* pour debuggage **********************/
        //Serial.print("tp.z=");
        //Serial.print(tp.z);
        Serial.print(" tp.x=");
        Serial.print(tp.x);
        Serial.print("  tp.y=");
        Serial.println(tp.y);
       /* *************************************/

 

 

uploader le programme sur l'arduino Mega

Ouvrir le moniteur série.

Pour chaque écran, il faut vérifier que l'appui d'une touche déclenche l'affichage, sinon il faut adapter le code


 23/07/19

on déplace un doigt sur une ligne, de la gauche à la droite

on repère les valeurs min et max sur le moniteur série

 

ensuite on pose le doigts a chaque limite de case pour voir les valeurs min et max pour sélectionner chaque case.

il faut le faire pour toutes les cases car les valeurs vont varier d'une ligne à l'autre

 

une valeur entre le max d'une case et le min de la case suivante ne sera pas "interpretée"

je recommande de laisser 30 à 40 entre chaque case

 

on obtient pour SMP002, le mesures tp.y suivantes

case 1 : de 170 à 280 ( exemple : Fold)

case 2 : de 320 à 450 (check)

case 3 : 485 à 610 (Call)

case 4 : 660 à 780 (Allin)

case 5 : 820 à 940 (vide)

 

On voit que la taille d'une case oscille entre 110 et 135.

pour parvenir a ce résultat, je conseille d'utiliser un papier et d’écrire les valeurs comme la photo ci contre.

 

 

 

on fait les mêmes mesures pour les déplacements verticaux

 

Puis on ajuste le code, d'abord le min et max

 

 if (tp.x<160)  tp.x=160;
        if (tp.x >900) tp.x=900;

        if (tp.y<170)  tp.y=170;
        if (tp.y >940) tp.y=940;

puis les intervalles en commencant par les valeurs de tp.y

5 colonnes

 

        switch (tp.y)
        {
          case 170 ... 280 : col=0;
                         switch (ligne_temp)
                        {
                         case 0 ... 3 : ligne=0;break;
                         case 5 ... 7 : ligne=1;break;
                         case 9 ... 11 : ligne=2;break;
                         case 12 ... 18 : ligne=3;break;
                        }
                        break;
          case 320 ... 450 : col=1;
                         switch (ligne_temp)
                        {
                         case 0 ... 5 : ligne=0;break;
                         case 6 ... 8 : ligne=1;break;
                         case 10 ... 11 : ligne=2;break;
                         case 12 ... 18 : ligne=3;break;
                        }
                        break;
          case 490 ... 610 : col=2;
                         switch (ligne_temp)
                        {
                         case 0 ... 4 : ligne=0;break;
                         case 5 ... 7 : ligne=1;break;
                         case 9 ... 11 : ligne=2;break;
                         case 12 ... 18 : ligne=3;break;
                        }
                        break;
          case 660 ... 780 :col=3;
                         switch (ligne_temp)
                        {
                         case 0 ... 1 : ligne=0;break;
                         case 3 ... 5 : ligne=1;break;
                         case 8 ... 10 : ligne=2;break;
                         case 12 ... 18 : ligne=3;break;
                        }
                        break;
          case 820 ... 940 :col=4;
                        switch (ligne_temp)
                        {
                         case 0 ... 1 : ligne=0;break;
                         case 2 ... 5 : ligne=1;break;
                         case 7 ... 9 : ligne=2;break;
                         case 10 ... 18 : ligne=3;break;
                        }
                        break;
        }
       ligne_temp=0;

 

 

puis les intervalles pour tp.x pour 4 lignes

 

        switch (tp.y)
        {
          case 170 ... 280 : col=0;
                         switch (tp.x)
                        {
                         case 780 ... 900 : ligne=0;break;
                         case 570 ... 690 : ligne=1;break;
                         case  340... 480 : ligne=2;break;
                         case 170 ... 290 : ligne=3;break;
                        }
                        break;
          case 320 ... 450 : col=1;
                         switch (tp.x)
                        {
                         case 780 ... 900 : ligne=0;break;
                         case 570 ... 690 : ligne=1;break;
                         case  340... 480 : ligne=2;break;
                         case 170 ... 290 : ligne=3;break;
                        }
                        break;
          case 490 ... 610 : col=2;
                         switch (tp.x)
                        {
                         case 780 ... 900 : ligne=0;break;
                         case 570 ... 690 : ligne=1;break;
                         case  340... 480 : ligne=2;break;
                         case 170 ... 290 : ligne=3;break;
                        }
                        break;
          case 660 ... 780 :col=3;
                         switch (tp.x)
                        {
                         case 780 ... 900 : ligne=0;break;
                         case 570 ... 690 : ligne=1;break;
                         case  340... 480 : ligne=2;break;
                         case 170 ... 290 : ligne=3;break;
                        }
                        break;
          case 820 ... 940 :col=4;
                         switch (tp.x)
                        {
                         case 780 ... 900 : ligne=0;break;
                         case 570 ... 690 : ligne=1;break;
                         case  340... 480 : ligne=2;break;
                         case 170 ... 290 : ligne=3;break;
                        }
                        break;
        }
       ligne_temp=0;

 

attention a bien respecter la syntaxe d'un case d'intervalle sous arduino

 

case valeur1 [Espace] ...[Espace] valeur2 :.....break;

 

 

je vous entends râler et dire pourquoi il imbrique tp.x et tp.y !!!!

je répondrais regarder le premier code, vous verrez que les intervalles des lignes ne sont pas les mêmes en fonction de tp.y.

Pour ce matériel de SMP002, je n'ai pas ce problème, mais je ne sais pas si je l'aurais pour les prochains ou si c’était juste un matériel defectueux pour SMP001, donc par fainantise je laisse en "standard".

 

 

Terminer en testant les touches

 

Si OK, Dans la fonction : bool Touch_getXY(void)

remettre les commentaires pour tp.x et tp.y

 

/identification de la touche
        //redressement des coordonnées
       
       /* pour debuggage **********************/
        //Serial.print("tp.z=");
        //Serial.print(tp.z);
        // Serial.print(" tp.x=");
        //Serial.print(tp.x);
        //Serial.print("  tp.y=");
        //Serial.println(tp.y);
       /* *************************************/

 

 

je rajoute un autre commentaire sur mon choix de ne pas utiliser la fonction MAP(). Pour ameliorer l'experience utilisateur et eviter les mauvaises selections de touche, je cree un perimetre de securité autour de chaque touche

 




Le câblage

04/06/2019

derniere MAJ le 23/07/19

 

Les broches coudées rentrent dans les ports de l'arduino sans gener l'écran 4 pouces.

Elles permettent une soudure réalisées en enlevant le cache plastique d'un cable dupont femelle de 10 cm

L'idée est de séparer les équipements via le câblage, d'un coté l'arduino et de l'autre les périphériques.

Le raccordement entre les 2 se fait donc sans soudure mais par l'emboitement de câble F-M dupond.

 

 

Tous les fils d'alimentations (fils rouge) sont faux dans l'image ci contre.

J'ai besoin uniquement de 3,3 V

 

Synthese

 

Couleur                           F-M               F-F

Noir                                  2                    4

Rouge/orange               2                    5

blanc                                1                    3

gris                                   1                    3

Marron                            1                    3

bleu                                  1                    0

jaune                                1                    1

vert                                   1                    1

violet                                1                     0

Total                                 11                  20

                                       

 



Test de la communication entre Arduino et ESP01

L'idée est de s'assurer de la qualité de la soudure pour la broche en RX2,TX2 et le connecteur ESP01(5 cables de 20 cm), du quadripode et du pentapode

 

 

pour cela on va cabler l'ESP01 avec un l'arduino Mega

telecharger le programme ci dessous sur l'ESP01

test-arduino-esp01_cote_esp01.ino

 

void setup()
{
 Serial.begin(9600);
}
void loop(){
   String IncomingString="";
   boolean StringReady = false;
 
 while (Serial.available()){
   IncomingString=Serial.readString();
   StringReady= true;
  }
 
  if (StringReady){

     Serial.println(IncomingString.compareTo("cmd=26?"));
    Serial.println("Received String ESP01: " + IncomingString);

  }
}

 

et le programme ci dessous sur l'arduino Mega

test-arduino-esp01.ino

 

#include <SoftwareSerial.h>  // SoftwareSerial must be included because the library depends on it

unsigned long previousMillis=0 ;
unsigned long interval = 5000; ///lecture de la carte toutes les 5 secondes

void setup() {
  // put your setup code here, to run once:
    Serial.begin(9600);
    Serial2.begin(9600);
    Serial.println("debut : envoi de la trame");
    Serial2.println("cmd=26?");
}

void loop() {
  // put your main code here, to run repeatedly:
String IncomingString="";
 boolean StringReady = false;
 
 while (Serial2.available()){
   IncomingString=Serial2.readString();
   StringReady= true;
  }
 
  if (StringReady){
    Serial.println("Received String: " + IncomingString);
 
  }

  if( millis() - previousMillis >= interval)
 {     
  Serial.println("Envoi vers ESP en cours");
  Serial2.println("cmd=25?");
  previousMillis = millis();   
 } //endif millis
}

 


On doit obtenir les informations suivantes sur le port COM.

En cas d'information différentes, c'est qu'il y a un probleme de connectique ou de qualité de soudure.


Assembler les composants

23/07/19

1 Arduino Mega

1 écran  TFF

2 modules MFRC522

1 module ESP01

1 boitier

1 batterie USB

1 câble USB mini

 

1 câble tripode violet ' 2 Femelles - 1 mâle"

1 câble tripode gris 3 femelles

1 câble tripode blanc 3 femelles

1 câble tripode marron 3 femelles

 

1 câble quadripode noir - 4 femelles

1 câble pentapode rouge - 5 femelles

 

Module connecteur 4 broches  - 2 câbles (vert jaune) - Femelle

  • vert en RX2
  • jaune en TX2

Module connecteur 4 broches - 2 câbles - femelle

  • blanc en 52
  • Violet en 50

 

Module connecteur 8 broches - 5 câbles -

  • noir      -> gnd -> MFRC522
  • gris       ->51 -> MFRC522
  • marron -> 47- MFRC522
  • bleu  -> 43-MFRC522(SDA bleu)
  • vert  -> 41- MFRC522 (SDA bleu)

 

Module ESP01- 8 connecteurs, 5 câbles longs - Mâles

  • 2 rouges
  • noir
  • vert -> RX2( via Module connecteur 4 broches  - 2 câbles (vert jaune)
  • jaune-> TX2( via Module connecteur 4 broches  - 2 câbles (vert jaune)

 

1 boitier carton

1 séparateur carton

2 pinces à linges

3 vis et 6 écrous

des allumettes

 

scotch / cutter/



la box

je ne peux pas fournir de modèle de cartonnage pour l'instant.

juste les informations suivantes.

l’intérieur de la box doit avoir une dimension minimum suivante :

longueur : 16,5cm

largeur :  14 cm

hauteur :  5 cm

il existe des logiciels de cartonnage sur internet pour produire un patron ( voir "Logiciel de packaging et modeles")

 

On positionne L’écran en fond de box avec l'arduino et le câble USB

on découpe les allumettes pour ajuste le placement

on marque les contours de l’écran sur le fond de la box

on enlève l'arduino

on découpe le fond de la box pour positionner l’écran

 

on remet l'arduino mega avec son cable USB

on positionne la separation interne et on la colle

on verifie la stabilité en posant la batterie dessus

Ecran+ arduino+cable USB posé.

on branche l'ensemble des cables

tripode/quadripode/pentapode et autres

on branche l'esp01 sur son connecteur 8 broches

on ferme la box

on la retourne pour positionner les 2 lecteurs MFRC522 afin de faire les encoches dans la box.

on s'assure du sens des mfrc522 et de leurs distances de separation en mettant 2 cartes à jour sur chacun des lecteurs RFID.

Les cartes ne doivent pas se toucher

 

normalement ca donne une mesure a 2,5 cm de chaque bord et une largeur de 1,5 cm pour chaque encoche.

on insère les câbles des MFRC522 dans la box et on effectue les branchements, normalement en respectant les codes couleurs.

 

juste le SDA d'un MFRC522 va sur un cable vers en D43 ou 41



on branche la batterie, on referme la box et on verifie que ca marche.


la séparation interne

cette séparation interne a pour fonction de reposer la batterie sans collage et aussi d’éviter que l’écran ne s'enfonce en cas de forte poussée.

 

Vous trouverez le patron dans les images.

 

faites bien attention a laisser un espace avec le bord de la box pour permettre à la languette de la box de s’insérer correctement lors de la fermeture de celle ci.

 

De plus il faut laisser un passage pour le câble USB de  branchement de l'arduino.

 

Quand poser la séparation interne ?

il faut au préalable position l’écran et le câble USB en fond de box et s'assurer que tout rentre.

si vous faites passer la câble USB a travers la séparation, vous ne pourrez plus le changer. il faut donc prévoir un câble qui permette une mise à jour via l'IDE arduino.

 

 



Le logiciel

version minimum

 

ESP01 :

smartpoker-esp01-v6.5.ino

 

Arduino MEGA :

smartpoker-MEGA-V6.10_TFT_4.ino

 

si vous souhaitez la dernière version stable, contactez moi.

 

Télécharger
smartpoker-esp01-v6.5-ino.pdf
Document Adobe Acrobat 75.3 KB
Télécharger
smartpoker-MEGA-V6.10_TFT_4-ino.pdf
Document Adobe Acrobat 257.4 KB


Personnalisation

En dehors du calibrage, il faut aussi personnaliser le code suivant pour chaque smartplayer

 

const String SMARTPOKER_SERIE="SMP001";

 

const String SMARTPOKER_TYPE="SMP";

 

const String SMARTPOKER_VERSION="1.0";

 

const String SMARTPOKER_DATE="23/06/2019";

 

 

remplacer SMP001 par le numéro de série du matériel.

 

 



Enregistrement en base

Seul le profil administrateur est habilité à effectuer cette opération.

Les profils user et opérateur n'ont pas accès.

 

L’opération consiste à créer l'objet smartplayer dans la base de données Mysql afin qu'il soit reconnu par le logiciel.

 

pour cela, il faut récupérer :

- l'adresse mac de l'esp01 : xx:xx:xx:xx:xx

- le numéro de série du smartplayer

 

informations supplémentaires :

code objet :

 

 

 


DEMO1

02/06/2019

 

Mega+ecran+1 RFID -> ca marche

 

Programme : smartpoker-MEGA-V6.5_TFT_4



Demo2

16/06/2019

1 arduino, 1 ecran et 2 RFID

 

Programme : smartpoker-MEGA-V6.9_TFT_4

 

beaucoup de cables à ranger

unpacked

PACKAGED.