Carte SD et Arduinos

Portrait de World of chaos

Bonjour à tous, je travaille sur un projet et j'aimerais connecter plusieurs arduino sur un seul support pour carte SD (de cette manière toutes les Arduino pourront lire les données de la carte en même temps). Cela est-il possible ? Si oui faudrait-il un branchement spécial?

Merci pour votre aide !

Portrait de Walter

Bonjour, je pense que cela va être compliqué d'utiliser plusieurs arduino pour écrire potentiellement en même temps sur une carte SD.
Mais par contre tu dois pouvoir sacrifier un arduino pour gérer la carte SD et gérer le dialogue avec tes autres arduino.

Portrait de World of chaos

Merci pour votre réponse. En faite les cartes Arduino n'on pas besoin d'écrire sur la carte SD mais juste de lire les informations contenues dans celle-ci. De cette manière un branchement en parallèle de toutes les arduinos sur l'SD est-il possible ?

Merci beaucoup !

Portrait de Walter

Lire ou écrire n'est pas vraiment le problème.
Pour prendre une analogie, si on compare la carte SD à un livre et tes arduinos à des lecteurs.
Il est difficile pour plusieurs lecteurs de lire le même livre en même temps. Surtout si il n'y a rien pour gérer qui peut lire à un moment donné.

De manière plus technique, les cartes SD utilise le protocole/bus SPI pour dialoguer avec l'arduino, ce protocole utilise un schéma maitre(arduino)/esclaves(shield SD, shield RFID, driver de moteur, ...).

Par contre je ne vois pas ce qui te gêne à prendre un arduino micro/  esp8266 ou un atiny85 en frontale de ta carte SD, pour servir tes arduinos en informations ?

Ou mieux si c'est uniquement pour lire une information, X carte SD dupliquée?

 

Portrait de World of chaos

Ha oui je comprend mieux maintenant...

Je pourrais utiliser un ATmega328UP pour gérer le dialogue entre l'SD et les Arduino mais le problème est que je ne sait pas du tout comment gérer celas étant donné qu'il y a 8 "Arduino" (qui sont en faite des ATmega328UP mais sa ne change pas grand chose) et sur ceux-ci, il ne me reste que les broches "RXD" et "TXD" (qui servent pour la communication en liaison série mais je ne sait pas si c'est par ce biais qu'on peut les faire communiquer entre elle ?). Si il le faut je peut libérer 4 autres broches PWM.

Merci beaucoup.

Portrait de Walter

En règle général on évite d'utiliser TX et RX qui sont utilisées pour la liaison série avec le PC.

Après ca dépend de ce que tu veux faire, mais une liaison série est prévus pour connecter 2 appareils entre eux TX de l'un sur RX de l'autre et vice versa.
Du coup toi tu aura 8 TX sur le RX de ton arduino SD et 8 RX sur son TX.
Il faudra donc prévoir un protocole pour que tout le monde ne discute pas en même temps.

De même si tu utilise les broches de l'i2C, qui est prévus pour que le maitre envois des commandes/ordres aux esclaves, il faudra prévoir un protocole pour que ton maitre(arduino SD) demande a chaque esclave alternativement si il veut lire quelque chose.

Donc pour résumé, c'est tout a fait possible, mais pas si simple.
Tu peux aussi faire des liaisons série par soft(logiciel) sur d'autre pin que TX/RX, mais je crois que le débit en pâtie et idéalement il te faudrait 16 broches de disponible.
 

Portrait de World of chaos

Ok merci pour ces indications !

Le problème est que je veut faire passer beaucoup d'informations sur les cartes arduino mais le plus simple est que je vous explique ce que je veut faire :

Je compte utiliser 8 ATmega328 relié à 1 haut-parleur pour pouvoir lancer jusqu'à 8 morceaux de musique en même temps. J'avais d'abord pensé à utiliser un Arduino Mega mais la librairie que j'utilise est TMRpcm.h ne permet de lire qu'un morceau à la fois ( une fonction permet d'en jouer 2 mais elle est en version beta). Et je ne pense pas qu'une arduino pourras lire et transmètre 8 fichiers audio en même temps ?

Portrait de Walter

Comme toujours tout dépend de ce que tu fait passer comme donnée (MP3, wav, ...), as tu quantifié les données que tu voulais faire transiter ? 

Il faut faire les choses dans l'ordre
que stocke tu sur ta carte SD ?
qu'elle quantité de donnée dans le meilleur et pire des cas cela représente?

Effectivement si tu compte faire passer un fichier audio non compressé échantillonné à 44Hz sur 8 bis en mono, tu es as 44ko/s soit 352ko/s pour 8 morceaux.
 

Je n'ai jamais testé en liaison série ou I2C ce genre de débit, mais en théorie c'est possible.
Reste a savoir si on arduino sera capable de lire d'un coté cette quantité de données et les écrire de l'autre.

Pour quoi ne pas te simplifier les choses en utilisant une carte SD par arduino ?

Portrait de World of chaos

je compte y mettre des morceaux de musiques au format WAV ( le plus optimisé à ce que j'ai compris ). Les morceaux durerons entre 1 et 16 secondes.

Pour quoi ne pas te simplifier les choses en utilisant une carte SD par arduino ?

En effet, plus j'y réfléchis plus je me dis que c'est la manière la moins compliquée mais le problème est la place que vont prendre les supports de cartes SD et surtout le cout de celles-ci et aussi ce ne seras pas très pratiques mais bon si je n'est pas d'autres choix je pense me tourner vers cette solution. Je trouve aussi dommage d'utiliser des cartes de 1 Go (le minimum achetable aujourd'hui) pour y stocker quelques KO.

Après, le top serais de directement pouvoir lire les fichiers depuis un câble usb sur un PC mais là je pense que c'est encor plus compliqué sachant qu'il faudrait un logiciel sur le PC qui envoie via une liaison série les informations et je me retrouverais au final avec le même problème.

Au final, une carte SD/arduino n'est pas très économique mais c'est la méthode qui semble la plus facile.

En parlant de lecteur de cartes, j'ai une petite question en ce qui concerne le mien : sur celui-ci, la broche CS est absente mais j'ai à la place SS ( qui est sensé être la broche présente sur l'arduino pour sélectionner l'esclave) et je n'arrive donc pas à le faire fonctionner ! Merci d'avance !

Portrait de Walter

Tu peux trouver assez facilement des cartes plus petits qu'1Go ici par exemple.

Oui  utiliser un PC ne simplifie pas le problème.

Pourquoi utiliser des ATmega328, des ESP8266 te permettrais de lire directement les fichiers sur un serveur WEB ou de stocker les fichiers directement sur les 4MB de la mémoire flash?

Je ne comprend pas vraiment ce que tu veux faire, pourquoi utiliser 8 µC, un seul te suffit puisque tu lit des fichiers wav.

Portrait de World of chaos

Alors je vais expliquer mon projet plus clairement :)

 Je compte créer une sorte de "platine de remix" avec 8 boutons capables de lancer 8 sons en même temps (d'où les 8 ATmega). Le sons en sortie passe ensuite dans un amplificateur (capable de régler le volume sonore) , un filtre passe haut et un passe bas ainsi qu'un effet tremolo. Le tout pour être brancher sur des haut-parleurs 8 ohms avec un sons mono.

L'utilisation d'ESP8266 serais très pratique mais ne marche que si j'ai du Wifi donc je ne peut pas l'emporter partout.

Vous dites que se serais possible de lire les 8 morceaux avec un seul µC ? Quelle librairie utiliseriez vous ? Je comptais utiliser TMRpcm.h  mais si vous avez d'autres idées je suis preneur !

Portrait de Walter

Pourquoi, l'esp8266 fonctionnera aussi bien lorsqu'il n'est pas connecté.

Les fichiers wav contiennent directement le niveau électrique, si tu lit toi même les fichiers, tu peux mixer les sources entre elles.
Par contre cela réclame pas mal de programmation et cela est peut être un peu hard pour toi pour l'instant.
Tu as besoin des interruptions et de contrôler les pins de l'haut parleur en PWM.
 

Portrait de World of chaos

Effectivement vous avez vu juste, je suis incapable de programmer celas, du moins pas sans un tutoriel bien expliqué ! J'ai cherché voir si il existait des doubleurs de carte SD, hélas non ! J'ai alors eu une idée plus ou moins bonne, à vous de voir !

Si je formate ma carte non pas en fat32 comme toutes les cartes mais en NTFS comme les disques dures et que je créer des registres dessus, ainsi chaque arduino iras chercher dans le registre qui lui est dédié ?

Sinon, je vais approfondire l'utilisation de l'esp8266 mais une petite question : peut-il sortir chaque sons sur une broche différente ? (ce serais l'idéal)

Portrait de Walter

Le fat32 est un système de fichier tout comme le ntfs, quelque soit le support.

Je ne connais pas la notion de registre sur le NTFS, mais je ne pense pas que cela règle ton problème.
Le soucis n'est pas l'organisation de ton support, mais le moyen d'y accéder, pour simplifié, tu a un fil a te partagé en 8, comme si tu essayais d'allumer une ampoule avec 8 interrupteurs.

Pour sortir un son par broche, je ne sais pas trop, de ce que j'ai compris la librairie TMRpcm utilise le PWM pour sortir le son, l'ESP en possède 4, je crois.

Portrait de World of chaos

Oui en effet, celas n'arrange pas le problème... Et si je prend une clé USB avec un multiplicateur? J'ai lue que ce n'est pas facile de lire les données d'une clé usb et qu'il fallait une shield comme pour les micro SD. Avec un multiplicateur comme celui_ci en inversant les prises mal-femelles ?

sourcing map Rectangle Noir 50cm Cable 1TB 8 Ports USB 2.0 Hub Adapt  doubleur: Amazon.fr: High-tech

Sinon, je ne pense pas me prendre la tête plus que sa et rester sur une micro SD par ATmega328 ce qui reste pour moi le plus facile à programmer.

Portrait de Walter

Alors l'idée est intéressante, le problème avec l'USB c'est qu'il y a un maitre(ex PC) et des esclaves(Clés, souris, ...) et qu'il y a une notion de profile (mass storage dans ton cas).

Avec des liaisons séries (USB, I2C, SPI, ...), le seul moyen, serait d'avoir un matériel dédié capable d'accepter X connections et pas juste un câble ou un adaptateur.

Portrait de World of chaos

Un matériel dédié, c'est à dire ? Un µC, une shield  ? Comment verriez vous l'installation ? Sachant que l'USB été mon projet initiale et que c'est beaucoup plus pratique qu'une micro SD pour la manipulation !

Portrait de Walter

Un matériel dédié c'est à dire qu'il existe un matériel qui soit capable de faire ce que vous voulez, 8 entrée sur une liaison série et une carte SD.
Mais il est sûr qu'un câble de ce genre ne sera pas capable de le faire, puisque ce n'est pas la philosophie des protocoles.
Je ne vois pas la chose de manière simple, pour vous.

Portrait de World of chaos

Toutes les possibilités d'utilisé un seul support de stockage sont donc compliqué et nécessitent des connaissances en programmation...

Ce n'est pas grave, je vais partir sur une carte SD par µC, je serais sur qu'il n'y auras aucun problème comme sa !

Un immense merci pour votre aide et vos connaissances !

Portrait de Walter

Je pense que ca serait plus sage, de pratiquer par étape et améliorer ton produit au fur et à mesure que tes connaissances évoluerons.

N'hésite pas à nous faire par de tes avancés, voir même une présentation de ton projet dans la section "Projets réalisés".

Portrait de World of chaos

Oui c'est vrais que faire ce projet avec 8 carte sd aujourd'hui ne veut pas dire que je ne le ferais pas évoluer demain !

N'hésite pas à nous faire par de tes avancés, voir même une présentation de ton projet dans la section "Projets réalisés".

Avec grand plaisir ! je n'y manquerais pas dès que je l'aurais finis !