T Shirt d'ambiance connecté : Différence entre versions

De Wiki d'activités IMA
(Ajout du sommaire + Présentation)
Ligne 1 : Ligne 1 :
== Partie Edison ==
+
T-Shirt d'ambiance musicale augmentée
 +
 
 +
=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"
Ligne 57 : Ligne 74 :
 
... and NOPE
 
... and NOPE
  
== Partie Artix 7 ==
+
Partie Artix 7
 
NOPE
 
NOPE
  
== Partie Arduino ==
+
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]
 
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 :])
 
([http://wiki.openmusiclabs.com/wiki/ArduinoFFT Démo des mathématiques ici :])

Version du 21 janvier 2016 à 02:24

T-Shirt d'ambiance musicale augmentée

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

(Démo des mathématiques ici :)