Binome2020-10 : Différence entre versions
(→Conclusion) |
(→Code arduino) |
||
(34 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 11 : | Ligne 11 : | ||
==Première idée== | ==Première idée== | ||
− | Notre idée principale a été de faire une Clé Minuteur composée de 2 afficheurs à LED 7 segments pour aller de 0 à 99 secondes (on peut aller jusqu'à 3 afficheurs pour couvrir le temps de 0 à 10 min) avec 2 boutons poussoirs, un pour les dizaines de secondes et | + | Notre idée principale a été de faire une Clé Minuteur composée de 2 afficheurs à LED 7 segments pour aller de 0 à 99 secondes (on peut aller jusqu'à 3 afficheurs pour couvrir le temps de 0 à 10 min) avec 2 boutons poussoirs, un pour les dizaines de secondes et un bouton pour les unités (nous devons réfléchir sur le fait de mettre en pause et lancer le minuteur et enfin une petite LED et un buzzer pour montrer la fin du minuteur. |
==Mise en commun & solution pour une carte== | ==Mise en commun & solution pour une carte== | ||
Ligne 18 : | Ligne 18 : | ||
− | M. Redon et M. Boé nous ont donc proposé de faire une carte externe qui contiendra les afficheurs, que nous pourrions connecter à chacune des cartes contenant le programme de la clé (dans notre | + | M. Redon et M. Boé nous ont donc proposé de faire une carte externe qui contiendra les afficheurs, que nous pourrions connecter à chacune des cartes contenant le programme de la clé (dans notre cas : nous connecterons la carte d'afficheur sur notre carte "minuteur") |
− | |||
==Idée finale== | ==Idée finale== | ||
− | Par la suite, nous sommes | + | Par la suite, nous sommes donc partis pour une carte avec 3 afficheurs et 3 boutons: un pour les secondes, un pour les minutes et un autre pour démarrer, mettre en pause et arrêter le minuteur. |
− | |||
==Nos recherches== | ==Nos recherches== | ||
Ligne 47 : | Ligne 45 : | ||
Au tout départ, nous voulions commencer le "Schematic" sur le logiciel Fritzing cependant, il fallait tout d'abord se renseigner sur les composants. | Au tout départ, nous voulions commencer le "Schematic" sur le logiciel Fritzing cependant, il fallait tout d'abord se renseigner sur les composants. | ||
− | C'est pourquoi nous nous sommes | + | C'est pourquoi nous nous sommes renseignés sur le fonctionnement d'un transistor et nous avons remarqué qu'il en existait deux sortes ; les PNP et les NPN, la différence entre les deux correspond au fait que pour les PNP le courant va de l'émetteur vers la base et le collecteur est relié au GND tandis que pour un NPN le courant va de la base vers l'émetteur et le collecteur est relié à l'alimentation. |
− | Lors de la conception de notre carte, nous avons utilisé le | + | Lors de la conception de notre carte, nous avons utilisé le microcontrôleur "ATTiny 84". |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | Voici les différentes entrées et sorties de ce microcontrôleur, elles nous seront utiles pour écrire le code: | ||
+ | [[Fichier:Att84.jpg|300px]] | ||
+ | <center>[[Fichier:attiny84.jpg|thumb|AtTiny84|left|300px]]</center> | ||
+ | Ce microcontrôleur possède 14 broches, les broches 1 et 14 sont respectivement l'alimentation et la masse. Il faut donc utiliser les 12 autres broches pour contrôler nos composants électroniques. Cependant, nous avons besoin de 3 broches pour les transistors, 8 broches pour les LED des afficheurs (7 segments + le point) mais aussi 3 broches pour les boutons (et possiblement une supplémentaire pour rajouter un buzzer et/ou une LED pour indiquer la fin du minuteur). | ||
+ | La solution : sacrifier l'affichage du point et l'utilisation de 2 boutons au lieu de 3. | ||
=<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 80%; background: #80D0FF; vertical-align: top; width: 98%;"> Première carte </div>= | =<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 80%; background: #80D0FF; vertical-align: top; width: 98%;"> Première carte </div>= | ||
Ligne 80 : | Ligne 67 : | ||
==Frtizing== | ==Frtizing== | ||
− | En commençant à faire notre dé électronique sur Fritzing, nous étions partis pour faire la carte avec les afficheurs, mais il nous suffisait de faire simplement notre | + | En commençant à faire notre dé électronique sur Fritzing, nous étions partis pour faire la carte avec les afficheurs, mais il nous suffisait de faire simplement notre Schematic avec notre fonction minuteur et à représenter les connecteurs présents sur la carte pour qu'on puisse l'emboiter avec la carte "afficheurs". |
− | Notre problème était le manque de broche pour | + | Notre problème était le manque de broche pour tous nos composants. On nous avait donc conseillé d'enlever un bouton de notre carte et de ne pas utiliser le point de l'afficheur, mais nous avons eu l'idée de faire un pont de résistance pour notre carte ce qui nous a permis de garder un troisième bouton et de mettre un buzzer pour marquer la fin du minuteur. Cependant un des connecteurs ne pourra quand même pas être utilisé car toutes les broches de l'attiny84 était déjà prise. Ce n'est pas un gros problème, il manquera juste le segment inférieur gauche pour chacun des chiffres affichés. |
− | Voici à quoi ressemble notre | + | Voici à quoi ressemble notre Schematic et notre PCB: |
<center>[[Fichier:Circuit_imprime_minuteur.png|500px]][[Fichier: Schematic_minuteur.png|500px]]</center> | <center>[[Fichier:Circuit_imprime_minuteur.png|500px]][[Fichier: Schematic_minuteur.png|500px]]</center> | ||
− | Après cela,nous avons pu imprimer notre | + | Après cela, nous avons pu imprimer notre carte : |
<center>[[Fichier:Carte_imprime_.jpg|300px|]]</center> | <center>[[Fichier:Carte_imprime_.jpg|300px|]]</center> | ||
Ligne 95 : | Ligne 82 : | ||
==Soudure== | ==Soudure== | ||
− | Lors de la séance du 4 Février nous avons découvert la soudure et nous avons pu commencer | + | Lors de la séance du 4 Février nous avons découvert la soudure et nous avons pu commencer à souder les composants. Il a fallu à plusieurs reprises ressouder certains composants, car nous nous sommes aperçus par la suite, quand nous commencions la programmation, que cela ne fonctionnait pas. Nous avons donc fait des tests avec un multimètre pour voir si le courant passait et nous avons vu qu'un bouton et une résistance n'avait pas assez d'étain pour que le courant puisse passer. |
Voici donc notre carte soudée: | Voici donc notre carte soudée: | ||
Ligne 102 : | Ligne 89 : | ||
==Code arduino== | ==Code arduino== | ||
+ | |||
+ | Voici les branchements entre notre carte et l'arduino uno pour téléverser le code sur l'attiny84: | ||
+ | |||
+ | [[Fichier:branchementsAttinyArduino.jpg|300px]] | ||
<pre>// si le minuteur se décompte alors l'état vaut 1, 0 sinon | <pre>// si le minuteur se décompte alors l'état vaut 1, 0 sinon | ||
Ligne 245 : | Ligne 236 : | ||
} | } | ||
</pre> | </pre> | ||
+ | |||
+ | |||
+ | Voici une vidéo qui montre que notre première carte fonctionne bien : | ||
+ | |||
+ | [[Media:premiere_carte_binome10.mp4]] | ||
=<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 80%; background: #80D0FF; vertical-align: top; width: 98%;"> Clé finale </div>= | =<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 80%; background: #80D0FF; vertical-align: top; width: 98%;"> Clé finale </div>= | ||
Ligne 250 : | Ligne 246 : | ||
==Fritzing== | ==Fritzing== | ||
− | Pour réaliser notre Fritzing, nous avons pris le PCB et le Schematic de base qui | + | Pour réaliser notre Fritzing, nous avons pris le PCB et le Schematic de base qui étaient sur le wiki et nous avons dû rajouter d'autres composants tel que les trois boutons, le buzzer et surtout les connecteurs qui permettent de raccorder le bouclier où se trouvent les afficheurs avec notre clé principale. |
− | |||
− | |||
+ | <center>[[Fichier:Sch_cle_final_binome_10.png|Schematic Clé finale|500px]] [[Fichier:Pcb_cle_fini_binome_10.png|PCB Clé finale|500px]]</center> | ||
==Soudure== | ==Soudure== | ||
− | |||
− | |||
+ | Après avoir fini le PCB et reçu notre carte nous avons pris tous les composants qu'il nous fallait et nous avons commencé à souder. La clé comporte en plus un bouclier avec les afficheurs 7 segments. | ||
+ | [[Fichier:Cle_avec_bouclier_fini._binome_10.jpg|thumb|Bouclier 7 segments|left|500px]] [[Fichier:Cle_soudee_fini_binome_10.jpg|Carte|thumb|right|500px]] | ||
Ligne 290 : | Ligne 285 : | ||
==Test des mémoires== | ==Test des mémoires== | ||
− | Après avoir soudé les composants sur notre carte et notamment les mémoires nous avons pu vérifier que ces dernières fonctionnaient correctement à l'aide des trois | + | Après avoir soudé les composants sur notre carte et notamment les mémoires nous avons pu vérifier que ces dernières fonctionnaient correctement à l'aide des trois tests présents sur la page principale du wiki qui sont respectivement : |
[[Média:ClefUSBTestMem.zip]] | [[Média:ClefUSBTestMem.zip]] | ||
Ligne 298 : | Ligne 293 : | ||
[[Média:ClefUSBTestMemRW2.zip]] | [[Média:ClefUSBTestMemRW2.zip]] | ||
− | Nous avons pu voir que les deux premiers tests ne fonctionnaient pas vraiment, en effet on obtenait parfois 5 | + | Nous avons pu voir que les deux premiers tests ne fonctionnaient pas vraiment, en effet on obtenait parfois 5 flashs rapides de la LED et des fois seulement 1, ce qui signifie à la fois un échec et une réussite. Cependant, le dernier des tests mémoires fonctionne correctement bien qu'il fut plus long à tester. Voici une vidéo qui montre bien les 5 flashs rapides la LED : |
[[Fichier:Test_memoire_binome10.mp4]] | [[Fichier:Test_memoire_binome10.mp4]] | ||
Ligne 304 : | Ligne 299 : | ||
==Fonction minuteur== | ==Fonction minuteur== | ||
− | Une fois que notre carte fut totalement soudée nous avons pu nous intéresser à créer un programme qui permettrait de réaliser notre minuteur sur le bouclier présent sur notre carte. Nous ne sommes pas partis de zéro puisque Mr Redon avait déjà créé une partie du programme et notamment toutes les fonctions s'occupant des I/O et de l'allumage des | + | Une fois que notre carte fut totalement soudée nous avons pu nous intéresser à créer un programme qui permettrait de réaliser notre minuteur sur le bouclier présent sur notre carte. Nous ne sommes pas partis de zéro puisque Mr Redon avait déjà créé une partie du programme et notamment toutes les fonctions s'occupant des I/O et de l'allumage des LEDs sur le bouclier en fonction du chiffre à afficher. Il ne nous restait plus qu'à réaliser un compteur qui s'incrémenterait de 1 lorsque qu'on appuie sur un bouton ici celui du bas, qui se décrémenterait environ toutes les secondes (c’est-à-dire après 267 boucles dans le main) si on appuie sur le bouton du haut et enfin qui arrêterait cette décrémentation si on appuie sur le bouton central. Et ainsi afficher chaque chiffre du compteur sur le bouclier à l'aide des fonctions déjà crées. |
Voici le zip contenant tous les fichiers pour faire fonctionner la clé en mode minuteur : | Voici le zip contenant tous les fichiers pour faire fonctionner la clé en mode minuteur : | ||
Ligne 316 : | Ligne 311 : | ||
==Partie USB== | ==Partie USB== | ||
− | Il ne nous reste plus qu'à nous occuper de la partie principale de ce bureau d'études : obtenir une clé | + | Il ne nous reste plus qu'à nous occuper de la partie principale de ce bureau d'études : obtenir une clé USB fonctionnelle. Pour cela on a récupéré le fichier MassStoragePeiP dont on a modifié les fichiers DataFlashManager.h et DataFlashManager.c dans le dossier lib afin de gérer l'écriture et la lecture des deux mémoires de notre clé. |
Voici le fichier global qu'il ne nous restait plus qu'à compiler sur la clé : | Voici le fichier global qu'il ne nous restait plus qu'à compiler sur la clé : | ||
Ligne 322 : | Ligne 317 : | ||
[[Fichier:MassStoragePeiPGodardGontier.zip]] | [[Fichier:MassStoragePeiPGodardGontier.zip]] | ||
− | Avant de compiler il fallait aussi s'assurer que la clé était bien | + | Avant de compiler il fallait aussi s'assurer que la clé était bien reconnue en mode DFU, pour cela il faut court-circuiter le reset et la masse de la carte et vérifier que c'est le cas à l'aide de l'utilitaire lsusb. Ici notre clé est reconnue comme at90usb162. Ensuite pour compiler il suffit d'écrire : |
dfu-programmer at90usb162 erase | dfu-programmer at90usb162 erase | ||
Ligne 330 : | Ligne 325 : | ||
dfu-programmer at90usb162 reset | dfu-programmer at90usb162 reset | ||
− | On peut voir ces différentes commandes sur la photo | + | On peut voir ces différentes commandes sur la photo suivante : |
<center>[[Fichier:Compilation.jpg]]</center> | <center>[[Fichier:Compilation.jpg]]</center> | ||
Ligne 337 : | Ligne 332 : | ||
− | |||
− | + | [[Fichier:writing_binome10.jpg|thumb|Writing|500px|left]] [[Fichier:reading_binome10.jpeg|thumb|Reading|400px|right]] | |
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | On a pu remarquer que la partie écriture est plus longue que la partie lecture grâce à ce test. | ||
− | |||
− | |||
− | |||
− | |||
+ | =<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 80%; background: #80D0FF; vertical-align: top; width: 98%;"> Conclusion </div>= | ||
+ | Durant ce bureau d'étude, nous avons pu concevoir depuis 0 un prototype de clé USB comportant une fonctionnalité supplémentaire, dans notre cas, elle peut agir comme un minuteur. Tout d'abord nous avons réalisé une première carte qui comportait uniquement la partie minuteur et qui fonctionnait très bien. Ensuite nous avons ajouté cette fonctionnalité sur un PCB classique de clé USB et nous avons programmé cette dernière pour pouvoir gérer les deux fonctionnalités séparées. En effet, nous n'avons pas eu le temps de rassembler les deux programmes ensembles et nous avons essayé depuis chez nous d'utiliser une machine virtuelle pour compiler les programmes sur la carte sous un environnement Linux. Cependant, nous avons rencontré des problèmes et on a donc pas pu aboutir. De plus par manque de temps nous avons dû aussi abandonner l'idée d'ajouter un buzzer pour envoyer une alarme lorsque le compteur est fini, nous avons préféré nous consacrer principalement à la gestion du compteur et la partie USB. Notre clé pourrait bien sûr être améliorée afin d'avoir une plus grande mémoire et d'écrire et lire plus rapidement les données dessus. On aurait aussi adoré pouvoir réalisé un boitier pour que la clé est paraisse vraiment fini. Finalement ce BE nous a permis de consolider notre choix d'orientation vers les systèmes embarqués. Estelle a été plus intéressé par la partie électronique et Fritzing tandis que Lucas a bien aimé s'occuper de la partie informatique et programmation bien qu'on adore tous les deux l'ensemble de ces domaines! | ||
+ | =<div class="mcwiki-header" style="border-radius: 15px; padding: 15px; font-weight: bold; color: #FFFFFF; text-align: center; font-size: 80%; background: #80D0FF; vertical-align: top; width: 98%;"> Chronologie </div>= | ||
+ | *18 Janvier | ||
+ | Idée principale: clé minuteur (2 afficheurs à led 7 segments, 2 boutons poussoirs, une led et un buzzer) | ||
+ | 2 afficheurs pour aller de 0 à 99 secondes (à voir pour en rajouter un 3eme et couvrir le temps de 0 à 10 min) | ||
+ | 1 bouton pour les dizaines de secondes et 1 bouton pour les unités | ||
+ | réfléchir pour mettre en pause et lancer le minuteur | ||
+ | *21 Janvier | ||
+ | Lors de cette séance, nous nous sommes documentés sur comment fonctionne un microcontrôleur et un afficheur 7 segments. Nous voulions commencer le "Schematic" sur l'outil Fritzing mais nous ne savons pas qu'elle était la référence de l'afficheur. Après avoir vu le matériel dont disposait Polytech, nous avons convenu avec les professeurs et 2 autres groupes qui utilisent aussi l'afficheur 7 segments que nous partions sur 3 afficheurs 7 segments car ayant pas assez d'afficheurs pour tout le monde. | ||
+ | M. Redon et M. Boé nous ont donc proposé de faire une carte externe qui contiendra les afficheurs, que nous pourrions connecter à chacune des cartes contenant le programme de la clé ( dans notre cas: nous connecterons la carte d'afficheur sur notre carte "minuteur") | ||
+ | *25 Janvier | ||
+ | Suite de la réalisation du dé électronique sur Fritzing. Nous pensions qu'il fallait aussi incorporer les éléments qui seront présents sur la carte secondaire mais en fait il suffit juste de représenter les connecteurs présents sur cette dernière. | ||
+ | Nous nous étions alors renseigné sur le fonctionnement d'un transistor et nous avons remarqué qu'il en existait 2 sortes, les PNP et les NPN, la différence entre les deux correspond au fait que pour les PNP le courant va de l'émetteur vers la base et le collecteur est relié au GND tandis que pour un NPN le courant va de la base vers l'émetteur et le collecteur est relié à l'alimentation. | ||
+ | De plus pour ce premier dé électronique nous utiliserons l'ATTiny84 comme microcontrôleur. | ||
+ | Ce dernier possède 14 broches, les broches 1 et 14 sont respectivement l'alimentation et la masse. Il faut donc utiliser les 12 autres broches pour contrôler nos composants électroniques. Cependant nous avons besoin de 3 broches pour les transistors, 8 broches pour les led des afficheurs (7 segments + le point) mais aussi 3 broches pour les boutons ( et possiblement une supplémentaire pour rajouter un buzzer et/ou une led pour indiquer la fin du minuteur). | ||
+ | la solution : sacrifier l'affichage du point et l'utilisation de 2 boutons au lieu de 3. | ||
*28 Janvier | *28 Janvier | ||
− | Nous avons opté pour un pont de résistance pour notre carte ce qui nous permet de garder un | + | Nous avons opté pour un pont de résistance pour notre carte ce qui nous permet de garder un 3ème bouton et un buzzer pour la fin du minuteur. |
Nous avons également réalisé le Schematic et le PCB. | Nous avons également réalisé le Schematic et le PCB. | ||
− | |||
− | |||
− | |||
*1er Février | *1er Février | ||
Impression du circuit et début de recherche d'un programme. | Impression du circuit et début de recherche d'un programme. | ||
− | |||
− | |||
*4 Février | *4 Février | ||
Ligne 433 : | Ligne 445 : | ||
*8 Février | *8 Février | ||
− | Nous avons | + | Nous avons fini de souder la carte et nous avons testé notre carte avec un Arduino UNO pour voir si notre carte fonctionne. |
− | |||
− | |||
Ligne 443 : | Ligne 453 : | ||
*15 Février | *15 Février | ||
− | Nous avons commencé à faire le "Schematic" de la clé usb | + | Nous avons commencé à faire le "Schematic" de la clé usb finale |
*18 Février | *18 Février | ||
+ | |||
+ | On a pu commencer à faire des tests sur notre 1ère carte grâce au bouclier fourni par les professeurs. Le programme fonctionne mais l'afficheur n'affiche pas le segment inférieur gauche ni le chiffre des minutes. Ce problème pourra être corrigé pour la clé finale. | ||
+ | |||
+ | *8 Mars | ||
+ | |||
+ | On a fini le schematic de la clé usb finale et on s'attaque à la réalisation du pcb sur fritzing. | ||
*11 Mars | *11 Mars | ||
− | Lors de cette séance on a | + | Lors de cette séance on a continué le PCB de la clé usb final. Pour cela on a du déplacer certains éléments pour pouvoir faire passer les connexions, de plus on manquera de place du coup on va devoir agrandir notre PCB . Sinon toutes les connexions ont été réalisé, il suffit juste de les rendre un peu plus belle et d'agrandir la surface du PCB |
[[Média:Cle_binome10.zip]] | [[Média:Cle_binome10.zip]] | ||
Ligne 457 : | Ligne 473 : | ||
*15 Mars | *15 Mars | ||
− | Lors de cette séance nous avons réarranger les fils pour pas qu'ils se chevauchent, nous avons commencé a faire le nouveau PCB car notre carte dépasse par rapport | + | Lors de cette séance nous avons réarranger les fils pour pas qu'ils se chevauchent, nous avons commencé a faire le nouveau PCB sur inkscape car notre carte dépasse par rapport ax PCB de base à cause des connecteurs. |
*18 Mars | *18 Mars | ||
− | Pendant cette séance nous avons remarqué que des | + | Pendant cette séance nous avons remarqué que des défauts de fils qui se chevauchent n'avaient pas été vu par le logiciel lundi dernier, nous avons donc fini de bien placer les fils dans le PCB et nous avons arrangé les noms des pièces pour que ces noms soient gravés sur la carte. De plus, nous nous sommes rendu compte que l'ICSP n'était pas conforme à celui que nous avions de base, un via était relié à la fois au GND et à la fois au RTN. Nous avons réussi a régler ce problème et a bien refaire apparaître le ICSP sur notre carte |
Voici le PCB fini : | Voici le PCB fini : | ||
Ligne 470 : | Ligne 486 : | ||
*22 Mars | *22 Mars | ||
− | Pendant cette séance | + | Pendant cette séance nous avons reçu une nouvelle carte ne comprenant que la fonctionnalité minuteur avec les boutons présents à coté des afficheurs, on a voulu réadapter notre ancien programme à cette carte en regardant quelle broche allume quel segment. |
*25 Mars | *25 Mars | ||
− | + | travail sur les mémoires de la carte finale: | |
− | utiliser seulement la | + | utiliser seulement la première mémoire pour l'initialisation , recevoir des blocs de 512 octets mais on peut les stocker que dans des blocs de 256 adapter les programmes read et write |
− | + | 2blockadress+2i pour aller dans le 1er bloc | |
2blockadress +2i+1 pour aller dans le 2 eme bloc | 2blockadress +2i+1 pour aller dans le 2 eme bloc | ||
Ligne 485 : | Ligne 501 : | ||
*Carte et programmation | *Carte et programmation | ||
− | La carte a été | + | La carte a été testé sans mémoire mais avec un bouclier 7 segments. |
Une erreur de conception : le bouclier est alimenté en 5V (USB) alors qu'il devait l'être en 3,3V (régulateur). Une piste a été coupée et un fil soudé sur les cartes de test. | Une erreur de conception : le bouclier est alimenté en 5V (USB) alors qu'il devait l'être en 3,3V (régulateur). Une piste a été coupée et un fil soudé sur les cartes de test. | ||
Ligne 496 : | Ligne 512 : | ||
*1er Avril | *1er Avril | ||
− | Pendant cette séance, Nous avons reçu notre | + | Pendant cette séance, Nous avons reçu notre première clé et nous avons commencé à souder les composants de celle ci |
*8 Avril | *8 Avril | ||
Ligne 504 : | Ligne 520 : | ||
*12 Avril | *12 Avril | ||
− | Durant cette séance nous avons soudé les deux mémoires sur une des clés et nous avons continué la programmation du minuteur et des | + | Durant cette séance nous avons soudé les deux mémoires sur une des clés et nous avons continué la programmation du minuteur et des mémoires de la clé |
*15 Avril | *15 Avril | ||
+ | |||
+ | Fin du code pour les mémoires et poursuite du code pour l'aspect minuteur. | ||
*19 Avril | *19 Avril | ||
− | On a enfin fini le code pour gérer la fonctionnalité minuteur de notre clé usb. Les différents | + | On a enfin fini le code pour gérer la fonctionnalité minuteur de notre clé usb. Les différents fichiers le composant sont disponible dans le zip ci joint. |
[[File:Bouclier7Seg_fini.zip]] | [[File:Bouclier7Seg_fini.zip]] | ||
Ligne 521 : | Ligne 539 : | ||
*22 Avril | *22 Avril | ||
− | Pendant cette séance nous avons soudé 2 autres mémoires sur la 2ème carte et nous avons testé si les mémoires de la clé fonctionnent grâce aux codes situés dans le wiki du BE . | + | Pendant cette séance nous avons soudé 2 autres mémoires sur la 2ème carte et nous avons testé si les mémoires de la clé fonctionnent grâce aux codes situés dans le wiki du BE. On a aussi programmé une des cartes pour qu'elle puisse fonctionner en usb. |
Version actuelle datée du 24 mai 2021 à 16:01
Introduction
Lors de ce BE nous allons devoir réaliser une clé USB avec une particularité en plus. Nous allons devoir réaliser un PCB (Printed Circuit Board) à l'aide du logiciel Fritzing, souder les composants que nous avons besoin sur une carte et faire un programme pour que notre fonctionnalité marche. Ensuite nous allons faire la clé USB dans les bonnes dimensions et lui fabriquer un boitier.
Idée de la Carte
Première idée
Notre idée principale a été de faire une Clé Minuteur composée de 2 afficheurs à LED 7 segments pour aller de 0 à 99 secondes (on peut aller jusqu'à 3 afficheurs pour couvrir le temps de 0 à 10 min) avec 2 boutons poussoirs, un pour les dizaines de secondes et un bouton pour les unités (nous devons réfléchir sur le fait de mettre en pause et lancer le minuteur et enfin une petite LED et un buzzer pour montrer la fin du minuteur.
Mise en commun & solution pour une carte
En discutant avec d'autres groupes qui utilisent des afficheurs et les professeurs, nous avons décidé d'utiliser 3 afficheurs 7 segments par soucis de stock d'afficheurs au sein de l'école.
M. Redon et M. Boé nous ont donc proposé de faire une carte externe qui contiendra les afficheurs, que nous pourrions connecter à chacune des cartes contenant le programme de la clé (dans notre cas : nous connecterons la carte d'afficheur sur notre carte "minuteur")
Idée finale
Par la suite, nous sommes donc partis pour une carte avec 3 afficheurs et 3 boutons: un pour les secondes, un pour les minutes et un autre pour démarrer, mettre en pause et arrêter le minuteur.
Nos recherches
Nous nous sommes documentés sur le fonctionnement de composants comme les afficheurs 7 segments que nous utilisons,
Celui-ci est composé de 5 connections de chaque côté, cet afficheur est un afficheur à anode commune (3 et 8)
La carte "afficheurs" va être composée 5 broches en haut (respectivement Afficheur 1 / Afficheur 2 / Afficheur 3 / +5V / GND)
et de 8 broches en bas (respectivement A / B / C / D / E / F / G / DP)
La distance entre les deux lignes de broche est de 12 broches
Les afficheurs auront 3 transistors (pour les Afficheurs) et 8 résistances (pour les lettres A,B,..,DP)
Au tout départ, nous voulions commencer le "Schematic" sur le logiciel Fritzing cependant, il fallait tout d'abord se renseigner sur les composants.
C'est pourquoi nous nous sommes renseignés sur le fonctionnement d'un transistor et nous avons remarqué qu'il en existait deux sortes ; les PNP et les NPN, la différence entre les deux correspond au fait que pour les PNP le courant va de l'émetteur vers la base et le collecteur est relié au GND tandis que pour un NPN le courant va de la base vers l'émetteur et le collecteur est relié à l'alimentation.
Lors de la conception de notre carte, nous avons utilisé le microcontrôleur "ATTiny 84".
Voici les différentes entrées et sorties de ce microcontrôleur, elles nous seront utiles pour écrire le code:
Ce microcontrôleur possède 14 broches, les broches 1 et 14 sont respectivement l'alimentation et la masse. Il faut donc utiliser les 12 autres broches pour contrôler nos composants électroniques. Cependant, nous avons besoin de 3 broches pour les transistors, 8 broches pour les LED des afficheurs (7 segments + le point) mais aussi 3 broches pour les boutons (et possiblement une supplémentaire pour rajouter un buzzer et/ou une LED pour indiquer la fin du minuteur). La solution : sacrifier l'affichage du point et l'utilisation de 2 boutons au lieu de 3.
Première carte
Frtizing
En commençant à faire notre dé électronique sur Fritzing, nous étions partis pour faire la carte avec les afficheurs, mais il nous suffisait de faire simplement notre Schematic avec notre fonction minuteur et à représenter les connecteurs présents sur la carte pour qu'on puisse l'emboiter avec la carte "afficheurs".
Notre problème était le manque de broche pour tous nos composants. On nous avait donc conseillé d'enlever un bouton de notre carte et de ne pas utiliser le point de l'afficheur, mais nous avons eu l'idée de faire un pont de résistance pour notre carte ce qui nous a permis de garder un troisième bouton et de mettre un buzzer pour marquer la fin du minuteur. Cependant un des connecteurs ne pourra quand même pas être utilisé car toutes les broches de l'attiny84 était déjà prise. Ce n'est pas un gros problème, il manquera juste le segment inférieur gauche pour chacun des chiffres affichés.
Voici à quoi ressemble notre Schematic et notre PCB:
Après cela, nous avons pu imprimer notre carte :
Soudure
Lors de la séance du 4 Février nous avons découvert la soudure et nous avons pu commencer à souder les composants. Il a fallu à plusieurs reprises ressouder certains composants, car nous nous sommes aperçus par la suite, quand nous commencions la programmation, que cela ne fonctionnait pas. Nous avons donc fait des tests avec un multimètre pour voir si le courant passait et nous avons vu qu'un bouton et une résistance n'avait pas assez d'étain pour que le courant puisse passer.
Voici donc notre carte soudée:
Code arduino
Voici les branchements entre notre carte et l'arduino uno pour téléverser le code sur l'attiny84:
// si le minuteur se décompte alors l'état vaut 1, 0 sinon char etatMinuteur = 0; // nombre de 0 à 959, les centaines sont les minutes, les dizaines sont les dizaines de secondes et les unités sont les secondes int affichage = 0; // variable qui permet de stocker le temps depuis une action précédente unsigned long ancienTemps = 0; // intervalle entre chaque décompte (1000 ms) long intervalle = 1000; //variable qui stocke le fait d'avoir appuyer ou non sur un minuteur (permet de faire une unique incrémentaion de la variable affichage par appui) char prevSwitchState=0; //variable allant de 0 à 2 indiquant quel transistor prendre en charge char transis =0; //Chiffre à afficher char chiffre; // tableau regroupant sous format d'octet les led à allumer sur les afficheurs pour former chaque chiffre (ex : tab[4] donne le chiffre 4 unsigned char tab[] = {0x37, 0x06, 0x63, 0x67, 0x56, 0x75, 0x7D, 0x07, 0x7F, 0x77 }; void setup() { // put your setup code here, to run once: //Les pins 9 à 11 sont ceux reliés aux transistors for( char pin= 9; pin<12; pin++){ pinMode(pin,OUTPUT); digitalWrite(pin,HIGH); } //Les pins 1 à 7 sont ceux reliés aux afficheurs for( char pin=1; pin<8; pin++){ pinMode(pin,OUTPUT); digitalWrite(pin,HIGH); } } void loop() { // put your main code here, to run repeatedly: //On stocke la tension de notre pont int valeurPont = analogRead(0); //Instruction qui s'effectue si le minuteur n'est pas en marche et qui s'effectue une fois par appuis de boutons if (etatMinuteur==0 && prevSwitchState==0){ //interprétation de la valeur du pont pour savoir sur quel bouton on a appuyé // ici on gère les minutes if (valeurPont >= 700 && valeurPont<= 750){ if(affichage<900){ affichage+=100; } //retour à 0 après 9 else{ affichage-=900; } prevSwitchState=1; } //gestion des secondes if(valeurPont>=800 && valeurPont<=850){ //retour à 0 après 59 if (affichage%100 == 59){ affichage-=59; } else{ affichage+=1; } prevSwitchState=1; } //mise en marche du minuteur if (valeurPont>=500 && valeurPont<=550){ etatMinuteur+=1; etatMinuteur=etatMinuteur%2; ancienTemps = millis(); prevSwitchState=1; } } else if(etatMinuteur==1 && prevSwitchState==0){ unsigned long tempsActuel=millis(); //On compare le temps actuel avec l'ancien temps stocké pour voir si on a depassé 1 seconde et agir en conséquence if(tempsActuel - ancienTemps > intervalle){ ancienTemps = tempsActuel; if(affichage%100 == 0){ affichage-=41; } else{ affichage-=1; } } //mise en pause du minuteur if (valeurPont>=500 && valeurPont<=550){ etatMinuteur+=1; etatMinuteur=etatMinuteur%2; ancienTemps = millis(); prevSwitchState=1; } //si le décompte est fini le buzzer se met à bipper pendant 5 secondes if(affichage==0){ etatMinuteur=0; for(char x = 0; x<10; x++){ tone(8,440,250); delay(250); } } } //chiffre à afficher en fonction du transistor actuel switch(transis){ case 2: //chiffre des dizaines de secondes chiffre = (affichage%100)/10; break; case 0: //chiffre des secondes chiffre = affichage%10; break; case 1: //chiffre des minutes chiffre = affichage/100; break; } transis= (transis+1)%3; //si la tension du pont est maximal alors aucun bouton n'a été pressé if(valeurPont >1000){ prevSwitchState=0; } // On refait passer tous les pins à l'état high for( char pin= 9; pin<12; pin++){ pinMode(pin,OUTPUT); digitalWrite(pin,HIGH); } for( char pin=1; pin<8; pin++){ pinMode(pin,OUTPUT); digitalWrite(pin,HIGH); } //gestion des pin à allumer pour afficher le chiffre unsigned char decal= 0x01; for( char i = 1; i<8; i++){ if ((tab[chiffre] & decal )>0){ digitalWrite(i,LOW); digitalWrite(9+transis,LOW); } decal <<= 1; } }
Voici une vidéo qui montre que notre première carte fonctionne bien :
Media:premiere_carte_binome10.mp4
Clé finale
Fritzing
Pour réaliser notre Fritzing, nous avons pris le PCB et le Schematic de base qui étaient sur le wiki et nous avons dû rajouter d'autres composants tel que les trois boutons, le buzzer et surtout les connecteurs qui permettent de raccorder le bouclier où se trouvent les afficheurs avec notre clé principale.
Soudure
Après avoir fini le PCB et reçu notre carte nous avons pris tous les composants qu'il nous fallait et nous avons commencé à souder. La clé comporte en plus un bouclier avec les afficheurs 7 segments.
Test des mémoires
Après avoir soudé les composants sur notre carte et notamment les mémoires nous avons pu vérifier que ces dernières fonctionnaient correctement à l'aide des trois tests présents sur la page principale du wiki qui sont respectivement :
Nous avons pu voir que les deux premiers tests ne fonctionnaient pas vraiment, en effet on obtenait parfois 5 flashs rapides de la LED et des fois seulement 1, ce qui signifie à la fois un échec et une réussite. Cependant, le dernier des tests mémoires fonctionne correctement bien qu'il fut plus long à tester. Voici une vidéo qui montre bien les 5 flashs rapides la LED :
Fichier:Test memoire binome10.mp4
Fonction minuteur
Une fois que notre carte fut totalement soudée nous avons pu nous intéresser à créer un programme qui permettrait de réaliser notre minuteur sur le bouclier présent sur notre carte. Nous ne sommes pas partis de zéro puisque Mr Redon avait déjà créé une partie du programme et notamment toutes les fonctions s'occupant des I/O et de l'allumage des LEDs sur le bouclier en fonction du chiffre à afficher. Il ne nous restait plus qu'à réaliser un compteur qui s'incrémenterait de 1 lorsque qu'on appuie sur un bouton ici celui du bas, qui se décrémenterait environ toutes les secondes (c’est-à-dire après 267 boucles dans le main) si on appuie sur le bouton du haut et enfin qui arrêterait cette décrémentation si on appuie sur le bouton central. Et ainsi afficher chaque chiffre du compteur sur le bouclier à l'aide des fonctions déjà crées.
Voici le zip contenant tous les fichiers pour faire fonctionner la clé en mode minuteur :
Voici une vidéo qui montre bien l'utilisation des 3 boutons :
Fichier:Video-carte-minuteur-binome-10.mp4
Partie USB
Il ne nous reste plus qu'à nous occuper de la partie principale de ce bureau d'études : obtenir une clé USB fonctionnelle. Pour cela on a récupéré le fichier MassStoragePeiP dont on a modifié les fichiers DataFlashManager.h et DataFlashManager.c dans le dossier lib afin de gérer l'écriture et la lecture des deux mémoires de notre clé.
Voici le fichier global qu'il ne nous restait plus qu'à compiler sur la clé :
Fichier:MassStoragePeiPGodardGontier.zip
Avant de compiler il fallait aussi s'assurer que la clé était bien reconnue en mode DFU, pour cela il faut court-circuiter le reset et la masse de la carte et vérifier que c'est le cas à l'aide de l'utilitaire lsusb. Ici notre clé est reconnue comme at90usb162. Ensuite pour compiler il suffit d'écrire :
dfu-programmer at90usb162 erase
dfu-programmer at90usb162 flash MassStorage.hex
dfu-programmer at90usb162 reset
On peut voir ces différentes commandes sur la photo suivante :
Finalement nous avons pu tester le programme TestBlock présent sur la page du wiki pour vérifier que notre clé écrit bien des valeurs dans les blocs mémoires et qu'on lit bien les bonnes valeurs une fois qu'elles sont stockées à l'intérieur.
On a pu remarquer que la partie écriture est plus longue que la partie lecture grâce à ce test.
Conclusion
Durant ce bureau d'étude, nous avons pu concevoir depuis 0 un prototype de clé USB comportant une fonctionnalité supplémentaire, dans notre cas, elle peut agir comme un minuteur. Tout d'abord nous avons réalisé une première carte qui comportait uniquement la partie minuteur et qui fonctionnait très bien. Ensuite nous avons ajouté cette fonctionnalité sur un PCB classique de clé USB et nous avons programmé cette dernière pour pouvoir gérer les deux fonctionnalités séparées. En effet, nous n'avons pas eu le temps de rassembler les deux programmes ensembles et nous avons essayé depuis chez nous d'utiliser une machine virtuelle pour compiler les programmes sur la carte sous un environnement Linux. Cependant, nous avons rencontré des problèmes et on a donc pas pu aboutir. De plus par manque de temps nous avons dû aussi abandonner l'idée d'ajouter un buzzer pour envoyer une alarme lorsque le compteur est fini, nous avons préféré nous consacrer principalement à la gestion du compteur et la partie USB. Notre clé pourrait bien sûr être améliorée afin d'avoir une plus grande mémoire et d'écrire et lire plus rapidement les données dessus. On aurait aussi adoré pouvoir réalisé un boitier pour que la clé est paraisse vraiment fini. Finalement ce BE nous a permis de consolider notre choix d'orientation vers les systèmes embarqués. Estelle a été plus intéressé par la partie électronique et Fritzing tandis que Lucas a bien aimé s'occuper de la partie informatique et programmation bien qu'on adore tous les deux l'ensemble de ces domaines!
Chronologie
- 18 Janvier
Idée principale: clé minuteur (2 afficheurs à led 7 segments, 2 boutons poussoirs, une led et un buzzer)
2 afficheurs pour aller de 0 à 99 secondes (à voir pour en rajouter un 3eme et couvrir le temps de 0 à 10 min)
1 bouton pour les dizaines de secondes et 1 bouton pour les unités
réfléchir pour mettre en pause et lancer le minuteur
- 21 Janvier
Lors de cette séance, nous nous sommes documentés sur comment fonctionne un microcontrôleur et un afficheur 7 segments. Nous voulions commencer le "Schematic" sur l'outil Fritzing mais nous ne savons pas qu'elle était la référence de l'afficheur. Après avoir vu le matériel dont disposait Polytech, nous avons convenu avec les professeurs et 2 autres groupes qui utilisent aussi l'afficheur 7 segments que nous partions sur 3 afficheurs 7 segments car ayant pas assez d'afficheurs pour tout le monde.
M. Redon et M. Boé nous ont donc proposé de faire une carte externe qui contiendra les afficheurs, que nous pourrions connecter à chacune des cartes contenant le programme de la clé ( dans notre cas: nous connecterons la carte d'afficheur sur notre carte "minuteur")
- 25 Janvier
Suite de la réalisation du dé électronique sur Fritzing. Nous pensions qu'il fallait aussi incorporer les éléments qui seront présents sur la carte secondaire mais en fait il suffit juste de représenter les connecteurs présents sur cette dernière. Nous nous étions alors renseigné sur le fonctionnement d'un transistor et nous avons remarqué qu'il en existait 2 sortes, les PNP et les NPN, la différence entre les deux correspond au fait que pour les PNP le courant va de l'émetteur vers la base et le collecteur est relié au GND tandis que pour un NPN le courant va de la base vers l'émetteur et le collecteur est relié à l'alimentation.
De plus pour ce premier dé électronique nous utiliserons l'ATTiny84 comme microcontrôleur.
Ce dernier possède 14 broches, les broches 1 et 14 sont respectivement l'alimentation et la masse. Il faut donc utiliser les 12 autres broches pour contrôler nos composants électroniques. Cependant nous avons besoin de 3 broches pour les transistors, 8 broches pour les led des afficheurs (7 segments + le point) mais aussi 3 broches pour les boutons ( et possiblement une supplémentaire pour rajouter un buzzer et/ou une led pour indiquer la fin du minuteur).
la solution : sacrifier l'affichage du point et l'utilisation de 2 boutons au lieu de 3.
- 28 Janvier
Nous avons opté pour un pont de résistance pour notre carte ce qui nous permet de garder un 3ème bouton et un buzzer pour la fin du minuteur.
Nous avons également réalisé le Schematic et le PCB.
- 1er Février
Impression du circuit et début de recherche d'un programme.
- 4 Février
Découverte de la soudure sur la carte, nous avons commencé le programme
- 8 Février
Nous avons fini de souder la carte et nous avons testé notre carte avec un Arduino UNO pour voir si notre carte fonctionne.
- 11 Février
Nous avons fait vérifier notre programme. Nous n'avons pas pour l'instant d'afficheurs donc nous allons créer un mini programme pour tester si nos boutons fonctionnent.
- 15 Février
Nous avons commencé à faire le "Schematic" de la clé usb finale
- 18 Février
On a pu commencer à faire des tests sur notre 1ère carte grâce au bouclier fourni par les professeurs. Le programme fonctionne mais l'afficheur n'affiche pas le segment inférieur gauche ni le chiffre des minutes. Ce problème pourra être corrigé pour la clé finale.
- 8 Mars
On a fini le schematic de la clé usb finale et on s'attaque à la réalisation du pcb sur fritzing.
- 11 Mars
Lors de cette séance on a continué le PCB de la clé usb final. Pour cela on a du déplacer certains éléments pour pouvoir faire passer les connexions, de plus on manquera de place du coup on va devoir agrandir notre PCB . Sinon toutes les connexions ont été réalisé, il suffit juste de les rendre un peu plus belle et d'agrandir la surface du PCB
- 15 Mars
Lors de cette séance nous avons réarranger les fils pour pas qu'ils se chevauchent, nous avons commencé a faire le nouveau PCB sur inkscape car notre carte dépasse par rapport ax PCB de base à cause des connecteurs.
- 18 Mars
Pendant cette séance nous avons remarqué que des défauts de fils qui se chevauchent n'avaient pas été vu par le logiciel lundi dernier, nous avons donc fini de bien placer les fils dans le PCB et nous avons arrangé les noms des pièces pour que ces noms soient gravés sur la carte. De plus, nous nous sommes rendu compte que l'ICSP n'était pas conforme à celui que nous avions de base, un via était relié à la fois au GND et à la fois au RTN. Nous avons réussi a régler ce problème et a bien refaire apparaître le ICSP sur notre carte
Voici le PCB fini :
- 22 Mars
Pendant cette séance nous avons reçu une nouvelle carte ne comprenant que la fonctionnalité minuteur avec les boutons présents à coté des afficheurs, on a voulu réadapter notre ancien programme à cette carte en regardant quelle broche allume quel segment.
- 25 Mars
travail sur les mémoires de la carte finale: utiliser seulement la première mémoire pour l'initialisation , recevoir des blocs de 512 octets mais on peut les stocker que dans des blocs de 256 adapter les programmes read et write 2blockadress+2i pour aller dans le 1er bloc
2blockadress +2i+1 pour aller dans le 2 eme bloc
- Carte (re)commandée
La carte a été modifiée pour intégrer un connecteur ICSP classique plus facile à utiliser pour la programmation de l'ATMega16u2. Le nouveau fichier Fritzing : Fichier:2021ClefLucasEstelle.zip.
- Carte et programmation
La carte a été testé sans mémoire mais avec un bouclier 7 segments.
Une erreur de conception : le bouclier est alimenté en 5V (USB) alors qu'il devait l'être en 3,3V (régulateur). Une piste a été coupée et un fil soudé sur les cartes de test.
Le bouclier fonctionne avec le projet C ci-joint : Fichier:2021EstelleLucas7Seg.zip.
- 29 Mars
Nous avons fini le pcb de la carte et nous l'avons envoyé pour la conception
- 1er Avril
Pendant cette séance, Nous avons reçu notre première clé et nous avons commencé à souder les composants de celle ci
- 8 Avril
Durant cette séance nous avons continué à souder les composants sur une des clés et nous avons continué la programmation des mémoires de la clé
- 12 Avril
Durant cette séance nous avons soudé les deux mémoires sur une des clés et nous avons continué la programmation du minuteur et des mémoires de la clé
- 15 Avril
Fin du code pour les mémoires et poursuite du code pour l'aspect minuteur.
- 19 Avril
On a enfin fini le code pour gérer la fonctionnalité minuteur de notre clé usb. Les différents fichiers le composant sont disponible dans le zip ci joint.
On devait surement avoir une erreur de sauvegarde des fichiers ce qui empêchait leurs actualisations avant l'upload sur l'atmega. De plus on a aussi augmenté le TIMEOUT pour que la décrémentation du compteur se fasse bien pour chaque seconde et non plus rapidement. On a aussi empêché la décrémentation du compteur lorsque ce dernier arrive à 0, en effet il repassait auparavant à 999 après 0 et tournait donc en boucle tant que l'on n'appuyait pas sur le bouton pour l'arrêter.
Pour la prochaine séance il faut que l'on s'intéresse à l'aspect usb de notre clé et réussir à combiner cet aspect avec notre fonctionnalité minuteur.
- 22 Avril
Pendant cette séance nous avons soudé 2 autres mémoires sur la 2ème carte et nous avons testé si les mémoires de la clé fonctionnent grâce aux codes situés dans le wiki du BE. On a aussi programmé une des cartes pour qu'elle puisse fonctionner en usb.