Besoins d'infos sur les capacités de Arduino Uno

Bonjour à tous !

Possesseur d'une arduino uno depuis hier, je cherche à connaitre ses limites.

En effet, j'ai constaté que la mémoire interne était très petite, j'ai donc peur qu'un gros programme de gestion climatique ne tienne pas dans cette carte. Selon votre expérience à quel moment avez vous du passé au modèle MEGA ?

En gros je dois pouvoir contrôler 5 capteurs et agir sur une 5 actionneurs + un affichage LCD 4 lignes + Stockage sur carte SD.

Est-ce viable avec la UNO ?

Dernière question, je viens d'achter un capteur d'humidité qui contrairement à ceux de température ne possède que 2 pattes, comment le relier à l'entrer analogique ?

Merci d'avance pour votre aide je suis un peux perdu...

Bon weekend

Avant que tu arrives à remplir la mémoire de ta uno, tu vas pouvoir en coder des lignes ....

La mega c'est vraiment quand tu veux pas faire de multiplexage ou bien que tu as besoin de véritables port série supplémentaires.

Logiquement tu dois pouvoir tout connecter, après tout dépend des capteur, si c'est des capteurs de températures, il y en a en i2c par exemple et tu peux de facto en connecter quasiment autant que tu veux, pareil pour le LCD.

Les capteur d'humidité c'est un peu spécial, il sont majoritairement capacitif (les autres sont résistifs), mais il faut que tu vérifies. Si c'est capacitif, il faut, soit que tu utilises des montages de mesure de capacité.

Bonjour,

elriri:
En effet, j'ai constaté que la mémoire interne était très petite, j'ai donc peur qu'un gros programme de gestion climatique ne tienne pas dans cette carte. Selon votre expérience à quel moment avez vous du passé au modèle MEGA ?

Les quelques rares programmes que j'ai conçu qui ne passaient pas sur une carte UNO était soit extrêmement gourmand en entrées / sorties, soit des applications graphiques qui demandez énormément de code.

Je ne passe sur ma mega2560 que lorsque j'ai un programme nécessitant plus de broches que l'arduino UNO ne possède.
Ou si mon programme (pendant la phase de conception) se rapproche dangereusement de la limite des 30Ko de flash (il faut déjà le vouloir pour y arriver).

elriri:
En gros je dois pouvoir contrôler 5 capteurs et agir sur une 5 actionneurs + un affichage LCD 4 lignes + Stockage sur carte SD.
Est-ce viable avec la UNO ?

Si l'afficheur LCD est un afficheur série ça passera, sinon si il s'agit d'un afficheur "classique" parallèle tu manqueras de broches pour tout câbler (ou dans ce cas il faudra faire un montage à base de PCF8574 ou de 74HC595).
En tout cas ça ne sera pas un probléme concernant la mémoire disponible.

elriri:
Dernière question, je viens d'acheter un capteur d'humidité qui contrairement à ceux de température ne possède que 2 pattes, comment le relier à l'entrer analogique ?

Tout dépend du modèle, quelle est sa référence ?
Si c'est un DHTxxxx -> Sensor tutorials - DHT11/DHT21/DHT22 low cost temperature/humidity sensors
Sinon -> google -> référence du capteur + "datasheet" -> bonne lecture :wink:

Merci pour vos réponses ça répond exactement à mes questions !

Juste une chose la arduino contient de la caféine ? car là me décrocher de mon ordi c'est comme enlever une sucette à un enfant :slight_smile:

++

Excusez mon ignorance mais si lorsque je rentre un programme d'une trentaine de lignes (exemples/SD/DumpFile) et que mon IDE indique : "Taille binaire du croquis : 13 128 octets (d'un max de 32 256 octets)" cela signifie bien que une fois arrivé à 13128 octets mon programme ne pourra plus évoluer nan ?!

Concernant mon capteur d'humidité il capacitif, si je me trompe pas il faut que je le branche sur une entrée analogique ? Besoin d'un résistance ?

Salut,

Les 13128 octets correspondent à la taille de ton programme en mémoire de programme (flash). Sur la Uno il y a effectivement 32256 octets disponibles. Arrivé à cette taille, ton programme ne pourra effectivement plus évoluer.

Pour ton capteur, il faut que tu nous donnes sa référence si tu veux qu'on t'aide. Il est fort probable qu'un schéma typique d'utilisation soit donné dans sa documentation...

++

elriri:
Excusez mon ignorance mais si lorsque je rentre un programme d'une trentaine de lignes (exemples/SD/DumpFile) et que mon IDE indique : "Taille binaire du croquis : 13 128 octets (d'un max de 32 256 octets)" cela signifie bien que une fois arrivé à 13128 octets mon programme ne pourra plus évoluer nan ?!

13128 octets c'est la taille de ton programme en mémoire flash.
La taille maximum (théorique) est de 32256 octets, cela signifie que tu peut encore "utiliser" 19128 octets de code (binaire) dans ton programme.
Je précise "taille théorique" pour 32256 octets car en réalité le bootloader bloque (un bug jamais résolu ...) âpres un peu plus de 29500 octets.

Ton programme occupe donc déja 50% de la mémoire flash, ce qui peut parraitre énorme, mais en réalité la librairie SD est une usine à gaz qui consomme beaucoup.
Sur tes 13128 octets, tu as environ :

  • 440 octets pour les fonctions pinMode, digitalRead, ... inclut de base,
  • une 100aine d'octet pour le timer de millis() / delay(),
  • ~1000 octets pour Serial
  • tout le reste (~11000 octets) c'est la librairie SD (qui inclut SDfatlib)

Il n'y a pas beaucoup de librairies dans le genre de SDfatlib qui consomme autant de mémoire, donc ces 50% restant laissent une bonne marge de manœuvre.
Ps: niveau ram une fois la librairie SD initialisé il reste (seulement) ~500 octets de ram disponible, donc faire attention à ça :wink:

elriri:
Concernant mon capteur d'humidité il capacitif, si je me trompe pas il faut que je le branche sur une entrée analogique ? Besoin d'un résistance ?

Voir : http://midity.com/content/measuring-humidity-arduino

elriri:
Excusez mon ignorance mais si lorsque je rentre un programme d'une trentaine de lignes (exemples/SD/DumpFile)

Derrière cette trentaines de lignes se cache surement le double, triple, ..., à travers les différentes librairies ... :sweat_smile:

osaka:
Derrière cette trentaines de lignes se cache surement le double, triple, ..., à travers les différentes librairies ... :sweat_smile:

Bien plus que ça en réalité :sweat_smile:

Si j'en crois mon fidèle wc -l *.cpp *.h :
Il y a 869 lignes de code dans la librairies SD et 4248 lignes de code dans la librairies SDfatlib :sweat_smile:

Ok merci donc dés qu'on utilise une carte SD ça bouffe pas mal de place, bon à savoir pour peux être se tourner faire une solution sans fil pour le transfère des données voir en ethernet avec le shield adéquate...

Dernière question de débutant, les commentaires sont ils compilés avec le programme ? Je pense pas mais bon...

skywod : Il s'agit exactement de celui là, j'ai cherché pas mal de temps hier pour trouver ce schéma

Encore merci pour votre réactivé et votre aide.

elriri:
Ok merci donc dés qu'on utilise une carte SD ça bouffe pas mal de place, bon à savoir pour peux être se tourner faire une solution sans fil pour le transfère des données voir en ethernet avec le shield adéquate...

Tout dépend de ce que tu veut faire.
Tu peut rester sur une solution avec une carte SD en bidouillant un peu ton code
Ou tu peut aussi passer par des modules de stockage série (exemple : http://www.lextronic.fr/P2261-module-de-stockage-udrive-usd-g1.html) ou encore transmettre les info par wifi/bluetooth/RF/ethernet/...

elriri:
Dernière question de débutant, les commentaires sont ils compilés avec le programme ? Je pense pas mais bon...

Non il ne sont pas compilé avec le reste du programme, tu peut en mettre autant que tu veut :wink:

Je profites de ce post pour poser une dernière question de noob...

Finalement pour mon projet j'ai choisi d'utiliser une Mega 2560 capable de délivrer 200mA sur ses E/S à raison de 40mA Max/E/S.

Si un de mes capteurs consomme 100mA la solution est bien de l'alimenter à partir d'une source externe ?! et non directement sur le 5V et GND de l'arduino ?!

Je pose la question car le problème à l'air d'être récurrent alors que pourtant la solution semble super simple...

Merci de m'éclairer sur ce dernier point.

Bonne fin de semaine à vous

Je pose la question car le problème à l'air d'être récurrent alors que pourtant la solution semble super simple

Il n'y a jamais de cas simples. Il n'y a que des cas particuliers.

Il n'est pas possible de pousser un composant dans toutes ses limites en même temps.
Exemple: un relais est spécifié 220V 5A, eh bien c'est soit 220V soit 5A mais les deux simultanément abrègent la durée de vie du relais.

La règle de base est de lire la notice des composants, attention les indications sur le site arduino sont "plus qu'optimistes" il faut aller directement sur les sites de constructeur, pour le micro le constructeur c'est la société Atmel.
En ce qui concerne le courant max par sortie, lis la spec du micro et tu verra que les 40mA ne sont pas spécifiés en service permanent, je n'insiste pas d'avantage je me lasse.

Pour le courant max possible pour ton capteur cela va dépendre du courant total et entre-autre de ce que tu consomme dans les sorties du micro, il n'y a que toi qui a la réponse.
Il n'y a jamais de cas simples, il n'y a que des cas particuliers.

A mon avis personnel autant on peut jouer avec le feu avec une carte UNO où il est facile de changer le micro si on l'a cramé autant avec une Mega je marcherais sur des oeufs car avec son boîtier cms: micro cramé = carte à la poubelle.

Edit : j'ai peut être été trop restrictif sur la fin de mes propos : ce que je voulais dire c'est qu'entre tirer 40mA directement sur plusieurs sorties du micro je préfère de loin ajouter un transistor externe entre la sortie du micro et la charge. Toute la puissance sera supportée par le transistor externe qui est facilement inter changeable.

En faite justement je souhaite commander un module avec 8 Relais comme celui présent en pièce jointe.

Dans ma petite tête en gros je branche sur cette carte une alim externe 5V (avec GND commun a l'arduino) et ensuite je branche chaque file de commande à une E/S de mon arduino pour contrôler les relais indépendamment.

Le fabricant indique une consommation de 20mA/ Relais actif, mais ces 20mA sont tiré de mon Alim externe n'est-ce pas ? Aucun risque donc de cramer mon arduino en activant les 8 relais simultanément ?!

20120116100848_81811.jpg

Les 20mA qu'indique le fabricant correspondent à la commande du relais, ils parcourent le bobinage dans le relais et servent à créer le champ magnétique qui fera bouger les contacts : c'est donc toi qui les fournis :

  • soit directement par une sortie arduino --> aîe le micro est cramé --> voir nota
  • soit en passant par l'intermédiaire d'un transistor et dans ce cas c'est l'alim qui les fournis.

Nota le cas des relais est bien particulier comme tout ce qui touche au magnétisme : il faut prendre des précautions (très simples) sinon on crame tout.
Un dessin vaut mieux qu'un long discours voir dans le sous forum Cours et Tuto

Voir le document pdf, pour aller un peu plus loin dans les transistor consulter le document odt dans le premier message.

En gros si je comprends bien, afin de commander un relay avec une plus faible intensité (celle de la sortie arduino) je dois entre le file de commande et la sortie arduino y mettre un transistor sur lequel sera donc branché :

GND
Sorties Arduino
Commande relay

Désolé si je me plante royalement, mes connaissances en électronique se résume à une 'alarme fabriqué au collège...

Encore merci pour l'aide !

un schéma exemple.
Je te laisse faire les calculs pour la résistance de base, tu as toutes les données pour le faire.
Tu nous les propose et quelqu'un trouvera le temps de les vérifier.

mes connaissances en électronique se résume à une 'alarme fabriqué au collège

C'est un très bon début.... il ne reste plus qu'a continuer en consultant les tuto et le guide de l'arduino sur ce forum

Edit: avec le schéma c'est mieux

exemple_relais.pdf (17.1 KB)

68tjs tu t'emballe peut être un peu trop vite :wink:

elriri est ce que la carte avec les relais que tu possède correspond exactement à la photo que tu nous a posté ?

Si oui je vois pour chaque relai une diode (1N4148 en boitier cms à coup sur) et un transistor + résistance (le tout en format cms).
Il n'y aurai donc aucun câblage annexe à faire vu que tout est déja sur la carte.

Sinon ce sera à toi de faire le montage transistor + diode + résistance en suivant le schéma fourni par 68tjs.
Ps: dans le "guide arduino" (voir le topic en post it) tu as des liens vers des calculettes en lignes permettant de faire les calculs facilement :wink:

Le module exact est celui-ci : http://www.miniinthebox.com/8-channel-5v-relay-module-for-arduino-dsp-avr-pic-arm_p340846.html

Je trouvais ça étrange aussi qu'une carte comme celle là demande à être câblé avec des transistors supplémentaires...

Donc si je capte bien ici aucun problème à utiliser les 8 relais simultanément, de plus l'alimentation du module sera fera à l'aide d'une alim externe...

Merci pour votre aide

elriri:
Le module exact est celui-ci : http://www.miniinthebox.com/8-channel-5v-relay-module-for-arduino-dsp-avr-pic-arm_p340846.html

Je la connais cette carte ! :grin:

elriri:
Donc si je capte bien ici aucun problème à utiliser les 8 relais simultanément, de plus l'alimentation du module sera fera à l'aide d'une alim externe...

Ouaip

Alim -> carte relai
+12v -> VCC
masse alim & arduino -> GND
jumper COM - GND en place

Pour activer un relai :
+5v ( digitalWrite(xx, HIGH) ) sur une des broches INx