Arduino et les shields : demystification svp

Bonjour à tous,

je decouvre le monde des cartes arduino avec un interet grandissant.
j'ai un projet qui pourrait bien trouver reponse avec ce type de carte mais certaines choses sont encore un peu floue avant que je me lance.

Voici l'idée du projet et suivent ensuite les questions sans réponse pour le moment :

  • l'idée est de faire une carte d'acquisition de données, qui echantillonerait principalement des données analogiques à une fréquence entre 5Hz et 50Hz selon la nature des choses à mesurer.

Jusque là, ça semble pas etre trop complexe.

Maintenant un peu de piment. Dans la premiere version, la carte doit etre en mesure de :

  • collecter différentes mesures analogiques (5 tensions à priori, que je ferais ensorte d'etre dans la plage 0-5V)
  • collecter des données provenant d'un accélérometre (le nunchuk de wii me plait bien car cheap)
  • piloter un servo moteur
  • envoyer les données collectées via bluetooth, à la fréquence de l'echantillonnage à un périphérique externe (qui traite/aggrège ensuite tout ce joli monde)

Dans une version ultime, full power, la carte évoluerait ainsi :

  • plus besoin de bluetooth finalement : on fait tout en local
  • besoin d'une unité pour stocker les données (genre SD card)
  • besoin d'un module GPS 5Hz ou plus (1Hz redhibitoire)
  • besoin d'un module d'affichage (matriciel retro eclairé taille 4" environ, c'est pas pour de la video hein, juste pour afficher des données de façon lisible)

Le but c'est déjà de construire la v1 avant de lancer le projet v2 un peu plus ambitieux :slight_smile:

Maintenant, les questions sans réponse :

  • il existe plein de jolis shields mais difficile de savoir précisement qui cohabite avec qui, dans quelle limite on peu fabriquer un empilement viable de tout ceci. => Quels conseils sur ce point ?
  • Entre une Arduino Uno et une Mega, la compatibilité avec les shields est elle strictement identique ? Y a t'il des pieges ?
  • Entre une Arduino Uno et une Mega, pour mon besoin, laquelle serait adaptée ?

Merci pour votre aide.

Bonjour,

delirii:

  • l'idée est de faire une carte d'acquisition de données, qui échantillonnerait principalement des données analogiques à une fréquence entre 5Hz et 50Hz selon la nature des choses à mesurer.

Dans une plage de 5Hz/50Hz ça doit être jouable, à voir comment doit ce comporter le reste du montage.

delirii:
Maintenant un peu de piment. Dans la première version, la carte doit etre en mesure de :

  • collecter différentes mesures analogiques (5 tensions à priori, que je ferais en sorte d'être dans la plage 0-5V)
  • collecter des données provenant d'un accéléromètre (le nunchuk de wii me plait bien car cheap)
  • piloter un servo moteur
  • envoyer les données collectées via bluetooth, à la fréquence de l'échantillonnage à un périphérique externe (qui traite/aggrège ensuite tout ce joli monde)

Pour la collecte des 5 tensions entre 0-5v pas de probléme l'arduino sait faire ^^
Pour le nunchunk de wii, en I2C hardware avec les 5 tensions à mesurer ça va pas passer sur une arduino classique, par contre en software avec SoftI2CMaster ça passe sans probléme.
Pour le servomoteur, la aussi pas de probléme, avec la librairie officiel "servo" ce sera simple.
Pour l'envoi en bluetooth il y a deux solutions, la solution "low cost" à savoir un shield bluetooth @ebay pas chére mais qui marche nikel (les chinois, les taxes sur les normes bluetooth ils connaissent pas trop ^_^) ou la solution "gold" à savoir utiliser un bluesmirf/bluemodem de sparkfun.

delirii:
Dans une version ultime, full power, la carte évoluerait ainsi :

  • plus besoin de bluetooth finalement : on fait tout en local
  • besoin d'une unité pour stocker les données (genre SD card)
  • besoin d'un module GPS 5Hz ou plus (1Hz redhibitoire)
  • besoin d'un module d'affichage (matriciel retro eclairé taille 4" environ, c'est pas pour de la video hein, juste pour afficher des données de façon lisible)

Pour le stockage sur carte SD, il existe de nombreuse shield qui marche trés bien avec la librairie SD (ou avec sdfatlib).
Pour le module GPS, si il marche avec un port série NewSoftSerial devrait faire l'affaire.
Pour le module d'affichage, un petit glcd mono-couleur ou un écran TFT + shield à voir.

delirii:

  • il existe plein de jolis shields mais difficile de savoir précisément qui cohabite avec qui, dans quelle limite on peu fabriquer un empilement viable de tout ceci. => Quels conseils sur ce point ?

Pour avoir une idée des possibles problémes entre shield il existe le site shieldlist.org qui regroupe les "pinout" de beaucoup de shield du commerce, aprés c'est surtout une question d'expérience, un shield fonctionnant en spi peut marcher avec une autre shield en spi si les broches SS ne sont pas les même, de même pour l'i2c, ... au final il y a toujours un moyen de faire cohabiter deux shield ensemble moyennant quelques bidouillages.

delirii:

  • Entre une Arduino Uno et une Mega, la compatibilité avec les shields est elle strictement identique ? Y a t'il des pieges ?
  • Entre une Arduino Uno et une Mega, pour mon besoin, laquelle serait adaptée ?

La compatibilité arduino classique <> mega est relativement vicieuse, en faite tout est "identique", ou presque, le port spi n'est pas au même endroit, de même que le bus i2c, il n'y a pas de broche "comparateur/interruption", ... que des choses qui ne se vois pas quand on débute mais qui peuvent bloquer tout un projet des qu'en s'en rend compte.

Dans ton cas un board UNO semblerait suffire au niveau du nombre d'entrées / sorties, par contre pour la puissance de calcul derrière ça risque d'être limite niveau ram/timer, une carte chipkit pourrait être une solution envisageable mais pour un débutant passer directement sur une plateforme arduino PIC32 risque d'être un peu déstabilisant ...
Je pense que pour ta version 1 tu devrait prendre un carte UNO, de cette manière tu n'aura pas de probléme avec les shield SD (qui fonctionne en spi) et tu devrais pouvoir géré tout ce que tu cite dans la version 1, et avec un peu de temps pour optimiser le code la version 2 devrait pouvoir passer dessus.

Good, merci pour les retours. Les choses s'eclaircissent un peu plus.

@skywodd : Je n'ai pas compris ce que tu voulais dire ici :

Pour le nunchunk de wii, en I2C hardware avec les 5 tensions à mesurer ça va pas passer sur une arduino classique, par contre en software avec SoftI2CMaster ça passe sans probléme.

Pour bien comprendre le but de ceci, je vais decrire un peu mieux ce qui je compte faire des données du nunchuck. Le but est de mesurer une inclinaison (à frequence 5Hz par ex.) et d'en faire ensuite 2 choses :

  • ajouter ces valeurs à la trame envoyée en bluetooth (laquelle contient aussi les valeurs des 5 tensions analogiques
  • utiliser ces valeurs pour ajuster le positionnement du servo moteur (but : support gyroscopique "stabilisé" : un petit truc asservi pour rester horizontal)

Et une question bonus :

  • je souhaite mesurer une fréquence (fronts montants 0->5V), comment on s'y prend pour cela ?

En fait, plus je refléchis, plus j'entrevois des possibilités :slight_smile: C'est grave Docteur ? :wink:

delirii:
En fait, plus je refléchis, plus j'entrevois des possibilités :slight_smile: C'est grave Docteur ? :wink:

Nan normal x) Cependant comme le dit implicitement Skywodd ( :grin:) commence au stade 1 avant tout, sinon tu n'y arriveras jamais ! :wink:
Fur et à mesure que ton projet avance tu voudras sans cesse l'améliorer =D (l'expérience parle ^^).

Dis toi que tu as tout ton temps (je te le souhaites ]:D)

Bonne nuit ! ^^

C'est un peu l'approche que je vais adopter : l'humilité paye toujours ! (l'incrémental et itératif aussi)
On commencera par le noyau dur : acquisition de quelques valeurs et transfert via bluetooth.

Pour le bluetooth, je ne suis pas encore spécialiste des vendeurs chinois, donc j'ai pas trouvé ces modules bon marché. Le module sparkfun (gold) est assez cher :frowning:
J'avais vu celui de ITead Studio : http://iteadstudio.com/store/index.php?main_page=product_info&cPath=18&products_id=468. Ca me semblait correspondre à mon besoin... Mais bon, j'y connais pas grand chose non plus :wink:

Si quelqu'un a essayé ce module et peut m'en parler, je prends.

Merci et attendez vous à voir d'autres questions arriver, surtout dès que j'aurais la carte et le shield qui va bien :slight_smile:

delirii:
@skywodd : Je n'ai pas compris ce que tu voulais dire ici :

Pour le nunchunk de wii, en I2C hardware avec les 5 tensions à mesurer ça va pas passer sur une arduino classique, par contre en software avec SoftI2CMaster ça passe sans probléme.

Il existe deux méthodes pour contrôler un périphérique I2C en tant que "maitre".
L'I2C hardware (matériel, dure dans l'arduino) et le software (par logiciel, qui est réalisable sur n'importe quelle broches digital), le port hardware est sur A4 et A5, il empêcherai donc d'utiliser ces deux broches en analogique, en utilisant de l'i2c software le probléme est réglé.

delirii:
Pour bien comprendre le but de ceci, je vais décrire un peu mieux ce qui je compte faire des données du nunchuck. Le but est de mesurer une inclinaison (à fréquence 5Hz par ex.) et d'en faire ensuite 2 choses :

  • ajouter ces valeurs à la trame envoyée en bluetooth (laquelle contient aussi les valeurs des 5 tensions analogiques
  • utiliser ces valeurs pour ajuster le positionnement du servo moteur (but : support gyroscopique "stabilisé" : un petit truc asservi pour rester horizontal)

Tu devrais regarder du coté des "shelf balancing robots", souvent ils utilisent un nunchunk pour asservir un moteur DC, ça peut être une bonne source d'info.

delirii:
Et une question bonus :

  • je souhaite mesurer une fréquence (fronts montants 0->5V), comment on s'y prend pour cela ?

Pour mesurer une fréquence tu peut utiliser une interruption (voir attachInterrupt()) que tu paramètre en RISING (front 0v -> 5v) et qui appèle une fonction faisant une différence entre le temps actuel et le temps à l'interruption précédente.

delirii:
Pour le bluetooth, je ne suis pas encore spécialiste des vendeurs chinois, donc j'ai pas trouvé ces modules bon marché. Le module sparkfun (gold) est assez cher :frowning:
J'avais vu celui de ITead Studio : http://iteadstudio.com/store/index.php?main_page=product_info&cPath=18&products_id=468. Ca me semblait correspondre à mon besoin... Mais bon, j'y connais pas grand chose non plus :wink:

Si quelqu'un a essayé ce module et peut m'en parler, je prends.

Sur ebay cherche "Stackable Bluetooth Shield Wireless module for Arduino" -> 20€
C'est la même shield que dans ton lien :wink:
Perso j'ai un "bluesmirf silver" de sparkfun, le truc est à 40€ ... dont 3/4 du prix est du à la licence bluetooth du module ... c'est pour ça que les truc chinois coute vachement moins chère ...

Merci skywodd : tes reponses sont claires, précises et efficaces.

J'ai lu l'annonce de la (prochaine) nouvelle carte entrée de gamme (leonardo). Est-ce interessant d'attendre quelques semaines (vu qu'elle semble finalisée) et la prendre plutôt qu'une Uno?
A priori, elles sont quasi identiques (sauf le support de l'USB, natif dans le hardware de la leonardo), donc j'imagine que la compatibilité avec les shields sera donc à 100% ?
Le µP est il plus performant aussi ou bien identique sur ce point ?

Merci

delirii:
J'ai lu l'annonce de la (prochaine) nouvelle carte entrée de gamme (leonardo). Est-ce interessant d'attendre quelques semaines (vu qu'elle semble finalisée) et la prendre plutôt qu'une Uno?

Franchement je pense pas, une carte uno reste la meilleur solution (pour le moment).

delirii:
A priori, elles sont quasi identiques (sauf le support de l'USB, natif dans le hardware de la leonardo), donc j'imagine que la compatibilité avec les shields sera donc à 100% ?
Le µP est il plus performant aussi ou bien identique sur ce point ?

La compatibilité ne sera pas de 100% car ce n'est pas le même type de µc (ATmega32u4 VS ATmega328p), la compatibilité avec les shields se jouera au niveau de la conception même de la carte et des librairies qui iront avec, pour le moment il n'y aucune info.
Le cpu quand à lui a la même puissance, excepté qu'il a une gestion de l'usb en natif, niveau flash/ram c'est la même chose qu'une UNO.

Bon, je pense que je vais donc me lancer rapidement (je prépare mes commandes) : hâte de développer mes premiers sketches et voir des choses bouger/clignotter :slight_smile: Ca va me changer des développements purement applicatifs où l'interaction ne passe que par une IHM web !

Merci pour ces réponses constructives !