Binome2019-2 : Différence entre versions

De Wiki de bureau d'études PeiP
(Conclusion)
 
(121 révisions intermédiaires par 3 utilisateurs non affichées)
Ligne 2 : Ligne 2 :
  
  
=<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #800080; vertical-align: top; width: 98%;"> Introduction </div>=
+
=<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 80%; background: #800080; vertical-align: top; width: 98%;"> Introduction </div>=
  
L'objectif de ce nouveau bureau d'étude est de concevoir et créer une clé USB en créant un circuit électronique, en soudant des composants électroniques et en programmant le micro-processeur.
+
L'objectif de ce nouveau bureau d'étude est de concevoir et de créer une clé USB en créant un circuit électronique, en soudant des composants électroniques et en programmant le micro-processeur mais aussi en y ajoutant une fonctionnalité pour la rendre unique.
L'objectif supplémentaire de bureau d'étude est d'ajouter à notre clé USB une ou plusieurs fonctionnalités qui la rendra unique.
 
  
=<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #800080; vertical-align: top; width: 98%;"> Matériel utilisé </div>=
+
Nous avons choisi comme particularité le déverrouillage de la clé par haut volume sonore, à l'aide d'un micro placé sur la clé.
  
• Circuit imprimé
+
Ce BE aura quelques rebondissements : tout d'abord l'ajout d'un projet intermédiaire de dé électronique puis une crise sanitaire mondiale nous bloquant l'accès aux locaux et au matériel... Mais il en faudra plus pour nous ralentir comme vous allez le découvrir...
 
• Micro-contrôleur
 
  
[[Fichier:ATMega16u2.png]]
+
=<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 80%; background: #800080; vertical-align: top; width: 98%;"> Dé électronique </div>=
  
• Mémoire
+
Avant de commencer notre clé USB, nous avons réalisé un petit projet préalable.
  
[[Fichier:Adesto64Mb.jpg]]
+
Nous avons créé un dé électronique, son fonctionnement est simple :
 +
Il faut appuyer sur le bouton et il nous donne un chiffre aléatoire (le nombre de leds correspondant s'allume).
  
• Micro-interrupteurs
+
Ce projet nous a permis de connaître les logiciels qui nous seront utiles pour notre clé USB.
  
• Microphone
+
Nous avons codé à l'aide de l'IDE Arduino et nous avons réalisé le PCB à l'aide de Fritzing.
  
[[Fichier:Microphone.png]]
+
Nous avons également appris à souder les composants à l'aide du matériel présent à Polytech.
  
=<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #800080; vertical-align: top; width: 98%;"> Code informatique </div>=
+
==Matériel utilisé pour le dé électronique==
  
 +
<div><ul>
 +
<li style="display: inline-block;"> [[Fichier:Attiny84.jpg|thumb|left|200px|Micro-processeur ATTiny84]] </li>
 +
<li style="display: inline-block;"> [[Fichier:ledB2.jpg|thumb|right|200px|Led]] </li>
 +
<li style="display: inline-block;"> [[Fichier:resistanceB2.jpg|thumb|right|200px|Résistance]] </li>
 +
</ul></div>
  
=<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #800080; vertical-align: top; width: 98%;"> Chronologie </div>=
+
==Code du dé électronique==
 +
 
 +
#include <stdio.h>
 +
#include <stdlib.h>
 +
#include <time.h>
 +
#define LED1 0
 +
#define LED2 1
 +
#define LED3 2
 +
#define LED4 3
 +
#define LED5 4
 +
#define LED6 5
 +
#define LED7 6
 +
int Tableaupin[7]= {5,4,1,3,6,2,0};
 +
int BROCHE_BOUTON=7;
 +
void setup() {
 +
  // initialisation
 +
  Serial.begin(9600);
 +
  pinMode(Tableaupin[LED1], OUTPUT);
 +
  pinMode(Tableaupin[LED2], OUTPUT);
 +
  pinMode(Tableaupin[LED3], OUTPUT);
 +
  pinMode(Tableaupin[LED4], OUTPUT);
 +
  pinMode(Tableaupin[LED5], OUTPUT);
 +
  pinMode(Tableaupin[LED6], OUTPUT);
 +
  pinMode(Tableaupin[LED7], OUTPUT);
 +
  pinMode(BROCHE_BOUTON,INPUT_PULLUP);
 +
  digitalWrite(Tableaupin[LED1],HIGH);
 +
  delay(200);
 +
  digitalWrite(Tableaupin[LED1],LOW);
 +
  digitalWrite(Tableaupin[LED2],HIGH);
 +
  delay(200);
 +
  digitalWrite(Tableaupin[LED2],LOW);
 +
  digitalWrite(Tableaupin[LED3],HIGH);
 +
  delay(200);
 +
  digitalWrite(Tableaupin[LED3],LOW);
 +
  digitalWrite(Tableaupin[LED4],HIGH);
 +
  delay(200);
 +
  digitalWrite(Tableaupin[LED4],LOW);
 +
  digitalWrite(Tableaupin[LED5],HIGH);
 +
  delay(200);
 +
  digitalWrite(Tableaupin[LED5],LOW);
 +
  digitalWrite(Tableaupin[LED6],HIGH);
 +
  delay(200);
 +
  digitalWrite(Tableaupin[LED6],LOW);
 +
  digitalWrite(Tableaupin[LED7],HIGH);
 +
  delay(200);
 +
  digitalWrite(Tableaupin[LED7],LOW);
 +
  randomSeed(analogRead(0));
 +
}
 +
int random_a_b(int a,int b)
 +
//fonction qui renvoie un nombre entre a inclus et b exclus
 +
{
 +
return random()%(b-a) +a;
 +
}
 +
//fct nombre de leds allumées
 +
void de1T()
 +
{
 +
  digitalWrite(Tableaupin[LED4],HIGH);
 +
  delay(1000);
 +
}
 +
void de2T()
 +
{
 +
  digitalWrite(Tableaupin[LED3],HIGH);
 +
  digitalWrite(Tableaupin[LED5],HIGH);
 +
  delay(1000);
 +
}
 +
void de3T()
 +
{
 +
  digitalWrite(Tableaupin[LED3],HIGH);
 +
  digitalWrite(Tableaupin[LED4],HIGH);
 +
  digitalWrite(Tableaupin[LED5],HIGH);
 +
  delay(1000);
 +
}
 +
void de4T()
 +
{
 +
  digitalWrite(Tableaupin[LED1],HIGH);
 +
  digitalWrite(Tableaupin[LED3],HIGH);
 +
  digitalWrite(Tableaupin[LED5],HIGH);
 +
  digitalWrite(Tableaupin[LED7],HIGH);
 +
  delay(1000);
 +
}
 +
void de5T()
 +
{
 +
  digitalWrite(Tableaupin[LED1],HIGH);
 +
  digitalWrite(Tableaupin[LED3],HIGH);
 +
  digitalWrite(Tableaupin[LED4],HIGH);
 +
  digitalWrite(Tableaupin[LED5],HIGH);
 +
  digitalWrite(Tableaupin[LED7],HIGH);
 +
  delay(1000);
 +
}
 +
void de6T()
 +
{
 +
  digitalWrite(Tableaupin[LED1],HIGH);
 +
  digitalWrite(Tableaupin[LED2],HIGH);
 +
  digitalWrite(Tableaupin[LED3],HIGH);
 +
  digitalWrite(Tableaupin[LED5],HIGH);
 +
  digitalWrite(Tableaupin[LED6],HIGH);
 +
  digitalWrite(Tableaupin[LED7],HIGH);
 +
  delay(1000);
 +
}
 +
// fonct eteint lampe
 +
void de6F()
 +
{
 +
  digitalWrite(Tableaupin[LED1],LOW);
 +
  digitalWrite(Tableaupin[LED2],LOW);
 +
  digitalWrite(Tableaupin[LED3],LOW);
 +
  digitalWrite(Tableaupin[LED4],LOW);
 +
  digitalWrite(Tableaupin[LED5],LOW);
 +
  digitalWrite(Tableaupin[LED6],LOW);
 +
  digitalWrite(Tableaupin[LED7],LOW);
 +
}
 +
//fonction d'affichage resultat final
 +
void loop()
 +
{
 +
  int LED;
 +
  // partie selection dé
 +
  if (digitalRead(BROCHE_BOUTON) == HIGH){
 +
  LED=random_a_b(0,6);
 +
  de6F();
 +
  }
 +
  unsigned char test=(digitalRead(BROCHE_BOUTON)==LOW);
 +
  switch (LED)
 +
  {
 +
    case 0:
 +
      if (test) de1T(); break;
 +
    case 1:
 +
      if (test) de2T(); break;
 +
    case 2:
 +
      if (test) de3T(); break;
 +
    case 3:
 +
      if (test) de4T(); break;
 +
    case 4:
 +
      if (test) de5T(); break;
 +
    case 5:
 +
      if (test) de6T(); break;
 +
  }
 +
}
 +
 
 +
==Illustration du dé électronique==
 +
 
 +
===Photos du dé===
 +
 
 +
[[Fichier:deavantB2.png|thumb|left|500px|Face avant]]
 +
 
 +
[[Fichier:dearriereB2.png|thumb|right|500px|Face arrière]]
 +
 
 +
<br style="clear: both;" />
 +
 
 +
===Vidéo du dé===
 +
 
 +
[[Média:dévidéoB2.mp4]]
 +
 
 +
===Fichier fritzing de notre dé===
 +
 
 +
[[Fichier:DéB2.zip]]
 +
 
 +
=<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 80%; background: #800080; vertical-align: top; width: 98%;"> Clé USB </div>=
 +
 
 +
Notre projet principal est la réalisation d’une clé USB. Nous y avons ajouté comme fonctionnalité un déverrouillage par haut-volume sonore, ce qui signifie qu’à partir d’un certain seuil sonore, nous pouvons avoir accès à la mémoire de la clé USB.
 +
 
 +
Nous avons réalisé le fichier Fritzing ainsi qu’un code qui permet d’échantillonner le son récupéré par le micro.
 +
 
 +
==Matériel utilisé pour la clé USB==
 +
 
 +
<div><ul>
 +
<li style="display: inline-block;"> [[Fichier:ATMega8u2.jpg|thumb|left|200px|Micro-contrôleur ATMega16u2]] </li>
 +
<li style="display: inline-block;"> [[Fichier:Adesto64Mb.jpg|thumb|right|200px|Mémoire AT45DB641E]] </li>
 +
<li style="display: inline-block;"> [[Fichier:ic2B2.jpg|thumb|right|200px|Alimentation IC2]] </li>
 +
<li style="display: inline-block;"> [[Fichier:boutonB2.jpg|thumb|right|200px|Micro-interrupteur ]] </li>
 +
<li style="display: inline-block;"> [[Fichier:Microphone.png|thumb|right|200px|Microphone]] </li>
 +
<li style="display: inline-block;"> [[Fichier:ledB2.jpg|thumb|right|200px|Led]] </li>
 +
<li style="display: inline-block;"> [[Fichier:resistanceB2.jpg|thumb|right|200px|Résistance]] </li>
 +
<li style="display: inline-block;"> [[Fichier:inducteurB2.jpg|thumb|right|200px|Inducteur]] </li>
 +
<li style="display: inline-block;"> [[Fichier:condensateurB2.jpg|thumb|right|200px|Condensateur]] </li>
 +
<li style="display: inline-block;"> [[Fichier:potentiometreB2.jpg|thumb|right|200px|Potentiomètre]] </li>
 +
<li style="display: inline-block;"> [[Fichier:quartzB2.png|thumb|right|200px|Résonateur quartz]] </li>
 +
</ul></div>
 +
 
 +
==Code de la clé USB==
 +
 
 +
Nous avons modifié le code de key.c qui se trouve dans ce dossier.
 +
 
 +
Ce code permet d'échantillonner le son.
 +
 
 +
[[Fichier:MemoireB2.zip]]
 +
 
 +
==Illustration de la clé USB==
 +
 
 +
Schéma et circuit imprimé de notre clé USB:
 +
 
 +
[[Fichier:CircuitB2.png|thumb|500px|left]]
 +
 
 +
[[Fichier:schematicmicroB2.png|thumb|500px|right]]
 +
 
 +
<br style="clear: both;" />
 +
 
 +
Fichier contenant la forme de notre clé USB réalisé sur Inkscape :
 +
 
 +
[[Fichier:FormeB2.zip]]
 +
 
 +
Fichier contenant la version finale du fritzing de notre clé USB:
 +
 
 +
[[Fichier:CleFritzingB2.zip]]
 +
 
 +
=<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 80%; background: #800080; vertical-align: top; width: 98%;"> Chronologie </div>=
 +
 
 +
==Janvier==
  
 
'''27/01/2020'''
 
'''27/01/2020'''
  
 
Idée : Synthèse vocale qui décrit tout ce que la clef fait
 
Idée : Synthèse vocale qui décrit tout ce que la clef fait
 +
 +
==Février==
  
 
'''10/02/2020'''
 
'''10/02/2020'''
Ligne 40 : Ligne 250 :
 
Recherche de notre microphone : https://fr.farnell.com/kingstate/kecg2740pbj/microphone-miniature-electret/dp/1299885?gclid=EAIaIQobChMIntmX98TG5wIVVJnVCh1wkga7EAQYAiABEgL_XfD_BwE&gross_price=true&mckv=GxWpbYpX_dc|pcrid|80993908502|&CMP=KNC-GFR-GEN-SHOPPING-1299885
 
Recherche de notre microphone : https://fr.farnell.com/kingstate/kecg2740pbj/microphone-miniature-electret/dp/1299885?gclid=EAIaIQobChMIntmX98TG5wIVVJnVCh1wkga7EAQYAiABEgL_XfD_BwE&gross_price=true&mckv=GxWpbYpX_dc|pcrid|80993908502|&CMP=KNC-GFR-GEN-SHOPPING-1299885
  
'''17/02/2020 & 02/03/2020'''  
+
'''17/02/2020 & 02/03/2020'''
  
 
Nous avons appris à utiliser le logiciel Fritzing en réalisant le Schematic et le PCB d'un circuit imprimé.
 
Nous avons appris à utiliser le logiciel Fritzing en réalisant le Schematic et le PCB d'un circuit imprimé.
 
Le but est ici de créer un dé avec des leds.
 
Le but est ici de créer un dé avec des leds.
  
Voici le circuit du dé (face avant) que nous avons réalisé :
+
Voici le circuit du dé que nous avons réalisé :
  
[[Fichier:alixevefavant.png]]
+
[[Fichier:alixevefavant.png|thumb|left|500px|Face avant]]
  
Voici le circuit du dé (face arrière) que nous avons réalisé :
+
[[Fichier:alixevefarriere.png|thumb|right|500px|Face arrière]]
  
[[Fichier:alixevefarriere.png]]
+
<br style="clear: both;" />
 +
 
 +
==Mars==
  
 
'''09/03/2020'''
 
'''09/03/2020'''
Ligne 80 : Ligne 292 :
 
Démonstration de l'exécution : [[media:binome2019-2-test1.mp4]].
 
Démonstration de l'exécution : [[media:binome2019-2-test1.mp4]].
  
=<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #800080; vertical-align: top; width: 98%;"> Conclusion </div>=
 
  
 
'''16/03/2020'''
 
'''16/03/2020'''
Ligne 86 : Ligne 297 :
 
Première séance via chat.plil.fr  
 
Première séance via chat.plil.fr  
 
Test sur la carte, corrections de bugs dans le programme
 
Test sur la carte, corrections de bugs dans le programme
Test à l'aide d'un arduino et des led disponibles chez Eve :
+
Test à l'aide d'un Arduino Uno et des composants disponibles chez Eve :
[[Fichier:testeve.png]]
+
[[Fichier:testeve.jpg|500px]]
  
 
'''19/03/2020'''
 
'''19/03/2020'''
  
Finalisation du dé électronique et début de la conception de la carte de la clef USB sur fritzing
+
Finalisation du dé électronique et début de la conception de la carte de la clef USB sur Fritzing.
 +
 
 +
'''23/03/2020'''
 +
 
 +
Nous avions pris la cle_usb_bis du wiki mais nous avons remarqué qu'il n'y avait pas d'I/O analogique donc nous avons pris la clé "plus simple" (cle_usb sur le wiki).
 +
Nous avons ensuite ajouté un microphone et un amplificateur.
 +
 
 +
'''26/03/2020'''
 +
 
 +
Nous avons modifié notre schematic afin qu'il soit plus clair et nous avons changé d'I/O de l'ATMega8u2 le micro afin d'être sur une I/O analogique.
 +
 
 +
'''31/03/2020'''
 +
 
 +
Nous avons commencé à regarder le wiki et avons avancé sur le fritzing de la clé.
 +
Nous avons appris à l'aide de Inkscape à créer une forme personnalisée pour la clé, voici la forme que nous avons choisi :
 +
[[Fichier:FormeB2.zip]]
 +
 
 +
==Avril==
 +
 
 +
'''02/04/2020'''
 +
 
 +
Nous avons continué le circuit imprimé de notre clé en mettant tous nos composants ajoutés en composants de surface sauf le micro.
 +
 
 +
'''06/04/2020'''
 +
 
 +
Nous avons continué le circuit imprimé de notre clé en réorganisant les différents éléments dessus afin d'optimiser la place prise par les composants.
 +
 
 +
'''09/04/2020'''
 +
 
 +
Nous avons fini le fritzing de notre clé USB en l'optimisant au maximum au niveau des fils et de la place prise.
 +
Au niveau de la partie programmation, nous avons fait les modifications nécessaires comme indiqué sur le wiki au niveau des dossiers et de la modification de fichiers.
 +
Nous avons également mis la vidéo de notre dé sur le wiki.
 +
 
 +
'''27/04/2020'''
 +
 
 +
Nous avons complété notre wiki dans la partie "matériel utilisé" et l'avons optimisé afin de séparer les choses terminées de la chronologie afin que ce soit plus clair.
 +
Nous avons commencé à réfléchir à un programme permettant d'échantillonner le son et l'écrire dans une mémoire, nous avons écrit ceci (sur Arduino):
 +
 
 +
const int pinMicro = A0;
 +
void setup() {
 +
  // put your setup code here, to run once:
 +
  Serial.begin(9600);
 +
}
 +
void loop() {
 +
  // put your main code here, to run repeatedly:
 +
  if (analogRead(pinMicro) >= 30) {
 +
    Serial.println("dévérouillage");
 +
  }
 +
}
 +
 
 +
Cependant, sur le microcontrôleur il n'y a pas de convertisseur et il faut donc utiliser un comparateur, nous allons essayer de modifier cela à la prochaine séance.
 +
 
 +
'''30/04/2020'''
 +
 
 +
Nous nous sommes rendues compte qu'il fallait écrire dans la mémoire.
 +
 
 +
Les modifications suivantes ont été réalisées dans key.c dans le fichier TestMemRW.
 +
 
 +
Notre but aujourd'hui était de déclarer un tableau de 256 octets puis de le remplir avec les bits récupérés sur la pin PD5 branchée sur le micro et d'envoyer le tableau dans la mémoire jusqu'à ce qu'elle soit pleine.
 +
 
 +
unsigned char inputs[]={0x00,0x00,0x20};
 +
unsigned char pullups[]={0x00,0x00,0x00};
 +
inputs_init(inputs,pullups);
 +
unsigned char data[256];
 +
int i,j;
 +
unsigned char values[3];
 +
for(i=0;i<MEM_SIZE/256;i++)
 +
  for(j=0;j<8;j++){
 +
      inputs_get(values);   
 +
      data[i] = (data[i]<<1) | (values[2]>>5);
 +
      }
 +
 
 +
Afin d'écrire dans la mémoire nous utilisons les lignes de codes :
 +
AT45DB641E_write_buffer(&MEM1_PORT,MEM1_PIN,data,len,SEQ_START|SEQ_STOP);
 +
AT45DB641E_write_page(&MEM1_PORT,MEM1_PIN,0);
 +
 
 +
==Mai==
 +
 
 +
'''04/05/2020'''
 +
 
 +
Nous avons fini la partie la plus importante du code, nous avons continué de modifier le fichier key.c.
 +
 
 +
Nous avons également commencé à chercher le délai nécessaire pour faire l'acquisition à une vitesse raisonnable, car nous ne pouvons pas écrire plus vite que l'on peut écrire dans la mémoire.
 +
 
 +
Pour cela nous recherchons deux choses : 
 +
 
 +
- La vitesse maximale SPI utilisable avec un AT45DB641E
 +
 
 +
- La vitesse SPI d'un ATMega16U2 avec comme configuration
 +
 
 +
SPSR = (1<<SPI2X);
 +
SPCR = (1<<SPE)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA);
 +
 
 +
Nous avons trouvé comme vitesse maximale SPI utilisable avec un AT45DB641E : 104MHz.
 +
 
 +
Nous chercherons à la prochaine séance la vitesse SPI de l'ATMega16U2.
 +
 
 +
'''07/05/2020'''
 +
 
 +
Nous cherchons la fréquence pour l'horloge du bus SPI.
 +
 
 +
Nous avons: SPR0=0, SPR1=1, SPI2X=1.
 +
 
 +
Donc à l'aide de la table Table 17-5 de la datasheet de l'ATMega16U2 : http://ww1.microchip.com/downloads/en/DeviceDoc/doc7799.pdf :
 +
 
 +
Nous trouvons fosc/2 et fosc (la fréquence inscrite sur le quartz) est 8Mhz, soit fosc/2 = 4 MHz.
 +
 
 +
La vitesse SPI de l'ATMega16U2 est de 4 MHz.
 +
 
 +
 
 +
Il faut maintenant ralentir la boucle d'acquisition, nous supposons que le temps d'écriture est négligeable à 4 Mhz par rapport à la vitesse d'échantillonnage.
 +
 
 +
Nous avons donc cherché combien il fallait attendre entre 2 itérations pour arriver à 40 kHz.
 +
 
 +
Nous avons trouvé qu'il fallait un délai de 25 us dans la boucle d'acquisition des sons pour que cela se fasse à 40 kHz.
 +
 
 +
Nous avons donc rajouté la ligne suivante dans notre code :
 +
if(i<len-1 || j<7) __delay_us(25);
 +
 
 +
=<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 80%; background: #800080; vertical-align: top; width: 98%;"> Conclusion </div>=
 +
 
 +
Ce bureau d'étude nous a appris beaucoup de choses et nous sommes très contentes d'avoir pu y participer, même si cela à pu se compliquer à cause de la distance.
 +
 
 +
 
 +
Tout d'abord, nous avons commencé par le dé électronique.
 +
 
 +
Celui-ci est simple dans sa conception et nous a permis de nous familiariser avec les différents logiciels tels que Fritzing et de comprendre, créer puis organiser des circuits schématiques.
 +
 
 +
Ensuite, ce logiciel nous aura aussi permis de réaliser la vue PCB.
 +
 
 +
Un autre logiciel que nous avons appris à maîtriser est IDE Arduino qui nous a permis de coder dans le cadre de l’électronique et donc de voir un autre point de vue de la programmation.
 +
 
 +
Nous avons également pu apprendre à souder quelques composants.
 +
 
 +
Nous avons ainsi apprécier la fierté lorsque le projet est finalement fini et opérationnel !
 +
 
 +
 
 +
Par la suite, nous avons pu commencer à nous occuper de la clé USB, malgré le confinement, et ainsi nous avons pu trouver une nouvelle organisation de travail.
 +
 
 +
A travers Mattermost nous avons pu continuer nos séances aux horaires habituels mais de façon plus autonome : nous savons désormais lire une datasheet seules.
 +
 
 +
Nous avons pu nous organiser et nous répartir les tâches mais en travaillant tout de même ensemble pour le plus gros du travail.
 +
 
 +
Nous avons appris à créer une forme personnalisée à l’aide d’Inkscape.
 +
 
 +
L'un des plus gros défis du BE a été d'apprendre à manipuler la mémoire.
  
[[Fichier:schemaclef1.png]]
+
Nous aurions sans doute pu finir ce BE et avoir notre clé USB entre les mains si nous avions pu avoir accès aux locaux et au matériel (et un peu d'aide des professeurs).
  
[[Fichier:schemaclef2.png]]
 
  
[[Fichier:schemaclef3.png]]
+
Finalement ce bureau d'étude nous aura appris beaucoup de choses pratiques, mais surtout il nous a permis de confirmer nos choix d'orientation pour le cycle ingénieur : Eve sait désormais qu'elle s'épanouit plus dans l'informatique tandis qu'Alix s'est bien amusée à faire les soudures.

Version actuelle datée du 22 mai 2020 à 22:12


Introduction

L'objectif de ce nouveau bureau d'étude est de concevoir et de créer une clé USB en créant un circuit électronique, en soudant des composants électroniques et en programmant le micro-processeur mais aussi en y ajoutant une fonctionnalité pour la rendre unique.

Nous avons choisi comme particularité le déverrouillage de la clé par haut volume sonore, à l'aide d'un micro placé sur la clé.

Ce BE aura quelques rebondissements : tout d'abord l'ajout d'un projet intermédiaire de dé électronique puis une crise sanitaire mondiale nous bloquant l'accès aux locaux et au matériel... Mais il en faudra plus pour nous ralentir comme vous allez le découvrir...

Dé électronique

Avant de commencer notre clé USB, nous avons réalisé un petit projet préalable.

Nous avons créé un dé électronique, son fonctionnement est simple : Il faut appuyer sur le bouton et il nous donne un chiffre aléatoire (le nombre de leds correspondant s'allume).

Ce projet nous a permis de connaître les logiciels qui nous seront utiles pour notre clé USB.

Nous avons codé à l'aide de l'IDE Arduino et nous avons réalisé le PCB à l'aide de Fritzing.

Nous avons également appris à souder les composants à l'aide du matériel présent à Polytech.

Matériel utilisé pour le dé électronique

  • Micro-processeur ATTiny84
  • Led
  • Résistance

Code du dé électronique

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define LED1 0
#define LED2 1
#define LED3 2
#define LED4 3
#define LED5 4
#define LED6 5
#define LED7 6
int Tableaupin[7]= {5,4,1,3,6,2,0};
int BROCHE_BOUTON=7;
void setup() {
 // initialisation
 Serial.begin(9600);
 pinMode(Tableaupin[LED1], OUTPUT);
 pinMode(Tableaupin[LED2], OUTPUT);
 pinMode(Tableaupin[LED3], OUTPUT);
 pinMode(Tableaupin[LED4], OUTPUT);
 pinMode(Tableaupin[LED5], OUTPUT);
 pinMode(Tableaupin[LED6], OUTPUT);
 pinMode(Tableaupin[LED7], OUTPUT);
 pinMode(BROCHE_BOUTON,INPUT_PULLUP);
 digitalWrite(Tableaupin[LED1],HIGH);
 delay(200);
 digitalWrite(Tableaupin[LED1],LOW);
 digitalWrite(Tableaupin[LED2],HIGH);
 delay(200);
 digitalWrite(Tableaupin[LED2],LOW);
 digitalWrite(Tableaupin[LED3],HIGH);
 delay(200);
 digitalWrite(Tableaupin[LED3],LOW);
 digitalWrite(Tableaupin[LED4],HIGH);
 delay(200);
 digitalWrite(Tableaupin[LED4],LOW);
 digitalWrite(Tableaupin[LED5],HIGH);
 delay(200);
 digitalWrite(Tableaupin[LED5],LOW);
 digitalWrite(Tableaupin[LED6],HIGH);
 delay(200);
 digitalWrite(Tableaupin[LED6],LOW);
 digitalWrite(Tableaupin[LED7],HIGH);
 delay(200);
 digitalWrite(Tableaupin[LED7],LOW);
 randomSeed(analogRead(0));
}
int random_a_b(int a,int b)
//fonction qui renvoie un nombre entre a inclus et b exclus
{
return random()%(b-a) +a;
}
//fct nombre de leds allumées
void de1T()
{
  digitalWrite(Tableaupin[LED4],HIGH);
  delay(1000);
}
void de2T()
{
  digitalWrite(Tableaupin[LED3],HIGH);
  digitalWrite(Tableaupin[LED5],HIGH);
  delay(1000);
} 
void de3T()
{
  digitalWrite(Tableaupin[LED3],HIGH);
  digitalWrite(Tableaupin[LED4],HIGH);
  digitalWrite(Tableaupin[LED5],HIGH);
  delay(1000);
}
void de4T()
{
  digitalWrite(Tableaupin[LED1],HIGH);
  digitalWrite(Tableaupin[LED3],HIGH);
  digitalWrite(Tableaupin[LED5],HIGH);
  digitalWrite(Tableaupin[LED7],HIGH);
  delay(1000);
}
void de5T()
{
  digitalWrite(Tableaupin[LED1],HIGH);
  digitalWrite(Tableaupin[LED3],HIGH);
  digitalWrite(Tableaupin[LED4],HIGH);
  digitalWrite(Tableaupin[LED5],HIGH);
  digitalWrite(Tableaupin[LED7],HIGH);
  delay(1000);
}
void de6T()
{
  digitalWrite(Tableaupin[LED1],HIGH);
  digitalWrite(Tableaupin[LED2],HIGH);
  digitalWrite(Tableaupin[LED3],HIGH);
  digitalWrite(Tableaupin[LED5],HIGH);
  digitalWrite(Tableaupin[LED6],HIGH);
  digitalWrite(Tableaupin[LED7],HIGH);
  delay(1000);
}
// fonct eteint lampe
void de6F()
{
  digitalWrite(Tableaupin[LED1],LOW);
  digitalWrite(Tableaupin[LED2],LOW);
  digitalWrite(Tableaupin[LED3],LOW);
  digitalWrite(Tableaupin[LED4],LOW);
  digitalWrite(Tableaupin[LED5],LOW);
  digitalWrite(Tableaupin[LED6],LOW);
  digitalWrite(Tableaupin[LED7],LOW);
}
//fonction d'affichage resultat final
void loop()
{
  int LED;
 // partie selection dé
  if (digitalRead(BROCHE_BOUTON) == HIGH){
  LED=random_a_b(0,6);
  de6F();
  }
  unsigned char test=(digitalRead(BROCHE_BOUTON)==LOW);
  switch (LED)
  {
    case 0:
      if (test) de1T(); break;
    case 1:
      if (test) de2T(); break;
    case 2:
      if (test) de3T(); break;
    case 3:
      if (test) de4T(); break;
    case 4:
      if (test) de5T(); break;
    case 5:
      if (test) de6T(); break;
  }
}

Illustration du dé électronique

Photos du dé

Face avant
Face arrière


Vidéo du dé

Média:dévidéoB2.mp4

Fichier fritzing de notre dé

Fichier:DéB2.zip

Clé USB

Notre projet principal est la réalisation d’une clé USB. Nous y avons ajouté comme fonctionnalité un déverrouillage par haut-volume sonore, ce qui signifie qu’à partir d’un certain seuil sonore, nous pouvons avoir accès à la mémoire de la clé USB.

Nous avons réalisé le fichier Fritzing ainsi qu’un code qui permet d’échantillonner le son récupéré par le micro.

Matériel utilisé pour la clé USB

  • Micro-contrôleur ATMega16u2
  • Mémoire AT45DB641E
  • Alimentation IC2
  • Micro-interrupteur
  • Microphone
  • Led
  • Résistance
  • Inducteur
  • Condensateur
  • Potentiomètre
  • Résonateur quartz

Code de la clé USB

Nous avons modifié le code de key.c qui se trouve dans ce dossier.

Ce code permet d'échantillonner le son.

Fichier:MemoireB2.zip

Illustration de la clé USB

Schéma et circuit imprimé de notre clé USB:

CircuitB2.png
SchematicmicroB2.png


Fichier contenant la forme de notre clé USB réalisé sur Inkscape :

Fichier:FormeB2.zip

Fichier contenant la version finale du fritzing de notre clé USB:

Fichier:CleFritzingB2.zip

Chronologie

Janvier

27/01/2020

Idée : Synthèse vocale qui décrit tout ce que la clef fait

Février

10/02/2020

Nouvelle idée pour remplacer la précédente : Clé qui se verrouille/déverrouille et pour la déverrouiller de façon originale : crier dessus

Recherche de notre microphone : https://fr.farnell.com/kingstate/kecg2740pbj/microphone-miniature-electret/dp/1299885?gclid=EAIaIQobChMIntmX98TG5wIVVJnVCh1wkga7EAQYAiABEgL_XfD_BwE&gross_price=true&mckv=GxWpbYpX_dc%7Cpcrid%7C80993908502%7C&CMP=KNC-GFR-GEN-SHOPPING-1299885

17/02/2020 & 02/03/2020

Nous avons appris à utiliser le logiciel Fritzing en réalisant le Schematic et le PCB d'un circuit imprimé. Le but est ici de créer un dé avec des leds.

Voici le circuit du dé que nous avons réalisé :

Face avant
Face arrière


Mars

09/03/2020

Programmation du dé et début de la soudure

12/03/2020

Fin de la soudure et de la programmation du dé


Test ReX 15/03/2020, Après quelques soudures le programme suivant passe sur l'ATtiny84 :

#define MAX_LED 7
int leds[]={0,1,2,3,4,5,6};
void setup() {
  int i;
  for(i=0;i<MAX_LED;i++) pinMode(leds[i], OUTPUT);
}
void loop() {
  int i;
  for(i=0;i<MAX_LED;i++) digitalWrite(leds[i], HIGH);
  delay(1000);
  for(i=0;i<MAX_LED;i++) digitalWrite(leds[i], LOW);
  delay(1000);
}

Démonstration de l'exécution : media:binome2019-2-test1.mp4.


16/03/2020

Première séance via chat.plil.fr Test sur la carte, corrections de bugs dans le programme Test à l'aide d'un Arduino Uno et des composants disponibles chez Eve : Testeve.jpg

19/03/2020

Finalisation du dé électronique et début de la conception de la carte de la clef USB sur Fritzing.

23/03/2020

Nous avions pris la cle_usb_bis du wiki mais nous avons remarqué qu'il n'y avait pas d'I/O analogique donc nous avons pris la clé "plus simple" (cle_usb sur le wiki). Nous avons ensuite ajouté un microphone et un amplificateur.

26/03/2020

Nous avons modifié notre schematic afin qu'il soit plus clair et nous avons changé d'I/O de l'ATMega8u2 le micro afin d'être sur une I/O analogique.

31/03/2020

Nous avons commencé à regarder le wiki et avons avancé sur le fritzing de la clé. Nous avons appris à l'aide de Inkscape à créer une forme personnalisée pour la clé, voici la forme que nous avons choisi : Fichier:FormeB2.zip

Avril

02/04/2020

Nous avons continué le circuit imprimé de notre clé en mettant tous nos composants ajoutés en composants de surface sauf le micro.

06/04/2020

Nous avons continué le circuit imprimé de notre clé en réorganisant les différents éléments dessus afin d'optimiser la place prise par les composants.

09/04/2020

Nous avons fini le fritzing de notre clé USB en l'optimisant au maximum au niveau des fils et de la place prise. Au niveau de la partie programmation, nous avons fait les modifications nécessaires comme indiqué sur le wiki au niveau des dossiers et de la modification de fichiers. Nous avons également mis la vidéo de notre dé sur le wiki.

27/04/2020

Nous avons complété notre wiki dans la partie "matériel utilisé" et l'avons optimisé afin de séparer les choses terminées de la chronologie afin que ce soit plus clair. Nous avons commencé à réfléchir à un programme permettant d'échantillonner le son et l'écrire dans une mémoire, nous avons écrit ceci (sur Arduino):

const int pinMicro = A0;
void setup() {
 // put your setup code here, to run once:
 Serial.begin(9600);
}
void loop() {
 // put your main code here, to run repeatedly:
 if (analogRead(pinMicro) >= 30) {
   Serial.println("dévérouillage");
 }
}

Cependant, sur le microcontrôleur il n'y a pas de convertisseur et il faut donc utiliser un comparateur, nous allons essayer de modifier cela à la prochaine séance.

30/04/2020

Nous nous sommes rendues compte qu'il fallait écrire dans la mémoire.

Les modifications suivantes ont été réalisées dans key.c dans le fichier TestMemRW.

Notre but aujourd'hui était de déclarer un tableau de 256 octets puis de le remplir avec les bits récupérés sur la pin PD5 branchée sur le micro et d'envoyer le tableau dans la mémoire jusqu'à ce qu'elle soit pleine.

unsigned char inputs[]={0x00,0x00,0x20};
unsigned char pullups[]={0x00,0x00,0x00};
inputs_init(inputs,pullups);
unsigned char data[256];
int i,j;
unsigned char values[3];
for(i=0;i<MEM_SIZE/256;i++)
  for(j=0;j<8;j++){
     inputs_get(values);    
     data[i] = (data[i]<<1) | (values[2]>>5);
     }

Afin d'écrire dans la mémoire nous utilisons les lignes de codes :

AT45DB641E_write_buffer(&MEM1_PORT,MEM1_PIN,data,len,SEQ_START|SEQ_STOP);
AT45DB641E_write_page(&MEM1_PORT,MEM1_PIN,0);

Mai

04/05/2020

Nous avons fini la partie la plus importante du code, nous avons continué de modifier le fichier key.c.

Nous avons également commencé à chercher le délai nécessaire pour faire l'acquisition à une vitesse raisonnable, car nous ne pouvons pas écrire plus vite que l'on peut écrire dans la mémoire.

Pour cela nous recherchons deux choses :

- La vitesse maximale SPI utilisable avec un AT45DB641E

- La vitesse SPI d'un ATMega16U2 avec comme configuration

SPSR = (1<<SPI2X);
SPCR = (1<<SPE)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA);

Nous avons trouvé comme vitesse maximale SPI utilisable avec un AT45DB641E : 104MHz.

Nous chercherons à la prochaine séance la vitesse SPI de l'ATMega16U2.

07/05/2020

Nous cherchons la fréquence pour l'horloge du bus SPI.

Nous avons: SPR0=0, SPR1=1, SPI2X=1.

Donc à l'aide de la table Table 17-5 de la datasheet de l'ATMega16U2 : http://ww1.microchip.com/downloads/en/DeviceDoc/doc7799.pdf :

Nous trouvons fosc/2 et fosc (la fréquence inscrite sur le quartz) est 8Mhz, soit fosc/2 = 4 MHz.

La vitesse SPI de l'ATMega16U2 est de 4 MHz.


Il faut maintenant ralentir la boucle d'acquisition, nous supposons que le temps d'écriture est négligeable à 4 Mhz par rapport à la vitesse d'échantillonnage.

Nous avons donc cherché combien il fallait attendre entre 2 itérations pour arriver à 40 kHz.

Nous avons trouvé qu'il fallait un délai de 25 us dans la boucle d'acquisition des sons pour que cela se fasse à 40 kHz.

Nous avons donc rajouté la ligne suivante dans notre code :

if(i<len-1 || j<7) __delay_us(25);

Conclusion

Ce bureau d'étude nous a appris beaucoup de choses et nous sommes très contentes d'avoir pu y participer, même si cela à pu se compliquer à cause de la distance.


Tout d'abord, nous avons commencé par le dé électronique.

Celui-ci est simple dans sa conception et nous a permis de nous familiariser avec les différents logiciels tels que Fritzing et de comprendre, créer puis organiser des circuits schématiques.

Ensuite, ce logiciel nous aura aussi permis de réaliser la vue PCB.

Un autre logiciel que nous avons appris à maîtriser est IDE Arduino qui nous a permis de coder dans le cadre de l’électronique et donc de voir un autre point de vue de la programmation.

Nous avons également pu apprendre à souder quelques composants.

Nous avons ainsi apprécier la fierté lorsque le projet est finalement fini et opérationnel !


Par la suite, nous avons pu commencer à nous occuper de la clé USB, malgré le confinement, et ainsi nous avons pu trouver une nouvelle organisation de travail.

A travers Mattermost nous avons pu continuer nos séances aux horaires habituels mais de façon plus autonome : nous savons désormais lire une datasheet seules.

Nous avons pu nous organiser et nous répartir les tâches mais en travaillant tout de même ensemble pour le plus gros du travail.

Nous avons appris à créer une forme personnalisée à l’aide d’Inkscape.

L'un des plus gros défis du BE a été d'apprendre à manipuler la mémoire.

Nous aurions sans doute pu finir ce BE et avoir notre clé USB entre les mains si nous avions pu avoir accès aux locaux et au matériel (et un peu d'aide des professeurs).


Finalement ce bureau d'étude nous aura appris beaucoup de choses pratiques, mais surtout il nous a permis de confirmer nos choix d'orientation pour le cycle ingénieur : Eve sait désormais qu'elle s'épanouit plus dans l'informatique tandis qu'Alix s'est bien amusée à faire les soudures.