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