Coach Dance

De Wiki de Projets IMA
Révision datée du 5 avril 2011 à 09:05 par Cdesravi (discussion | contributions) (Avancement du projet)
Salsa.jpg

Présentation

L'apprentissage de la danse peut poser certains problèmes aux débutants. Un des problèmes majeurs rencontré concerne la synchronisation des mouvements sur le rythme de la musique. De nombreux débutants n'entendent pas le rythme soit parce qu'ils ne connaissent pas bien le type de musique (e.g. salsa) soit parce que la coordination des mouvements (bras et jambes) leur demandent de gros efforts cognitifs.

L'objectif du projet consiste à aider les danseurs débutants en donnant les indications de rythme et de mouvement. Pour cela, vous devez développer un système portable (type wearable computer) qui devra :

  • détecter de manière automatique le rythme de la musique. Dans un premier temps, nous ciblerons deux danses, la salsa et le rock 6 temps. Le type de danse sera indiqué au système afin de "simplifier" la reconnaissance
  • en fonction du rythme et de la danse, activer un des vibreurs qui seront disposé sur le danseur. Dans un premier temps, un vibreur sera installé sur chacun des mollets afin d'indiquer quel est le pied à bouger. Si le temps le permet, il sera possible d'étendre le système au mouvement des bras ou à d'autres danses.

Préparation du projet

Matériel

  • 1 arduino lilypad (disponible) ;
  • 4 vibreurs (à commander) ;
  • 1 micro portable (à commander) [1];
  • -> un cable jack par micro pour la connection à une plateforme Altium (disponibilité ?)
  • pour la connection Altium/Zigbee : puce Zigbee/cable(adaptateur usb)
  • Des morceaux de musique Salsa et Rock (à commander...XD);

Danses

Les deux danses visées dans un premier temps sont la salsa (style cubain, http://fr.wikipedia.org/wiki/Salsa) et le rock 6 temps (http://fr.wikipedia.org/wiki/Rock_%C3%A0_six_temps). Le système devra permettre de sélectionner la danse et le sexe de la personne (les pas de la fille sont inversés par rapport à ceux du garçon)

Avancement du projet

Première Séance (28/02/2011) -- 2h

Nous avons trouvé un lien pour un montage de détection des beats par minute (d'une basse) dans une chanson. Ce montage devra sûrement être adapté pour la salsa car le rythme sont repérés par le claquement des claves de fréquence plus hautes que les basses.

lien pour du montage de détection bpm
http://www.sonelec-musique.com/electronique_realisations_compteur_tempo_001.html

idée à développer: filtre numérique passe bande à tester sur 2 sons wav différents... (fft sur un fichier wav avec matlab puis calcul du filtre)

lien pour le câblage d'un micro 
http://www.sonelec-musique.com/electronique_bases_alim_micro_electret.html

Etapes prévues:

Test de la méthode de détection des beats par minute 
Nous voulons trouver une façon de faire le traitement numérique avec le microcontrôleur du LilyPad (ATmega328V) pour éviter d'avoir à concevoir un circuit imprimé en parallèle avec un montage à amplificateur opérationnel.
Phase de développement 
Après avoir trouvé la méthode finale de détection des beats par minute nous devrons concevoir un programme permettant de traiter ces informations et surtout adaptable à plusieurs sortes de musique
Partie pratique
Conception du vêtement intelligent


Deuxième Séance (3/03/2011) -- 2h

Test de traitement FFT avec Matlab d'un fichier wav a résulté à un échec. Test avec un programme développé par un étudiant de Supelec a échoué également. Nous nous sommes donc décidé à effectuer un traitement avec une plateforme Altium et utilisation de arduino / lilypad pour la communication zigbee et la gestion des vibreurs.

les micros dont nous avons besoin sont disponibles il nous manquera juste des composants type résistance condensateur etc...

Prochaine séance: Essai avec la plateforme Altium (Maxime) recherche d'info sur Zigbee (Catherine)


Troisieme Séance (3/03/2011)-- 2h

Test sur la plateforme Altium : un micro est connecté sur la plateforme Altium. On a essayé de récupérer le signal numérisé, pour pouvoir ensuite le traiter.


Quatrième Séance (7/03/2011)-- 2h

Pour communiquer via Zigbee il suffit de
-pluger une plateforme zigbee sur arduino : cette manoeuvre permet d'utiliser zigbee comme un port série en la branchant en usb sur un pc
-brancher une autre puce zigbee avec un câble miniusb-usb sur un autre port usb du pc

On peut ensuite faire communiquer les puces entre elles en faisant des read() et write() sur les descripteurs de fichiers associés (test non encore effectué à faire à la prochaine séance)


Cinquième Séance (10/03/2011) -- 2h

Programme arduino et zigbee.c développés et fonctionnnent. A la prochaine séance il faudra voir comment on peut envoyer le numéro du vibreur à actionner et le traitement qui sera fait par lilypad en fonction du numéro reçu par la puce zigbee sur le t-shirt.


Sixième Séance (14/03/2011) -- 2h

Méthode retenue pour l'envoi du numéro de vibreur: branchement de 4 pins de l'arduino sur la platine et la platine altium envoi un signal état haut pour l'activation d'un des 4 vibreurs (pin 1 à l'état haut : activation du vibreur 1, idem pour les 3 autres vibreurs), une fois le numéro de pin reçu on l'envoi via la puce Xbee présente sur arduino.


Septième Séance (17/03/2011) -- 2h

Il va falloir brancher la puce Xbee réceptrice sur le Lilypad (câble mini-USB vers connectique Lilypad commandé). il faut d'abord faire les tests sur plateforme Arduino (câblage de Lilypad avec du fil à coudre fastidieux et long à modifier).

Début de la programmation de commande des vibreurs: Les rythmes du rock 6 temps sont les suivants: 1,2, 3 et 4,5 et 6. pour le garçon cela revient à faire gauche(1), droite (2),gauche(3)-droite(et)-gauche(4), droite(5)-gauche(et)-droite(6). Idem pour la fille mais en miroir. On remarque qu'entre les temps 3 et 4, puis 5 et 6, il y a un demi-temps à marquer qui n'est pas indiqué par un beat. Il faut donc déterminer le temps qui sépare 2 beats et prévoir une vibration supplémentaire pour le demi-temps "et". La fonction millis() sous Arduino permet d'obtenir le temps qui s'est écoulé depuis le lancement du programme en millisecondes. Pour obtenir le demi-temps il suffit de stocker le temps lors du pas 1 et lors du pas 2 puis de diviser la différence par 2 pour obtenir la durée d'un demi-temps. Sachant que l'on actionne le vibreur pendant un certain temps il faudra déduire ce temps du demi-temps pour actionner le vibreur suivant.

NB: trouver une solution pour sélectionner le mode femme ou le mode homme (platine Lilypad interrupteur? http://www.lextronic.eu/doc/produit/img1_18685.jpg)

Huitième Séance (21/03/2011) -- 2h

Fin de la programmation du code à implanter dans le Lilypad idée trouvée pour sélectionner mode homme ou femme: un bouton poussoir et une LED RVB qui change de couleur en fonction du mode sélectionné (orange: aucun mode, bleu: homme, rose: femme)

Neuvième Séance (24/03/2011) -- 2h

Câblages et test de code Lilypad. Problème rencontré: les puces zigbee semblent ne pas communiquer ensemble à cause d'un changement de canal de transmission: à vérifier à la prochaine séance.

Prochaine séance: câblage Lilypad.

Dixième Séance (28/03/2011) -- 2h

Problème des puces zigbee résolu: cela venait bien d'un changement de canal de transmission. On a donc changé les paramètres grâce au logiciel X-CTU. Amélioration du code


Onzième Séance (31/03/2011) -- 2h

Problème de pause entre chaque cycle de vibrations

Neuvième Séance (4/04/2011) -- 2h

Problème de pause entre chaque cycle de vibrations : ce problème était du au fait qu'après incrémentation de la variable nbStep jusqu'à 6, on la réinitialisait à 0 au lieu de 1. le switch de notre code ne proposant aucune action pour un nbStep=1 on passait la boucle sans rien faire.