Binome2020-11

De Wiki de bureau d'études PeiP

Introduction

Bienvenue sur la page Wikipédia du bureau d'étude de Clara LACROIX et Axel BOCQUET!

Le but de ce Bureau d'Etude est de savoir comment fonctionne une clé USB et de réaliser par nous même notre propre clé USB personnalisée à l'aide d'un PCB (Printed Circuit Board), de différents composants, de la programmation et d'un boitier sur mesure.

Carte intermédiaire

Janvier

  • Séance du 18 janvier 2021

Lors de cette première séance, nous avons découvert ce que nous allions faire pendant ce bureau d'étude et nous avons assimilé les notions clés de la clé USB. En effet, la clé USB (Universal Serial Bus) sert généralement à stocker des données informatiques. Cependant, elle peut également avoir d'autres utilités comme transmettre des virus, détecter des virus ou encore détruire des PC. Notre objectif va donc être de concevoir une clé USB de A à Z mais pas simplement une clé USB standard, une clé USB personnalisée. Nous avons donc cherché plusieurs idées pour notre projet.

La première idée que nous avons eu est une clé USB "chat". Cette clé USB aurait bien entendu le design d'un chat et aurait un son de ronronnement lorsqu'elle se connecte à l'ordinateur. Cependant, l'idée 2 était plus pertinente et technique. Elle nous était plus accessible et les éléments la caractérisant pourraient être transposables dans un autre contexte.

La deuxième idée que nous avons trouvée est une clé USB qui serait "un peu embêtante pour l'utilisateur". En effet, pour que la clé fonctionne, il faudrait appuyer sur 2 boutons simultanément pour pouvoir déverrouiller la clé. De plus, cette clé ferait "bugger" l'ordinateur en fermant certaines pages, en ouvrant d'autres pages, ou encore en affichant certains caractères en plein milieu de l'écran. Pour finir, au bout d'un certain temps, cette clé ouvrirait une fenêtre pop up en affichant "allez vous aérer", "faire une activité sportive est bon pour la santé" ou d'autres phrases de ce type. Cette idée nous a semblé très captivante et nous en avons fait par conséquent notre projet.


  • Séance du 21 janvier

Durant cette séance, nous avons voulu réaliser un circuit pour notre clé USB. Nous ne savions pas quels étaient les éléments qu'il nous fallait incorporer à celle-ci. En effet, nous savons que la clé USB est constituée d'un micro-processeur, d'une batterie, (…).

Ainsi, le schéma de la clé USB étant complexe, nous avons commencé à réaliser un schéma de circuit intermédiaire, c'est-à-dire simplement le circuit avec les constituants non codés.

Nous nous sommes familiarisés avec le logiciel Fritzing et avons commencé à réaliser notre schéma de circuit électronique.


  • Séance du 25 janvier

Nous avons repris l'ébauche du circuit électronique intermédiaire et avons corrigé certains problèmes tels que la probable apparition de parasites au niveau des diodes. De plus, nous avons décidé d'ajouter des diodes au niveau des boutons. Si l'un des interrupteurs est enclenché, une diode s'allume, si c'est seulement l'autre, l'autre diode s'allume et si ce sont les 2 interrupteurs qui sont enclenchés en même temps alors les 3 diodes s'allument.

Nous avons également découvert pendant cette séance qu'il existe des "bad clés USB" et que celles-ci ont une fonctionnalité et un codage différent d'une clé USB classique. Une "bad USB" est une clé qui transforme le comportement de la clé et la fait percevoir comme un dispositif d'interface humaine. De cette façon, le périphérique USB peut exécuter des programmes ou commandes sur l'ordinateur, sans que l'utilisateur s'en aperçoive.


  • Séance du 28 janvier

Nous avons continué la construction du circuit intégré. En effet, il y a certaines règles à respecter dans l’élaboration d’un circuit :

  • il ne faut pas d’angles droits (plus facile à graver et génère moins de parasites)
  • le routage ne doit pas être empilé
  • il faut faire autant que possible le routage sur le même plan
  • en sortie du processeur, il est conseillé de faire passer le routage tout droit afin qu’il ne chevauche pas les autres éléments.

De plus, la résistance doit être adaptée à la couleur de la diode. Une résistance qui conviendrait à une diode rouge serait trop basse pour une bleue. Une fois tous ces caractéristiques prises en compte, notre circuit a été simplifié.


Février

  • Séance du 1 février

Nous avons finalisé le circuit intégré. Voici notre version finale, sur logiciel Fritzing Impression de notre PCB.


PCB Fritzing
vue schématique Fritzing


  • Séance du 4 février

Nous avons sélectionné des composants à souder, puis avons débuté la soudure du microcontrôleur sur notre PCB réalisé grâce à Fritzing. Nous avons également choisis 3 résistances de 200W, adaptées aux 3 diodes rouges qui peuvent être enclenchées par 2 push-boutons (boutons à enclencher). Les éléments sont très petits, seulement quelques millimètres!

PCB originel


  • Séance du 8 février

Nous avons continué la soudure et débuté la réalisation du code. La soudure est un travail de précision. Le principe est de faire chauffer la baguette de soudure à plus de 300°C. La baguette va servir à faire fondre l'étain dans le but de joindre les constituants au PCB.

Petite astuce: Si on met trop de soudure, d'étain, ou si on s'est trompé d'endroit, il est possible de le retirer. La tresse à dessouder permet de résoudre ces difficultés, il suffit de la poser sur l'endroit en question, et de réappliquer de l'étain au-dessus de la tresse.

PCB intermédiaire


  • Séance du 11 février

Nous avons continué la soudure et finalisé la première version du code. En effet, une fois notre PCB terminé et soudé, il faut raccorder la carte Arduino et notre carte intermédiaire. Nous avons donc soudé des câbles sur les emplacements de l'Attiny84, notre microcontrôleur. Grâce à cela, nous pourrons importer notre code et voir l'impact de sa réalisation sur le PCB avec les diodes.


Microcontrôleur Attiny 84


  • Séance du 15 février

Nous avons fini la soudure et donc terminé le travail de précision!!! Les câbles que nous avons reliés sur notre carte correspondent aux emplacements de:

  • GND la terre GROUND,
  • VCC la tension d'alimentation,
  • RESET qui permet de réinitialiser,
  • de MOSI [Master Output, Slave Input (généré par le maître)],
  • MISO [Master Input, Slave Output (généré par l'esclave)],
  • SCK (Horloge (généré par le maître)).

Ces 3 derniers servent pour la communication.


PCB final


  • Séance du 18 février

Nous avons fini le codage sur Arduino et transféré le code Arduino sur la carte. Nous avons testé la carte et le code, les deux fonctionnent!!!!

Voici notre code intermédiaire:

#define MAX_LED 3
int leds[]={0,1,2};
int pinButton1 = 3;
int pinButton2 = 6;
int randNum=1;


int mavariable;

void setup() 
{
  int i;
  for(i=0; i<MAX_LED; i++){ pinMode(leds[i], OUTPUT); digitalWrite(leds[i],LOW); }
  pinMode(pinButton1, INPUT_PULLUP);
}
 
void loop() 
{
  unsigned char b1=(digitalRead(pinButton1)==HIGH);
  unsigned char b2=(digitalRead(pinButton2)==HIGH);
  if(b1) digitalWrite(leds[0],HIGH); else digitalWrite(leds[0],LOW);
  if(b2) digitalWrite(leds[1],HIGH); else digitalWrite(leds[1],LOW);
  if(b1 && b2) digitalWrite(leds[2],HIGH); else digitalWrite(leds[2],LOW);
} 

Fichier:Code intermediaire.zip


Carte USB

Mars

  • Séance du 8 mars

Nous avons débuté la réalisation du PCB de la clé USB sur Fritzing. Pour cela, nous avons fait un mélange entre la partie intermédiaire que nous avons faite durant les mois de Janvier/Février et une des cartes que nous avons reprise sur la page principale du wikipédia.


  • Séance du 11 mars

Nous avons continué le travail sur le PCB final. Précédemment, nous reprenions chaque élément des 2 PCB (celui général de la page principal du wikipédia et celui de notre projet intermédiaire) à combiner et nous le reproduisions sur le nouveau PCB. Mais cela prenait beaucoup de temps et nous avons ainsi découvert que nous pouvions simplement copier coller, très rapide.

Voici le fichier Fritzing en cours de travail

Fichier:Cle usbv1103.zip


  • Séance du 15 mars
PCB final


Une fois que nous avons mis sur un seul document tous les éléments nous étant utiles, nous nous sommes rendus compte qu'ils ne passaient plus sur le PCB, le PCB étant trop petit.... Il nous fallait donc le développer. Nous avons ainsi travaillé sur le logiciel Insckape afin d'obtenir un PCB plus grand. Il faut en effet que tous les composants rentrent sur le PCB. La forme est différente avec des courbes hyperboliques, nous avons voulu obtenir un design ouvragé.


  • Séance du 18 mars

Nous avons assemblé notre nouvelle forme de PCB avec les circuits. Nous avons tenté de faire rentrer tous les éléments, mais il était complexe que les voies ne se touchent pas pour qu'il n'y ait pas de court-circuit entre tous les composants. Nous avons donc réfléchi à ce problème.... et avons décidé d'affiner quelques petits détails en attendant de trouver une solution. Nous avons donc fait un DRC qui vérifie si tous les éléments sont assez éloignés les uns des autres, et du bord pour corriger ces petits détails. De plus, nous avons réparti le travail afin d'avancer sur la réalisation du wiki.


  • Séance du 22 mars

Nous avons enfin découvert où était la cause de notre problème. En effet, lorsque l'on avait tous nos composants présents sur notre PCB, le logiciel nous indiquait qu'une partie de ceux-ci étaient mal placés. Lors de la conception de notre PCB, nous n'avons pas adapté le cadre blanc à notre nouveau contour. Nous avons donc dû repartir d'une nouvelle forme, en prenant en compte la place des composants, le fait qu'ils ne doivent pas être collés, que notre port soit superposable à celui du PCB (mêmes dimensions). En effet, il faut faire très attention sinon il serait impossible de rentrer la clé USB dans un ordinateur !


  • Séance du 25 mars
PCB final

Nous avons repris notre écart, et bien superposé le board et le silkscreen sur le logiciel Inkscape. De plus, nous reprenons l'action de faire rentrer tous les composants dans la surface du PCB. Nous avons également débuté le codage final sur Arduino en répartissant les rôles.


Ci-joint une dernière version de la carte: Fichier:Cle usbv2503.zip


Et une première version du code: Fichier:Be code en cours.zip


Petit point histoire : La première clé USB, avec des circuits imprimés, a été inventée en 1999 par IBM.


  • Séance du 29 mars

Nous avons continué la réalisation du PCB via Fritzing. Nous avons aligné les différents câblages et mis les noms à coté des composants afin qu'il soit plus facile de savoir où souder tel ou tel composant et de ne pas se mélanger les pinceaux!! Nous avons également cassé les angles droits et enlevé les chevauchements. De cette façon, la carte sera plus facile à souder.

dernière version du PCB: Fichier:Cle usbv2903.zip


PCB Fritzing final
vue schématique finale Fritzing



Avril

  • Séance du 1 avril

La clé a été commandée. Nous nous sommes donc penchés sur le code. Nous avons repris le code intermédiaire. Cependant, il nous faut à la fois coder notre clé pour la mémoire mais aussi pour la partie des fenêtres pop-ups.


  • Séance du 5 avril

Nous avions tenté une approche de coder en arduino. Sur la partie du code agissant sur l'ordinateur, nous devons utiliser le language C. Lors de la séance nous avons donc continué le code en utilisant ce language informatique.


  • Séance du 8 avril

Nous avons reçu notre carte!!! Durant cette séance, nous avons continué le code et avons programmé l'affichage qui réalise l'action de publier des symboles avec un certain laps de temps:

#define SYMBOLS_DELAY 10000

int symbols[]={HID_KEYBOARD_SC_A,HID_KEYBOARD_SC_B,-1};
int current=0;
int counter=SYMBOLS_DELAY;

bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo,
uint8_t* const ReportID,
const uint8_t ReportType,
void* ReportData,
uint16_t* const ReportSize)
{
USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;
if(counter>0) counter--;
else{
counter=SYMBOLS_DELAY;
if(symbols[current]>=0){
KeyboardReport→KeyCode[0]=symbols[current++];
}
}
*ReportSize = sizeof(USB_KeyboardReport_Data_t);
return false;
}


  • Séance du 12 avril

Le binôme Estelle & Lucas nous a gentiment prêté une clé pour essayer nos programmes. Le transfert et le test sont réussis, la clé a été reconnue avec succès par l'ordinateur par le biais du terminal et de la commande :"lsusb".


  • Séance du 15 avril

Nous avons poursuivi le code, avec les bibliothèques de Lufa, et HID(Human Interface Device). HID va nous permettre d'afficher des messages à l'utilisateur et de communiquer avec celui-ci. Notre ordinateur va percevoir la clé comme étant une sorte de clavier, et va, de ce principe, accepter qu'elle écrive. De plus, nous avons débuté la soudure de nos composants sur notre clé finale.


  • Séance du 18 avril

Nous avons continué la soudure et terminé celle-ci. De plus, nous avons avancé sur le code en réduisant la taille de la mémoire (à moins de 512 octets). En effet, celle-ci, ajoutée à la grosseur de la lufa, dépassait la mémoire totale de la clé. De surcroît lors du codage, il nous a fallu prendre en compte que le clavier utilisé n'était pas le même que le clavier français habituel. Par conséquent nous avons traduit notre phrase en QWERTY. Ainsi, nous étions sûr que notre clé allait écrire correctement et que le texte capté serait lisible. Il nous a fallu importer sur une clé test le code que nous avons réalisé.

Voici le code sous dossier compressé dernière version: Fichier:Keyboard.zip Fichier:PolytechLille.zip

Et voici à quoi ressemble notre clé USB après la soudure:

PCB final face
PCB final dos



  • Séance du 22 avril

Nous avons revu notre code, déplacé celui-ci sur notre clé et corrigé les erreurs. A chaque fois nous le testions: pour cela nous chargions le programme sur la clé, nous la réinitialisions à l'aide d'un câble mâle mâle puis retirions et insérions la clé dans un port de l'ordinateur. A la fin de cette séance, nous avons réussi à ce qu'une fenêtre s'ouvre et des lettres s'affichent à l'écran lorsque l'on insère la clé dans l'ordinateur. Cependant, la mémoire sur notre clé USB n'est pas encore fonctionnelle. Notre clé est soudée et le programme qui devait ouvrir les fenêtres pop-up se comporte bien.


  • Pendant l'interruption pédagogique


Nous avons essayé de régler un dernier détail sur le code. En effet, nous voulions utilisé la touche shift et en même temps une autre touche (afin d'ouvrir une application de texte, XTERM et de faire un point d'exclamation) mais nous n'avons malheureusement pas réussi.... Ainsi lorsque l'on insère la clé dans l'ordinateur (en se mettant sur un logiciel de texte) nous obtenons:

affichage ordinateur



De plus, nous avons refait un petit peu de soudure pour que notre clé fonctionne (une des résistances n'était pas bien soudée) et nous avons pu transférer le code sur notre propre clé USB!!!! Voilà le résultat:

allumage des diodes


Conclusion

Et voilà c'est déjà la fin.... le bureau d'étude est fini :(

Nous avons appris énormément de choses durant ce semestre. En effet nous avons découvert le logiciel Fritzing, avons appris à coder sur Arduino, à souder, à utiliser le logiciel Insckape ou encore à utiliser le terminal d'un ordinateur !!! Cela fut un très beau projet que nous avons mené mais pas complètement achevé (il reste à savoir comment activer 2 touches en même temps et également à utiliser l'imprimante 3D pour pouvoir avoir un design digne d'une vraie clé USB) mais nous avons quand même réussi à faire à la fois la carte intermédiaire mais aussi la clé USB (avec ce qu'elle est capable de faire).

Nous voulons remercier Gabriel, Edward, Thomas, Estelle et Lucas pour l'aide régulière qu'ils nous ont donnée lorsque nous avions un problème et bien entendu, nous voulons remercier nos professeurs pour tout ce qu'ils nous ont appris et apporté durant ce semestre !!!!!

Carte commandée

La carte a été commandée. Des modifications de routage ont été effectuées. Le dessin SVG du PCB a du être refait. Les fichiers ci-dessous :

Fichiers SVG de la carte : Fichier:2021ClefAxelClaraSVG.zip.

Fichier Fritzing source : Fichier:2021ClefAxelClaraV4.zip.