Bonjour,J'ai regardé la vidéo ce matin. Vraiment bien d'avoir mis les trois réservoirs sur deux lignes. Par contre j'ai aussi commandé un 2004 (4 lignes). Alors peut-on faire ceci:
Réservoir d'eau
#1 000G 000L 000%
#2 000G 000L 000%
#3 000G 000L 000%
Les G sont des gallons impériaux (4.546 L/ 1 Gallon Impériaux). Le gallons impérial est l'unitité de vente dans ce coin des Antilles.
Et un truc comme ça ?
Avec la valeur globale des réserves d'eau en % et le détail par réservoir en %, litres et Gallons impériaux....
MM
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...
Super cool. On va faire comme ça !Bonjour,
Et un truc comme ça ?
Pièce jointe 367272
Avec la valeur globale des réserves d'eau en % et le détail par réservoir en %, litres et Gallons impériaux....
MM
J'ai justement acheté quelques contacteurs à flotteurs l'année dernière en me disant que ça pourrait servir un jour
Il s'agirait de mettre on relais magnétique sur l'une des phases du moteur et l'actionner par le picaxe. Donc j'y vais pour deux picaxe 14M2 ?
Mais sérieusement, je pense qu'avec un Thyristor et deux contacteurs flotteurs on peut arriver à faire démarrer et arrêter le pompe simplement.
Dernière modification par Yex2 ; 04/06/2018 à 20h33.
J'ai justement acheté quelques contacteurs à flotteurs l'année dernière en me disant que ça pourrait servir un jour
Il s'agirait de mettre on relais magnétique sur l'une des phases du moteur et l'actionner par le picaxe. Donc j'y vais pour deux picaxe 14M2 ?
Mais sérieusement, je pense qu'avec un Thyristor et deux contacteurs flotteurs on peut arriver à faire démarrer et arrêter le pompe simplement.
Ben, c'est à dire que logiquement, on réfléchit d'abord et on achète ensuite.
C'est quoi comme moteur? La pompe alimentée par le secteur?
Et les contacteurs? NO ? NF ?
Si il y a deux entrées et une commande moteur, un 08M2 suffit, mais il faut définir le projet.
Commander un moteur AC avec un µC, il y a des interfaces simples, comme ceci:
https://www.ebay.fr/itm/NEUF-RELAIS-...gAAOSwTglYlUUi
Pour le projet bateau, as tu les moyens de faire un PCB?
Quelle connectique ?
MM
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...
Honnêtement le projet de faire démarrer la pompe automatiquement n'est pas pressant.Ben, c'est à dire que logiquement, on réfléchit d'abord et on achète ensuite.
C'est quoi comme moteur? La pompe alimentée par le secteur?
Et les contacteurs? NO ? NF ?
Si il y a deux entrées et une commande moteur, un 08M2 suffit, mais il faut définir le projet.
Commander un moteur AC avec un µC, il y a des interfaces simples, comme ceci:
https://www.ebay.fr/itm/NEUF-RELAIS-...gAAOSwTglYlUUi
Pour le projet bateau, as tu les moyens de faire un PCB?
Quelle connectique ?
MM
Pour les PCB, j'ai plusieurs pré-perforer que je vais utiliser. Ce sont de petit circuits pas assez compliquer pour me donner le trouble de faire des imprimer.
Merci MM
Yex
Bonjour,
Voici le code complet de la version finale (photo précédente #121):
MMCode:;Ex: sonde de niveau capacitive MM 03/06/2018 ;**** calibration de la sonde par action 3 sec sur le poussoir de validation *************** ;**** La réponse de la comande TOUCH est considérée comme linéaire (elle l'est...) ;**** Le sous programme "calib:" mesure deux points arbitraires 0 et 100% ********* ;**** mesure de la référence interne de température dans l'émetteur 08M2 ;**** Ces trois mesures sont mémorisées en EEPROM ;**** Calcul de la proportionnalité entre la mesure et les valeurs mémorisées **** ;**** Calcul d'une correction de température (par rapport à la t° lors de la calibration) ;**** Affichage du Niveau en % et en litres ;**** Affiche les étapes successives ************** #picaxe 14M2 ;directive picaxe utilisé (pour erreur de commandes) setfreq M16 ;fréquence 16MHz ;****** Nominations constantes ******** symbol baud= N2400_16 ;vitesse liaison RS232 symbol capacit= 316 ;capacité réservoir en L symbol gallon=6951 ;capacité en /100 de Gallon Imp ;****** noms variables word ********* symbol mesur = w13 ;(b27,b26) symbol compens = w12 ;(b25,b24) symbol bas = w11 ;ref niveau bas symbol memcomp = w10 ;mémo réf compensation t° symbol delta = w9 ;delta haut-bas symbol total = w8 ;total réservoirs en % symbol varw = w7 ;variable tempotaire symbol deb = w6 symbol cpt = w5 ;***** noms variables bytes **************** ; b1,b2,b3,b4 utilisés dans bintoascii symbol car =b5 symbol dat =b6 symbol sonde =b7 symbol posi =b8 ;******* noms variables bit sur b0 *********** symbol rsbit=bit0 symbol calibr=bit1 ;******* Nominations ports *********** symbol sonde0 = C.0 ;entrée sonde0 n°broche=8 symbol sonde1 = C.1 ;entrés sonde1 n°broche=9 symbol sonde2 = C.2 ;entrée sonde2 n°droche=10 symbol valid = pinC.3 ;valeur poussoir de validation ; Initialisation I2C . pour 14M2:sda sur B.4 ; scl sur B.3 hi2csetup i2cmaster,%01001110, i2cfast_16, i2cbyte ;** Entrée des données texte dans "table" *********** table 0,(51,50,40,12,6,1) ;initialisation LCD 4 bits table 20,(" calibration 0% ") table 40,(" mesure 0%= ") table 60,(" calibraton 100% ") table 80,(" mesure 100%= ") table 100,(" calibration ") table 120,(" effectu",1,"e ") ;1 pour é table 140,(" DEFAUT SONDE ") table 160,(" DEFAUT TIMEOUT ") table 180,(2,4,14,17,31,16,14,0) ;descripton lettre é table 200,(" SONDE nß ") ;ß= alt+0223 =° sur clavier table 220,("RESERVES D'EAU: %") table 240,("#1 % L , GI") table 260,("#2 % L , GI") table 280,("#3 % L , GI") pullup %0100000000000 ;pullup sur C.3 ;***** macro texte *************** #macro text(posi,deb,varw) car=posi:gosub EnvoiByteComm ;pos curseur en 128 for cpt=deb to varw readtable cpt,car ;texte gosub EnvoiByteData next #endmacro ; Initialisation LCD ********* for cpt=0 to 5 readtable cpt,car gosub EnvoiByteCommInit next pause 500 ;temps init du LCD ; définition des caractères ajoutés en CGRAM ; def du é en CGRAM 1 ************************** car=1*8|$40 :gosub EnvoiByteComm for cpt=180 to 187 readtable cpt,car ;description du é vers CGRAM n°1 gosub EnvoiByteData next ;******* Début Programme principal ***************** car=1:gosub EnvoiByteComm ;raz afficheur read 0,word bas, word delta,word memcomp ; lecture param droire + t° pendant calib if bas =0 then calib ; Vers calib si aucun paramètre enregistré ;***** boucle pricipale ************************************** debut: calibr=0 ;on est pas en calibration text(128,220,239) ;texte "RESERVES D'EAU: %" text(192,240,259) ;texte fixe text(148,260,279) text(212,280,299) Do time=0 do while valid=0 ;si valid=1, on entre pas if time> 3 then calib ;demande de calibration loop total=0 for sonde=8 to 10 ;n° des broches : broches C.0=8,C.1=9,C.3=10 gosub mesure gosub calcul gosub affich total=total+mesur debug next gosub afftotal loop ;******* Fin programme principal ***************** ;******* Les sous programmes: *********************** ;************** Mesure des sondes, liaison RS232 *************** ; Pour les essais avec une seue sonde, le port serin est bloqué à 8 (C.1) au lieu de scanner les 3 sondes ; Pour le scanne réel, il faut remplacer le "8" par "sonde" dans la commande serin ci dessous mesure: serin [10000,alarmsonde],8,baud,b27,b26,b25,b24 ;(b27;b26)mesur et (b13,b12);!! ;mesur=w13 = (b27;b26) ;reconstitution de la mesure brute ;compens = (b25,b24) ft tempé interne if mesur =0 then alarmsonde ;erreur de mesure, dépassement 65535 mesur=mesur/100 if memcomp>compens then compens=memcomp- compens ;plus froid compens=compens /4 ;ici un rapport 4 entre les variations mesure et ref t° interne mesur=mesur + compens else compens=compens - memcomp ;plus chaud compens=compens /4 mesur=mesur - compens ;on garde les chiffres significatifs endif return '******** Affichage des valeurs lues *********** affich: if sonde=8 then posi=192 elseif sonde=9 then posi=148 elseif sonde=10 then posi=212 endif car=posi+3:gosub EnvoiByteComm ;pos curseur aff % bintoascii mesur,b1,b1,b1,b2,b3 ;décomposition ascii for cpt=0 to 2 lookup cpt,(b1,b2,b3),car ;affichage valeur en % gosub EnvoiByteData next car=posi+8:gosub EnvoiByteComm ;pos curseur aff L varw=capacit *mesur/100 bintoascii varw,b1,b1,b1,b2,b3 for cpt=0 to 2 lookup cpt,(b1,b2,b3),car ;affichage valeur en L gosub EnvoiByteData next car=posi+13:gosub EnvoiByteComm ;pos curseur varw=60*mesur ;décomposition 6951*mesur/100 =60*mesur varw=9*mesur+varw ;+9*mesur varw=mesur/2+varw ;+ mesur/2 (51/100 oui, bon...) bintoascii varw,b1,b1,b2,b3,b4 ;pas écraser les octets utiles for cpt=0 to 1 lookup cpt,(b1,b2),car ;affichage valeur en L gosub EnvoiByteData next car=posi+16:gosub EnvoiByteComm ;pos curseur for cpt=0 to 1 lookup cpt,(b3,b4),car ;affichage valeur en L gosub EnvoiByteData next pause 1000 ;pour stabiliser l'affichage return afftotal: total=total/3 bintoascii total,b1,b1,b1,b2,b3 car=144 :gosub EnvoiByteComm ;position % global for cpt=0 to 2 lookup cpt,(b1,b2,b3),car ;affichage valeur en % gosub EnvoiByteData next return ;******* Calibration, Calcul paramétres, Affichage, Mise en mémoires *** calib: car=1:gosub EnvoiByteComm ;raz afficheur calibr=1 text(128,20,39) ;texte "calobration 0%" do:loop while valid=0 ;attente relachement poussoir text(192,40,59) ;texte "mesure 0=%" do serin [20000,alarmsonde],8,baud,b27,b26,b25,b24 ;(b27,b26) mesur (b25,b24) compens if mesur =0 then gosub alarmsonde ;erreur de mesure, dépassement 65535 mesur=mesur/100 ;on garde les chiffres significatifs bas=mesur ;mesure du point 0% bintoascii mesur,b1,b1,b1,b2,b3 ;affichage car=207: gosub EnvoiByteComm ;pos curseur en 205 for cpt=0 to 2 lookup cpt,(b1,b2,b3),car ;affichage valeur 0% gosub EnvoiByteData next pause 500 loop while valid=1 ;attente validation car=1:gosub EnvoiByteComm ;raz affichage text(128,60,79) ;texte calibration 100% do:loop while valid=0 ;attente relachement poussoir text(192,80,99) ;texte valeur mesure 100%= do serin [20000,alarmsonde],8 ,baud,b27,b26,b25,b24 if mesur =0 then gosub alarmsonde ;erreur de mesure sonde, dépassement 65535 mesur=mesur/100 ;on garde les chiffres significatifs bintoascii mesur,b1,b1,b1,b2,b3 car=207: gosub EnvoiByteComm ;pos curseur en 205 for cpt=0 to 2 lookup cpt,(b1,b2,b3),car ;affichage mesure 100% gosub EnvoiByteData next pause 500 loop while valid=1 if bas>mesur then calib ;erreur de procédure. retour début do:loop while valid=0 ;attente relachement poussoir delta=mesur-bas write 0,word bas,word delta,word compens ;Mise en mémoire EEPROM text(128,100,119) ;texte calibration text(192,120,139) ;texte effectuée pause 4000 ;Temps d'affichage reset ;*********** Calcul pourcentage *********************** calcul: if mesur <=bas then ; on est en dessous de 0 mesur=0 ;butée à 0 else mesur=mesur-bas ;calage à l'origine mesur=100*mesur/delta ;proportionnalité ,unités en pourcents endif return ;***** Alarmes dépassement Time Out liaison sonde (temporaire) et défaut sonde ********** Alarmsonde: car=1:gosub EnvoiByteComm ;raz afficheur if mesur=0 then ;erreur de mesure sonde (défaut isolant ?) text(128,140,159) else ;temps TIMEOUT dépassé (liaison coupée?) text(128,160,179) endif text(192,200,219) ;texte sonde n° sonde =sonde-7 ;pour numéroter les sondes de 1 à 3 bintoascii sonde,b1,b2,b3 car=203:gosub EnvoiByteComm ;pos curseur en 128 car=b3: gosub EnvoiByteData ;sonde en défaut pause 6000 ;temps de lecture if calibr=1 then calib ;on était en calibration..on y retourne goto debut ;retour au début de la boucle principale ; Sub envoi vers LCD via I2C ************* EnvoiByteCommInit: pause 15 EnvoiByteComm: rsbit=0 EnvoiByteData: ;1ère moitié dat=car & $F0 | %1000 | rsbit ;%1000 pour l'éclairage hi2cout (dat) pause 2 dat=dat | %1100 hi2cout (dat) ;pulse sur E cad P2 pause 2 ;pause 2 pour 32 MHz dat=dat | %1000 ;fin pulse hi2cout (dat) pause 2 ;2ème moitié dat=car & $0F * 16 | %1000 | rsbit hi2cout (dat) pause 2 dat=dat | %1100 hi2cout (dat) pause 2 dat=dat | %1000 & %1011 hi2cout (dat) rsbit=1 return
Dernière modification par mag1 ; 05/06/2018 à 08h54.
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...
J'avais acheter ces contacteur pour un projet très simple. Il m'en est resté quelques uns.
Ce sont de NO ou NF comme tu veux. ça dépend de la manière que tu les installes.
Dans l'image celle de gauche est NF alors que celle de droite sera NO. Si celle de gauche était au plus bas niveau et celle de droite au plus haut niveau (soit l'inverse de cette photo), il serait possible le thyristor lorsque le niveau serait ba et de l'arrêter lorsqu'il serait haut.
![]()
M2
Oui, ça dépend si il est dans un sens ou dans l'autre. Si on utilise un 08M2, de toute façon, on fait ce que l'on veux.
Les thyristors, c'est plutôt pour du continu, en alternatif, on utilise des triacs (en gros, deux thyristors inversés) et le plus simple, c'est le relais statique de #124 (inclus une commande optique)
MM
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...
T'as raison pour le Triac. Je les mélange toujours ces deux là.M2
Oui, ça dépend si il est dans un sens ou dans l'autre. Si on utilise un 08M2, de toute façon, on fait ce que l'on veux.
Les thyristors, c'est plutôt pour du continu, en alternatif, on utilise des triacs (en gros, deux thyristors inversés) et le plus simple, c'est le relais statique de #124 (inclus une commande optique)
Pièce jointe 367300
MM
Il semble y avoir une erreur dans ta programmation (photo #121). Si la valeur globale en % est la somme des trois réservoirs, ne devrait-elle pas afficher 3 * 63% >> 189% ?Bonjour,
Et un truc comme ça ?
Pièce jointe 367272
Avec la valeur globale des réserves d'eau en % et le détail par réservoir en %, litres et Gallons impériaux....
MM
Non, c'est la somme des % de chaque réservoir /3 : (63+63+63) /3 = 63
C'est ce qui reste du total des 3 réservoirs pleins.
Au fait, la calibration se fait sur un réservoir, et est appliquée aussi aux autres, c'est pour ça que j'ai demandé si les trois sondes et les réservoirs étaient identiques.
MM
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...
Tout à fait logique. Désolé, mon erreur !Non, c'est la somme des % de chaque réservoir /3 : (63+63+63) /3 = 63
C'est ce qui reste du total des 3 réservoirs pleins.
Au fait, la calibration se fait sur un réservoir, et est appliquée aussi aux autres, c'est pour ça que j'ai demandé si les trois sondes et les réservoirs étaient identiques.
MM
Oui ils sont identiques.
Bonjour,
On espère pouvoir réutiliser les sondes d'origines. Mais à défaut, la réalisation de sondes à base de tube PVC de 30mm et de fil émaillé de 5 à 6 /10 de mm donneront probablement de meilleurs résultats.
sondecapa0.jpg sondecap2.jpg sondecap3.jpg
Plus de détails sur cette page: http://electromag1.wifeo.com/fabriat...apacitives.php
MM
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...
Beau travail. Évidement je vais attendre d'aller au bateau avant de fabriquer de nouvelles sondes.Bonjour,
On espère pouvoir réutiliser les sondes d'origines. Mais à défaut, la réalisation de sondes à base de tube PVC de 30mm et de fil émaillé de 5 à 6 /10 de mm donneront probablement de meilleurs résultats.
Pièce jointe 367477 Pièce jointe 367478 Pièce jointe 367479
Plus de détails sur cette page: http://electromag1.wifeo.com/fabriat...apacitives.php
MM
Merci MM
Bonjour,
Petit programme pour #128.
Si on veut lire le niveau par sonde capacitive, il faudrait remplacer le 08M2 par un 14M2.
Code:#picaxe 08M2 #no_data symbol caphaut= pinC.3 ;capteur niveau haut symbol capbas= pinC.4 ;capteur niveau bas symbol moteur= C.1 ;sortie relais statique pullup %11000 ;R pullup sur C.3 et C.4 do do loop while capbas = 0 ;on attend le niveau bas high moteur ;moteur ON do loop while caphaut=0 ;on attend le niveau haut low moteur ;moteur OFF loop
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...
Bonjour,
Quelques nouvelles du front côté réservoirs bateau.
Je viens de constater, mais c'est inévitable, une petite dispersion entre les valeurs mesurées par différents 08M2 Ex: on fait une calibration avec un 08M2, on a donc 100% pour la capa mesurée.
Si on change le 08M2, on mesurera par ex 98% pour l'un et 103% pour un autre.
Je propose donc un ajustage des mesures pour annuler cette dispersion. Une calibration se fait sur une sonde "de référence" et les deux autres sont ajustées à 100% pour la même hauteur et donc la même quantité d'eau. Ces réglages sont définitifs, ft du picaxe.
Nouveau schéma, deux R ajustables 10k genre 25t de plus:
Il y a une petite modif de code
MM
Dernière modification par mag1 ; 13/06/2018 à 07h56.
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...
Et non, les 08M2 ne sont pas tous égaux...
Quatre 08M2, avec la même capacité de 3,3nF, sur le même support, donne respectivement les valeurs de mesure/100 de: 254, 225, 245, 259.
Ce ne serait pas si mal si il n'y avait ce 225 que j'ai écarté.
Sur cette photo, il y a les trois sondes: le tube avec le fil émaillé, et deux 08M2 avec un condo (gris) simulant la mesure.
La calibration a été faite avec le tube (sonde 1) et une capa de 3,3nF simulant une hauteur de 65cm d'eau.
Avec des condos de 3,3nF sur les deux autres 08M2 (sondes 1 et 2), les 100% ont été alignés avec les deux potars (en bas à droite)
Sur la photo, le 3,3 nF est resté sur la sonde 1, les deux autres 3,3 sur les sondes 2 et 3 sont remplacés par des 1nF.
Compte tenu de la précision de tous ces condos, la mesure est tout à fait satisfaisante (pour moi...)
Pas besoin de 25t pour les ajustables.
MM
Dernière modification par mag1 ; 13/06/2018 à 15h43.
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...
Allo MM,Et non, les 08M2 ne sont pas tous égaux...
Quatre 08M2, avec la même capacité de 3,3nF, sur le même support, donne respectivement les valeurs de mesure/100 de: 254, 225, 245, 259.
Ce ne serait pas si mal si il n'y avait ce 225 que j'ai écarté.
Pièce jointe 367862
Sur cette photo, il y a les trois sondes: le tube avec le fil émaillé, et deux 08M2 avec un condo (gris) simulant la mesure.
La calibration a été faite avec le tube (sonde 1) et une capa de 3,3nF simulant une hauteur de 65cm d'eau.
Avec des condos de 3,3nF sur les deux autres 08M2 (sondes 1 et 2), les 100% ont été alignés avec les deux potars (en bas à droite)
Sur la photo, le 3,3 nF est resté sur la sonde 1, les deux autres 3,3 sur les sondes 2 et 3 sont remplacés par des 1nF.
Compte tenu de la précision de tous ces condos, la mesure est tout à fait satisfaisante (pour moi...)
Pas besoin de 25t pour les ajustables.
MM
J'ai reçu presque tout le matériel sauf les écrans LCD. Je part en vacance au chalet ce week-end. De retour dans une ou deux semaines. Je vais m'y mettre à ce moment en espérant que les LCD seront arrivé...
Merci pour tous le support apporté.
Question : exist-il des programmes pour uploader le code dans le picaxe à l'aide du cordon usb ?
Tout est dans l'éditeur PE6
Je reposte cette page, regarde la vidéo...un cordon ou un autre, la procédure est la même:
http://electromag1.wifeo.com/cordon-...ation-usb-.php
MM
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...
Ça l'air pas mal simple en effet.
J'ai trouvé l'editeur. Je vais tout installer la semaine prochaine lorsque j'aurai rien à faire au chalet...
Bonjour,
Pour info, voici un PCB qui regroupe les composants du schéma précédent, ajustages des sondes 2 et 3 inclus (les 25t se placent plus facilement).
On peut réaliser la,même chose sur plaques de pastilles (veroboard), mais il est plus difficile de faire un veroboard soigné que de faire graver ce PCB (ou un autre). Voir avec un club d'électronique par ex.
MM
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...
Et le programme pour la prise en compte des ajustables sondes:
MMCode:;Ex: sonde de niveau capacitive MM 13/06/2018 ;**** calibration de la sonde par action 3 sec sur le poussoir de validation *************** ;**** La réponse de la comande TOUCH est considérée comme linéaire (elle l'est...) ;**** Le sous programme "calib:" mesure deux points arbitraires 0 et 100% ********* ;**** mesure de la référence interne de température dans l'émetteur 08M2 ;**** Ces trois mesures sont mémorisées en EEPROM ;**** Calcul de la proportionnalité entre la mesure et les valeurs mémorisées **** ;**** Calcul d'une correction de température (par rapport à la t° lors de la calibration) ;**** Affichage du Niveau en % et en litres ;**** Affiche les étapes successives ************** #picaxe 14M2 ;directive picaxe utilisé (pour erreur de commandes) setfreq M16 ;fréquence 16MHz ;****** Nominations constantes ******** symbol baud= N2400_16 ;vitesse liaison RS232 symbol capacit= 316 ;capacité réservoir en L symbol gallon=6951 ;capacité en /100 de Gallon Imp ;****** noms variables word ********* symbol mesur = w13 ;(b27,b26) symbol compens = w12 ;(b25,b24) symbol bas = w11 ;ref niveau bas symbol memcomp = w10 ;mémo réf compensation t° symbol delta = w9 ;delta haut-bas symbol total = w8 ;total réservoirs en % symbol varw = w7 ;variable tempotaire symbol deb = w6 ;debut texte symbol cpt = w5 ;compteur ;***** noms variables bytes **************** ; b1,b2,b3,b4 utilisés dans bintoascii symbol car =b5 ;caractère àafficher symbol dat =b6 ;data I2C symbol sonde =b7 ;n° sonde symbol posi =b8 ;position curseur symbol ajust =b9 ;ajustement µC lue sur potar ;******* noms variables bit sur b0 *********** symbol rsbit=bit0 ;bit commande/data afficheur symbol calibr=bit1 ;memo phase calibration ;******* Nominations ports *********** symbol sonde0 = C.0 ;entrée sonde0 n°broche=8 symbol sonde1 = C.1 ;entrés sonde1 n°broche=9 symbol sonde2 = C.2 ;entrée sonde2 n°droche=10 symbol valid = pinC.3 ;valeur poussoir de validation symbol potaj2 = B.1 ;valeur ajustage sonde µC2 symbol potaj3 = B.2 ;valeur ajustage sonde µC3 ; Initialisation I2C . pour 14M2:sda sur B.4 ; scl sur B.3 hi2csetup i2cmaster,%01001110, i2cfast_16, i2cbyte ;** Entrée des données texte dans "table" *********** table 0,(51,50,40,12,6,1) ;initialisation LCD 4 bits table 20,(" calibration 0% ") table 40,(" mesure 0%= ") table 60,(" calibraton 100% ") table 80,(" mesure 100%= ") table 100,(" calibration ") table 120,(" effectu",1,"e ") ;1 pour é table 140,(" DEFAUT SONDE ") table 160,(" DEFAUT TIMEOUT ") table 180,(2,4,14,17,31,16,14,0) ;descripton lettre é table 200,(" SONDE nß ") ;ß= alt+0223 =° sur clavier table 220,("RESERVES D'EAU: %") table 240,("#1 % L , GI") table 260,("#2 % L , GI") table 280,("#3 % L , GI") pullup %0100000000000 ;pullup sur C.3 ;***** macro texte *************** #macro text(posi,deb,varw) car=posi:gosub EnvoiByteComm ;pos curseur en 128 for cpt=deb to varw readtable cpt,car ;texte gosub EnvoiByteData next #endmacro ; Initialisation LCD ********* for cpt=0 to 5 readtable cpt,car gosub EnvoiByteCommInit next pause 500 ;temps init du LCD ; définition des caractères ajoutés en CGRAM ; def du é en CGRAM 1 ************************** car=1*8|$40 :gosub EnvoiByteComm for cpt=180 to 187 readtable cpt,car ;description du é vers CGRAM n°1 gosub EnvoiByteData next ;******* Début Programme principal ***************** car=1:gosub EnvoiByteComm ;raz afficheur read 0,word bas, word delta,word memcomp ; lecture param droire + t° pendant calib if bas =0 then calib ; Vers calib si aucun paramètre enregistré ;***** boucle pricipale ************************************** debut: calibr=0 ;on est pas en calibration text(128,220,239) ;texte "RESERVES D'EAU: %" text(192,240,259) ;texte fixe text(148,260,279) text(212,280,299) Do time=0 do while valid=0 ;si valid=1, on entre pas if time> 3 then calib ;demande de calibration loop total=0 for sonde=8 to 10 ;n° des broches : broches C.0=8,C.1=9,C.3=10 gosub mesure gosub calcul gosub affich total=total+mesur next gosub afftotal loop ;******* Fin programme principal ***************** ;******* Les sous programmes: *********************** ;************** Mesure des sondes, liaison RS232 *************** ; Pour les essais avec une seue sonde, le port serin est bloqué à 8 (C.1) au lieu de scanner les 3 sondes ; Pour le scanne réel, il faut remplacer le "8" par "sonde" dans la commande serin ci dessous mesure: serin [10000,alarmsonde],sonde ,baud,b27,b26,b25,b24 ;(b27;b26)mesur et (b13,b12);!! ;mesur=w13 = (b27;b26) ;reconstitution de la mesure brute ;compens = (b25,b24) ft tempé interne if mesur =0 then alarmsonde ;erreur de mesure, dépassement 65535 ;***** compensation dispersion µC ************ if sonde=8 then mesur=mesur/100 elseif sonde=9 then readadc potaj2,ajust ;ajust=0 à 255 ajust=ajust/5 ;255/5=50 curseur milieu=25 ajust=75+ajust ;ajust = de 75 à 125 mesur=mesur/ajust elseif sonde=10 then readadc potaj3,ajust ajust=ajust/5 ajust=75+ajust mesur=mesur/ajust endif ;******* compensation température ************ if memcomp>compens then compens=memcomp- compens ;plus froid compens=compens /4 ;ici un rapport 4 entre les variations mesure et ref t° interne mesur=mesur + compens else compens=compens - memcomp ;plus chaud compens=compens /4 mesur=mesur - compens ;on garde les chiffres significatifs endif return '******** Affichage des valeurs lues *********** affich: if sonde=8 then posi=192 elseif sonde=9 then posi=148 elseif sonde=10 then posi=212 endif ;********** affichage en % ************** car=posi+3:gosub EnvoiByteComm ;pos curseur aff % bintoascii mesur,b1,b1,b1,b2,b3 ;décomposition ascii for cpt=0 to 2 lookup cpt,(b1,b2,b3),car ;affichage valeur en % gosub EnvoiByteData next ;********* affichage en litres *********** car=posi+8:gosub EnvoiByteComm ;pos curseur aff L varw=capacit *mesur/100 bintoascii varw,b1,b1,b1,b2,b3 for cpt=0 to 2 lookup cpt,(b1,b2,b3),car ;affichage valeur en L gosub EnvoiByteData next ;*********** affichage en gallon imp ************ car=posi+13:gosub EnvoiByteComm ;pos curseur varw=60*mesur ; décomposition 6951*mesur/100 =60*mesur varw=9*mesur+varw ;+9*mesur varw=mesur/2+varw ;+ mesur/2 (51/100 oui, bon...) bintoascii varw,b1,b1,b2,b3,b4 ;pas écraser les octets utiles for cpt=0 to 1 lookup cpt,(b1,b2),car ;affichage partie entière gosub EnvoiByteData next car=posi+16:gosub EnvoiByteComm ;pos curseur for cpt=0 to 1 lookup cpt,(b3,b4),car ;affichage décimales, après virgule gosub EnvoiByteData next pause 1000 ;pour stabiliser l'affichage return ;afichage du total des 3 réservoirs en % (max=100%) afftotal: total=total/3 ;moyenne de la somme des trois réservoirs bintoascii total,b1,b1,b1,b2,b3 car=144 :gosub EnvoiByteComm ;position % global for cpt=0 to 2 lookup cpt,(b1,b2,b3),car ;affichage valeur en % gosub EnvoiByteData next return ;******* Calibration, Calcul paramétres, Affichage, Mise en mémoires *** calib: car=1:gosub EnvoiByteComm ;raz afficheur calibr=1 text(128,20,39) ;texte "calobration 0%" do:loop while valid=0 ;attente relachement poussoir text(192,40,59) ;texte "mesure 0=%" do serin [20000,alarmsonde],8,baud,b27,b26,b25,b24 ;(b27,b26) mesur (b25,b24) compens if mesur =0 then gosub alarmsonde ;erreur de mesure, dépassement 65535 mesur=mesur/100 ;on garde les chiffres significatifs bas=mesur ;mesure du point 0% bintoascii mesur,b1,b1,b1,b2,b3 ;affichage car=207: gosub EnvoiByteComm ;pos curseur en 205 for cpt=0 to 2 lookup cpt,(b1,b2,b3),car ;affichage valeur 0% gosub EnvoiByteData next pause 500 loop while valid=1 ;attente validation car=1:gosub EnvoiByteComm ;raz affichage text(128,60,79) ;texte calibration 100% do:loop while valid=0 ;attente relachement poussoir text(192,80,99) ;texte valeur mesure 100%= do serin [20000,alarmsonde],8 ,baud,b27,b26,b25,b24 if mesur =0 then gosub alarmsonde ;erreur de mesure sonde, dépassement 65535 mesur=mesur/100 ;on garde les chiffres significatifs bintoascii mesur,b1,b1,b1,b2,b3 car=207: gosub EnvoiByteComm ;pos curseur en 205 for cpt=0 to 2 lookup cpt,(b1,b2,b3),car ;affichage mesure 100% gosub EnvoiByteData next pause 500 loop while valid=1 if bas>mesur then calib ;erreur de procédure. retour début do:loop while valid=0 ;attente relachement poussoir delta=mesur-bas write 0,word bas,word delta,word compens ;Mise en mémoire EEPROM text(128,100,119) ;texte calibration text(192,120,139) ;texte effectuée pause 4000 ;Temps d'affichage reset ;*********** Calcul pourcentage *********************** calcul: if mesur <=bas then ; on est en dessous de 0 mesur=0 ;butée à 0 else mesur=mesur-bas ;calage à l'origine mesur=100*mesur/delta ;proportionnalité ,unités en pourcents endif return ;***** Alarmes dépassement Time Out liaison sonde (temporaire) et défaut sonde ********** Alarmsonde: car=1:gosub EnvoiByteComm ;raz afficheur if mesur=0 then ;erreur de mesure sonde (défaut isolant ?) text(128,140,159) else ;temps TIMEOUT dépassé (liaison coupée?) text(128,160,179) endif text(192,200,219) ;texte sonde n° sonde =sonde-7 ;pour numéroter les sondes de 1 à 3 bintoascii sonde,b1,b2,b3 car=203:gosub EnvoiByteComm ;pos curseur en 128 car=b3: gosub EnvoiByteData ;sonde en défaut pause 6000 ;temps de lecture if calibr=1 then calib ;on était en calibration..on y retourne goto debut ;retour au début de la boucle principale ; Sub envoi vers LCD via I2C ************* EnvoiByteCommInit: pause 15 EnvoiByteComm: rsbit=0 EnvoiByteData: ;1ère moitié dat=car & $F0 | %1000 | rsbit ;%1000 pour l'éclairage hi2cout (dat) pause 2 dat=dat | %1100 hi2cout (dat) ;pulse sur E cad P2 pause 2 ;pause 2 pour 32 MHz dat=dat | %1000 ;fin pulse hi2cout (dat) pause 2 ;2ème moitié dat=car & $0F * 16 | %1000 | rsbit hi2cout (dat) pause 2 dat=dat | %1100 hi2cout (dat) pause 2 dat=dat | %1000 & %1011 hi2cout (dat) rsbit=1 return
Dernière modification par mag1 ; 16/06/2018 à 20h04.
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...
Bonjour,
Retour sur le forum.
Voici un exemple de LCD 2004 avec adaptateur I2C (c'est la petite plaquette). Il n'y a rien à fabriquer.
https://www.ebay.fr/itm/LCD-2004-Bla...DhQc7Iia-oKNsQ
Pour le fil électrique loupe... je vois pas. Je confirme que le meilleur résultat est obtenu avec du fil émaillé de 6/10 env.
MM
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...
Salut mag1,
Je viens de retrouver ton circuit pour une seul sonde avec alarme de niveau. C'est le premier que je vais faire ce week-end.
Pièce jointe 369133
Dis-moi quelle valeur de potentiomètre utilises-tu pour l'alarme ?
Merci MM,
Yex
Je t'enverrai des photos de la sonde une fois qu'elle sera terminée. Merci de ta patience.Bonjour,
Retour sur le forum.
Voici un exemple de LCD 2004 avec adaptateur I2C (c'est la petite plaquette). Il n'y a rien à fabriquer.
https://www.ebay.fr/itm/LCD-2004-Bla...DhQc7Iia-oKNsQ
Pour le fil électrique loupe... je vois pas. Je confirme que le meilleur résultat est obtenu avec du fil émaillé de 6/10 env.
MM
Yex
Pour répondre à la question, les potentiomètres servent à donner sur une broche une tension entre 0 et 5V (le plus souvent) dont on fait ce que l'on veut. Ces potar font 10k.Salut mag1,
Je viens de retrouver ton circuit pour une seul sonde avec alarme de niveau. C'est le premier que je vais faire ce week-end.
Pièce jointe 369133
Dis-moi quelle valeur de potentiomètre utilises-tu pour l'alarme ?
Merci MM,
Yex
Afin de ne pas partir dans tous les sens: Le LCD utilisé pour ce test de la commande picaxe "touch16" avait une interface série (un fil plus 2 alim = 3 fils). Pour éviter de fabriquer cet adaptateur décrit dans ces pages (http://electromag1.wifeo.com/lcd-ser...vec-frm010.php), j'ai opté pour l'adaptateur I2C que l'on trouce sur eBay tout fait à un euro.
Je repose donc la question: Quel matériel as tu acheté???
Pour le "fil en forme de loupe", Est ce que loupe = loop = boucle ??
Pour info, c'est à mon tour d'être en vacances, avec une connexion réseau aléatoire...
MM
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...
Bonjour,
La réponse a ma question était dans les MP. Ce sont donc des LCD I2C.
L'exemple de mesure de niveau avec alarme que tu cites (#145) utilise des LCD avec adaptateur série, la programmation est différente.
Il faut donc adapter le programme....
A bientôt
MM
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...
Ok mais j'ai acheté les LCD que t'avais recommander, soit :
1602 : https://www.ebay.com/itm/IIC-I2C-TWI...72.m2749.l2649
2004 : https://www.ebay.com/itm/IIC-I2C-TWI...72.m2749.l2649
Bon voici la sonde que j'ai fabriqué pour le réservoir du chalet. En espérant que ça aide d'autres personnes dans leur projet...
Projet nu.1
IMG_20180721_113007107_HDR[1].jpg
IMG_20180721_114727517[1].jpg
IMG_20180721_114945383[1].jpg
IMG_20180721_115253836[1].jpg
Le fil est enfilé dans le tuyau et se rend au bas (impossible d'ajouter la photo, le système refuse). L'eau peut librement pénétrer dans le tuyau lorsque le niveau monte.
Il me reste à construire le circuit et tester le tout. Je vais essayer de faire ça cette semaine.
Dernière modification par Yex2 ; 21/07/2018 à 17h20.