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
 
 

SONDE CAPACITIVE PICAXE 08M2

À LIAISON SÉRIE

Plusieurs types de sondes sont utilisés pour mesurer le niveau des liquides:

Les sondes à flotteurs, tout ou rien ou analogiques avec leurs problèmes mécaniques.

Les sondes résistives, mesure la conductibilité de l'eau qui dépend des ions dissous, elle est donc variable, de plus, le courant provoque une électrolyse qui peut corroder les électrodes.

Les sondes capacitives entièrement statiques et ne générant aucun courant ont quelques avantages. Sans courant, la conductivité de l'eau n'est plus un facteur important, une faible conductivité suffit.
La capacité variable ne dépend que des caractéristiques du fil utilisé: diamètre du cuivre, constantes diélectriques et épaisseur de l'isolant.

Ce qui suit est une évolution de l'essai mené sur cette page, utilisant la commande TOUCH des picaxes. Le but est de fiabiliser cette possibilité et de l'utiliser dans une application de lecture et de régulation de niveau de liquide.
 
DESCRIPTION:
  • La sonde émettrice
Elle est ici constituée d'une barre métallique, isolée du liquide par une gaine thermo-rétractable  et soudée directement à une broche du picaxe émetteur.
Le récipient n'est pas conducteur, il faut une tige métallique de la hauteur du liquide reliée au potentiel 0v pour annuler les effets parasites (mains etc).
Un unique picaxe 08M2 avec ses condensateurs de découplage assure la liaison RS232, aucun problème avec 15 m de cordon téléphonique 4 conducteurs standard, avec ou sans connecteurs RJ11.
  • Le récepteur
Un autre picaxe 08M2, avec les résistances de programmation sur site. Le même support sert à programmer les deux picaxes.
Visualisation du niveau lu et le réglage de l'alarme sur un LCD1602 série (acheté tout fait ou fabriqué "maison"), un potentiomètre (10k) pour régler le niveau d'alarme et un poussoir pour calibrer la mesure.
L'alarme bas niveau est signalée par l'alumage d'une led. En ajoutant en série un relais statique, on peut commander n'importe quoi.
  • L'alimentation
Un simple petit bloc secteur 5v régulés continus (genre USB) que l'on trouve facilement à moins de 5 euros.

SCHÉMA DE L'ÉLECTRONIQUE:
 
 
Petite vidéo de démo, cliquez sur la vidéo pour agrandir:
 

Ce qui n'est pas sur la vidéo:
 
La tête de sonde:
Un picaxe avec ses deux condensateurs de découplage
et c'est tout.

La barre métallique est une récup de tringle à rideaux, avec une gaine thermorétractable
Le montage complet sur une platine d'essais.

Avec le tube en plastique
et le bocal
faisant vases communicants
 

 
LE CODE ÉMETTEUR:

C'est finalement le plus simple.

Résumé: la variable retournée par touch16 est une variable de type word, c'est à dire sur 2 octets. La variable w13 étant la concaténation des variables de type byte (un octet) (b27;b26), la décomposition en deux octets est implicite.
On lit w13 avec touch16, et on envoie (b27;b26) par serout, soit 2 lignes en boucle avec une petite pause.
L'octet de configuration entre crochets est modifié, la sensibilité est divisée par 4 par rapport à la configuration de base, voir les déails sur cette page.

;EMETTEUR SERIE pour sonde capacitive  MM 13/09/15
#picaxe 08M2    ;directive picaxe utilisé
;***** Nominations des variables***********
     symbol baud= N4800_4
;**** Nomination des ports
     symbol sonde     = C.4    ;port commande touch
     symbol portS    = C.1    ;port liaison série
     
;****** Boucle de mesure et liaison série ***********
    ;serout portS,baud,(254,1)     'RAZ afficheur
     Do  
         touch16 [%11001001],sonde,w13    ;w13 (type word est composé des deux bytes (b27;b26)              
         serout portS,baud,(b27,b26)     ;Envoi des deux octets de w13 par serout
         pause 200        ;Faut pas aller trop vite    
     loop


LE CODE RÉCEPTEUR:
Il est quasiment identique à celui du test.
(Rappel: les textes après les ; sont des commentaires)

;Ex: Sonde de niveau capacitive MM 13/09/2015
;**** calibration de la sonde à la mise sous tension.  ***************
;**** La réponse de la comande TOUCH est considérée comme linéaire
;**** La droite est de la forme pct(%) = pente x mesur - Y0    *****
;**** Le sous programme "calib:" mesure deux points arbitraires 0 et 100%  *********
;**** Calcule les paramètres pente et Y0 et les met en mémoire ****
;**** Affiche les étapes successives **************
#picaxe 08M2

;****** Nominations variables ********
 symbol baud= N4800
;****** variables word *********  
 symbol pente     = w12
 symbol mesur      = w13
 symbol var2      = w11
 symbol var1      = w10
 symbol Y0      = w9
 symbol seuil     = w8
 symbol seuilh    = w7
 
;******* Nominations ports ***********
 symbol valid = pinC.3     ;poussoir de validation
 symbol LED      = C.0
 symbol POTAR     = C.4
 symbol LCD      = C.1
 symbol SONDE     = C.2
 
;******* Début Programme principal *****************    
     pause 200      ' initiation LCD
     pullup %01000    ;pullup sur C.3
     read 0,word pente, word Y0                 ; lecture des paramètres de la droite enregistrée
    if pente =0  or valid=0 then gosub calib   ; Vers calib: si paramètre nul ou nouvelle calibration
    
     Do  'BOUCLE PRINCIPALE         
          gosub mesure
          gosub calcul
          gosub affich
          gosub AlarmSeuil      
     loop
;******* Fin programme principal *****************

;******* Les sous programmes: ***********************
;************** Mesure de la sonde, liaison RS232 ***************
mesure:
     serin [2000,AlarmSonde],SONDE,baud,b27,b26  ;time out 2 secondes    
     ;mesur=w13 = (b27;b26)    ;reconstitution de la mesure brute     
     if mesur =0 then gosub alarmsonde    ;erreur de mesure
     mesur=mesur/100        ;on garde les chiffres significatifs
 return

'******** Affichage des valeurs lues ***********
affich:
     bintoascii mesur,b1,b2,b3,b4,b5                      ;décomposition ascii
     serout LCD,baud,(254,128,"niveau  = ",b3,b4,b5, "%") ;envoi LCD série
     bintoascii seuil,b1,b2,b3,b4,b5
     serout LCD,baud,(254,192,"Minimum = ",b3,b4,b5, "%") ;envoi LCD série  
     return
 
;******* Calibration, Calcul paramètres, Affichage, Mise en mémoires ***
calib:
     do:loop while valid=0                              ;attente relachement poussoir
     serout LCD,baud,(254,1)                            ;effacement écran
     serout LCD,baud,(254,128, "calibration  0 %")      ;titre
     do  
          gosub mesure
          var1=mesur                                            ;mesure du point 0%                          
          bintoascii mesur,b1,b2,b3,b4,b5                       ;affichage
          serout LCD,baud,(254,192,"mesure  0% =",b3,b4,b5)     ;pour voir
     loop while valid=1                                     ;attente validation
     serout LCD,baud,(254,128,"calibration 100%")           ;titre
     do:loop while valid=0                                  ;attente relachement poussoir
     do
          gosub mesure
          var2=mesur             ;mesure du point 100%       
          bintoascii mesur,b1,b2,b3,b4,b5
          serout LCD,baud,(254,192,"mesure 100%=",b3,b4,b5)
     loop while valid=1
 
      if var1>var2 then calib           ;erreur de procédure. retour début
      var2=var2-var1                    ;différence des mesures (déja /100)
      pente= 10000/var2                 ;delta % (=100 par def) x 100; / par var mesure /100 d'ou pente x 10000
      Y0 = var1 * pente                 ;ordonnée origine d'ou,( % *100 = mesure/100 * pente - Y0 )
     do:loop while valid=0
 
     write 0,word pente,word Y0                  ;Mise en mémoire EEPROM
     serout LCD,baud,(254,1)                     ;Effacement écran
     serout LCD,baud,(254,128, "calibration ")   ;affichage
     serout LCD,baud,(254,192, "effectu",1,"e ")    ;1 est le é en CGRAM du LCD maison
     pause 1000                                   ;Temps d'affichage 1 seconde
     serout LCD,baud,(254,1)                     
     return
 
;*********** Calcul pourcentage ***********************
calcul:     
     mesur=mesur * pente                     ;un bout de l'équation
     if Y0>mesur then                        ;pour éviter de passer du côté obscur
          mesur=0                                ;blocage à 0                                                
          else mesur=mesur-Y0                 ;calcul poucentage (en centièmes de pourcents)
     endif
     mesur=mesur/100                         ;unités de pourcentage  
     return
 
  ;***** Alarmes dépassement Time Out liaison sonde (temporaire) et défaut sonde **********    
AlarmSonde:
    if mesur=0 then    
        serout LCD,baud,(254,128,"DEFAUT SONDE 000")
        else
        serout LCD,baud,(254,128," DEFAUT TIMEOUT ")
    endif
    pause 2000
    serout LCD,baud,(254,1)    ;effacement message
    return    
 
'******** Programme 1 en Temps partagé: Signalisation **************
AlarmSeuil:
     readadc POTAR,seuil      ;lecture potentiomètre ;max vers 255%
     if mesur<seuil then     ;comparaison
         high led               ;allumage led
     endif  
        seuilh=seuil+2         ;hystérésis 2%
     if mesur>seuilh then
         low led             ;extinction led                    
     endif
     return

 

Page suivante: Mesure capacitive avec compensation de température

 
 



Créer un site
Créer un site