cahier des charges
Pour faire circuler l’eau, il va nous falloir de l’énergie !
– Je souhaite ne pas faire appel à Monsieur EDF.
– Idéalement, le fonctionnement doit être automatisé.
– la quantité d’énergie doit être suffisante pour la « vie » de l’eau (v. circuit de l’eau)
mes choix :
- Je dispose d’un panneau solaire de 210Wc abîmé (il a reçu un choc), mais il fonctionne encore, bien que diminué.
- Je choisis de tout faire fonctionner en 12V, il me faut une batterie de ~50Wh. J’ai récupéré une batterie de voiture, batterie de démarrage… Mais ce n’est pas une bonne idée ! Celle-ci va se dégrader très rapidement.
- Je confie le travail de contrôle de charge à un Victron MPPT 100|15 (une référence en la matière).
Il fonctionne en 12V ou 24V, et peut accepter 1 ou 2 px solaires. - La pompe principale de relevage, doit pouvoir « monter » l’eau à plus de 4m de hauteur et avoir un débit important.
De préférence pour le silence de fonctionnement, c’est une pompe immergée :
Pompe de puits profonds 12V 180W Déb.max 6m3/h Hmax=45m - Les pompes auxiliaires pour la circulation de l’eau en fond de bac, sont des petites pompes de faible consommation 12V, 0,6A (7,2W) 6L/mn (360L/h) :
Pompe 6 L pour eau PE3806
Il y en a 3 : 1 pour amener l’eau et 2 pour la refouler. L’idée est d’assurer que le vidage soit toujours plus rapide que le remplissage - Pour piloter le fonctionnement des pompes, je confie le job à un tout petit contrôleur :
PYBStick Lite 26
C’est un micro-contrôleur très peu onéreux qui se programme en Python,
programme python : v. en fin d’article ou téléchargeable ici. - Autres composants :
– régulateur de tension 5V : https://www.gotronic.fr/art-regulateur-5-v-d24v50f5-25330.htm
– volt/ampère mètre : https://www.gotronic.fr/art-module-volt-amperemetre-vam10010-28672.htm
– onduleur 220V (optionnel) : https://www.amazon.fr/onduleur-12v-220v/s?k=onduleur+12v+220v
concernant l’onduleur, comme il ne s’agit pas d’injecter le courant sur le secteur, un simple convertisseur sinusoïdale pourra suffire à faire fonctionner épisodiquement un appareil en 230V, comme : une lampe, un outil, un chargeur, etc…
Attention quand même à la consommation de l’appareil.
Attention aussi à la forme (approchante) de la sinusoïde créée, qui peut ne pas convenir à certains appareils.
Pour ce qui me concerne, j’ai récupérer un vieil onduleur pour PC (batterie HS).
Programme « main.py » (8Ko)
""" PYBstick 26 lite - Contrôle des pompes de circulation d'eau de la serre S.P. juin 2021 - v1 : version intégrant le contrôle de la pompe de relevage S.P. août 2021 - v2 : version intégrant le contrôle de la pompe du bac à marée La pompe est déclenchée périodiquement selon un cycle déterminé (réglable par le programme), sous condition que la tension de batterie soit suffisante. (valeur de seuil réglable par programme). - La sortie S12 est utilisée pour fermer un relais 12v, via un 2N2222 en collecteur ouvert. - la sortie S18 est utilisée pour piloter la pompe du bac à marée via un 2N2222 en collecteur ouvert - La broche S19 est utilisée en entrée analogique pour lire une tension limitée à 3v3 (réglage par potentiomètre)représentant 16v sur la batterie. tableau des équivalences : bat. mesure anal. 14,5 : 2,999 3712 14 : 2,898 3584 13,5 : 2,801 3456 13 : 2,701 3328 seuil de la pompe principale 12,5 : 2,592 3200 12 : 2,486 3072 seuil de la pompe du bac à marée 11,5 : 2,393 2944 11 : 2,288 2816 - Le poussoir "user switch" du PYBstick est utilisé pour agir manuellement sur la pompe de relevage. - Les LEDs : verte: allumée pour indiquer le fonctionnement normal du contrôleur. : orange: pour indiquer le fonctionnement de la pompe : rouge: indique que la pompe ne démarre pas à cause de la tension trop basse de la batterie """ import pyb #import os, sys #import csv from pyb import LED, Switch from pyb import ADC from pyb import delay #from pwm import * import time from time import sleep ledRouge = LED(1) ledVert = LED(2) ledOrange = LED(3) ledBleu = LED(4) bouton = Switch() # Déclaration et initialisation des broches # Contrôle d'un relais branché sur le S12 RELAY_PIN = pyb.Pin.board.S12 # broche 12 relais = pyb.Pin( RELAY_PIN, pyb.Pin.OUT_PP ) relais.low() # Contrôle de la pompe du bac à marée sur le S18 PMPBM_PIN = pyb.Pin.board.S18 # broche 18 pmpbm = pyb.Pin( PMPBM_PIN, pyb.Pin.OUT_PP ) # déclaration de la S18 pmpbm.low() # 1ère lecture de la tension de batterie sur S19 tensionBat = pyb.ADC(pyb.Pin.board.S19) # broche 19 # valeur de la tension de batterie [de 0 à 3v3max (c.à d. : 0 à 16vmax réels)] converti en 2^12(4096) ######## les réglages sont ici ######## # les délais exprimés en ms PMPREL_TIME = 900000 # (15mn)durée de fonctionnement de la pompe de relevage PMPBM_TIME = 1500000 # (25mn)durée de fonctionnement de la pompe du bac à marée CYCLE_TIME_PMPBM = 1800000 # (30mn)durée du cycle de la pompe du bac à marée CYCLE_TIME_COURT = 1800000 # si la tension de batterie est > SEUIL, on utilise ce temps d'attente CYCLE_TIME_LONG = 3600000 # (60mn)durée totale du cycle # les seuils de tension # 128 représente ~ 1/2v - la chute de tension est d'~1v quand la pompe fonctionne SEUIL_PMP = 3328 # ~13v0 - valeur en dessous de laquelle la pompe ne démarrera pas SEUIL_PMPBM = 3123 # ~12v2 - tension en dessous de laquelle la pompe du bac à marée ne démarre pas # je positionne l'hystérésis à ~1v2, soit : 310 HYSTERESIS = 310 # ~1v2 - hystérésis pour éviter le "pompage" de la pompe ;) # si la pompe démarre, 12v4 seront nécessaire à son fonctionnement pour ce cycle #------------ procédures ------------- def RelayOn(pON): # contrôle de la pompe consigne = SEUIL_PMP-HYSTERESIS*(pON) # l'hystérésis est retiré si la pompe fonctionne if tensionBat.read() > consigne: # vérifie la tension de batterie relais.high() ledOrange.on() # pompe en route pmpON = 1 # indicateur else: ledRouge.on() # indique que la pompe n'a pas démarrée à cause de la val. trop basse de la tension de bat. def RelayOff(pON): relais.low() # pompe arrêtée pmpON = 0 # indicateur ledOrange.off() ledRouge.off() #------------ Initialisation ------------- Tcycle_on = CYCLE_TIME_COURT # au démarrage on attend un délai court PmpRel_on = 0 # Temps d'activation pompe à "0", pompe arrêtée pmpON = 0 # la pompe est réputée arrêtée au démarrage du programme PmpBM_on = PMPBM_TIME # La pompe du bac à marée est démarrée pmpBM_CYCLE = CYCLE_TIME_PMPBM # son propre cycle est lancé consigne = SEUIL_PMP # la consigne initialisée à la valeur du seuil ledVert.on() # voyant ledVert allumé : fonctionnement OK etatBouton = False # initialisation du bouton #------------ PROGRAMME PRINCIPAL ------------ #--------------------------# while True: # BOUCLE DE FONCTIONNEMENT # #--------------------------# # Gestion du bouton if bouton.value(): # lecture du bouton if not(etatBouton): # activation ou arrêt de la pompe par appui du bouton etatBouton = True # évite les boucles sur le bouton if PmpRel_on == 0: # si la pompe est arrêtée on procède au démarrage PmpRel_on = PMPREL_TIME # démarrage de la pompe en donnant la durée de fonctionnement if tensionBat.read() > consigne: # vérification de la tension de batterie Tcycle_on = CYCLE_TIME_COURT # tension de batterie suffisante : démarrage du cycle en mode court else: Tcycle_on = CYCLE_TIME_LONG # tension de batterie faible : démarrage du cycle en mode long consigne = SEUIL_PMP-HYSTERESIS*(pmpON) print( 'consigne : ', consigne) print( 'tension bat.: ', tensionBat.read() ) else: PmpRel_on = 0 # sinon arrêt de la pompe (le cycle continu normalement) print( 'consigne : ', consigne) print( 'tension bat.: ', tensionBat.read() ) else: etatBouton = False # ré-initialisation du bouton # Contrôle de la pompe de relevage if PmpRel_on > 0: # la pompe fonctionne RelayOn(pmpON) else: RelayOff(pmpON) # la pompe est arrêtée # Contrôle de la pompe du bac à marée if PmpBM_on > 0: # la pompe fonctionne pmpbm.high() # ledBleu.on() else: pmpbm.low() # la pompe est arrêtée ledBleu.off() # Contrôle du délai de cycle if Tcycle_on <= 0: # le cycle précédent est terminé, on en recommence un autre PmpRel_on = PMPREL_TIME # démarrage de la pompe de relevage en début de cycle if tensionBat.read() > consigne: # vérification de la tension de batterie Tcycle_on = CYCLE_TIME_COURT # tension de batterie suffisante : démarrage du cycle en mode court else: Tcycle_on = CYCLE_TIME_LONG # tension de batterie faible : démarrage du cycle en mode long # décomptage des temps de cycle Tcycle_on = Tcycle_on - 50 # décomptage du temps de cycle if Tcycle_on <= 0: Tcycle_on = 0 PmpRel_on = PmpRel_on - 50 # décomptage temps de fonctionnement de la pompe if PmpRel_on <= 0: PmpRel_on = 0 pmpBM_CYCLE = pmpBM_CYCLE -50 # décomptage du temps de cycle du bac à marée if pmpBM_CYCLE <= 0: pmpBM_CYCLE = CYCLE_TIME_PMPBM # ré-initialisation du compteur if tensionBat.read() > SEUIL_PMPBM: # re-démarrage de la pompe si tension suffisante PmpBM_on = PMPBM_TIME PmpBM_on = PmpBM_on - 50 # décomptage temps de fonctionnement de la pompe du bac à marée if PmpBM_on <= 0: PmpBM_on = 0 # délais de la boucle de programme delay( 50 ) # attente de 50ms avant bouclage du pg # FIN de PROGRAMME