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
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
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;
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
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
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.
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
Module connecteur 4 broches - 2 câbles - femelle
Module connecteur 8 broches - 5 câbles -
Module ESP01- 8 connecteurs, 5 câbles longs - Mâles
1 boitier carton
1 séparateur carton
2 pinces à linges
3 vis et 6 écrous
des allumettes
scotch / cutter/
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.
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.
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.
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.
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 :
02/06/2019
Mega+ecran+1 RFID -> ca marche
Programme : smartpoker-MEGA-V6.5_TFT_4
16/06/2019
1 arduino, 1 ecran et 2 RFID
Programme : smartpoker-MEGA-V6.9_TFT_4
beaucoup de cables à ranger