Google ADK et wearable computing
Sommaire
- 1 Présentation
- 2 Résultats
- 3 Réalisation
- 3.1 Séance 1 (5/10/2011)
- 3.2 Séance 2 (10/10/2011)
- 3.3 Séance 3 (11/10/2011)
- 3.4 Séance 4(18/10/2011)
- 3.5 Séance 5(2/11/2011)
- 3.6 Séance 6 (04/11/2011)
- 3.7 Séance 7 ( 07/11 )
- 3.8 Séance 8 ( 8/11 )
- 3.9 Séance 9 (14/11)
- 3.10 Séance 10 (15/11)
- 3.11 Séance 11 (18/11)
- 3.12 Séance 12 (21/11)
- 3.13 Séance 13 (22/11)
- 3.14 Séance 14 (28/11)
- 3.15 Séance 15 (29/11)
- 3.16 Séance 16 (30/11)
- 3.17 Séance 17 (1/12)
- 3.18 Séance 18 (5/12)
- 3.19 Séance 19 (04/01)
- 3.20 Séance 20 (05/01)
- 3.21 Séance 21 (11/01)
- 3.22 Séance 22 (12/01)
- 3.23 Séance 23 (16/01)
- 3.24 Séance 24 (31/01)
- 3.25 07/02
- 3.26 10/02
- 4 Préparation téléphones
- 5 Arduino
- 6 Arduino
- 7 Android
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
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é.
- Telecharger Coachoid v1.0 : http://www.mirorii.com/fichier/44/507446/Coachoid_1-0-apk.html
- Code source : http://www.mirorii.com/fichier/14/507445/Coachoid_1-0-zip.html
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
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
- -http://developer.android.com/sdk/requirements.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é.
- Arduino : Finalisation clignotage de LED en C, et mise en place d'AVR pour eclipse.
Séance 8 ( 8/11 )
- 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)
- Tâche périodique d'envoi de Beat mise en place. Mais soucis de prise en compte des modifications lors du slide ( trop de changements d'états en peu de temps...). ( aide : http://www.developpez.net/forums/d669466/c-cpp/outils-c-cpp/visual-cpp/mfc/interception-levt-mousedown-slider/ et http://stackoverflow.com/questions/937313/android-basic-gesture-detection )
- Traduction en C de la librairie AndroidAccessory.c
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)
- Test inclusion de l'information de BPM dans les tags de la musique. Tests Réussi
- Recherche de solution pour prendre le bpm de chaque musique ( http://stackoverflow.com/questions/79445/beats-per-minute-from-real-time-audio-input http://www.streamhead.com/easy-bpm-calculation-in-java/ http://bpmdj.yellowcouch.org/ & http://jorgenmodin.net/index_html/archive/2010/07/23/counting-bpm-beats-per-minute-on-linux/weblogentry_view#1315989621 )
- deboggage des sources terminé, développement d'un programme test
Séance 19 (04/01)
- Exploration du calcul du BPM instantanéement. Exploration de la solution http://www.streamhead.com/easy-bpm-calculation-in-java/ qui donne des résultats cohérents.
- Recherche d'autres outils de calcul pour avoir des référance de BPM.
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
- L’accéléromètre permet uniquement de détecter les angles : http://bildr.org/2011/04/sensing-orientation-with-the-adxl335-arduino/
Préparation téléphones
Commun
- Suivre ce tuto pour pouvoir tester els applciations directement sur le telephone : http://developer.android.com/guide/developing/device.html j'ai utilisé celui ci : http://bzed.de/posts/2009/05/howto_set_android_developer_device_permissions_with_udev/
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
- Makefile de Mr Vantroys points à veririer : MCU, CFLAG et DUDE
- Makefile plus imposant
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.