Snootlab - Essai de l'Arduino i2C Power proto shield : Controlleur PWM de ventilateurs asservis à la température avec des capteurs 1Wire DS1820
Nouveau venu sur la scène des développeurs de shields arduino, la société Toulousaine Snootlab arrive sur le marché avec plusieurs interfaces intéressantes :
- Rotoshield : Interface 2 moteurs pas à pas ou 4 moteurs à courant continus
- Mémoire : Interface carte SD et horloge temps réel sauvegardée par batterie
- Gate 0.5 : Autre contrôleur ethernet à base de Microchip ENC28J60
- Power ScrewShield : Le prototypage sur borniers et avec CMS facile sur Arduino
- I2C Power Proto Shield : Shield de prototytpage i2C et d'alimentation alternative
Snootlab m'a fourni cette dernière pour tests, alors découvrons la ensemble... en réalisant un contrôleur de ventilation asservi à la température à l'aide de capteurs 1 Wire Dallas DS1820, et d'une commande moteur en PWM.
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/



Commentaires
Comme d'habitude, c'est clair, net et précis
Je vais vraiment finir par abandonner les Pic et passer sur Arduino
Bravo. Superbe réalisation.
J'ai rencontré et pas mal discuté avec différents membres de Smootlab au THSF, et clairement ils sont sympathiques et compétants.
Franchement leurs trucs sont bien fait pour se mettre a l'Arduino.
Par contre y'a pas vraiment de composants i2c sur cette carte, juste les connections pour le bus. C'est une carte de prototypage "général" sur laquelle on peu mettre des trucs qui causent en i2c, ou pas. Son nom n'est pas tres explicite.
Moi aussi j'y suis passé... Et j'ai aussi fait la causette avec l'équipe de Snootlab et aussi avec Hackable devices.. J'ai même discuté une petite demi heure avec Massimo Banzi, d'Arduino. Sympa le gars...
C'est vrai que la seule chose I2C, c'est le connecteur HE10. Du reste, il n'y a pas encore de réalisations 'pure i2C' sur cette carte. Ca va peut être venir, si je retrouve ma boite à composants i2c.. Il me semble que j'avais une rtc et un bus extender quelque part.. mais ou????