IMA4 2016/2017 P2 : Différence entre versions

De Wiki d'activités IMA
(Semaine 11 pendant la vacance)
 
(47 révisions intermédiaires par 3 utilisateurs non affichées)
Ligne 22 : Ligne 22 :
 
Capteur soudé sur la carte principale.
 
Capteur soudé sur la carte principale.
  
 +
matériel:
 
* Capteur de température.
 
* Capteur de température.
* Microntrôleur ATMega32U4 (programmé par ICSP)
+
* Microntrôleur ATMega32U4
 
* Connecteur USB.
 
* Connecteur USB.
* Régulateur de tension pour le capteur.
+
 
 +
Logiciel:
 +
* Altium Designer
 +
* IDE
 +
* Android Studio
  
 
===<span style="color:#6FB7B7">Calendrier prévisionnel===
 
===<span style="color:#6FB7B7">Calendrier prévisionnel===
Ligne 56 : Ligne 61 :
 
| 6H
 
| 6H
 
| 6H
 
| 6H
|
+
| 8H
|
+
| 8H
|
+
| 10H
|
+
| 10H
|
+
| 120H
 
|}
 
|}
  
Ligne 150 : Ligne 155 :
 
* Dans cette semaine, nous avons imprimé la carte et soudé tous les composants.
 
* Dans cette semaine, nous avons imprimé la carte et soudé tous les composants.
 
[[Fichier:semaine6.jpg]]
 
[[Fichier:semaine6.jpg]]
Problèmatique déjà résolu: Nous n'avons pas connu que les 5 pins de notre usb connecteur sont très courts, c'est vraiment très difficile de les souder sur notre carte.
+
 
Avec l'aide de monsieur redon, nous avons liés les pins avec 5 petits fils et les soudé sur la carte.
+
Problèmatique déjà résolu: Nous n'avons pas connu que les 5 pins de notre usb connecteur sont très courts, c'est vraiment très difficile de les souder sur notre carte. Avec l'aide de monsieur redon, nous avons liés les pins avec 5 petits fils et les soudé sur la carte.
  
 
* Après souder tous les composants, nous avons tester les court-circuit et il n'y a pas de court-circuit.  
 
* Après souder tous les composants, nous avons tester les court-circuit et il n'y a pas de court-circuit.  
Ligne 158 : Ligne 163 :
 
[[Fichier:semane6.jpg]]
 
[[Fichier:semane6.jpg]]
  
Problèmatique à résoudre: Nous avons trouvé que le chargement de programme ne fonctionne pas. Et nous avons testé notre fréquence de l'horloge, mais nous n'avons pas réussi à voir 16MHz.  
+
Problèmatique à résoudre: Nous avons trouvé que le chargement de programme ne fonctionne pas. Et nous avons testé notre fréquence de l'horloge, mais nous n'avons pas réussi à voir 16MHz. Nous allons continuer à tester et répaire notre carte électronique la semaine prochaine.
Nous allons continuer à tester et répaire notre carte électronique la semaine prochaine.
 
  
 
===<span style="color:#6FB7B7">Semaine 7===
 
===<span style="color:#6FB7B7">Semaine 7===
Ligne 168 : Ligne 172 :
 
* Pour programmer notre carte sans utilisant Arduino, on a soudé un cable USB qui lie avec l'ordinateur.
 
* Pour programmer notre carte sans utilisant Arduino, on a soudé un cable USB qui lie avec l'ordinateur.
 
[[Fichier:anoe.jpg]]
 
[[Fichier:anoe.jpg]]
Problèmatique à résoudre: On n'a pas arrivé de programmer le chip utilisant que le cable. Pour le résoudre, on a soudé un bouton de reset mais on a encore rien vu quand on lie le cable.
+
 
 +
Problèmatique à résoudre: On n'a pas arrivé de programmer le chip utilisant que le cable. Pour le résoudre, on a soudé un bouton de reset mais on a encore rien vu quand on lie le cable.
 +
 
 
===<span style="color:#6FB7B7">Semaine 8===
 
===<span style="color:#6FB7B7">Semaine 8===
 
* Releve usb a cause du manque du cuivre, souder cable usb directement sur la carte
 
* Releve usb a cause du manque du cuivre, souder cable usb directement sur la carte
 
* Nous avons corrigé notre circuit par lier UGND avec GND
 
* Nous avons corrigé notre circuit par lier UGND avec GND
* Nous avons trouvé aussi il y a des érreurs parce que quand on tape 'lsusb', ça affiche pas.
+
* Nous avons trouvé aussi il y a des erreurs parce que quand on tape 'lsusb', ça affiche pas. On a fait beaucoup de effort et trouvé que le VBus(pin 7 de la carte) doit lier à VCC. Donc on a utilisé un fil pour lier VBus à VCC et le tester sur Linux. Enfin, nous avons réussi à afficher <span style="color:orange">le ID de notre carte est: 2341:8036 Arduino SA Leonardo (CDC ACM, HID)
  On a fait beaucoup de effort et trouvé que le VBus(pin 7 de la carte) doit lier à VCC.  
 
  Donc on a utilisé un fil pour lier VBus à VCC et le tester sur Linux.  
 
  Enfin, nous avons réussi à afficher le ID de notre carte est: 2341:8036 Arduino SA Leonardo (CDC ACM, HID)
 
 
* Nous avons trouvé que la tension supply de la capteur de température doit être inférieur de 4.4V mais notre tension de supply est 5V, il faut que nous ajouter un résistance après.
 
* Nous avons trouvé que la tension supply de la capteur de température doit être inférieur de 4.4V mais notre tension de supply est 5V, il faut que nous ajouter un résistance après.
  
Ligne 181 : Ligne 184 :
 
* Nous avons commancé écrit le programme dans fiche.c de la carte:
 
* Nous avons commancé écrit le programme dans fiche.c de la carte:
 
le but: réaliser la fonction de lire les données de température avec ADC et le sauvegarder dans EEPROM de notre carte.
 
le but: réaliser la fonction de lire les données de température avec ADC et le sauvegarder dans EEPROM de notre carte.
 +
* Pour la transfert de donnée de température:
 +
** Pour ADC: on a 2,56V comme réference de ADC, le ADC dans Atmega32u4 est 10-bit ADC, donc 2,56V-->1024;
 +
** Et pour le capteur température: <math>T=tension*100-60</math>
 +
** Donc dans le programme on peut obtenir la valeur de temperature par rapport à ADCH avec: <math>val=(ADCH/(512)*2.56*100-60</math>
 
[[Fichier:Exaaaa.PNG]]
 
[[Fichier:Exaaaa.PNG]]
 
[[Fichier:Exbbbb.PNG]]
 
[[Fichier:Exbbbb.PNG]]
* Pour la transfert de donnée de température:
 
Pour ADC: on a 2,56V comme réference de ADC, le ADC dans Atmega32u4 est 10-bit ADC, donc 2,56V-->1024;
 
Et pour le capteur température: <math>T=tension*100-50</math>
 
Donc dans le programme on peut obtenir la valeur de temperature par rapport à ADCH avec: <math>val=(ADCH/1024)*2.56*100-50</math>
 
  
 
===<span style="color:#6FB7B7">Semaine 10===
 
===<span style="color:#6FB7B7">Semaine 10===
Ligne 199 : Ligne 202 :
  
 
[[Fichier:layout.jpg]]
 
[[Fichier:layout.jpg]]
D'abord on peut cliquer 'Connection', et il va réaliser la  connection entre le smartphone et la carte.
+
D'abord on peut cliquer 'Connection', et il va réaliser la  connection entre le smartphone et la carte.
Ensuite, on peut voir la température afficher dans l'écran.
+
Ensuite, on peut voir la température afficher dans l'écran.
  
 
* Pour ce bouton, on a crée une action: Lorsqu'il est cliqué, il devrait rechercher tous les périphériques connectés, puis vérifier si l'ID du fournisseur Arduino correspond à celle d'un périphérique connecté. Si il l'avez trouvé, l'autorisation doit être demandée à l'utilisateur. Et notre ID du carte est 0x2341
 
* Pour ce bouton, on a crée une action: Lorsqu'il est cliqué, il devrait rechercher tous les périphériques connectés, puis vérifier si l'ID du fournisseur Arduino correspond à celle d'un périphérique connecté. Si il l'avez trouvé, l'autorisation doit être demandée à l'utilisateur. Et notre ID du carte est 0x2341
Ligne 209 : Ligne 212 :
  
 
* sous android:
 
* sous android:
  on a crée une fonction Broadcast pour recevoir la diffusion de demander l'autorisation de l'utilisateur  
+
 
 +
  On a crée une fonction Broadcast pour recevoir la diffusion de demander l'autorisation de l'utilisateur  
 
  et aussi pour lancer la connexion automatiquement lorsqu'un périphérique est connecté et pour fermer la connexion lorsqu'il est déconnecté.
 
  et aussi pour lancer la connexion automatiquement lorsqu'un périphérique est connecté et pour fermer la connexion lorsqu'il est déconnecté.
[[Fichier:Exbrq.jpg]]
+
[[Fichier:Exbrq.jpg]]
 
   
 
   
 
  Après, on a crée une fonction pour recevoir les données de température qui sont envoyée par le serie par notre carte:
 
  Après, on a crée une fonction pour recevoir les données de température qui sont envoyée par le serie par notre carte:
[[Fichier:,callback.jpg]]
+
[[Fichier:,callback.jpg]]
 +
 
 +
Dans le fichier de Manifest, on a indiqué quelles autorisations supplémentaires l'application pourrait nécessiter.
 +
On a ajouté donné la permission pour le smartphone de devenir un hôte de USB avec le phrase: <span style="color:blue"><uses-feature android:name="android.hardware.usb.host" />
 +
[[Fichier:manife.jpg]]
 +
 
 +
On veut que quand un device est lié sur le port usb le Intentfilter sera déclenché.
 +
On fournit le ID de notre carte dans un fichier XML pour spécifier explicitement notre carte.
 +
La ligne <span style="color:blue">android:resource="@xml/device_filter" /> <span style="color:black">indique au compilateur qu'il peut trouver les propriétés de l'appareil dans un fichier nommé device_filter dans src / main / res / xml
 +
 +
Donc on a ajouté un fichier xml pour les propriétés de l'appareil:
 +
[[Fichier:xmlfil.jpg]]
 +
 
 +
===<span style="color:#6FB7B7">Semaine 12===
 +
 
 +
*Nous avons ajouté un bouton dans notre application qui s'appel 'send and get'. Après on faire le connection, on peut écrire n'importe quel mot et cliquer ce boutton, ce boutton va envoyer le message à notre carte. Losque notre carte reçu ce message, il va envoyer les données de température à notre smartphone et l'affichier sur l'écran.
 +
 
 +
dans activity_main.xml:
 +
[[Fichier:getbt.jpg]]
 +
 
 +
dans MainActivity.java:
 +
[[Fichier:getbtu.jpg]]
 +
 
 +
Notre application est comme suivante:
 +
 
 +
[[Fichier:app&&&é".png]]
 +
 
 +
===<span style="color:#6FB7B7">Semaine 13===
 +
* Nous avons finalement décidé de faire notre code de la carte sur IDE pour mieux voir est-ce que notre capteur de température dans notre carte marche bien.
 +
  Donc notre code de la carte final est comme suivant:
 +
[[Fichier:Exfdsafef.png]]
 +
 
 +
Un l'autre avantage d'utiliser IDE est qu'on n'a pas besoin d'initialiser ADC manuellement.
 +
 
 +
Nous avons utilisé ADC0, pour cela c'est tout simplement d'écrire 'analogRead(A5)'.
 +
 
 +
Nous avons testé notre carte
 +
et on a vu que la température est 23 degré.
 +
 
 +
[[Fichier:zaefzqf.jpg]]
 +
 
 +
Après, on a mis une main chaud proche et loin de la capteur et on a vu que les données varient bien correspondant.
 +
 
 +
[[Fichier:Eqsfqze.jpg]]
  
 
===<span style="color:#6FB7B7">Fiches Rendus===
 
===<span style="color:#6FB7B7">Fiches Rendus===
 +
[[Fichier:Rapportsunxu.pdf]]
 +
 +
[[Fichier:code_pour_la_carte.zip]]
  
== Fichiers Rendus ==
+
[[Fichier:code_de_androidstudio.zip]]

Version actuelle datée du 15 juin 2017 à 05:47


Cahier des charges

Présentation générale du projet

123.png

Objectif du projet

Concevoir une carte électronique pouvant recevoir des capteurs et réaliser une application Android sur smartphone pour récupérer, grâce au port USB, les valeurs des capteurs. Comme exemple de capteurs, on peut citer un capteur de température ou un capteur de particules fines (PM2.5).

Description du projet

Ce projet propose la conception et réalisation d'un prototype se branchant sur le port USB d'un smartphone pour adjoindre le capteur de température sur le smartphone.

Pour réaliser notre objectif, nous scindons notre travail en trois parties :

  • réalisation d'une carte avec un capteur de température utilisant le port USB du smartphone pour s'alimenter et transmettre les données ;
  • réalisation d'une application Android sur le portable permettant de lire le capteur en arrière-plan et de stocker les données ;
  • conception un site Internet pour récupérer ces données transmises par l'application.

Choix techniques : matériel et logiciel

Capteur soudé sur la carte principale.

matériel:

  • Capteur de température.
  • Microntrôleur ATMega32U4
  • Connecteur USB.

Logiciel:

  • Altium Designer
  • IDE
  • Android Studio

Calendrier prévisionnel

Liste des tâches à effectuer

  • Carte ATMega 32U4
    • Étudier le datasheet de la carte ATMega32U4 et le "reference design"
    • Acquérir les valeurs du capteurs à l'aide du micro-contrôleur
    • Réaliser un périphérique USB grâce à l'ATMega32U4
  • Logiciel
    • Développement d’une application sous Android
    • Communication USB avec la carte principale
  • Wifi
    • Construction d’un site Web
    • Transmettre les données entre l’application et le site Web

Calendrier

Feuille d'heures

Tâche Prélude Heures S1 Heures S2 Heures S3 Heures S4 Heures S5 Heures S6 Heures S7 Heures S8 Heures S9 Heures S10 Total
Définition cahier des charges 6H 8H 12H 10H 8H 6H 6H 8H 8H 10H 10H 120H

Avancement du Projet

Préambule

14/12/2016

Discussion avec Monsieur Boé et Monsieur Vantroys pour préciser le cahier des charges.

23/12/2016

Discussion avec Monsieur Redon et Monsieur Boé pour le cahier des charges.

Semaine 1

  • Etudier les datasheet
  • Concevoir le cablage électrique

Nous avons déssiné le schématique en papier et discuté le schématique avec monsieur Boé. Nous avons fait comme suivant:

Cabler.jpg

Semaine 2

  • Chercher les composants
  • Créer les bibliothèques de schéma et PCB de ATmega

Nous n'avons pas trouvé la librairie de schématique et PCB pour l'ATmega32U4 et le capteur de température. Donc nous avons conçu nous même par rapport à les datasheets.

Le schématique de ATmega32U4:

Xin.jpg


Le package de ATmega32U4:

Atp.jpg


Le schématique de Capteur TC1047VNBTR:

Caps.jpg


Le package de Capteur TC1047VNBTR:

Cpp.jpg


Semaine 3

  • Nous avons modifié la partie de usb de la shématique de Altium,car nous avons décidé de changer le usb connecteur à type micro pour inserer notre carte éléctronique directement sur le smartphone sans utiliser fils de usb.

notre nouveau connecteur de usb: Usbn.jpg

  • Nous avons déssiné le libraire de schématique de altium et package pour notre usb connecteur(zx20-B-5S-UINT):

Pacusb.jpg

  • Pendans ce semaine nous avons aussi fini à déssiné le shéma de la carte éléctronique avec Altium designer, notre schéma est comme suivant:

Schemax.jpg

Ici nous avons connecter le pin de ID de usb connecteur à UGND de ATmega32U4.


Semaine 4

13/02/2017 (lundi) de 16h à 17h: Nous avons discuté notre schématique dans Altium designer avec monsieur Boé.

Il'a nous consigné quelque chose à faire avant la routage:

1. modifier tous les résistances et les capacités à les types de CMS pour minimiser la carte;

2. redéssiner le Crystal Resonator par rapport à le truc nous allons acheter;

3. changer quelques headers à les plugs(single header) correspond bien à les positions des pins du ATmega32U4 pour simplifier la routage.

  • Nous avons fait tous qu'il a consigné à faire.
  • Nous avons fini désigné le PCB sur Altium.

Figure de notre schéma PCB:

Pcbs.jpg

  • Nous avons aussi installé android studio et péripheri les SDK packages.

Semaine 5

  • On a corrigé le schéma PCB avec Monsieur Boé, la carte est prévu d'être prête le semaine prochain.
  • On a commencé de programmer le ADC du chip ATMega32u4.
  • On va déviser le program à deux parties. La première est de convertir la température au valeur numérique avec le ADC.La deuxième est de détecter et connecter USB et envoyer les données vers USB.


Semaine 6

  • Dans cette semaine, nous avons imprimé la carte et soudé tous les composants.

Semaine6.jpg

Problèmatique déjà résolu: Nous n'avons pas connu que les 5 pins de notre usb connecteur sont très courts, c'est vraiment très difficile de les souder sur notre carte. Avec l'aide de monsieur redon, nous avons liés les pins avec 5 petits fils et les soudé sur la carte.

  • Après souder tous les composants, nous avons tester les court-circuit et il n'y a pas de court-circuit.

Et on a essayé de charger un programme dans notre carte avec arduino:

Semane6.jpg

Problèmatique à résoudre: Nous avons trouvé que le chargement de programme ne fonctionne pas. Et nous avons testé notre fréquence de l'horloge, mais nous n'avons pas réussi à voir 16MHz. Nous allons continuer à tester et répaire notre carte électronique la semaine prochaine.

Semaine 7

Problèmatique résolu: Nous n'avons pas pû de programmer la carte parce qu'on a utilisé le ICSP d'arduino qui n'est pas les bons pins. Après on lie le GND ,Vcc, Miso avec arduino..., les leds de TX et RX cliniotent. Donc on dit qu'il y a de transfert des données.

Aun1.jpg

  • Pour programmer notre carte sans utilisant Arduino, on a soudé un cable USB qui lie avec l'ordinateur.

Anoe.jpg

Problèmatique à résoudre: On n'a pas arrivé de programmer le chip utilisant que le cable. Pour le résoudre, on a soudé un bouton de reset mais on a encore rien vu quand on lie le cable.

Semaine 8

  • Releve usb a cause du manque du cuivre, souder cable usb directement sur la carte
  • Nous avons corrigé notre circuit par lier UGND avec GND
  • Nous avons trouvé aussi il y a des erreurs parce que quand on tape 'lsusb', ça affiche pas. On a fait beaucoup de effort et trouvé que le VBus(pin 7 de la carte) doit lier à VCC. Donc on a utilisé un fil pour lier VBus à VCC et le tester sur Linux. Enfin, nous avons réussi à afficher le ID de notre carte est: 2341:8036 Arduino SA Leonardo (CDC ACM, HID)
  • Nous avons trouvé que la tension supply de la capteur de température doit être inférieur de 4.4V mais notre tension de supply est 5V, il faut que nous ajouter un résistance après.

Semaine 9

  • Nous avons commancé écrit le programme dans fiche.c de la carte:

le but: réaliser la fonction de lire les données de température avec ADC et le sauvegarder dans EEPROM de notre carte.

  • Pour la transfert de donnée de température:
    • Pour ADC: on a 2,56V comme réference de ADC, le ADC dans Atmega32u4 est 10-bit ADC, donc 2,56V-->1024;
    • Et pour le capteur température: T=tension*100-60
    • Donc dans le programme on peut obtenir la valeur de temperature par rapport à ADCH avec: val=(ADCH/(512)*2.56*100-60

Exaaaa.PNG Exbbbb.PNG

Semaine 10

  • On a utilisé android studio pour écire l'application pour réaliser la communication entre le smartphone et notre carte avec la porte USB.
  • The program flow:

Prg1flow.jpg

  • La mise en place d'une connexion série dans Android est vraiment compliqué, car il faudra que nous configurez manuellement beaucoup de choses, alors on a regardé certaines bibliothèques qui font tout cela automatiquement. on a chercher sur internet et on a finalement trouvé UsbSerial Library par l'utilisateur FelHR85 de Github.[[1]]
  • On a crée 1 bouton dans le fichier 'activity_main.xml' de android projet: 'Connection'

Layout.jpg D'abord on peut cliquer 'Connection', et il va réaliser la connection entre le smartphone et la carte. Ensuite, on peut voir la température afficher dans l'écran.

  • Pour ce bouton, on a crée une action: Lorsqu'il est cliqué, il devrait rechercher tous les périphériques connectés, puis vérifier si l'ID du fournisseur Arduino correspond à celle d'un périphérique connecté. Si il l'avez trouvé, l'autorisation doit être demandée à l'utilisateur. Et notre ID du carte est 0x2341

Clickconn.jpg

Semaine 11 pendant la vacance

  • Pour la partie éléctronique, on a ajouter un resistance pour corriger la tension entrée de notre capteur de température de 5V à 4,25V. Et nous avons tester la tension sortie et on trouve que la règle entre de la tension de sortie réel et la température est un peu différent que dans le datasheet. On a en train de corriger notre équation de transfert.
  • sous android:
On a crée une fonction Broadcast pour recevoir la diffusion de demander l'autorisation de l'utilisateur 
et aussi pour lancer la connexion automatiquement lorsqu'un périphérique est connecté et pour fermer la connexion lorsqu'il est déconnecté.
Exbrq.jpg

Après, on a crée une fonction pour recevoir les données de température qui sont envoyée par le serie par notre carte:
,callback.jpg
Dans le fichier de Manifest, on a indiqué quelles autorisations supplémentaires l'application pourrait nécessiter.
On a ajouté donné la permission pour le smartphone de devenir un hôte de USB avec le phrase: <uses-feature android:name="android.hardware.usb.host" />
Manife.jpg
On veut que quand un device est lié sur le port usb le Intentfilter sera déclenché. 
On fournit le ID de notre carte dans un fichier XML pour spécifier explicitement notre carte. 
La ligne android:resource="@xml/device_filter" /> indique au compilateur qu'il peut trouver les propriétés de l'appareil dans un fichier nommé device_filter dans src / main / res / xml

Donc on a ajouté un fichier xml pour les propriétés de l'appareil:
Xmlfil.jpg

Semaine 12

  • Nous avons ajouté un bouton dans notre application qui s'appel 'send and get'. Après on faire le connection, on peut écrire n'importe quel mot et cliquer ce boutton, ce boutton va envoyer le message à notre carte. Losque notre carte reçu ce message, il va envoyer les données de température à notre smartphone et l'affichier sur l'écran.

dans activity_main.xml: Getbt.jpg

dans MainActivity.java: Getbtu.jpg

Notre application est comme suivante:

App&&&é".png

Semaine 13

  • Nous avons finalement décidé de faire notre code de la carte sur IDE pour mieux voir est-ce que notre capteur de température dans notre carte marche bien.
 Donc notre code de la carte final est comme suivant:

Exfdsafef.png

Un l'autre avantage d'utiliser IDE est qu'on n'a pas besoin d'initialiser ADC manuellement.

Nous avons utilisé ADC0, pour cela c'est tout simplement d'écrire 'analogRead(A5)'.

Nous avons testé notre carte et on a vu que la température est 23 degré.

Zaefzqf.jpg

Après, on a mis une main chaud proche et loin de la capteur et on a vu que les données varient bien correspondant.

Eqsfqze.jpg

Fiches Rendus

Fichier:Rapportsunxu.pdf

Fichier:Code pour la carte.zip

Fichier:Code de androidstudio.zip