IMA4 2016/2017 P2 : Différence entre versions
(→Semaine 6) |
|||
(87 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 | + | * Microntrôleur ATMega32U4 |
* Connecteur USB. | * Connecteur USB. | ||
− | * | + | |
+ | 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 122 : | Ligne 127 : | ||
===<span style="color:#6FB7B7">Semaine 4=== | ===<span style="color:#6FB7B7">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: | Il'a nous consigné quelque chose à faire avant la routage: | ||
Ligne 139 : | Ligne 145 : | ||
*Nous avons aussi installé android studio et péripheri les SDK packages. | *Nous avons aussi installé android studio et péripheri les SDK packages. | ||
+ | |||
===<span style="color:#6FB7B7">Semaine 5=== | ===<span style="color:#6FB7B7">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 corrigé le schéma PCB avec Monsieur Boé, la carte est prévu d'être prête le semaine prochain. | ||
Ligne 148 : | 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. | |
* 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. | ||
− | Et on a | + | Et on a essayé de charger un programme dans notre carte avec arduino: |
[[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. Nous allons continuer à tester et répaire notre carte électronique la semaine prochaine. | |
− | Nous allons continuer à tester et répaire notre carte | + | |
+ | ===<span style="color:#6FB7B7">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. | ||
+ | |||
+ | [[Fichier:aun1.jpg]] | ||
+ | |||
+ | * Pour programmer notre carte sans utilisant Arduino, on a soudé un cable USB qui lie avec l'ordinateur. | ||
+ | [[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. | ||
+ | |||
+ | ===<span style="color:#6FB7B7">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 <span style="color:orange">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. | ||
+ | |||
+ | ===<span style="color:#6FB7B7">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: <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:Exbbbb.PNG]] | ||
+ | |||
+ | ===<span style="color:#6FB7B7">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: | ||
+ | [[Fichier: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.[[https://github.com/felHR85/UsbSerial/]] | ||
+ | |||
+ | * On a crée 1 bouton dans le fichier 'activity_main.xml' de android projet: 'Connection' | ||
+ | |||
+ | [[Fichier: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 | ||
+ | [[Fichier:clickconn.jpg]] | ||
+ | |||
+ | ===<span style="color:#6FB7B7">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é. | ||
+ | [[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: | ||
+ | [[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]] | ||
− | + | [[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
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:
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:
Le package de ATmega32U4:
Le schématique de Capteur TC1047VNBTR:
Le package de Capteur TC1047VNBTR:
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:
- Nous avons déssiné le libraire de schématique de altium et package pour notre usb connecteur(zx20-B-5S-UINT):
- 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:
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:
- 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.
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:
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.
- Pour programmer notre carte sans utilisant Arduino, on a soudé un cable USB qui lie avec l'ordinateur.
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:
- Donc dans le programme on peut obtenir la valeur de temperature par rapport à ADCH avec:
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:
- 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'
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
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é. 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:
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" />
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:
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.
Notre application est comme suivante:
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:
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é.
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.