Capteur Communicant Intelligent
Sommaire
- 1 Présentation
- 2 Avancement du Projet
- 3 Phase 0 : Début du Projet
- 4 Phase 1 : Expérimentation Xbee & Arduino
- 5 Phase 2 : Développement de Prototypes
- 5.1 Pendant les Vacances
- 5.2 Séance 15 (04/11/13)
- 5.3 Séance 16 (05/11/13)
- 5.4 Séance 17 (06/11/13)
- 5.5 Séance 18 (07/11/13)
- 5.6 Séance 19 (08/11/13)
- 5.7 Séance 20 (12/11/13)
- 5.8 Séance 21 (13/11/13)
- 5.9 Séance 22 (15/11/13)
- 5.10 Séance 23 (18/11/13)
- 5.11 Séance 24 (19/11/13)
- 5.12 Séance 25 (20/11/13)
- 5.13 Séance 26 (26/11/13)
- 5.14 Séance 27 (27/11/13)
- 5.15 Séance 28 (28/11/13)
- 5.16 Séance 29 (03/12/13)
- 5.17 Séance 30 (04/12/13)
- 5.18 Séance 31 (05/12/13)
- 5.19 Séance 33 (10/12/13)
- 5.20 Séance 34 (11/12/13)
- 5.21 Séance 35 (12/12/13)
- 5.22 Séance 36 (13/12/13)
Présentation
Cahier des charges
Objectif :
Réaliser une matrice de LED à l’échelle d'un publique d'une salle de spectacle en distribuant des bracelets lumineux localisables automatiquement
Description :
Dans le cadre d'un projet entre l'Artiste Wax Taylor et le laboratoire IRCICA de Lille, nous devont mettre au point un système permettant de localiser des personnes dans une salle de spectacle en vue de réaliser une matrice de LED à l'échelle d'un publique où le bracelet lumineux d'une personne ou ceux d'un ensemble de personne représente un pixel d'une image ou d'un motif. Le défi majeur reside dans la localisation des bracelets
Choix techniques : matériel requis
Avancement du Projet
Phase 0 : Début du Projet
Séance 1 (11/09/13)
- Prise en main du sujet
- Test de la programmation ISP d'un ATMega328p et de son mode de fonctionnement sans quartz pour faire clignoter une LED sur breadboard
Séance 2 (17/09/13)
- Réflexion autour de différentes solutions techniques de localisation à l'intérieur d'un bâtiment.
Infrarouge
Ultrason
RSSI (Received Signal Strength Indication) : Absolue / Relative
Séance 3 (18/09/13)
- Confrontation avec le point de vue des encadrants : Après plusieurs discussions, la localisation absolue par RSSI semble la solution la plus "adaptée" au sujet. Il reste néanmoins à faire rapidement la preuve de ce concepte. Il a donc été décidé d'implémenter un premier système à base d'Xbee et d'Arduino en vu de faire des tests préliminaires dans l’amphithéâtre de l'IRCICA.
Phase 1 : Expérimentation Xbee & Arduino
Séance 4 (25/09/13)
- Regoupement du matériel disponible à l'IRCICA et Polytech :
6 x Xbee Standard 4 x Xbee Pro 4 x Arduino UNO 1 x Arduino Mega
Séance 5 (26/09/13)
Début de la configuration des Xbees grâce à l'outils X-CTU de la société DIGI.
Serial ID CH DL DH MY 4049CDF2 3335 C FFFF 0 CDF2 4049CC3E 3335 C FFFF 0 CC3E 407A6584 3335 C FFFF 0 6584 407A6459 3335 C FFFF 0 6459 40017249 3335 C FFFF 0 7249 40017248 3335 C FFFF 0 7248 407BE8C6 3335 C FFFF 0 E8C6 407C84D7 3335 C FFFF 0 84D7
Serial = numéro de série de l'Xbee
ID (Network Identifiant) = Id du réseau (virtuel) dans lequel on veut faire travailler les Xbees
CH (Channel) = Selection du canal d'émission correspondant à la frequénce TX/RX
DL (Destination Low) = Partie basse du registre de configuration de l'adresse de communication (FFFF = Broadcast)
DH (Destination High) = Partie haute du même registre
MY (Device Identifiant) = Identifiant de l'Xbee sur le reseau (Convention : MY=2 derniers octects du Serial)
Séance 6 (30/09/13)
- Pour la localisation par RSSI, on constate très vite qu'il nous faut au minimum 3 émetteurs dont on connait la position et qui transmettent des trames de façon régulière chacun leur tour sans qu'il y ait de conflits. On appellera ces émetteurs TOURELLE tout au long de ce projet en opposition avec le récepteur à localiser qui sera appelé BRACELET.
- Pour les TOURELLES on décide d'implémenter dans un Arduino UNO un petit programme capable d’écouter ce qu'il reçoit sur son port série en provenance du module Xbee et d'identifier les éléments d'un trame simpliste de la forme suivante :
<AA,BB,CC> AA=num de la trame BB=nb total de trames CC=identifiant de la TOURELLE
Chaque Arduino connait l'ensemble des identifiants des tourelles et leur priorité et sait ainsi à quel moment il a le droit d’émettre.
- Pour l'unique BRACELET que l'on cherche à localiser on utilise une Arduino MEGA 2530 qui comporte 3 vraies UART supplémentaires. On aura donc Serial0 (Arduino <--> PC) et Serial1 (Arduino <--> Xbee) afin de ne manquer aucune trame et de pouvoir la visualiser en direct sur un PC. Ce récepteur enregistre les niveaux RSSI reçu de chaque TOURELLE. On y a directement accès via la pin6 du module Xbee qui est en fait une PWM dont le rapport cyclique et proportionnel au RSSI.
Séance 7 (02/10/13)
- On continu d'implémenter les fonctions précédemment décrites dans les Arduino.
- On redécouvre les joies du parsing de commande sur un environnement embarqué qui peut parfois poser des problèmes (utilisation de masques binaires et/ou des fonctions de la librairie C standard <String>)
Séance 8 (04/10/13)
- Des tests préliminaires dans le petit laboratoire de l'IRCICA démontrent que la puissance d'émission des TOURELLES doit être suffisamment faible ou en tout cas adaptée à la surface que l'on veut couvrir pour ne pas saturer le récepteur. En effet dans le cas des Xbee le RSSI est calculé uniquement sur 10 bits et on atteint la saturation pour quelques mW.
Séance 9 (10/10/13)
- En lisant la datasheet on remarque que les Xbee standard ont une puissance (configurable) plus faible que les Xbee PRO on décide donc de remplacer les Xbee PRO des TOURELLES par des Xbee standard et de renouveler notre expérience. On observe maintenant une différence de signal quand on se déplace à l'échelle d'une pièce
Séance 10 (14/10/13)
- Jusqu'ici nous récupérions le RSSI en lisant un registre de l'Xbee. Cela a pour avantage d'avoir directement une valeur en numérique mais les temps d'accès sont long puisque pour chaque accès il faut mettre l'Xbee dans le mode d'interprétation des commandes AT à l'aide de la commande "+++" attendre sa réponse, l'interroger, parser sa réponse. Tout cela à la vitesse de 9600 bauds. On décide donc d'utiliser la sortie RSSI de l'Xbee sur la pin 6 qui est une PWM dont la rapport cyclique est proportionnel au RSSI donc facile à évaluer avec l'entrée analogique d'un arduino.
Séance 11 (15/10/13)
- Premiers tests dans l'amphi de l'IRCICA mais nous manquons d'alimentations indépendantes pour les Arduino et il y a encore trop de collisions entre les messages des TOURELLES nous devons donc encore améliorer notre code.
Séance 12 (16/10/13)
Séance 13 (21/10/13)
Séance 14 (23/10/13)
Phase 2 : Développement de Prototypes
Pendant les Vacances
- Ébauche du protocole de communication.
Base/Tourelle/Bracelet | ID | CMD | Emission/Reponse Commande | DATA | Stuffing | TOTAL | NB OCTECTS | |
---|---|---|---|---|---|---|---|---|
Nb de Bits | 2 | 16 | 4 | 1 | 32 | 1 | 56 | 7 |
NUM | CODE | CMD | EMETTEUR | DATA [nb de bits] | Nb Bits de DATA Utilisés | DESCRIPTION |
BASE | ||||||
0 | 0000 | - | BASE | - | - | - |
1 | 0001 | TX TOUR | BASE | IDTOUR [16] / NBTRAME [3] / INTERVAL (x10ms) [8] | 27 | Autorise une Tourelle à Emettre |
2 | 0010 | RSSI TOUR | BASE | IDBRAC [16] / MASK [16] | 16 | Interroge un ou des bracelets pour connaitre le RSSI des Tourelles |
3 | 0011 | RSSI MAX | BASE | IDBRAC [16] / MASK [16] / N [3] | 19 | Interroge un ou des bracelets pour connaitre les N RSSI plus fort recus |
4 | 0100 | ENTENDU | BASE | IDBRAC [16] | 16 | Demande à tout les bracelets qui ont entendu un ID particulier de repondre |
5 | 0101 | PING | BASE | IDBRAC [16] | 16 | Ping un bracelet en particulier |
TOURELLES | ||||||
0 | 0000 | - | TOUR | Tout les bits à 1 | la Tourelle envoie une trame de Test en Broadcast | |
1 | 0001 | TX TOUR | TOUR | IDTOUR [16] / NUMTRAME [3] / NBTRAME [3] / INTERVAL [8] | 30 | Trame émise par une Tourelle |
BRACELETS | ||||||
0 | 0000 | - | BRAC | - | - | - |
1 | 0001 | - | BRAC | - | - | Ne fait rien ce sont les touerelles qui emettent |
2 | 0010 | RSSI TOUR | BRAC | IDTOUR [16] / NBTRAME [3] / RSSIMOY [10] | 29 | Le Bracelet renvoi le RSSI Moyen recu des tourelles qu'il a entendu |
3 | 0011 | RSSI MAX | BRAC | IDBRAC [16] / N [3] / RSSI [10] | 29 | Le Bracelet renvoi les N plus forts RSSI recu des autres bracelets entendus |
4 | 0100 | ENTENDU | BRAC | IDBRAC [16] / RSSI [10] | 26 | Le Bracelet renvoi le RSSI recu du bracelet recherché |
Séance 15 (04/11/13)
- Bilan de l'avancement avec M Ventroy.
- On règle différentes questions qu'en à la taille des données de localisation et leur stockage.
- On fait le point sur les objectifs pour la soutenance du 19 décembre (validation de concepte, réalisation de prototypes et de mesures)
Séance 16 (05/11/13)
- A partir de là nous nous sommes reparti les tâches en 2 parties. L'un commençant à écrire le code pour la station de BASE qui sera le chef d'orchestre de tout le système donnant la parole aux Equipements chacun leur tour et relevant les données en vu d'effectuer les calculs de localisation. L'autre s'occupe de réaliser les différents PCB sous EAGLE
Séance 17 (06/11/13)
Partie PCB
- Nous somme parti sur l'utilisation du MRF49XA, un transmetteur utilisant les fréquences 433/868Mhz et utilisant la communication série SPI.
- Recherche et ébauche du schéma utilisant un ATMega328p et le MRF49XA.
Partie Station de Base
Séance 18 (07/11/13)
Partie PCB
- Correction du schéma précédant.
- Et recherche d'une solution compact pour l'antenne.
Partie Station de Base
Séance 19 (08/11/13)
Partie PCB
- Développement du PCB : ATMega328p
Partie Station de Base
Séance 20 (12/11/13)
Partie AVR
- Développement de fonctions C permettant la communication serial sans les librairies et le bootloader Arduino.
Partie Station de Base
Séance 21 (13/11/13)
Partie AVR
- Suit du développement de fonctions C permettant la communication SPI sans les librairies et le bootloader Arduino.
Partie Station de Base
Séance 22 (15/11/13)
- On commence à écrire la commande en commun des composants que l'on aura besoin pour la suite du projet, on relève les références sur le site MOUSER
Séance 23 (18/11/13)
Partie PCB
- Suite à une réunion avec Alexandre Boé, nous nous sommes orienté vers une carte sans ATMega328p.
Partie Station de Base
Séance 24 (19/11/13)
Partie PCB
- Réalisation la carte sans ATMega328p.
Partie Station de Base
Séance 25 (20/11/13)
- Finalisation de la commande MOUSER
Séance 26 (26/11/13)
- Avancement du Wiki
- Réflexions autour des algorithmes de localisation (Barycentre, Trilatération,...)
Partie PCB
- Optimisation du 1er PCB de prototypage : MRF49XA + Ballun
-> Ajouter schéma
Séance 27 (27/11/13)
- Réalisation de 3 PCB MRF49XA + Ballun. Découverte des logicielles liés à la graveuse
-> Ajouter photos PCB
- Ajout de fonctions simples permettant la configuration des registres du MRF49XA ainsi que l'ensemble des définitions de variable utile à sa configuration.
Séance 28 (28/11/13)
- Ajout de fonctions de communication à travers le MRF49XA.
Séance 29 (03/12/13)
- Test du programme dans le MRF49XA, une premières lecture du registre de statut du MRF49XA semble validé la configuration mais il semble y avoir une erreur lors de l'envoie.
Séance 30 (04/12/13)
- Débugage du programme : soit un problème au niveau de la communication SPI, soit un problème dans le traitement de l'interruption.
Séance 31 (05/12/13)
- Test de la communication SPI à partir d'un second Arduino. Il n'y a pas de problème.