Intro
Je sais à quel point il est difficile de monter une entreprise et d'avoir tout à faire au début : produits, clients, démarches administrative, bancaires, création de l'identité graphique, de la communication.... Que d'énergie...
Snootlab tape fort, surtout pour une entrée en scène. Un kit de communication Web 2.0 complet, site web, blog, boutique, et une superbe identité graphique. Chaque shield dispose de son propre lien web, de sa documentation PDF complète, et d'exemples de réalisations sur le blog.
Après quelques échanges de mail, Snootlab m'a fait parvenir le shield i2C Power Proto Shield. Ce shield intègre :
- Une duplication du bouton Reset
- Un voyant d'alimentation bleu du plus bel effet,
- Un connecteur d'alimentation PC (Molex)
- Un connecteur HE10 pour raccorder un bs i2C
- Une alimentation 3.3V boostée, qui peut être mise en ou hors service
- Une zone pastillée permettant le prototypage, pouvant utiliser le 5V, le 3.3V et le 12V fournit par l'alimentation PC.
Déballage
L'ouverture du colis laisse apparaitre un sachet antistatique très sympa avec une étiquette qui ne laisse pas sans penser à celles de Lady Ada. Celle-ci précise l'adresse web ou trouver la doc de montage du shield, et possède même un code barre QR pour aller directement sur le site web...
Le sachet contient le circuit imprimé, les composants, et plusieurs beaux autocollants Snootlab. Quel sens du détail ! Il en existe également une version avec Breadboard et des cordons : Le Kit de prototype Snootlab.
Le circuit imprimé est très bien réalisé, avec une sérigraphie très claire.
L'unique CMS de la carte (le régulateur 3.3V) est déjà monté.
Montage
L'assemblage de la carte ne pose pas de problème particulier. La documentation est abondamment illustrée et il sera facile même pour un débutant de monter la carte.
Certaines fonctions nécessitent toutefois des précisions. L'alimentation 12V fournie par le connecteur Molex est routée sur une paire de pastilles permettant la configuration. Par défaut, cette alimentation n'est pas connectée, ce qui évite de faire des bêtises. Si on désire disposer du 12V, il faut déposer une goutte de soudure entre les 2 pastilles pour configurer la carte. L'alimentation est alors disponible à la fois dans la zone de prototypage (voir sérigraphie) et sur une broche en haut à gauche (12V PWR).
Si on suit le schéma, on s'aperçoit que le cavalier de configuration de l'alimentation 3V3, soit être mise sur 1+2 si on veut que l'alimentation soit fabriquée localement (à l'aide du régulateur), ou 2+3 si on souhaite qu'elle soit prélevée de l'extérieur (Arduino). La sérigraphie (INT/EXT) ne tombe pas en face, EXT étant en face de 1+2, cela porte à confusion. Il eut été souhaitable que cette sérigraphie soit labellisée EXT/INT pour ne pas induire d'erreur.
Premiers essais
Nous allons en premier tester la carte avec l’alimentation en provenance de l'Arduino. ll faut tout d'abord configurer celle-ci pour indiquer que l'alimentation sera prélevée du bus USB.
Après avoir positionné le cavalier de config de la shield sur 1+2 (le 3V3 est donc généré par la carte), on plugge la carte sur l'Arduino et... Ca s'allume en en bleu, montrant que la carte est correctement alimenté.
Dans ce deuxième test, nous allons tester l'ensemble avec une alimentation externe. Pour ce faire, il faut enlever le jumper de configuration de l'alimentation de l'Arduino. En effet, l'alim ne sera fournie ni par le régulateur 5V, ni par l'USB mais bien par le shiled lui même. A noter que cette précision n'est pas dans la doc.
On peut ensuite brancher le connecteur Molex sur une alimentation de PC. Cela s'allume toujours, et permet de garder l'Arduino branchée sur le bus USB pour la programmer. L’alimentation ne sera pas prélevée du bus, mais bien du Molex. Dans ce mode, on peut également débrancher l'USB, et la carte restera alimentée. Pratique.. Elle pourra également être intégrée dans un PC ou il suffira de trouver un Molex disponible.
Un petit test : un contrôleur de ventilateur 12V, asservi à la température
On va maintenant faire autre chose que seulement l'alimenter. J'ai besoin pour ma CNC, d'asservir les ventilateurs de refroidissement du watercooling de la broche car 2 ventilateurs de 120 mm en 12V, c'est vraiment trop bruyant.
Je vais contrôler les ventilateurs en PWM (modulation de largeur d'impulsion), à l'aide d'un MOSFET. Pour la température, je dégotte 2 capteurs DS1820 de Dallas dans mes archives (Merci Eric pour les échantillons...). Ca fera l'affaire.
Un petit coup de Google me permet de dénicher plusieurs liens intéressants :
- OneWire library for Arduino : http://www.pjrc.com/teensy/td_libs_OneWire.html
- DallasTemperature, lecture directe de la température en oneWire : http://www.milesburton.com/?title=Dallas_Temperature_Control_Library
- Gestion du PWM en haute fréquence sur l'Arduino: http://www.embedded.arch.ethz.ch/Examples/PWMTimer231kHz
Mon cahier des charges est assez simple. Je souhaite commander 2 ventilateurs indépendamment, qui soient asservis à la température. Comme il faut pour qu'un ventilateur tourne, qu'il y ait un minimum de tension (de l'ordre de 5 volts), il va falloir faire varier le PWM d'une valeur mini (environ 50/60) à la valeur max (255). Je souhaite que le ventilo ne tourne pas en dessous de 25 degrés, puis commence progressivement à fonctionner jusqu'à la valeur de température max que j'ai déterminé (50 degrés). Au delà des 50 degrés, le ventilateur restera à fond. Il y a peu d'électronique à ajouter à l'arduino et à l'I2C Power shield pour faire fonctionner le tout. Le Power shiled m'aidera à gérer le +12V.
Un petit peu de cablage plus tard, voici ce que cela donne. A noter que n'ayant pas reçu le breadboard, j'ai prototypé à coté. On voit ici très clairement l'intéret de la breadboard intégrée. Je ne voulais pas souder sur la carte pour ce premier test. Les photos représentent le test avec un seul ventilo, mais le programme ci dessous et le schéma en utilisent 2.
Voici un petit programme Arduino qui va faire fonctionner le tout, que j'ai baptisé Fanduino: fanduino.pde.
Au début du programme, plusieurs constantes permettent de définir le domaine de fonctionnement de chaque canal, et notamment, la température min à partir de laquelle le ventilo commencera à tourner, la température à partir de laquelle il sera au max, et les valeurs mini et maxi correspondantes du PWM.
A noter que le PWM est commandé à 31Khz, pour éviter que les ventilateurs résonnent (par défaut la fréquence de pilotage du PWM est dans le domaine audible, c'est très dérangeant).
Une petite fonction de debug affiche sur la liaison série la température et les valeurs PWM pour chacun des canaux. Le calcul et le rafraichissement est effectué toute les secondes.
Les capteurs de température pouvant être déportés, des erreurs de lecture peuvent apparaitre. Dans ce cas, la librairie de lecture renvoie "-127.00' degrés. Ceci explique le test dans la boucle principale pour éviter les erreurs de lecture.
Fanduino: DS1820 based temperature fan controller Temp1: 24.00 Temp2: 24.12 PWM1: 50.00 PWM2: 50.00 Temp1: 23.94 Temp2: 24.00 PWM1: 50.00 PWM2: 50.00 Temp1: 23.94 Temp2: 24.12 PWM1: 50.00 PWM2: 50.00 Temp1: 24.00 Temp2: 24.12 PWM1: 50.00 PWM2: 50.00 Temp1: 23.94 Temp2: 24.12 PWM1: 50.00 PWM2: 50.00 Temp1: 23.94 Temp2: 24.12 PWM1: 50.00 PWM2: 50.00 Temp1: 24.00 Temp2: 24.12 PWM1: 50.00 PWM2: 50.00 Temp1: 24.00 Temp2: 24.12 PWM1: 50.00 PWM2: 50.00 Temp1: 23.94 Temp2: 24.12 PWM1: 50.00 PWM2: 50.00
Edit...
J'ai un peu modifié le script initial de fanduino qui passe en version 1.1 :
- Les ventilateurs sont éteints, et plus au minimum, lorsque la température mesurée est inférieure à la température de consigne mini
- Un 'Soft Start', envoie un petit coup de boost aux ventilateurs pendant 750 millisecondes lorsqu'ils démarrent. En effet, il faut plus d'énergie pour démarrer le ventilateur, que pour continuer à le faire tourner.
- Un hystérésis, permet d'éviter que le ventilateur n'oscille entre on et off, lorsque l'on est prêt de la température mini. Le ventilateur démarre lorsqu'il passe au dessus de Tmini + une certaine valeur (fixée dans le sketch, actuellement 0.3 degrés), et s’arrête quand il passe strictement en dessous de Tmin.
- Affichade deu numéro de série des capteurs
- Debuggage des timings pour permettre le fonctionnement en alimentation parasite (c'est à dire broche 3,VCC déconnectée)
Le sketch ici: fanduino_V1.2.pde
Conclusion
Bravo à Snootlab pour son initiative, et la qualité de ses shields. L'accueil a également été sympathique...
La documentation aurait pu préciser le point concernant la configuration du jumper d'alimentation sur l'Arduino (l'enlever!) si on veut utiliser simultanément la prise USB et alimentation PC Molex. La sérigraphie du cavalier de configuration de l'alimentation 3.3V pourrait être inversée pour plus de clarté. Mais ce ne sont que de petits détails au regard de l'important effort de documentation déjà effectué.
J'ai hâte d'en tester d'autres....
Smootlab sera présent au Toulouse Hacker Space Festival - Tetalab - du 27 au 29 mai 2011 à Toulouse, ou ils assurerons un stand/workshop sur les 3 jours.
Massimo BANZI co-fondateur d'Arduino fait le déplacement, pour la première fois en France, pour une conférence le samedi et un atelier le dimanche.
Le programme complet au format pdf ici Plus d'informations sur l'évènement : http://tetalab.org/