2 avril 2016
Démarrage d'un projet de réalisation de couveuse pour cellules royales avec régulation par module Arduino.

Cahier des charges :
- fonctionnement sur 12V pour permettre une autonomie et le transport éventuel des cellules prêtes à éclore et pour introduction sur un rucher
- contrôle et affichage de la température et de l'hygrométrie internes de la couveuse.
- régulation des températures à 35°C et 25°C à +/- 0,5°C correspondants à celles requises pour une éclosion parfaite des cellules et une survie des reines écloses.
- alarmes visuelles et sonores en cas d'anomalie de la température et de l'hygrométrie.

3 avril 2016
Écriture du 1er script.

Source de chaleur :
Plusieurs idées me viennent à l'esprit :

  • une ou plusieurs lampes de voitures
  • plusieurs résistances de puissance dissipant dans l'air
  • une ou plusieurs résistances sur un dissipateur métallique

A exclure, les cordons chauffants de terrarium qui ne fonctionnent que sur 220V, ce qui exclut l'autonomie sur batterie 12V.


Tests de source de chaleur en utilisant un refroidisseur de processeur récupéré sur un PC réformé. Le ventilateur fixé sur le refroidisseur pulsera l'air.
Fixation de 2 résistances  métal consommant ensemble 36W sur le radiateur. En milieu ouvert, la température de l'air ne monte jamais à 35°C... A vérifier en milieu clos.
Le 1er script affiche la température et l'hygrométrie lue avec un capteur DHT22.
Il détecte les seuils d'alarme haut et bas pour la température et le taux d'humidité. J'ai fixé à +/-  0,5°C les tolérances de la consigne de température et 75 % minimum pour l'humidité.
En dessous et en dessus de ce seuil, la résistance chauffante se met en marche ou s'arrête, un affichage par icônes permet de contrôler ce qui se passe.
Les alarmes sonores fonctionnent également.

Bon début ! smiley

Il apparaît évident dés le départ que la régulation de température ne sera pas si évidente que ça !

J'ai d'abord pensé qu'il faudrait implémenter une régulation PID (Proportionnelle, Intégrale Différentielle), mais après contact avec l'auteur d'une librairie PID disponible sur Arduino, il semblerait que ce ne soit pas nécessaire ni réalisable. Les temps de montée et descente en température étant probablement fortement dissymétriques, la régulation PID n'apporterait rien...

Il faudra donc procéder par tâtonnements pour trouver les bonnes plages de mise en et hors service de la source de chaleur.

Par contre, il semble intéressant de prévoir une variation de la puissance de la source chaleur et de la vitesse du ventilateur. J'utiliserai donc 2 sorties PWM de l'Arduino et  des transistors pour leur alimentation et non des relais comme initialement prévu.

Sous 12V, pour obtenir 40W de dissipation de chaleur, qui devraient être suffisants pour chauffer doucement l'enceinte de la couveuse, il faut consommer 3.33 A. Un ensemble de résistances de 25 W en parallèle devraient faire l'affaire. En alimentant les résistances au travers d'un transistor MOSFET et en modulant la tension de commande en PWM, on devrait pouvoir faire varier la puissance entre 0 et 40W.

L'idée est de commencer à chauffer au maximum au démarrage de la couveuse, puis de réduire la puissance lorsque la température se rapproche de la valeur consigne. Le maintien de le température pourra se faire en adaptant la puissance dissipée.

Variation de la vitesse du ventilateur :
Mes premiers essais pour faire varier la vitesse du ventilateur 12V de PC en utilisant la modulation par largeur d'impulsion (PWM) de l'Arduino, faisaient bien varier la vitesse, mais le ventilateur produisait un sifflement aiguë perturbant.

Il s'avère que la fréquence maximale PWM de l'Arduino UNO est de 976 Hz. Le ventilateur est donc soumis à cette fréquence maximale qui est parfaitement audible.

Mes essais pour réduire ce bruit en lissant le signal PWM qui commande le transistor à l'aide d'un réseau RC se sont soldés par des échecs. La solution est donc d'augmenter la vitesse de PWM afin que le son ne soit plus audible.

La documentation très volumineuse et compliquée des registres du processeur a de quoi décourager ! Jai trouvé cet article qui résume ce qu'il faut savoir sur la gestion PWM et les registres du processeur qui gèrent les timers.

La commande du  ventilateur était branchée sur la pin 6 qui est contrôlée à l'aide du TIMER 0. J'ai donc augmenté la fréquence PWM en changeant la valeur du prédiviseur ( de 64 à 8 ) du TIMER 0 par modification du registre TCCR0B. Manque de chance, ce timer est utilisé dans pas mal d'autres fonctions, notamment DELAY.
Il suffirait bien de multiplier les valeurs DELAY par 8 pour retomber sur ses pattes, mais malheureusement ce timer est utilisé dans la bibliothèque du capteur DHT22 qui ne fonctionnait donc plus.

J'ai donc réattribué les pins de mon afficheur LCD pour libérer la pin 3 qui elle, est gérée par le TIMER 2. Ce timer gère également la pin 11 affectée au LCD, mais sans conséquence sur son fonctionnement. Le timer prédivise par 8 et la fréquence maximale est donc de 3921 Hz.

const byte PIN_VENTILO = 3;       // PWM
pinMode(PIN_VENTILO, OUTPUT);

TCCR2B = TCCR2B & B11111000 | B00000010;

// TESTS variations vitesse ventilateur 

analogWrite(PIN_VENTILO, 255);    // pleine vitesse
delay (10000);
analogWrite(PIN_VENTILO, 127);    // vitesse moyenne
delay (10000);
analogWrite(PIN_VENTILO, 10);     // vitesse très lente

Avec cette configuration, le ventilateur ne produit plus aucun bruit additionnel, du moins audible pour moi, et la vitesse se laisse régler jusqu' à une très faible valeur. Tout est parfait !

Le ventilateur est alimenté par un transistor MOSFET canal N IRF634A, lui-même commandé sur la gate par la sortie 3 de l'Arduino. Le Mosfet utilisé est très largement surdimensionné, mais j'en ai plusieurs de récupération démontés dans un vieil onduleur. Le ventilateur est lui aussi de récupération et comporte 4 fils. Il devrait donc permettre la régulation de la vitesse à l'aide du fil PWM, mais je l'ai fait sur le fil rouge d'alimentation, ce qui permet d'utiliser tous les ventilateurs à 3 fils qui ne comportent pas ce fil PWM.

arduino fan 

Pour alimenter la source de chaleur, j'ai utilisé le même montage mais le transistor est un MOSFET STB80NF5 qui a une très faible résistance Drain-Souce (0,0065 Ohm) et ne chauffe donc absolument pas et ne nécessite donc pas de refroidisseur.

9 avril 2016

Premiers tests sur Arduino Uno avec tous les éléments connectés, mais en espace libre donc sans l'enceinte de la couveuse. La sonde de température étant à proximité du radiateur.
Tout semble fonctionner, les tests de régulation, de variations de puissance dissipée et de vitesse du ventilateur sont concluants.
Remplacement du buzzer initialement prévu mais donnant un son trop faible par un petit haut-parleur + transistor qui lui, donne un son trop fort que j'ai atténué en ajoutant une résistance en série.
Modifications de quelques paramètres et rajouts de quelques fonctions comme la possibilité de supprimer les alarmes sonores mineures à l'aide d'un interrupteur. Les alarmes majeures restent audibles.

Tests graphiques

Afin de visualiser les variations de températures dans le temps et donc l'effet de la régulation, j'ai rajouté un envoi sur le port série de la valeur millis(), qui indique le temps écoulé depuis le démarrage du logiciel + la température. Le tout au format CSV, séparés par une virgule et retour à la ligne. J'ai cherché un programme simple pour visualiser en temps réel ces courbes, mais n'ai encore rien trouvé de simple. J'ai donc utilisé le logiciel de terminal RealTerm qui permet l'enregistrement des données reçues au fil de l'eau dans un fichier CSV que j'analyse ensuite avec le tableur de LibreOffice.

Voici ce que donne le premier essai.

On voit que la régulation s'effectue correctement entre les 2 jalons que j'ai programmés avec un léger dépassement au-delà de la valeur haute dû au temps de chauffage trop long. Le tout reste cependant dans les limites du cahier des charges, +/- 0,5°C. Il me faudra probablement définir ces jalons de valeurs différentes pour les températures hautes et basses, ce qui n'est pas le cas actuellement.
Il reste à confirmer tout ça en enceinte close et avec le capteur éloigné de la source de chaleur !

10-11avril 2016

Une seule fausse manœuvre aura suffi pour faire rendre l'âme à l'Arduino Uno !
En attendant d'en obtenir un nouveau, saisie du schéma sous KICAD avec transposition vers un Arduino Pro Mini. Changement de quelques pins pour faciliter l'implantation du circuit imprimé.
Test rapide d'un Pro Mini avec les nouvelles pins sur le LCD pour confirmer que le choix est correct.

Dessin du circuit imprimé sous KICAD.

12 avril 2016

  Réalisation et câblage du prototype du circuit imprimé. Manque de chance, lors de la création de l'empreinte du Pro Mini, j'ai décalé les 2 pins A4 et A5 et le module ne s'enfiche donc pas dans les pins femelles qui servent de support !Sans conséquence, puisque ces 2 pins sont utilisés pour le bus I2c, que j'ai prévu dans l'éventualité de l'utilisation d'un autre capteur.. smiley

13-16 avril 2016
Quelques essais dans une boîte à chaussures me font modifier la manière avec laquelle je coupais et remettais le chauffage. La régulation est maintenant meilleure, mais reste perfectible. Ce sera après le coup de feu car il faut que ça marche rapidement !
Modification du sketch, ajout de 4 vitesses de ventilation et 4 puissances de chauffe. Affichage de ces niveaux par bargraphe sur le LCD. (c'est plus joli qu'un chiffre)

Réalisation de la couveuse par assemblage de plaques de polystyrène (densité 25,  je n'ai trouvé que ça) de 30 mm d'épaisseur.

Voici le plan au format Google Sketchup

Le volume interne à chauffer est donc de 0,025 m3

couveuse controleur vignette

La mise en boîtier du montage laisse apparaître quelques petits soucis, le boîtier étant trop petit  (mais je n'avais plus le courage d'en refaire un autre) j'ai passé trop de temps à chercher à faire tout rentrer. Percements, peinture, etc...

Mais finalement tout est rentré, au chausse-pieds ... Fonctionnement du montage fini conforme à ce que j'attendais.

Le temps pressant, j'ai mis la source de chaleur et la sonde dans la couveuse, un bac d'eau et feu ! On verra plus tard pour la finition, la couveuse doit être opérationnelle le lendemain !

 Résultats, la température se régule parfaitement dans la plage du cahier des charges. Le taux d'humidité reste toujours supérieur à 80%, ce qui est bon. On doit pouvoir faire mieux, mais ce sera pour plus tard...

 Demain, découpe de la "porte" pour pose du double vitrage en plexiglas.

21 avril 2016
Test en grandeur réelle, avec 2 bacs d'eau et la couveuse terminée. La régulation est parfaite !
La température varie entre 34,9 et 35 °C ! Le taux d'humidité grimpe à 100%. Le ventilateur tourne en permanence à 25% et le chauffage ne s'allume que quelques secondes de temps en temps.
Mes abeilles vont être contentes, et moi je le suis déjà !

capture couveuse finie

Baptême du feu samedi 23 avril avec mise en couveuse de quelques cellules royales.