Couveuse artificielle

j15932

New Member
Bonjour à tous,

Assidu au forum depuis plusieurs années sans avoir jamais posté, me voilà.

L'électronique de ma couveuse RCOM20 à rendu l'âme, donc PICAXE.

Je lit la température sur un 18B20 de cette façon :

readtemp12 2,w0
b3 = w0/16
w0 = w0 * 4096 ** 10000
b4 = w0 / 1000

Résultat : 21,3°

J'ai du mal pour programmer le thermostat : 3 boutons (Set, Temp+, Temp-) + R(100k) C(100Nf) anti-rebond

Je voudrais incrémenter une ou des variables pour comparer à la valeur lue sur le 18B20 de façon à chauffer ou non si la température demandée n'est pas atteinte. Par exemple je règle à 37,5° pour les 19 premiers jours, donc chauffer jusqu'au 37,5 (je m'occupe de l' hystérésis et de la précision du 18B20) puis re-fixer (par appui sur Set + Temp-) la température à 36,7° pour les 2 derniers jours.

C'est cette partie de programmation qui me pose problème. J'aurai la même gymnastique à réaliser pour l'hygrométrie.

Si l'un d'entre vous à une idée ou un algorithme, je suis preneur.

P.S. Pour les profs, je regrette vraiment que mon gamin n'ai pas eu des profs comme vous en 4ieme et 3ieme. Bon courage avec tous ces gosses en perte de repères.

Manu
 

PieM

Senior Member
Bonjour,

Et bienvenue...

La première remarque que je ferais est que si la résolution du 18B20 peut descendre à 0.0625 °C, sa précision, elle, n'est que de +/- 0.5°C.
Donc, si la température a besoin d'être de 37,5 et non 36.5, il va être impératif d'étalonner le système avec un vrai thermomètre...
Cette étalonnage devra être inclus dans le programme du Picaxe.

Vous envisagez une commande proportionnelle pour le chauffage ? Car avec cette précision au 1/10 de degrés, il faut une vraie régulation sans hystérésis!

Concernant le réglage des consignes, vous tenez absolument à avoir des boutons poussoirs ? Un potentiomètre plus un BP serait plus simple ...
quelle incrémentation souhaitez vous ? le 1/10 de degrés ?
 

j15932

New Member
Bonjour et merci pour cette réponse rapide,

En effet la commande de la résistance sera proportionnelle. Pour ce qui est des des boutons poussoirs, la réponse est oui, en effet la couveuse est ainsi faite : un BP Set, 2 BP Temp+ et - , 2 BP Hygro+ et - et un BP Turn pour le retournement automatique des oeufs (Set + Turn = retournement oui, une second appui sur Set + Turn = retournement non et enfin appui prolongé sur Turnn = retournement immédiat de test).
La résolution est du 1/10 ième de degrés, de même que pour l'hygro.

Les BP posent ils problème? Je les trouvent (pense) plus fin, en terme de réglage, qu'un potentiomètre. La précision du 18B20 est effectivement de +/- 0.5°, mais j'ai d'autre capteurs et dans l'immédiat je préfère programmer comme si la température lue était parfaite, quitte à effectuer quelque réglage et calage par la suite.

Manu
 

PieM

Senior Member
Dernière (?) question : Quel Picaxe comptez vous utiliser ?

Concernant l'incrémentation , donc de 1/10 en 1/10 . Je pense qu'une avance rapide n'est pas nécessaire ?
Il faut appuyer simultanément sur Set et un des BP pour régler ?
 

MGU

Senior Member
Bonjour,

Petit projet intéressant.

Voici, je pense , une source d'inspiration.

http://electromag1.over-blog.com/pages/MESURE_ET_REGULATION_DHUMIDITE_ET_DE_TEMPERATURE-5925621.html

Il y a des pages sur les thermostats, analogiques, numériques, le DHT22 (température et humidité), le DS18B20.

Les BP ne posent aucun problème particulier, il faut tenir compte du relâchement du poussoir ou temporisé.

Comme (déjà!) signalé par PieM ces capteurs ont une bonne résolution mais il faut les calibrer et la dispersion est grande. Ils sont peut être plus ou moins triés suivant la source d'approvisionnement.

Pour votre application, l'utilisation d'un LCD semble s'imposer.

MM
 

BESQUEUT

Senior Member
Pour votre application, l'utilisation d'un LCD semble s'imposer.
Outre l'étalonnage des capteurs, l'interface utilisateur n'est pas aussi triviale qu'on pourrait le croire. pensez-vous reproduire le fonctionnement à l'identique ou pouvez-vous changer un peu pour atteindre la même fonctionnalité par un chemin différent ? Comment était l'affichage ?
Par ailleurs, faut-il prévoir une sécurité en cas de blocage du programme ou de panne ? (protection contre la production d'oeufs durs ?, alarmes ?)
 

j15932

New Member
Bonjour à ceux que je n'ai encore pas vu,

Pour le microcontroleur : 28X1, 28X2, 8M2 et 20M2 !!!
Sondes : DS 18B20, DS18S20, DS1621, LM35 ; HIH4000, HS 1101 ; DHT11
beaucoup d'autre de différents fournisseurs mais difficile à souder (soic)
Gestion Temps : DS1307, DS1631
beaucoup d'autre de différents fournisseurs mais difficile à souder aussi (soic)
Gestion affichage : FRM01 avec multiples afficheurs 1,2 ou 3 lignes ou graphique PCD8544 (nokia 3310-5511) ou autres graphiques (elle était en 3 x 7 segments led)

Merci pour l'@ que j'avais déjà consultée. Pour PieM, juste une avance pas à pas. Je coince déjà à la base. A la mise en route la couveuse a une température pré-enregistrée de 37.5°. Est-ce ce que je doit remplir une variable W2 à 0000 0010 0011 xxxx pour les 0.5 et comparer à la lecture faite dans W0; ou dois-je procéder autrement ?

Pour ce qui est des alarmes, effectivement je mets un second capteur qui coupe tout à 39° car j'ai tué 25 poussins vendredi (13!) par surchauffe dans une couveuse identique mais qui s'est affolée car j'ai vaporisé les oeufs en plus de l'hygrométrie générée par la machine et les capteurs ce sont emballés.

Manu
 

BESQUEUT

Senior Member
je mets un second capteur qui coupe tout à 39°
Dans ce cas, il me semble logique d'utiliser un deuxième Picaxe complètement indépendant pour gérer l'alarme et la coupure anti-surchauffe.
Puisque des notions de temps apparaissent (qui ne semblaient pas présentes dans le circuit initial) il va falloir gérer la mise à l'heure et le réglage des date et heure de changement de température...
Le projet se complexifie...
Il me semble utile de préciser le cahier des charges. Une façon de faire serait de rédiger le mode d'emploi complet du bidule :
- réglage de l'heure,
- réglage des dates de changements de température,
- réglage des seuils de température
- réglage des seuils d'humidité, (quelle action si ce seuil est dépassé vers le haut, vers le bas ?)
- étalonnage de la température
- étalonnage de l'humidité
- affichage des paramètres "temps réel"
- circuit de supervision et d'alarme

A chaque fois : indiquer l'usage des touches et ce qui apparait sur le LCD
Un schéma sera nécessaire pour préciser l'usage de chaque broche.

En cas d'urgence pour la mise au point, il reste possible de faire l'impasse sur l'interface utilisateur (au moins dans un premier temps) en injectant directement les paramètres courants via une liaison série.

Sans vouloir vous décourager, et en tenant compte des difficultées que vous semblez rencontrer au regard de vos premiers messages, prévoyer un délai important pour la mise au point et le test du bidule.
 
Last edited:

BESQUEUT

Senior Member
Est-ce ce que je doit remplir une variable W2 à 0000 0010 0011 xxxx pour les 0.5 et comparer à la lecture faite dans W0; ou dois-je procéder autrement ?
Vous pouvez utiliser la technique proposée par MGU pour mémoriser la dernière température utilisée. Ainsi, en cas de coupure de courant, le système repart avec le dernier réglage réalisé. Au premier téléchargement, il est possible d'initialiser la première consigne de température : c'est ce que j'ai appelé "injecter les paramètres courants" dans mon précédent post.
Le DS1631 est un thermostat, c'est à dire qu'il peut commander directement le chauffage et qu'il mémorise de lui même le seuil de température.
Dans ce cas le fonctionnement du montage est assez différent, y compris au niveau du schéma électrique. En outre, il s'agit de I2C et non de 0neW. Merci de préciser votre choix.
 

BESQUEUT

Senior Member
b4 = w0 / 1000
Résultat : 21,3°
J'ai du mal pour programmer le thermostat : 3 boutons (Set, Temp+, Temp-) + R(100k) C(100Nf) anti-rebond
b4 étant un nombre entier, ce résultat ne pourra pas être obtenu directement.
Mais si w0=274, il faut simplement afficher sur le LCD les 2 premiers chiffres, puis une virgule, puis le chiffre suivant, et on obtient bien 27,4° sur l'afficheur...
Pour les températures de consignes, raisonnez également en dixèmes de degrés : 375 pour 37,5 °C
Attention : dans les calculs intermédiaires, une variable w ne peut pas dépasser 65535.

NB: Par habitude, je n'utilise pas w0 que je réserve pour les conversions en bits... Donc je commence à w1
 

PieM

Senior Member
Bonsoir,

Un petit bout de programme pour vous aider à commencer...

Code:
#Picaxe 20M2
setfreq M4

'Entrées -------------------------------------------------------------------
Symbol BPSet 	       = pinC.0
Symbol TPlus	        = pinC.1
Symbol TMoins 	= pinC.2
Symbol HPlus 	        = pinC.3
Symbol Hmoins 	= pinC.4
Symbol Turn 	        = pinC.5 
'Sorties -------------------------------------------------------------------


'Variables -----------------------------------------------------------------

symbol Tconsigne 	= w2		[I]'Température de consigne[/I]
symbol Tmesure 	= w3		[I]'Température mesurée[/I]
symbol Hconsigne	= w4		[I]'H% consigne[/I]
symbol Hmesure 	= w5		[I]'H% mesure[/I]

'Initialisation -----------------------------------------------------------------

read 0, WORD  Tconsigne, WORD Hconsigne
if Tconsigne = 0 then
Tconsigne = 375  [I]'initialisation de la consigne par défaut[/I]
Hconsigne = 'xxx
endif

'============================================================================
principal:

Do
'xxxxxxxxxx
If BPSet = 1 then gosub ChangeCons
'xxxxxxxxxxx
Loop
'============================================================================
ChangeCons: 

Do while BPSet = 1  '[I] tout pendant que la touche Set est appuyée[/I]
	
If TPlus = 1 then    		[I]'Si c'est la touche Temp+[/I]
 	do while TPlus = 1:loop	[I]'on attend son relachement[/I]
 	inc Tconsigne		[I]'et on incrémente la consigne[/I]
 endif
 
 If TMoins = 1 then
 	do while TMoins = 1: loop
 	dec Tconsigne
 endif
 
 ' If HPlus = 1 then
 '	do while Hplus = 1: loop
 '	inc Hconsigne
 'endif
 '
 'etc ....
 loop

 write 0, WORD  Tconsigne, WORD Hconsigne    [I]'memorisation des consignes[/I]
 return
'============================================================================
Désolé mais l'indentation n'est pas respectée ...

Le programme principal teste l'appui sur la touche SET, et envoie sur un sous programme de test des différentes touches de modification des consignes, à condition que l'appui sur SET reste effectif.
Dans le principe, l'incrémentation, ou la décrémentation ne se fait qu'au relâchement du BP. Cela fiabilise la prise d'information.

Il est possible en fin du sous-programme de changement des consignes de les mémoriser en EEprom par un write 0, WORD Tconsigne, WORD , Hconsigne

A l'initialisation une ligne read 0, WORD Tconsigne, WORD , Hconsigne est insérée:
Si la température Tconsigne est égale à zéro , alors l'instruction Tconsigne = 375 , consigne par défaut, serait validée. Tous les calculs de température devant se faire en dixième de degrés, bien sûr.

d'autre part, le BP SET peut être programmé pour générer une interruption. Cela est à voir en fonction du reste du programme principal...

Nota: j'ai utilisé dans cet exemple les variables b10 et b11: elle ne sont pas compatibles avec mon bout de programme, car elle forment la variable w5 que j'utilise par ailleurs ...
 
Last edited:

j15932

New Member
Bonjour et merci à tous deux,

PieM à bien compris ma problématique, je n'avais pas pensé à raisonnez en dixièmes de degrés et cela règle mon problème. Par contre j'ai cherché la manip pour "il faut simplement afficher sur le LCD les 2 premiers chiffres, puis une virgule, puis le chiffre suivant, et on obtient bien 27,4° sur l'afficheur..." et je n'ai pas trouvé. (pour cela je suis plus à l'aise en VBA).Je m'en suis arrêté hier soir sur les BP (j'ai réussi le test d'incrément et de décrément) et je vois que PieM à bien bossé. Je continue ce soir et merci encore.

Manu
 

PieM

Senior Member
Par contre j'ai cherché la manip pour "il faut simplement afficher sur le LCD les 2 premiers chiffres, puis une virgule, puis le chiffre suivant, et on obtient bien 27,4° sur l'afficheur...
Bonjour,

en fait c'est assez simple: il suffit de décomposer la variable Tmesure en ses constituants, par l'instruction BINTOASCII.
Donc BINTOASCII Tmesure, b14,b13,b12,b11,b10.

b10 représente les unités (donc les dixièmes de degrés)
b11 les dizaines (donc les degrés)
b12 les centaines ( donc les dizaines de degrés)
b13 les milliers
b14 les 10 milliers

Sauf pour une omelette, b13 et b14 ne sont pas utilisés ...

Donc : BINTOASCII Tmesure, b12, b11, b10

Ensuite il suffit d'envoyer à l'afficheur la séquence de caractères b12, b11, ",", b10,xxx
xxx étant le code du caractère ° selon la table de l'afficheur.

Nota: J'ai utilisé b10 et b11, non compatibles avec mon bout de programme où j'utilise w5 qui est formé de b10 et b11
 
Last edited:

MGU

Senior Member
Bonjour,

Outre l'étalonnage des capteurs, l'interface utilisateur n'est pas aussi triviale qu'on pourrait le croire. pensez-vous reproduire le fonctionnement à l'identique ou pouvez-vous changer un peu pour atteindre la même fonctionnalité par un chemin différent ? Comment était l'affichage ?
Par ailleurs, faut-il prévoir une sécurité en cas de blocage du programme ou de panne ? (protection contre la production d'oeufs durs ?, alarmes ?)
Je ne comprends pas très bien la question, (mais vous savez, j'ai parfois un peu de mal..)
Concernant l'affichage des LCD en mode 4 bit, le programme pompé sur le net avec ses commentaires peut être légèrement simplifié. Il est finalement assez simple (je l'ai récemment décortiqué sur la page du blog).

Entièrement d'accord pour un système de surveillance indépendant (alim sauvegardée sur batteries?)

Do
'xxxxxxxxxx
If BPSet = 1 then gosub ChangeCons
'xxxxxxxxxxx
Loop

Encore une fois, PieM a raison, il faut tous les changer
Et merci pour la pub, mais on trouve aussi sur ce blog quelques belles pépites d'erreurs, de maladresses et de fautes d'orthographe.

Revenons à nos poussins:
La mesure des paramètres ne devait pas poser de problème.
Le DHT11 n'est pas assez précis.
Le DHT22 peut être lu avec un picaxe à 64MHz et un 555 (5 ou 6 euros sur ebay), bon candidat.
Ou des capteurs séparés T° et humidité (plus chers)

La lecture des consignes : OK

La prise en compte du temps: une horloge intégrée (genre AXE 033), mais je ne connais pas.
Ou bien Time ou timer en compteur de temps avec affichage en /10 de jour ( 12,6 jours) et sauvegarde périodique.
Cette méthode serait plus facile à mettre en oeuvre.

Reste le problème de la régulation. (Sérieux, des vies sont en jeu)
Quelles sont les tolérances, quelles sont les constantes de temps, inertie...
Pour une température uniforme, il faut brasser l'air, un seul point de mesure est il suffisant?

Et le retournement des oeufs? il faut le gérer ou la fonction est indépendante?

La remarque judicieuse de BESQUEUT sur w0 est à retenir.
Maintenant, pour éviter les salades, je réserve b0 pour les bits, les bytes commencent à b1, et les words commencent par la fin: w13, w12,...

MM
 
Last edited:

j15932

New Member
Bonjour MGU,

L'affichage ne pose pas de problème particulier, j'en ai moult modèles récupérés et 2 ou 3 acheter, même une AXE 033 et je me suis déjà amusé avec tous.

La notion de temps, interne au PICAXE comme suggéré ou sur composant externe, est là dans un premier temps pour effectuer un retournement tous les heures. Il s'agit d'un petit moteur DC avec engrenage déplaçant un plateau (avec crémaillère) sous les oeufs. Plus tard elle pourra avoir d'autres attributions, du style : arrêter le retournement automatique au bout de 19 jours d'incubation et autre. Je n'en suis pas encore là et ce n'est pas le plus urgent!

La régulation de température : c'est une couveuse dynamique et 2 ventilateurs brassent l'air chauffé par une résistance souple et la dirigent vers l'enceinte d'incubation. Un point de mesure est donc utilisé. Pour ce qui est des tolérances et de l'inertie, il faut savoir que la poule quitte son nid pour boire et manger, en profite pour retourner les oeufs en remontant sur ce dernier. Des éleveurs amateurs ont même vu naître des poussins sur un tas de fumier après avoir jeter les oeufs qu'ils croyaient perdus. Donc, mis à part une surchauffe comme celle que j'ai connu vendredi, il y à de la marche. Par contre si l'on veux jouer à l'apprenti sorcier, il s'avère que l'incubation de l'oeuf de poule se fait à 37,5°; 0,2 en dessous donne plus de femelles et 0,2 au dessus plus de mâles. Voilà mes retours d'expériences.
 

PieM

Senior Member
La notion de temps, interne au PICAXE comme suggéré ou sur composant externe, est là dans un premier temps pour effectuer un retournement tous les heures. Il s'agit d'un petit moteur DC avec engrenage déplaçant un plateau (avec crémaillère) sous les oeufs.
Dans ce cas, le simple suivi de la variable interne TIME avec un test si TIME > 3600 puis une RAZ si le test est vrai, serait suffisant et le plus simple ...

Concernant le calcul de la température, la formule suivante donne directement la valeur en 1/10 de degrés:

readtemp12 2,Tmesure
Tmesure= Tmesure*10/16

Comme dit précédemment, utilisez toujours des variables word, les températures étant supérieures à 255 dixièmes de degrés.
 

j15932

New Member
Enore une petite question pour la gestion du temps, est-ce TIME ou TIMER

"Internal Timer
In internal timer mode the time elapsed is stored in the word variable ‘timer’
which can be accessed as if was a normal variable e.g.
if timer > 200 then skip
When the timer word variable overflows (ie from 65535 to 0) the timer overflow
flag (toflag) is set . The toflag is automatically cleared upon the settimer
command, but can also be cleared manually via ‘let toflag = 0’. If desired an
interrupt can be set to detect this overflow by use of the setintflags command.
The period of the timer can be used defined. The timer operates with ‘minor
ticks’ and ‘major ticks’. A minor tick occurs every 1/(clock freq / 256) seconds.
With a 4MHz resonator this means a minor tick occurs every 64us (32us at
8MHz, 16us at 16MHz, 8us at 32MHz, 4us at 64MHz). When the minor tick
word variable (not accessible by the end user) overflows (from 65535 to 0) a
major tick occurs. The major tick increments the timer variable, and so the
number of major ticks passed can be determined by reading the ‘timer’ variable."

Sinon j'avance à grands pas. Encore Merci
 

BESQUEUT

Senior Member
Encore une petite question pour la gestion du temps, est-ce TIME ou TIMER
Il s'agit bien de la variable spéciale TIME.
Voir page 14 de la section 2 du Manuel utilisateur.
(Attention au changements à faire en cas d'utilisation de setfreq)
 
Top