Go Down

Topic: Enregistrer du son avec une Arduino ? (Read 8996 times) previous topic - next topic

ks99

Bonjour à tous,

Je suis totalement novice en électronique et tombé par hasard sur les cartes Arduino. Vu que tout le monde semble dire que c'est extrêmement simple à programmer et avec un potentiel incroyable, je me dis que je pourrais peut-être réussir à faire ce que je cherche.

Je m'explique, je voudrais :
- enregistrer dans un fichier (texte par exemple) le niveau sonore d'un micro (1 à 2 fois par seconde) et déclencher une alarme (sur un mobile par exemple) lorsque ce niveau devient trop important (d'après ce que j'ai lu, ça doit pas être le plus compliqué),
- sur demande (par internet), enregistrer un échantillon de son d'une trentaine de secondes (non compressé, mono, 16 bits, 44khz) sur une carte sd et rendre se fichier son consultable en ligne (une fois l'enregistrement effectué, pas forcément en streaming (ça doit être plus compliqué et beaucoup plus gourmand))

Vu comme ça et n'y connaissant pas grand chose, je me suis dit que ça ne semblait pas être très compliqué mais en faisant quelques recherches, il semble qu'il ne soit pas évident de manipuler du son avec une Arduino. Est-ce par manque de puissance de l'Arduino UNO ? Cela vous semble-t'il envisageable avec une MEGA2560 et un shield ethernet ?

Merci d'avance pour vos avis sur la question.

A bientôt

Ks99

Super_Cinci

Ton idée n'est pas impossible.

Le CAN de l'arduino demande 4 cycles pour une conversion, donc avec un quartz 16MHz, ça peut te donner un échantillonnage à 4MHz. Maintenant, il te faut travailler en 16 bits, donc tu ne pourras pas monter si haut. en 44100, c'est faisable en enregistrement. Calcule quand même en fonction de la ram disponible (2Ko je crois?), et le temps qu'il te faut pour écrire une donnée 16 bits sur une SD (pourquoi un fichier texte? un fichier WAV fera très bien l'affaire, de plus, il sera exploîtable tout de suite!)

J'essaierai ça un jour, mais je crains qu'il ne faille abandonner les librairies toutes faites car trop généralistes (donc gourmandes).

ks99

Bonsoir,

Pas impossible !! C'est déjà pas mal, mais c'est donc pas évident non plus et à fortiori, ça demande quelques connaissances  :~

16Mhz, ça correspond à la MEGA 2560, les autres ne sont pas assez puissantes, c'est ça ?

Le fichier texte serait seulement pour enregistrer les valeurs du niveau sonore. Je n'ai pas besoin du son en continu.
Par contre, je pensais effectivement à un fichier WAV pour enregistrer le son (mais seulement un court extrait et seulement à la demande).

J'ai posté ce message aujourd'hui pour savoir quelle arduino pouvait faire l'affaire (et si c'était faisable) mais je n'en ai encore aucune donc je m'y pencherait d'ici peu, le temps de l'acheter et de me familiariser avec l'engin.

Bonne soirée et merci

Ks99

68tjs

Quote
Le CAN de l'arduino demande 4 cycles pour une conversion, donc avec un quartz 16MHz, ça peut te donner un échantillonnage à 4MHz

Spec AtMega 328P page 250 :
13-250µs conversion time
Up to 76.9 kSPS (Up to 15kSPS at maximum Resolution)
page 253
A normal conversion conversion take 13 ADC clock cycles
Attention ADC clock = frequence_quartz/ prescaler.

Comme l'ADC est hautement configurable (il y a une dizaine de pages de la spec à bien étudier) c'est probablement faisable mais il va y avoir des registres à modifier. Peut être que l'on peut trouver sur le web des librairies adaptées et compatible avec le monde arduino.

ks99

Merci 68tjs,

Ton avis confirme donc que c'est sans doute faisable mais pas forcément par un débutant. Y a plus qu'à devenir expert ès arduino   :P

Ks99

68tjs

Quote
Ton avis confirme donc que c'est sans doute faisable

Plus exactement je n'ai pas trouvé d'indices qui me disent que c'est infaisable.
Je n'affirme pas que c'est faisable, je dis qu'il faut regarder la spec de très prés.
Et je pense que dans ce domaine d'autres ont plus d'expérience que moi.

skywodd


Ton idée n'est pas impossible.

Le CAN de l'arduino demande 4 cycles pour une conversion, donc avec un quartz 16MHz, ça peut te donner un échantillonnage à 4MHz. Maintenant, il te faut travailler en 16 bits, donc tu ne pourras pas monter si haut. en 44100, c'est faisable en enregistrement. Calcule quand même en fonction de la ram disponible (2Ko je crois?), et le temps qu'il te faut pour écrire une donnée 16 bits sur une SD (pourquoi un fichier texte? un fichier WAV fera très bien l'affaire, de plus, il sera exploîtable tout de suite!)

J'essaierai ça un jour, mais je crains qu'il ne faille abandonner les librairies toutes faites car trop généralistes (donc gourmandes).

Tu t'enflamme un peu Super_Cinci je pense ;)
Datasheet de l'ATmega328p page 251 :
Quote
Up to 76.9 kSPS (Up to 15 kSPS at Maximum Resolution)

Soit une vitesse de "sampling" maximum de 76KHz en résolution basse et 15KHz en résolution haute.
Il est possible d'enregistrer du son avec un échantillonnage de 8KHz et une résolution de 8bits ça a déjà était fait mais le stockage à par la suite poser de gros problème à la personne qui avait débuter ce projet, de plus il avait coder l'intégralité de son programme en c "pure" et géré tout les registres à la main.


Je suis totalement novice en électronique et tombé par hasard sur les cartes Arduino. Vu que tout le monde semble dire que c'est extrêmement simple à programmer et avec un potentiel incroyable, je me dis que je pourrais peut-être réussir à faire ce que je cherche.
(...)
Vu comme ça et n'y connaissant pas grand chose, je me suis dit que ça ne semblait pas être très compliqué mais en faisant quelques recherches, il semble qu'il ne soit pas évident de manipuler du son avec une Arduino. Est-ce par manque de puissance de l'Arduino UNO ? Cela vous semble-t'il envisageable avec une MEGA2560 et un shield ethernet ?

C'est le genre de projet qui se fait en projet de fin d'étude de 2eme année d'IUT informatique embarqué, c'est pas impossible à faire mais comme premier projet arduino c'est du suicide.
De même la plateforme arduino permet beaucoup de chose mais elle n'est pas du tout adapter à ce que tu cherche faire, un arm cortex M3 (voir M4) serait plus adapté ou alors un PIC32.
Dans l'idée c'est "simple" mais je ne vais pas te donner de faux espoir, en pratique cela va te demander énormément de programmation et ce ne sera pas une partie de plaisir.

Dans ton projet si j'ai bien compris il te faudra gérer :
- la détection du niveau sonore (facile -> circuit db métre + comparateur),
- l'envoi d'une alarme vers un mobile (gsm: facile -> module SIM900, internet: plus dure, bluetooth: possible -> module RN-42),
- l'enregistrement sur carte SD (pas ce qui a de plus compliqué mais la gestion de la ram sera un point important),
- gestion communication internet (difficulté moyenne, ethernet -> module W5100, wifi -> module wifi Wilfy GSx),
- enregistrement sonore (très complexe, gestion de l'échantillonnage, conversion en un format de fichier valide, ...).

Si je devais faire un telle projet je ne penserai même pas à arduino, je passerai directement sur une solution à base d'ARM cortex-M3, une board lpc1769 par exemple avec un module micro PMOD de digilent, un connecteur magjack pour l'ethernet (phy intégré au lpc1769 donc pas besoin de W5100), un module SIM900 pour le gsm, un connecteur SD compatible HC-SD.
Avec de la volonté cela doit être possible de faire ce projet avec un carte chipkit max32 + chipkit ethernet shield, un module micro PMOD de digilent, une shield gprs de seeedstudio  et une shield SD de sparkfun, mais il faudrai vraiment de la volonté pour le faire et savoir coder en C sur le bout des doigts.

Je pense que tu vise beaucoup trop haut (surtout pour un 1er projet), dis nous quel est ton but final si sa ce trouve tu te casse la tête pour pas grand chose.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

ks99

Bonsoir Skywodd,

C'est bien ce qu'il me semblait avoir vu sur certains forums : enregistrer, c'est pas aussi simple qu'on pourrait le penser de prime abord.

J'ai aussi vu la carte chipkit 32max mais j'ai cru comprendre que la communauté été beaucoup moins importante que celle d'arduino et je pense que j'aurais besoin la communauté donc ...

Merci pour ton avis éclairé. Je vais commencer par m'acheter un kit arduino simple pour m'amuser un peu et je verrai où ça me mènera ...

Bonne soirée

Ks99

skywodd


C'est bien ce qu'il me semblait avoir vu sur certains forums : enregistrer, c'est pas aussi simple qu'on pourrait le penser de prime abord.

C'est pas vraiment un problème spécifique à l'arduino, en faite enregistrer un son avec un microcontrôleur demande de faire pas mal de chose, et sur un microcontrôleur 8bits c'est de suite un défis (peu de ram, peu de puissance, ...)


J'ai aussi vu la carte chipkit 32max mais j'ai cru comprendre que la communauté été beaucoup moins importante que celle d'arduino et je pense que j'aurais besoin la communauté donc ...

C'est vrai que la communauté chipkit est relativement faible, comme celle de maple (leaflabs), mais après tout c'est assez normal vu que c'est cartes sont en priorité réservé aux personnes avec de solide connaissance en microcontrôleur 32bits et en programmation.


Merci pour ton avis éclairé. Je vais commencer par m'acheter un kit arduino simple pour m'amuser un peu et je verrai où ça me mènera ...

Bonne initiative ;) fait toi la main sur quelque chose de simple et après tu pourra voir plus loin.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

ks99


C'est pas vraiment un problème spécifique à l'arduino, en faite enregistrer un son avec un microcontrôleur demande de faire pas mal de chose, et sur un microcontrôleur 8bits c'est de suite un défis (peu de ram, peu de puissance, ...)


Est-ce que je dois comprendre que transmettre du son en continu sans l'enregistrer (donc du streaming) est plus facile ?

skywodd


Est-ce que je dois comprendre que transmettre du son en continu sans l'enregistrer (donc du streaming) est plus facile ?

Le transfert en contenu est plus "simple" car il n'y a pas de stockage, mais à ce moment là le problème devient la vitesse de transfert ...
Comme il n'est pas possible de faire un mémoire "tampon" pour pallier à une vitesse de transfert trop lente, la difficulté à gérer l'enregistrement est quasi équivalente.

Je me rappel d'une personne qui avait fait un enregistreur de son avec un pic16f876, la seul solution qu'il avait trouver pour réussir à enregistrer le son a était de réduire la qualité de la conversion analogique -> numérique de 10bits à 8bits (possible matériellement sur les PIC mais aussi sur les AVR) pour voir stocker provisoirement les "samples" sous forme d'octet brute dans une mémoire ram SPI externe jusqu'a ce qu'il n'y est plus de place (aprés 20s je crois) ensuite il récupérait ces données brute puis les traitées pour les stocker sur une carte sd octet par octet, la seul chose qui le limité c'était la taille de la mémoire ram externe.
(Par contre soyons franc une enregistrement en 8bits @22KHz sa ressemble à ça : http://bit.ly/s3Hm7t)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

ks99

Effectivement 8bits 22khz, c'est vraiment moyen

Merci pour les explications.

Go Up