Google ADK et wearable computing

De Wiki d'activités IMA
Révision datée du 22 février 2012 à 17:13 par Cdesravi (discussion | contributions) (Code Arduino)

Présentation

Contexte: Développement d'extension pour Android

Android dispose d'un protocole facilitant la connexion de périphériques sur les téléphones et les tablets http://developer.android.com/guide/topics/usb/adk.html A l'heure actuelle, il existe quelques kit de développement, mais peu d'extension existent. L'objectif du projet consiste à réaliser plusieurs cartes d'extensions. Ci-après la liste des premières cartes à réaliser, Les étudiants pourront ensuite proposer leurs propres extensions:

- Support XBee (comme pour les Arduino)

- Support RFID

- Support vêtement intelligent pour la danse (suite du projet IMA4SC)

-...

Résultats

En cas de question n'hésitez pas à contacter Catherine Desravine ( Catherine.Desravines [ at ] polytech-lille [dot] net ) ou Nicolas Lefebvre ( lef.nicolas [ at ] gmail [ dot ] com).

Les codes sources sont aussi disponible en E306 sur tutur02 (partie Android + detection de mouvement) dans le dossier /home/pifou/IMA5sc/PFEADKAndroid/ ou sur tutur01 ( reste de la partie Arduino) dans le dossier /home/pifou/Documents/Coachoid/

Application Android

L'application Coachoid v1.0 permet de lire les musiques sur le téléphone, détectes si les musiques sont taggées au format Coachoid ("Coachoid=[12.5,42.1,78.6]" par exemple), auquel cas elle envoie les informations recueillies à l'accessoire Arduino connecté.

Code Arduino

Detection de mouvement

Ce petit programme utilise la norme des vecteurs d'acceleration renvoyés par les acceleromètres Lilypad pour en déduire si un mouvement a été effectué ou non. Il permet de créer des tag pour l'application Coachoid ( informations renvoyées sur le port série ) contenant les temps auxquels des pas sont effectués. Code source : http://pastebin.com/e2bhiFV9

Accessoire pour Android et programme pour le Tshirt

Accessoire Android

Ce programme détecte la connexion d'un téléphone Android et interagit avec l'application Coachoid. Il envoie les informations sur le sexe de l'utilisateur , le style de musique (salsa ou rock 6 temps) ainsi que les beats d'une chanson en fonction des informations qu'il reçoit du téléphone.

Programme pour le T-shirt

Ce programme gère l'activation des vibreurs en fonction du genre de l'utilisateur ainsi que de la musique selon les informations de beat reçue par la liaison sans fil Zigbee.

Le code source de l'accessoire Android à compiler et uploader sur la MegaADK board se trouve dans le dossier ADKFinal de l'archive. Le code source pour le Lilypad sur le T-shirt se trouve dans le dossier TShirtFinal.

Fichier:Tshirt.png

Réalisation

Séance 1 (5/10/2011)

Prise en main des téléphones et du sujet, mis à jour des téléphones vers 2.3.4.

Séance 2 (10/10/2011)

Fin de mise à jour des téléphones vers 2.3.4 et 2.3.5.

Séance 3 (11/10/2011)

Installation de Android SDK

-http://developer.android.com/sdk/installing.html
-http://developer.android.com/sdk/requirements.html
-installation de Eclipse Galileo
-installation du plugin ADT http://developer.android.com/sdk/eclipse-adt.html


Problèmes rencontrés et solutions apportées:

lien https de dl-ssl.google.com ne fonctionne pas: remplacement du https en http NB: pour le STEP 4 de http://developer.android.com/sdk/installing.html => http forcé dans les paramètres du SDK Manager

Séance 4(18/10/2011)

Test de l'installation DemoKit de l'ADK.

Séance 5(2/11/2011)

Définition des tâches principales et répartition:

  • lecture de la musique par le téléphone (application Android), détection des BPM (Matlab) => Nicolas
  • envoi des infos BPM à l'arduino (extraction des metadatas et envoi) => Nicolas
  • transmission des BPM via Zigbee au T-shirt => Catherine
  • Test liaison telephone <-> Arduino : affichage message sur terminal serie (arduino) lors de l'appui sur un interrupteur sur le telephone.
  • Exploration des datasheet du Arduino pour trouver la correspondance des Port en C avec les broches.

Problèmes rencontrés

  • Manque de certains fichiers qui permettent la communication USB sur les téléphones.
  • Incompatibilité du programme Arduino de démonstration => programmation en C

Séance 6 (04/11/2011)

Début des tâches séparées.

  • début création application android simple avec un seul bouton qui permet l'envoi d'un seul bit sur le port usb lorsqu'il est appuyé.
  • prise en main du makefile pour la compilation directe en C pour arduino

Séance 7 ( 07/11 )

  • App: Mise en place bouton d'envoi de bit et Slider de selection de BPM pour simulation : interface ok, mais pas connecté.
  • led qui clignote
    Arduino : Finalisation clignotage de LED en C, et mise en place d'AVR pour eclipse.

Séance 8 ( 8/11 )

application de test avec un envoi à 124 BPM
  • Finalisation interface de l'application de test et début d'intégration de l'ADK pour communiquer avec la board.
  • headers et codes source C pour le connecteur usb de la carte trouvés il ne reste qu'à tranposer le header AndroidAccessory.cpp en .c et adapter le header.

Séance 9 (14/11)

  • Mise en place de la connectivité avec les accessoires sur l'application de test. Reste à tester sur l'arduino.

Séance 10 (15/11)

  • L'application communique bien avec le circuit arduino. Début de mise en place d'un tâche périodique pour envoyer un bit régulièrement suivant le BPM.
  • Traduction en C des librairies.

Séance 11 (18/11)

Séance 12 (21/11)

  • Finalisation de l'application de test avec l'envoi periodique de Beat ( 1 binaire) en choisissant la fréquence grâce au slider. Création de l'apk associé DemoKit 0.3.1 (sources).
  • Poursuite de la traduction en C.

Séance 13 (22/11)

  • Test de l'application avec les XBee (configuration de ceux-ci), et test avec le T-shirt du projet de l'année dernière avec succès.
  • Début de l'application Coachoid v4.0 = application finale de lecture de musique & co. ( http://developer.android.com/guide/topics/media/mediaplayer.html )
  • Les sources trouvées sur Internet se sont révélées être incomplètes et trop complexes à utiliser. Adaptation en C des sources C++ fournies avec l'ADK
    • codes source inchangés: ch9.h, Max3421e_constants.h
    • codes source en cours d'adaptation: Usb.h,Max3421e.h, Max3421e.c, Usb.c
    • codes source restant à adapter: AndroidAccessory.cpp, AndroidAccessory.h

Il y aura la fonction digitalWrite à réécrire également.

Séance 14 (28/11)

  • Suite de l'adaptation des sources C++ en C:
    • codes sources adaptés: Max3421e.h, Max3421e.c
    • codes source en cours d'adaptation: Usb.h, Usb.c
    • codes source restant à adapter: AndroidAccessory.cpp, AndroidAccessory.h, fonction digitalWrite de la librairie Wiring
  • Mise en place de la recherche des musiques du telephone, affichage en list et début d'implementation des intéractions avec les musiques.

Séance 15 (29/11)

  • Lecture basique de musique fonctionnel avec barre progression et selection de musique
  • Suite et fin de l'adaptation des sources C++ en C:
  • Déboggage des sources C

Séance 16 (30/11)

  • Suite du déboggage des sources C
  • Finitions de la liste (avec enchainement, bouton play-pause)

Séance 17 (1/12)

  • Mise en avant de la musique joué
  • Lecture des tag des mp3 grâce à http://www.jthink.net/jaudiotagger/
  • Fin du déboggage des sources
  • Début du développement d'un programme test

Séance 18 (5/12)

Séance 19 (04/01)

Séance 20 (05/01)

  • Débuggage des sources C pour Arduino

Séance 21 (11/01)

  • Premier programme de test de connexion d'un téléphone à la plateforme Arduino

Deux fonctions posent problème : celle d'initialisation du port usb (powerOn) de la plateforme ainsi que celle qui permet de détecter la connexion d'un téléphone (isConnected).

Séance 22 (12/01)

Arduino Le problème des fonction powerOn et isConnected a été résolu en réalité les soucis venaient du fait que le port usb n'était pas initialisé dans le programme test et il y avait également un délai trop long (200s) à la fin de la fonction powerOn.

Séance 23 (16/01)

  • Début d'intégration de la bibliothèque de calcul de BPM dans l'application

Arduino: La lecture de l'information sur le port usb pose problème il semblerait qu'un code retour soit égal à 0x65 au lieu de 0x00 (usb.c ligne 320)

Séance 24 (31/01)

  • Ecriture des BPMs dans le champs "encoder" des fichiers. Sous la forme : "CDD|Nombre_de_BPMs|[Liste des BPMs]" exemple : "CDD|6|[95, 119, 119, 131, 107, 143]"

Arduino: bugs du programme de base=>

  • il arrive que le programme s'arrête puis redémarre après qu'on ai connecté la borne MISO et la borne +5V du composant ICSP.
  • La fonction isConnected renvoie toujours 1 même quand le téléphone n'est pas connecté

07/02

  • création du circuit permettant de detecter le mouvement d'un accelerometre pour tagger automatiquement les musiques.

http://web.media.mit.edu/~leah/LilyPad/build/accelero_shirt.html et http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1245357699

  • Après correction des sources C par Mr. Vantroys, le code arduino de test a été amélioré. On peut maintenant brancher un téléphone sur la MegaADk, récupérer l'octet '1' envoyé par l'application demokit v0.3.1 et le renvoyer par commmunication zigbee.

10/02

Préparation téléphones

Commun

Soucis de com.android.future.usb.accessory.jar

xml : android.hardware.usb.accessory.xml

jar : com.android.future.usb.accessory.jar

  su
  mount -o remount,rw -t yaffs2 /dev/block/mtdblock4 /system
  cp /sdcard/com.android.future.usb.accessory.jar /system/framework
  chmod 655 /system/framework/com.android.future.usb.accessory.jar
  vi /etc/permissions/android.hardware.usb.accessory.xml
  chmod 655 /etc/permissions/android.hardware.usb.accessory.xml
  mount -o ro,remount -t yaffs2 /dev/block/mtdblock4 /system

manipulation légèrement différente pour le motorola defy:

  mount -o remount,rw -t ext3 /dev/block/mmsblk1p21 /system
  cp com.android.future.usb.accessory.jar /system/framework
  chmod 644 /system/framework/com.android.future.usb.accessory.jar
  cp android.hardware.usb.accessory.xml /etc/permissions
  chmod 644 /etc/permissions/android.hardware.usb.accessory.xml
  mount -o ro,remount -t ext3 /dev/block/mmsblk1p21 /system
  ---------> reboot pour que la librairie soit prise en compte.

Milestone 2 (droid2)

Passage en 2.3.4 : http://forum.xda-developers.com/showthread.php?t=1169038 Compte google : imapolytech@gmail.com (mot de passe = mot de passe habituel "root")

Motorola Defy

Passage en 2.3.4 : http://forum.frandroid.com/topic/51780-rom-cyanogen-7-rc15/ (gingerbreak incompatible avec android 2.1 : utilisation de z4root => failed, nécessite un passage à froyo via Windows avec le logiciel Motorola Software Update) Compte google : defypolytechima@gmail.com

Arduino

Hardware

  • liste des pins pour le microprocesseur ATmega2560

http://arduino.cc/en/Hacking/PinMapping2560

  • exemple de programmation avec AVR

http://hlt.media.mit.edu/wiki/pmwiki.php?n=Main.AVRProgrammingAdvanced

  • exemple de code arduino en C pour communiquer via le port série

http://todbot.com/blog/2006/12/06/arduino-serial-c-code-to-talk-to-arduino/

  • présentation arduinoboardADK

http://www.arduino.cc/en/Main/ArduinoBoardADK

  • code source led qui clignote pour Atmega328p (commande pour compiler avec avr-gcc et uploader avecavrdude)

http://balau82.wordpress.com/2011/03/29/programming-arduino-uno-in-pure-c/

  • code source led qui clignote atmega168

http://www.javiervalcarce.eu/wiki/Program_Arduino_with_AVR-GCC

  • code source pour USB Host: MAX3421E

http://code.google.com/p/microbridge/source/browse/trunk/src/mcu/?r=20#mcu

Xbee

Utilisation du channel 15 ( sous minicom -s "+++" -> "ATCH15" -> "ATCH" pour verifier -> "ATWR" pour sauvegarder -> ATCN pour quitter la modif

Configuration

C

Compilation

Divers

Connexion root pour lancer l'IDE arduino

  ssh -X -lroot localhost

Arduino

  • code arduino v1.0: Version de code qui fonctionne
    • envoie d'un octet '1' par appli android, récupération par arduino sur le port usb, envoi d'un 1 par liaison Zigbee

Android

Création apk

Le certificat contenant les clef de cryptage des apk se situe dans le repertoire /home/pifou/.android/keystore_signature_apk de tutur02. Les mots de passe sont ceux les mots de passe root habituels.

Version App Coachoid

  • DemoKit 0.3.1 : Appli de test d'envoi d'1 bit avec un BPM voulu. (sources)
  • Coachoid 0.4 : Application présentation pre-soutenance.
    • Lecture musiques
    • Lecture d'un BPM dans les tags de la musique
    • Envoi des BPMs à l'accessoire.