CleUSB : Différence entre versions
Ligne 494 : | Ligne 494 : | ||
==={{Vert|Fonctionnement du microcontrôleur}}=== | ==={{Vert|Fonctionnement du microcontrôleur}}=== | ||
− | {| | + | {{boîte déroulante/début|titre=Partie communication avec l'interface}} |
− | + | ||
− | |||
− | |||
− | |||
la fonction change() modifie un couple identifiant mot de passe lorsqu'on reçoit une consigne de changement venant de l'interface graphique.<br /> | la fonction change() modifie un couple identifiant mot de passe lorsqu'on reçoit une consigne de changement venant de l'interface graphique.<br /> | ||
Pour réduire l'usure de l'EEPROM, on change le caractère stocké seulement si il est différent du précédent. | Pour réduire l'usure de l'EEPROM, on change le caractère stocké seulement si il est différent du précédent. | ||
Ligne 584 : | Ligne 581 : | ||
</source> | </source> | ||
</small> | </small> | ||
− | + | {{boîte déroulante/fin}} | |
− | {| | + | |
− | + | {{boîte déroulante/début|titre=Partie HID}} | |
− | + | partie du programme gérant les couples identifiants/mots de passe | |
− | |||
− | |||
Le texte envoyé par l'ARDUINO LEONARDO est basé sur un clavier "qwerty" et le signal envoyé correspond à la position de la touche sur le clavier.<br /> | Le texte envoyé par l'ARDUINO LEONARDO est basé sur un clavier "qwerty" et le signal envoyé correspond à la position de la touche sur le clavier.<br /> | ||
La fonction translate permet de remplacer le caractère demandé par l'emplacement de ce caractère sur un clavier "qwerty". <br /> | La fonction translate permet de remplacer le caractère demandé par l'emplacement de ce caractère sur un clavier "qwerty". <br /> | ||
Ligne 759 : | Ligne 754 : | ||
</source> | </source> | ||
</small> | </small> | ||
− | + | {{boîte déroulante/fin}} | |
− | {| | + | {{boîte déroulante/début|titre=Programme principal}} |
− | |||
− | |||
− | |||
− | |||
<small> | <small> | ||
<source lang=cpp> | <source lang=cpp> | ||
Ligne 794 : | Ligne 785 : | ||
</source> | </source> | ||
</small> | </small> | ||
− | + | {{boîte déroulante/fin}} | |
==={{Vert|Interface graphique}}=== | ==={{Vert|Interface graphique}}=== | ||
Nous avons choisi de réaliser notre interface graphique avec Processing. | Nous avons choisi de réaliser notre interface graphique avec Processing. | ||
− | {| | + | {{boîte déroulante/début|titre=Partie communication avec la clé}} |
− | |||
− | |||
− | |||
− | |||
Normalement, le premier port série devrait être la clé donc on peut initialiser la communication série sur le port Serial.list()[0].<br /> | Normalement, le premier port série devrait être la clé donc on peut initialiser la communication série sur le port Serial.list()[0].<br /> | ||
Nous pourront par la suite ajouter un élément d'interface graphique affichant la liste des ports série pour une sélection par l'utilisateur. | Nous pourront par la suite ajouter un élément d'interface graphique affichant la liste des ports série pour une sélection par l'utilisateur. | ||
Ligne 836 : | Ligne 823 : | ||
</source> | </source> | ||
</small> | </small> | ||
− | + | {{boîte déroulante/fin}} | |
− | {| | + | {{boîte déroulante/début|titre=Programme principal}} |
− | |||
− | |||
− | |||
− | |||
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. Nous avons utilisé la librairie controlp5 qui fournit des outils graphiques (boutons, fenêtre de saisie, menu déroulant...) facilitant ainsi l'édition d'une interface graphique. | 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. Nous avons utilisé la librairie controlp5 qui fournit des outils graphiques (boutons, fenêtre de saisie, menu déroulant...) facilitant ainsi l'édition d'une interface graphique. | ||
<small> | <small> | ||
Ligne 1 008 : | Ligne 991 : | ||
</source> | </source> | ||
</small> | </small> | ||
− | |} | + | {{boîte déroulante/fin}} |
+ | |||
+ | =={{Rouge|Troisième clé}}== |
Version du 22 mars 2016 à 16:19
L'objectif de ce projet est de réaliser 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 pouvoir servir de télécommande ou stocker et saisir des mots de passes. Pour cela nous allons réaliser successivement plusieurs clés, la première servira uniquement à envoyer des informations à l'ordinateur afin d'ajuster le volume.
Sommaire
[masquer]Conception de la première carte
Notre projet est basé sur un ATMEGA32U4, nous avons donc repris le schéma de l'ARDUINO LEONARDO, 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 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 mesures.
Nous allons ajouter sur le port D maintenant inutilisé 4 boutons et 4 LEDs
Voici la première version de la clé USB:
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 allons installer 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 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é ce boitier d'adaptation, ne sont pas reliées aux bonnes broches du microcontrôleur. Nous allons donc créer une nouvelle carte d'adaptation sur laquelle nous souderons 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é.
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.
USBAPI.h
HID.cpp
Voici le fichier USBAPI.h modifié(les fichiers .cpp ne peuvent pas etre importé sur le wiki):
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 carte
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.
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 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.
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 de 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 10 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
Partie communication avec l'interface
Partie HID
Programme principal
Interface graphique
Nous avons choisi de réaliser notre interface graphique avec Processing.
Partie communication avec la clé
Programme principal