T Shirt d'ambiance connecté : Différence entre versions
(Code ADC) |
m |
||
(4 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
− | == | + | T-Shirt d'ambiance musicale augmentée |
+ | [[Fichier:iotTCa3.jpg]] | ||
+ | |||
+ | =Présentation du projet= | ||
+ | Ce projet de création d'objet connecté part d'une idée toute simple : rendre de la musique visuelle. L'objectif est de créer, pour un utilisateur, un avatar musical reflétant son ambiance sonore du moment. | ||
+ | |||
+ | Visible directement sur son T-shirt par exemple, le projet consiste à animer un visage (smiley) constitué de leds multicolores en fonction du son (à la manière d'un spectroscope). Le son peut être diffusé via un media quelconque (lecteur mp3, téléphone...) possédant une prise jack ou bien par WiFi, puis ressortable vers un casque ou éventuellement une enceinte connectée par exemple. | ||
+ | |||
+ | =Objectifs= | ||
+ | * Acquérir et échantillonner un signal audio (analogique) | ||
+ | * Le traiter en le décomposant selon les fréquences qui le constituent (FFT) | ||
+ | * Commander les matrices de leds NeoPixels en fonction des composantes fréquentielles du son échantillonné | ||
+ | |||
+ | =Solution technique retenue et étude de faisabilité= | ||
+ | ==Étude de faisabilité via un Intel Edison== | ||
+ | ==Etude de l'utilisation d'un FPGA pour le traitement du son== | ||
+ | ==Solution retenue : Arduino !== | ||
+ | |||
+ | Partie Edison | ||
<pre> | <pre> | ||
#include "mraa/aio.h" | #include "mraa/aio.h" | ||
− | #define GPIO_NUMBER | + | #define GPIO_NUMBER 12 |
#define GPIO_BASE_OFFSET 2 | #define GPIO_BASE_OFFSET 2 | ||
int init_gpio(mraa_gpio_context* gpios){ | int init_gpio(mraa_gpio_context* gpios){ | ||
Ligne 18 : | Ligne 36 : | ||
} | } | ||
int main(){ | int main(){ | ||
− | uint8_t | + | uint8_t ret; |
− | uint16_t | + | uint16_t adc_value = 0; |
mraa_aio_context adc_a0 = NULL; | mraa_aio_context adc_a0 = NULL; | ||
− | mraa_gpio_context | + | mraa_gpio_context gpio[GPIO_NUMBER]; |
mraa_init(); | mraa_init(); | ||
adc_a0 = mraa_aio_init(0); | adc_a0 = mraa_aio_init(0); | ||
Ligne 54 : | Ligne 72 : | ||
} | } | ||
</pre> | </pre> | ||
− | + | ||
+ | ... and NOPE | ||
+ | |||
+ | Partie Artix 7 | ||
+ | NOPE | ||
+ | |||
+ | Partie Arduino | ||
+ | Ultimate tuto, a preview of the simplicity : [http://www.pobot.org/Traitement-du-son-par-FFT-fast.html?lang=fr Free efficient project here] | ||
+ | |||
+ | ([http://wiki.openmusiclabs.com/wiki/ArduinoFFT Démo des mathématiques ici :]) |
Version actuelle datée du 21 janvier 2016 à 02:30
T-Shirt d'ambiance musicale augmentée
Sommaire
Présentation du projet
Ce projet de création d'objet connecté part d'une idée toute simple : rendre de la musique visuelle. L'objectif est de créer, pour un utilisateur, un avatar musical reflétant son ambiance sonore du moment.
Visible directement sur son T-shirt par exemple, le projet consiste à animer un visage (smiley) constitué de leds multicolores en fonction du son (à la manière d'un spectroscope). Le son peut être diffusé via un media quelconque (lecteur mp3, téléphone...) possédant une prise jack ou bien par WiFi, puis ressortable vers un casque ou éventuellement une enceinte connectée par exemple.
Objectifs
- Acquérir et échantillonner un signal audio (analogique)
- Le traiter en le décomposant selon les fréquences qui le constituent (FFT)
- Commander les matrices de leds NeoPixels en fonction des composantes fréquentielles du son échantillonné
Solution technique retenue et étude de faisabilité
Étude de faisabilité via un Intel Edison
Etude de l'utilisation d'un FPGA pour le traitement du son
Solution retenue : Arduino !
Partie Edison
#include "mraa/aio.h" #define GPIO_NUMBER 12 #define GPIO_BASE_OFFSET 2 int init_gpio(mraa_gpio_context* gpios){ int i; for(i=0; i<GPIO_NUMBER; i++) gpios[i] = NULL; for(i=0; i<GPIO_NUMBER; i++){ gpios[i] = mraa_gpio_init(GPIO_BASE_OFFSET+i); if(gpios[i] == NULL){ printf("Unable to get context for pin %d\n", i); return 1; } mraa_gpio_dir(gpios[i], MRAA_GPIO_OUT); } return 0; } int main(){ uint8_t ret; uint16_t adc_value = 0; mraa_aio_context adc_a0 = NULL; mraa_gpio_context gpio[GPIO_NUMBER]; mraa_init(); adc_a0 = mraa_aio_init(0); mraa_aio_set_bit(adc_a0, 12); // 12 bits resolution ret = init_gpio(gpio); if (adc_a0 == NULL){ printf("Unable to initialize ADC\n"); return 1; } if(ret != 0){ printf("Unable to initialize GPIOs\n"); return 2; } for (;;){ adc_value = mraa_aio_read(adc_a0); fprintf(stdout, "ADC A0 read %X - %d\n", adc_value, adc_value); mraa_gpio_write(gpio[0x0], ((adc_value & 0x001) == 0x001)); mraa_gpio_write(gpio[0x1], ((adc_value & 0x002) == 0x002)); mraa_gpio_write(gpio[0x2], ((adc_value & 0x004) == 0x004)); mraa_gpio_write(gpio[0x3], ((adc_value & 0x008) == 0x008)); mraa_gpio_write(gpio[0x4], ((adc_value & 0x010) == 0x010)); mraa_gpio_write(gpio[0x5], ((adc_value & 0x020) == 0x020)); mraa_gpio_write(gpio[0x6], ((adc_value & 0x040) == 0x040)); mraa_gpio_write(gpio[0x7], ((adc_value & 0x080) == 0x080)); mraa_gpio_write(gpio[0x8], ((adc_value & 0x100) == 0x100)); mraa_gpio_write(gpio[0x9], ((adc_value & 0x200) == 0x200)); mraa_gpio_write(gpio[0xA], ((adc_value & 0x400) == 0x400)); mraa_gpio_write(gpio[0xB], ((adc_value & 0x800) == 0x800)); } mraa_aio_close(adc_a0); return MRAA_SUCCESS; }
... and NOPE
Partie Artix 7 NOPE
Partie Arduino Ultimate tuto, a preview of the simplicity : Free efficient project here