Binome2019-5 : Différence entre versions

De Wiki de bureau d'études PeiP
(Programme)
(Programme)
Ligne 91 : Ligne 91 :
 
Voici le programme :
 
Voici le programme :
  
int pin[7]={5,4,1,3,6,2,0}, pinButton = 9;
+
  int pin[7]={5,4,1,3,6,2,0}, pinButton = 9;
int randNum=1, i;
+
  int randNum=1, i;
 
 
void setup() {
 
  Serial.begin(9600); 
 
  randomSeed(analogRead(A7));
 
 
    
 
    
   for(i=0; i<7; i++){
+
   void setup() {
    pinMode(pin[i], OUTPUT);
+
    Serial.begin(9600); 
 +
    randomSeed(analogRead(A7));
 +
    for(i=0; i<7; i++){
 +
      pinMode(pin[i], OUTPUT);
 +
    }
 +
    pinMode(pinButton, INPUT_PULLUP);
 
   }
 
   }
   pinMode(pinButton, INPUT_PULLUP);
+
    
}
+
  void afficheNum(int nbr) {
 
+
    if(nbr == 1){
void afficheNum(int nbr) {
+
      digitalWrite(pin[3], HIGH);
  if(nbr == 1){
+
    }
     digitalWrite(pin[3], HIGH);
+
    if(nbr == 2){
 +
      digitalWrite(pin[0], HIGH);
 +
      digitalWrite(pin[6], HIGH);
 +
    }
 +
    if(nbr == 3){
 +
      digitalWrite(pin[0], HIGH);
 +
      digitalWrite(pin[3], HIGH);
 +
      digitalWrite(pin[6], HIGH);
 +
    }
 +
    if(nbr == 4){
 +
      digitalWrite(pin[0], HIGH);
 +
      digitalWrite(pin[2], HIGH);
 +
      digitalWrite(pin[4], HIGH);
 +
      digitalWrite(pin[6], HIGH);
 +
     }
 +
    if(nbr == 5){
 +
      digitalWrite(pin[0], HIGH);
 +
      digitalWrite(pin[2], HIGH);
 +
      digitalWrite(pin[3], HIGH);
 +
      digitalWrite(pin[4], HIGH);
 +
      digitalWrite(pin[6], HIGH);
 +
    }
 +
    if(nbr == 6){
 +
      digitalWrite(pin[0], HIGH);
 +
      digitalWrite(pin[1], HIGH);
 +
      digitalWrite(pin[2], HIGH);
 +
      digitalWrite(pin[4], HIGH);
 +
      digitalWrite(pin[5], HIGH);
 +
      digitalWrite(pin[6], HIGH);
 +
    }
 
   }
 
   }
   if(nbr == 2){
+
    
     digitalWrite(pin[0], HIGH);
+
  int vitesse = 60, nbrTour = 4;
    digitalWrite(pin[6], HIGH);
+
  void animation(){
 +
     for(i=0;i<nbrTour;i++){
 +
      digitalWrite(pin[0], HIGH);
 +
      delay(vitesse);
 +
      digitalWrite(pin[0], LOW);
 +
      digitalWrite(pin[1], HIGH);
 +
      delay(vitesse);
 +
      digitalWrite(pin[1], LOW);
 +
      digitalWrite(pin[2], HIGH);
 +
      delay(vitesse);
 +
      digitalWrite(pin[2], LOW);
 +
      digitalWrite(pin[6], HIGH);
 +
      delay(vitesse);
 +
      digitalWrite(pin[6], LOW);
 +
      digitalWrite(pin[5], HIGH);
 +
      delay(vitesse);
 +
      digitalWrite(pin[5], LOW);
 +
      digitalWrite(pin[4], HIGH);
 +
      delay(vitesse);
 +
      digitalWrite(pin[4], LOW);
 +
    }
 
   }
 
   }
   if(nbr == 3){
+
    
    digitalWrite(pin[0], HIGH);
+
   void loop() {
    digitalWrite(pin[3], HIGH);
+
     if(digitalRead(pinButton)==0){
    digitalWrite(pin[6], HIGH);
+
     
   }
+
      //On enleve l'affichage
  if(nbr == 4){
+
      for(i=0; i<7; i++){
     digitalWrite(pin[0], HIGH);
+
        digitalWrite(pin[i], LOW);
    digitalWrite(pin[2], HIGH);
+
      }
    digitalWrite(pin[4], HIGH);
+
      animation();
    digitalWrite(pin[6], HIGH);
+
      randNum = random(1, 7);
  }
+
      afficheNum(randNum);
  if(nbr == 5){
+
      delay(1000);
    digitalWrite(pin[0], HIGH);
 
    digitalWrite(pin[2], HIGH);
 
    digitalWrite(pin[3], HIGH);
 
    digitalWrite(pin[4], HIGH);
 
    digitalWrite(pin[6], HIGH);
 
  }
 
  if(nbr == 6){
 
    digitalWrite(pin[0], HIGH);
 
    digitalWrite(pin[1], HIGH);
 
    digitalWrite(pin[2], HIGH);
 
    digitalWrite(pin[4], HIGH);
 
    digitalWrite(pin[5], HIGH);
 
    digitalWrite(pin[6], HIGH);
 
  }
 
}
 
 
 
int vitesse = 60, nbrTour = 4;
 
void animation(){
 
  for(i=0;i<nbrTour;i++){
 
    digitalWrite(pin[0], HIGH);
 
    delay(vitesse);
 
    digitalWrite(pin[0], LOW);
 
    digitalWrite(pin[1], HIGH);
 
    delay(vitesse);
 
    digitalWrite(pin[1], LOW);
 
    digitalWrite(pin[2], HIGH);
 
    delay(vitesse);
 
    digitalWrite(pin[2], LOW);
 
    digitalWrite(pin[6], HIGH);
 
    delay(vitesse);
 
    digitalWrite(pin[6], LOW);
 
    digitalWrite(pin[5], HIGH);
 
    delay(vitesse);
 
    digitalWrite(pin[5], LOW);
 
    digitalWrite(pin[4], HIGH);
 
    delay(vitesse);
 
    digitalWrite(pin[4], LOW);
 
  }
 
}
 
 
 
void loop() {
 
  if(digitalRead(pinButton)==0){
 
   
 
    //On enleve l'affichage
 
    for(i=0; i<7; i++){
 
      digitalWrite(pin[i], LOW);
 
 
     }
 
     }
    animation();
 
    randNum = random(1, 7);
 
    afficheNum(randNum);
 
    delay(1000);
 
 
   }
 
   }
}
 
  
 
=<div class="mcwiki-header" style="border-radius: 25px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #2E64FE; vertical-align: top; width: 98%;"> Déroulement des séances </div>=
 
=<div class="mcwiki-header" style="border-radius: 25px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #2E64FE; vertical-align: top; width: 98%;"> Déroulement des séances </div>=

Version du 26 avril 2020 à 23:34

INTRODUCTION

Description du projet

Le but de notre Bureau d'Étude est de créer notre propre clé USB (Universal Serial Bus) de 16 Go, comprenant la réalisation des logiciels, la fabrication de la clé et l'ajout de fonction(s) supplémentaire(s). La difficulté première est que la création de ce type de clé est encore expérimentale.

De notre côté, nous avons choisi de nous attaquer au verrouillage de la clé, et ce par code à deux chiffres, potentiellement grâce à deux compteurs molette (comme suit). Le but de ce verrouillage sera de sécuriser au maximum les données personnelles et professionnelles présentes dans la clé.


Matériel utilisé

Carte électronique à utiliser
Molettes potentiomètre à 10 chiffres utilisées sur la clé




Cette molette possède trois pattes : La première (+) et la troisième (-) sont les pattes d'alimentation et la deuxième est la patte de sortie du courant. Ici, les différentes valeurs affichées représentent le palier de courant envoyé. Le but serait de faire reconnaître ces paliers en tant que nombre afin de les utiliser comme élément d'un code.Seulement, elle nécessite une prise analogique sur le micro-contrôleur. Nous allons donc utiliser un ATMEGA32U4 que l'on modifiera afin d'être adapté au projet. Il analysera les tensions renvoyées par le potentiomètre, comparera celles-ci aux valeurs choisies pour le code et permettra ou non la lecture et l'écriture dans la clé.




Carte Arduino UNO à programmer
Logiciel Arduino servant à coder


Afin de programmer notre clé, nous utiliserons le logiciel Arduino, branché à un Arduino UNO.














Projet intermédiaire : Dé


Afin de de se familiariser avec l'environnement et les outils dont nous auront besoin pour la réalisation de notre clé USB, nous avons réalisé un premier projet plus simple : un carte électronique composés de 7 leds afin de représenter un lancé de dé. Lors de la pression sur le bouton de la carte, les leds doivent s'allumer de manière à représenter un chiffre aléatoire tel qu'il est sur un dé.

[PHOTO Dé FINI]

Réalisation

Tout d'abord, nous avons réalisé le PCB de la carte sur le logiciel Fritzing afin de pouvoir ensuite l'imprimer. Tout d'abord nous avons réaliser le schéma électrique de la carte : microcontrôleur (attiny84), bouton, alimentation (batterie), 7 resistances, 7 leds. Une fois les composants mis en place et relié entre eux, nous avons réalisé le PCB de la carte en veillant à ce que les pistes ne se croisent pas et à ce que tous les composants soient bien placé. En parallèle de cette étape, nous avons conçu le programme permettant l'affichage sur les leds.

Une fois la carte imprimée, nous avons soudé les différents composants dessus puis testé le programme.

Voici le fichier Fritzing : Fichier:Circuit de.zip

Schéma circuit

Pcb circuit

Programme

Nous avons tout d'abord fait un programme fonctionnant sur un arduino UNO pour ensuite le modifier facilement afin qu'il fonctionne sur la carte du dé. Afin de générer un nombre aléatoire nous utilisons la fonction random ainsi que la fonction randomSeed pour que la séquence de nombre soit différente à chaque démarrage de la carte. Nous avons aussi mis en place une animation qui se joue à chaque pression du bouton représentant un lancé de dé. Le nombre est ensuite affiché sur les leds à la manière d'un dé classique.

Fichier:Arduino de.mp4

Voici le programme :

 int pin[7]={5,4,1,3,6,2,0}, pinButton = 9;
 int randNum=1, i;
 
 void setup() { 
   Serial.begin(9600);  
   randomSeed(analogRead(A7));
   for(i=0; i<7; i++){
     pinMode(pin[i], OUTPUT);
   }
   pinMode(pinButton, INPUT_PULLUP);
 }
 
 void afficheNum(int nbr) {
   if(nbr == 1){
     digitalWrite(pin[3], HIGH);
   }
   if(nbr == 2){
     digitalWrite(pin[0], HIGH);
     digitalWrite(pin[6], HIGH);
   }
   if(nbr == 3){
     digitalWrite(pin[0], HIGH);
     digitalWrite(pin[3], HIGH);
     digitalWrite(pin[6], HIGH);
   }
   if(nbr == 4){
     digitalWrite(pin[0], HIGH);
     digitalWrite(pin[2], HIGH);
     digitalWrite(pin[4], HIGH);
     digitalWrite(pin[6], HIGH);
   }
   if(nbr == 5){
     digitalWrite(pin[0], HIGH);
     digitalWrite(pin[2], HIGH);
     digitalWrite(pin[3], HIGH);
     digitalWrite(pin[4], HIGH);
     digitalWrite(pin[6], HIGH);
   }
   if(nbr == 6){
     digitalWrite(pin[0], HIGH);
     digitalWrite(pin[1], HIGH);
     digitalWrite(pin[2], HIGH);
     digitalWrite(pin[4], HIGH);
     digitalWrite(pin[5], HIGH);
     digitalWrite(pin[6], HIGH);
   }
 }
 
 int vitesse = 60, nbrTour = 4;
 void animation(){
   for(i=0;i<nbrTour;i++){
     digitalWrite(pin[0], HIGH);
     delay(vitesse);
     digitalWrite(pin[0], LOW);
     digitalWrite(pin[1], HIGH);
     delay(vitesse);
     digitalWrite(pin[1], LOW);
     digitalWrite(pin[2], HIGH);
     delay(vitesse);
     digitalWrite(pin[2], LOW);
     digitalWrite(pin[6], HIGH);
     delay(vitesse);
     digitalWrite(pin[6], LOW);
     digitalWrite(pin[5], HIGH);
     delay(vitesse);
     digitalWrite(pin[5], LOW);
     digitalWrite(pin[4], HIGH);
     delay(vitesse);
     digitalWrite(pin[4], LOW);
   }
 }
 
 void loop() {
   if(digitalRead(pinButton)==0){
     
     //On enleve l'affichage
     for(i=0; i<7; i++){
       digitalWrite(pin[i], LOW);
     }
     animation();
     randNum = random(1, 7);
     afficheNum(randNum);
     delay(1000);
   }
 }

Déroulement des séances

- 27/01 et 10/02 : Nous avons recherché et précisé le choix de la molette pour le verrouillage de notre clé, en avons discuté avec les professeurs afin d'en comprendre le "branchement". L'idée principale sera de fixer de fixer les différentes pattes de cette molette sur les ports inutilisés du microcontrôleur et d'en établir les liens.

- 17/02 : Nous avons commencer la prise en main d'un logiciel (FRITZING) pour la mise en place des éléments à incorporer sur la carte, à travers un exemple : un dé électronique. Nous avons pu expérimenter la schématisation, le routage et l'organisation de ces différents éléments sur la carte.

INSERER LA VIDEO YTB SUR LE DE

- 20/02 : Pas cours.

- 02/03 : Nous avons continué la conception du dé électronique, en cherchant à optimiser l'espace pour les composants et leurs connections, et commencé à nous renseigner sur le codage de celui-ci. (Programmation d'un Arduino UNO[1])

- 05/03 : Nous avons finalisé le modèle du dé électronique sur Fitzing, et envoyé le modèle à imprimer.

- 09/03 : Nous avons reçu la carte de notre dé et fait la programmation de celui-ci. L'idée était de faire un remplissage des LEDs qui, par la suite, sera modifié pour être de la même forme que sur un dé (c'est-à-dire un H). Seulement, celui-ci se devait d'être aléatoire. Nous avons donc utilisé des fonctions comme random(x,y) (x=minimum et y=maximum). Pour le bouton, nous avons fait en sorte qu'un courant soit toujours envoyé, puis, à l'aide d'un fil représentant l'interrupteur, le courant était coupé. Cette coupure étant détectée, nous nous en sommes servi. Enfin, nous avons testé sur l'Arduino UNO.

Carte semi soudée du dé

- 12/03 : Nous avons commencé le soudage sur la carte des différents éléments du dé : 7 LEDs, 7 résistances, un bouton, une batterie et un micro-contrôleur.

- 16/03 : Première séance à distance par chat. Malheureusement en retard, nous avons pris soin de noter les différentes remarques du professeurs à l'encontre des autres groupes afin d'éviter tous problèmes concernant le code. Nous avons continué le code du dé puis commencé le PCB de la clé USB. Tristan s'occupera du code tandis que Gaëtan s'occupera du schéma et de la mise en place sur la carte.

- 19/03 : Le programme du dé est terminé fonctionne sur l'arduino Uno et a été envoyé aux professeurs afin de le tester sur la carte. Nous avons modifié la définition des pins dans le programme afin qu'ils correspondent à ceux de L'attiny84. Nous avons aussi ajouter une animation lorsque l'on appuie sur le bouton afin de représenter le roulement du dé.

- 23/03 : Le programme est testé sur la carte et est fonctionnel après quelques modifications.