CleUSB : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
({{Rouge|Réglage du volume}})
({{Rouge|Deuxième clé USB}})
Ligne 387 : Ligne 387 :
 
={{Rouge|Deuxième clé USB}}=
 
={{Rouge|Deuxième clé USB}}=
  
Nous devons créer un nouvelle version de la clé USB plus compacte, qui permettrait l'usage de deux programme : le programme de gestion du volume ou un programme permettant le stockage et la saisie d'identifiant et de mots de passes. Pour ce dernier, nous allons également réaliser une interface graphique pour permettre à l'utilisateur de saisir les mots de passes à mémoriser.
+
Nous devons créer un nouvelle version de la clé USB plus compacte, qui permettrait l'usage de deux programme : le programme de gestion du volume ou un programme permettant le stockage et la saisie d'identifiant et de mots de passes. Pour ce dernier, nous avons également réalisé une interface graphique pour permettre à l'utilisateur de saisir les mots de passes à mémoriser.
  
 
=={{Bleu|Conception de la deuxième carte}}==
 
=={{Bleu|Conception de la deuxième carte}}==
  
Dans cette version de notre clé, le PCB fera office de connecteur USB mâle, on supprimera donc le connecteur utilisé dans la précédente clé. Le connecteur ISP sera aussi supprimé.
+
Dans cette version de notre clé, le PCB fera office de connecteur USB mâle, on supprime donc le connecteur utilisé dans la précédente clé. Le connecteur ISP est également supprimé.
Dans le but de miniaturiser la carte, nous avons choisi d'utiliser un format de boitier plus petit pour les résistances, et la résistance associée au quartz a été supprimée. Le quartz ne peut cependant pas être supprimé, il est nécessaire pour les fonctions d'interface homme-machine que nous voulons utiliser. Les ports des entrées et sorties sont modifiés afin d'optimiser le routage.
+
Dans le but de miniaturiser la carte, nous avons choisi d'utiliser un format de boitier plus petit pour certaines résistances, et la résistance associée au quartz a été supprimée. Le quartz ne peut cependant pas être supprimé, il est nécessaire pour les fonctions d'interface homme-machine que nous voulons utiliser. Les ports des entrées et sorties sont modifiés afin d'optimiser le routage.
  
 +
[[Image:USB2-photo.jpg|vignette|upright=3|left|Schéma]]
 
[[Image:Schema_USB2.png|vignette|upright=3|left|Schéma]]
 
[[Image:Schema_USB2.png|vignette|upright=3|left|Schéma]]
 
{|
 
{|
Ligne 473 : Ligne 474 :
 
</small>
 
</small>
  
=={{Bleu|Gestion de mot de passe}}==
+
={{Rouge|Gestion de mot de passe}}=
  
Pour faciliter l'utilisation de la clé, nous avons choisi de ne stocker que 4 couples identifiants/mots de passe, ainsi, chaque bouton de la clé permet de l'envoie d'un mot de passe.
+
Pour faciliter l'utilisation de la clé, nous avons choisi de ne stocker que 4 couples identifiants/mots de passe, ainsi, chaque bouton de la clé permet l'envoie d'un mot de passe.
 
Pour la communication entre l'interface graphique et la clé, nous avons mis en place un protocole de communication.
 
Pour la communication entre l'interface graphique et la clé, nous avons mis en place un protocole de communication.
 
Pour le moment, les chaines de caractères stockés doivent contenir 16 caractères ou moins, cette valeur pourra être augmenté en changeant l'adressage utilisé pour le stockage dans l'EEPROM.
 
Pour le moment, les chaines de caractères stockés doivent contenir 16 caractères ou moins, cette valeur pourra être augmenté en changeant l'adressage utilisé pour le stockage dans l'EEPROM.
  
==={{Vert|Protocole de communication}}===
+
=={{Bleu|Protocole de communication}}==
 
chaque élément est séparé par le caractère '\n' (retour à la ligne).
 
chaque élément est séparé par le caractère '\n' (retour à la ligne).
 
{| class="wikitable"
 
{| class="wikitable"
Ligne 494 : Ligne 495 :
  
  
==={{Vert|Fonctionnement du microcontrôleur}}===
+
=={{Bleu|Fonctionnement du microcontrôleur}}==
 
{{boîte déroulante/début|titre=Programme arduino}}
 
{{boîte déroulante/début|titre=Programme arduino}}
 
<small> <source lang=cpp>
 
<small> <source lang=cpp>
Ligne 764 : Ligne 765 :
 
Cette fonction initialise chaque emplacement pour mots de passe et identifiants avec le mot "nouveau".
 
Cette fonction initialise chaque emplacement pour mots de passe et identifiants avec le mot "nouveau".
 
pour savoir si le programme est exécuté pour la première fois, nous utilisons la valeur stockée dans le premier emplacement de l'EEPROM, si cet emplacement vaut 1, l'initialisation a déjà été effectuée lors d'une utilisation précédente.
 
pour savoir si le programme est exécuté pour la première fois, nous utilisons la valeur stockée dans le premier emplacement de l'EEPROM, si cet emplacement vaut 1, l'initialisation a déjà été effectuée lors d'une utilisation précédente.
Cette initialisation permet à l'utilisateur de l'interface graphique de voir apparaître "nouveau" plutôt qu'une chaîne de caractères incompréhensible lors de la première utilisation.
+
Cette initialisation permet à l'utilisateur de l'interface graphique de voir apparaître "nouveau" plutôt qu'une chaîne de caractères incompréhensibles lors de la première utilisation.
  
 
<small>
 
<small>
Ligne 840 : Ligne 841 :
 
{{boîte déroulante/fin}}
 
{{boîte déroulante/fin}}
  
==={{Vert|Interface graphique}}===
+
=={{Bleu|Interface graphique}}==
 
Nous avons choisi de réaliser notre interface graphique avec Processing.<br />
 
Nous avons choisi de réaliser notre interface graphique avec Processing.<br />
 
Nous avons crée une interface qui contient une liste d'identifiants, un bouton de modification qui fait apparaître des fenêtres de saisie pour les modifications.<br />
 
Nous avons crée une interface qui contient une liste d'identifiants, un bouton de modification qui fait apparaître des fenêtres de saisie pour les modifications.<br />
 
Pour utiliser notre programme, il est nécessaire d'installer la librairie controlP5 disponible dans la liste des librairie processing.<br />
 
Pour utiliser notre programme, il est nécessaire d'installer la librairie controlP5 disponible dans la liste des librairie processing.<br />
La librairie controlp5 fournit des outils graphiques (boutons, fenêtre de saisie, menu déroulant...) facilitant l'édition d'une interface graphique.<br />
+
La librairie controlP5 fournit des outils graphiques (boutons, fenêtre de saisie, menu déroulant...) facilitant l'édition d'une interface graphique.<br />
 
Lorsqu'un bouton ou un menu déroulant est créé, une fonction d’interruption portant le même nom que l'objet est disponible, cette fonction est activée par un clic sur le bouton ou un élément du menu.
 
Lorsqu'un bouton ou un menu déroulant est créé, une fonction d’interruption portant le même nom que l'objet est disponible, cette fonction est activée par un clic sur le bouton ou un élément du menu.
 +
 +
[[Image:GUI-etape1.png|vignette]]
 +
[[Image:GUI-etape2.png|vignette]]
  
 
{{boîte déroulante/début|titre=Programme processing}}
 
{{boîte déroulante/début|titre=Programme processing}}
Ligne 859 : Ligne 863 :
 
byte[] inBuffer = new byte[255];
 
byte[] inBuffer = new byte[255];
 
String id[]=new String[4];            // Tableau d'identifiants
 
String id[]=new String[4];            // Tableau d'identifiants
String mp[]=new String[4];            // Tableau de mot de passe
+
String mp[]=new String[4];            // Tableau de mots de passes
//parfois, un caractère apparaît au début de la chaîne de caractères transmis, la variable suivante permet d'adapter la lecture à cette erreur par un décallage
+
//parfois, un caractère apparaît au début de la chaîne de caractères transmis, la variable suivante permet d'adapter la lecture à cette erreur par un décalage
 
char dec=2;                            //si >=2 erreur, sinon indique le décalage nécessaire pour la lecture
 
char dec=2;                            //si >=2 erreur, sinon indique le décalage nécessaire pour la lecture
 
int num;                              // Numéro du couple identifiant mot de passe
 
int num;                              // Numéro du couple identifiant mot de passe
Ligne 944 : Ligne 948 :
 
}
 
}
  
/*Interuption declenchée lors de la séléction d'un élément de la liste */
+
/*Interruption déclenchée lors de la sélection d'un élément de la liste */
 
void Identifiants(int n) {
 
void Identifiants(int n) {
 
   num=n;
 
   num=n;
Ligne 988 : Ligne 992 :
 
}
 
}
  
/*Interuption declenchée lors de l'appui sur le boutton valider */
+
/*Interruption déclenchée lors de l'appui sur le bouton valider */
 
public void Valider() {
 
public void Valider() {
 
   /*Pour valider, il faut qu'il ait au moins un caractère de saisie dans les partie identifiant et mot de passe*/
 
   /*Pour valider, il faut qu'il ait au moins un caractère de saisie dans les partie identifiant et mot de passe*/
Ligne 1 032 : Ligne 1 036 :
  
 
   if (dec<2) {
 
   if (dec<2) {
     int i=dec+2;                  //apres 3\n
+
     int i=dec+2;                  //après 3\n
  
 
     for (int j=0; j<4; j++) {
 
     for (int j=0; j<4; j++) {
 
       int k=0;
 
       int k=0;
       i+=2;                        //apres 3 \n num \n
+
       i+=2;                        //après 3 \n num \n
 
       //lecture de l'identifiant i
 
       //lecture de l'identifiant i
 
       do {
 
       do {

Version du 23 avril 2016 à 11:53

Clé USB HARENDARZ.jpg

L'objectif de ce projet est de réaliser, dans un premier temps, une clé USB capable de régler le volume de l'ordinateur sur lequel elle est branchée. Dans un deuxième temps, la clé devra également permettre stocker et saisir des mots de passes. Pour cela nous avons réalisé successivement plusieurs clés, la première servant uniquement à envoyer des informations à l'ordinateur afin d'ajuster le volume.


Conception de la première clé

Etant donné que nous devons utiliser le port USB comme liaison série et comme clavier virtuel, nous avons basé notre projet sur un microcontrôleur ATMEGA32U4 car les deux fonction sont intégrées dans celui-ci. Nous avons donc repris le schéma de l'ARDUINO LEONARDO qui utilise un ATMEGA32U4, en ne conservant que la partie utile à notre clé USB. Ainsi nous pouvons supprimer les entrées et sorties ARDUINO. La carte sera toujours alimentée par USB donc la borne de connexion pour alimentation externe et le système de régulation de tension peuvent être supprimés. L'objectif étant de miniaturiser au maximum la carte, nous avons décidé de supprimer également les inductances et condensateurs destinés à l'amélioration de la qualité des signaux et des mesures.
Nous avons ajouté 4 boutons et 4 LEDs sur le port D maintenant inutilisé.
Dans cette première version, nous avons conservé par sécurité un connecteur ISP pour la programmation, mais l'objectif est de se passer de l'ISP et de programmer la carte par USB.


Voici la première version de la clé USB:


USB1-photo.jpg
Schéma USB1.png
Routage
Perçage
placement composants top
Placement composants bottom
Nomenclature
quantité valeur package
4 (led) PLCC2
4 330R R1206
4 (bouton poussoir) SWITCH-6*6.5
2 1M R1206
2 22R R1206
1 (ISP) MA03-2
1 100nF C1206
1 10kR R1206
1 1uF C1206
1 (ATMEGA32U4) TQFP44-PAD
1 quartz 16MHz
1 (USB mâle A)

Bootloader

Afin de téléverser les programmes sans utiliser le connecteur ISP et d’exécuter le programme à la mise sous tension du microcontrôleur, nous avons installé un bootloader sur l'ATMEGA32U4. Pour cela, avant de le souder sur la carte, nous plaçons le microcontrôleur dans un boitier d'adaptation ZIF et utilisons l'outil "graver la séquence d'initialisation" du logiciel ARDUINO. Dans la première version de la carte nous avons conservé l'ISP comme sécurité si le bootloader ne fonctionne pas.

Problèmes rencontrés

Le connecteur ISP de la carte sur laquelle est soudé le boitier d'adaptation à notre disposition, ne sont pas reliées aux bonnes broches du microcontrôleur. Nous avons donc créé une nouvelle carte d'adaptation sur laquelle souder le boitier. Les broches à connecter sont:

Nom Broche ATMEGA32U4
MISO 11
MOSI 10
SCLK 9
/RESET 13
VCC 14,34
GND 15,23,35,43
Quartz 16,17

Le boitier n'étant pas au format standard, il faut recréer le composant sur Eagle.

voici la carte d'adaptation que nous avons réalisé.

Schéma adaptation USB.png
Board adaptation USB.png
Nomenclature
quantité valeur package
1 (ISP) MA03-2
1 1MR R1206
1 (quartz 16MHz)
1 (adaptateur ATMEGA32U4)

Réglage du volume

Modification des programmes ARDUINO

Pour ajuster le volume d'un ordinateur, il existe 3 caractères spéciaux nommés XF86volume_up, XF86volume_down et XF86volume_mute. Pour pouvoir envoyer ces caractères, il faut modifier les fichiers ARDUINO HID.cpp et USBAPI.h qui gèrent la partie "périphérique USB" de l'ARDUINO LEONARDO. Voici un exemple de modification que nous avons trouvé qui ajoute à l'interface homme-machine la classe Remote permettant l'usage de fonctions de base d'une télécommande.
(Il n'est pas possible d'utiliser d'utiliser une version pré-modifiée de ces fichiers, car les programmes HID.cpp et USBAPI.h peuvent varier en fonction du système d'exploitation utilisé ou de la version d'ARDUINO. Pour éviter les problèmes de compatibilité, il est préférable d'apporter les modifications suivantes aux fichiers fournis avec le logiciel)

[Développer]

USBAPI.h

[Développer]

HID.cpp

Programme de réglage du volume

void setup(){
  DDRD=0x0f;
  PORTD=0xff;
}

void loop(){
  if((PIND&(1<<PD6))==0){
    PORTD^=(1<<PD3);
    Remote.increase();
    Remote.clear();
    delay(1000);
    PORTD^=(1<<PD3);
  }
  if((PIND&(1<<PD5))==0){
    PORTD^=1;
    Remote.decrease();
    Remote.clear();
    delay(1000);
    PORTD^=1;
  }
  if((PIND&(1<<PD4))==0){
    PORTD^=0b0110;
    Remote.mute();
    Remote.clear();
    delay(1000);
    PORTD^=0b0110;
  }
}

Deuxième clé USB

Nous devons créer un nouvelle version de la clé USB plus compacte, qui permettrait l'usage de deux programme : le programme de gestion du volume ou un programme permettant le stockage et la saisie d'identifiant et de mots de passes. Pour ce dernier, nous avons également réalisé une interface graphique pour permettre à l'utilisateur de saisir les mots de passes à mémoriser.

Conception de la deuxième carte

Dans cette version de notre clé, le PCB fera office de connecteur USB mâle, on supprime donc le connecteur utilisé dans la précédente clé. Le connecteur ISP est également supprimé. Dans le but de miniaturiser la carte, nous avons choisi d'utiliser un format de boitier plus petit pour certaines résistances, et la résistance associée au quartz a été supprimée. Le quartz ne peut cependant pas être supprimé, il est nécessaire pour les fonctions d'interface homme-machine que nous voulons utiliser. Les ports des entrées et sorties sont modifiés afin d'optimiser le routage.

Schéma
Schéma
Board
Perçage
Composants top
Composants bottom
Nomenclature
quantité valeur package
4 (led) PLCC2
4 330R R0805
4 (bouton poussoir) SWITCH-6*6.5
2 100nF C1206
2 22R R1206
1 1MR R1206
1 10kR R1206
1 1uF C1206
1 (ATMEGA32U4) TQFP44-PAD
1 quartz 16MHz
1 (USB mâle A)

composant utilisé pour le connecteur USB:

Contrôle du volume

Ce programme est le même que dans la partie précédente, il est juste nécessaire de changer les broches des entrées et sorties.

void setup(){
  DDRD=0x00;
  DDRF=0xf0;
  PORTD=0xf0;
  PORTF=0xf0;
}

void loop(){
  if((PIND&(1<<PD6))==0){
    PORTD^=(1<<PF7);
    Remote.increase();
    Remote.clear();
    delay(1000);
    PORTD^=(1<<PF7);
  }
  if((PIND&(1<<PD4))==0){
    PORTD^=(1<<PF4);
    Remote.decrease();
    Remote.clear();
    delay(1000);
    PORTD^=(1<<PF4);
  }
  if((PIND&(1<<PD7))==0){
    PORTD^=0b01100000;
    Remote.mute();
    Remote.clear();
    delay(1000);
    PORTD^=0b01100000;
  }
}

Gestion de mot de passe

Pour faciliter l'utilisation de la clé, nous avons choisi de ne stocker que 4 couples identifiants/mots de passe, ainsi, chaque bouton de la clé permet l'envoie d'un mot de passe. Pour la communication entre l'interface graphique et la clé, nous avons mis en place un protocole de communication. Pour le moment, les chaines de caractères stockés doivent contenir 16 caractères ou moins, cette valeur pourra être augmenté en changeant l'adressage utilisé pour le stockage dans l'EEPROM.

Protocole de communication

chaque élément est séparé par le caractère '\n' (retour à la ligne).

demande de la liste des identifiants/mots de passe 1
commande de changement d'un couple 2 n° du couple identifiant mot de passe
envoie de la liste des couples 3 n° du 1er couple identifiant n°1 mot de passe n°1 n° du 2ème couple identifiant n°2 ...


Fonctionnement du microcontrôleur

[Développer]

Programme arduino

Interface graphique

Nous avons choisi de réaliser notre interface graphique avec Processing.
Nous avons crée une interface qui contient une liste d'identifiants, un bouton de modification qui fait apparaître des fenêtres de saisie pour les modifications.
Pour utiliser notre programme, il est nécessaire d'installer la librairie controlP5 disponible dans la liste des librairie processing.
La librairie controlP5 fournit des outils graphiques (boutons, fenêtre de saisie, menu déroulant...) facilitant l'édition d'une interface graphique.
Lorsqu'un bouton ou un menu déroulant est créé, une fonction d’interruption portant le même nom que l'objet est disponible, cette fonction est activée par un clic sur le bouton ou un élément du menu.

GUI-etape1.png
GUI-etape2.png
[Développer]

Programme processing

Troisième clé USB

Conception de la troisième carte

La carte suivante est une version améliorée de la clé précédente. Le schéma reste le même, mais le routage a été amélioré afin de faciliter la fabrication (via plus espacés), et d'inclure un anneau pour fixer un porte clé.

Board
Perçage et détourrage
Composants top
Composants bottom

Conception d'un boitier pour la clé

Nous avons conçu un boitier pour cette dernière version de la clé USB.

Boitier inférieur Boitier supérieur
vue dessus
vue dessus
vue coté connecteur USB
vue coté connecteur USB
aperçu
aperçu

Correction

Nous n'avions pas pris en compte le boitier lors de la réalisation de la clé. Avec l’épaisseur de celui ci, il n'est plus possible de relier le connecteur USB à un connecteur USB femelle. Pour utiliser le boitier il est donc nécessaire d'allonger le connecteur USB.

aperçu


Voici les fichiers utiles pour la réalisation des clé (typons, routage, programmes):