Electromag1 Circuits électroniques et Picaxes

Petit site pour ceux qui bricolent en électronique en général et sur les PICAXES en particulier.
Les PICAXES sont des microprocesseurs (PIC de Microship) programmables en BASIC. Pleins de qualités, pas chers, ultra faciles à programmer.
Tout (ou presque) est sur le site du distributeur Gotronic (voir les liens).
Les pages  seront ajoutées ou modifiées petit à petit.
Dans le but d'améliorer ce blog, communiquez moi vos remarques et les erreurs que vous pouvez constater.
Pour me contacter: Envoyez un mail à l'adresse : mag1mic@free.fr .  Tout message reçoit une réponse
Pour retourner au menu, Cliquer sur "LISTE DES PAGES", ici ou en haut de la colonne de gauche
Pour laisser un message, allez dans le "LIVRE D'OR"
Bonne visite
 
 
 

Les capteurs de température et humidité

GY-21 et SI7021





 Ces capteurs que l'on peut acheter pour quelque 2 euros sur eBay sont équipés du SI7021 (ou HTU21 suivant distributeurs), petite puce d'environ 4 mm², recouverte ou pas d'une pellicule de protection. La plaquette GY-21 intègre un régulateur 5V/3,3V et les résistances de pullup de 10k de la liaison I2C
DATASHEET du HTU21:
 

Le but de cette page est d'utiliser ces capteurs avec un picaxe.


L'adresse (unique) du capteur I2C est $40. Oui, mais la commande picaxe demande une adresse sur 8 bits, il faut ajouter le bit R/W, on obtient $80

La datasheet indique qu'il faut envoyer un octet de commande pour déclencher la lecture des paramètres:
 

Les codes qui fonctionnent avec notre picaxe sont $E3 et $E5.

Et après la commande, que reçoit-on?
Le contenu d'un registre de 16 bits, sous la forme de deux octets, qui formeront automatiquement un "word", c'est à dire un nombre entre 0 et 65535.

Et qu'est ce qu'on en fait?   Et bien on applique les formules données dans les DS.
Temp_Code et RH_code sont les nombres lus dans le registre.
 
Pour la température:                        
Pour l'humidité:                               
Pour un picaxe qui ne connait que les nombres entiers de 0 à 65535 et les divisions euclidiennes la faisabilité n'apparait pas immédiatement, heureusement le forum picaxe anglais et hippy en particulier m'ont soufflé la solution:

Pour la température:
La résolution est le 1/100 de degré. La fonction proposée pour transformer Temp_code est la suivante:
 
Température (°C)= 17572**Temp_code-4685
 
On obtient immédiatement la t° en centièmes de degrés.

Explication: "Bon sang, mais c'est bien sûr..."
Temp_code et 17572 sont deux variables "word" de 16 bits. Leur multiplication donne un "double word" de 32 bits.
L'opérateur ** renvoie un mot de 16 bits contenant le "word" de poids fort, l'opérateur * le word de poids faible.
Ne prendre en compte que le word de poids fort (sans le poids faible) revient à diviser le résultat de la multiplication par 65536.

Pour l'humidité:
La formule est la même que pour la température, avec des coefficients différents:
 
%RH=12500**RH_code-600
 
Le capteur d'humidité est très réactif, il suffit d'approcher le doigt, surtout quand il fait chaud.

Le résultat:


Le nombre sur les lignes 1 et 3 est la valeur du mot de 16 bits lu sur le capteur pour la température et l'humidité
Faisait chaud.....

Le schéma:  Pas très compliqué...Un GY-21, un LCD série (voir cette page) et un picaxe 08M2

Si vous préférez un afficheur LCD avec interface I2C, c'est ici
 
 


Le lien soufflé par hippy sur le forum picaxe anglais concerne un cousin, le SHT31

Le code pour SI7021, inspiré du lien anglais:
Les températures deviennent négatives pour les valeurs de Temp_code inférieures à 17473. Un traitement spécifique permet d'afficher les valeurs négatives.

;essai GY-21 02/08/18
;RH(%)=(125*S/2**16)-6
;T(°C)=(175.72*S/2**16)-46,85
;LCD 2004
#picaxe 08M2
#no_data
symbol deci=b1     ;valeurs décimales
symbol signe=b2    ;signe négatif
symbol val=w12     ;valeur à afficher
pause 500
hi2csetup i2cmaster,$80,i2cfast,i2cbyte  
serout C.0, T2400,(254,1,254,1)
pause 500
serout C.0, T2400,(254,192,"Temp=        ßC",254,212,"Humi=        %")
pause 500
    do
            hi2cout ($E3)        ;température
            hi2cin (b27,b26)        ;(b27,b26) c'est w13                
            serout C.0, T2400,(254,128,#w13," ")  ;affichage w13 première ligne
            signe=" "                ;pas de signe, à priori        
            val=w13**17572-4685
            if w13 <= 17473  then        ;on est dans les valeurs négatives
                    val=-val           ;inversion argument = complément à 2
                    signe="-"          ;affichage signe -
            endif            
            deci=val//100          ;partie décimale   
            val=val/100            ;partie entière   
            serout C.0, T2400,(254,198,signe,#val,",",#deci," ")  ;affichage t° LCD; ligne 2
            pause 500

            hi2cout ($E5)        ;humidité
            hi2cin (b27,b26)     ;lecture registre          
            serout C.0, T2400,(254,148,#w13," ") ;affichage w13 ; ligne 3          
            val=w13**12500-600
            deci=val//100   ;partie décimale                    
            val=val/100     ;partie entière         
            serout C.0, T2400,(254,219,#val,",",#deci," ")  ;affichage % HR ligne 4
            pause 500            
    loop
 




 



Créer un site
Créer un site