started V0.0.: 22/08/2017
rev : 19/10/2020
Systeme d'Arrosage
de plantes Autonome
Probleme d'
Autonomie Alimentation Electrique (Panneau solaire, accu ,mesures
..)
Gestion Alimentation Electrique (Autonome,
regulation)
Arrosage
des Plantes ( Bac, niveau,pompe, humidite, temperature (1709)
Application
Android ( Appinventor 2) (1712)
La suite
.. 2018
Realisation
Circuit Imprimé et Montage (180615)
La
suite .. 2019 remplacement mesure de courant ACS712 par INA219
usage d'un PIC18F26K22 en DIP28 et du Pickit2 Microchip
pour charger l'executable
Environnemen t: MikroC Pro 7.1.0
Probleme d' Autonomie Alimentation Electrique
Pas d'alimentation 230V AC à disposition ,
donc solution avec panneau solaire , batterie et conrole de
charge
Besoin energetique assez faible ;
Alimentation de la partie electronique : MCU, interfaces ..en 5V
DC 100mA maxi
Alimentation de la pompe à eau : 12V 5W maxi soit Imax <0,5A
pendnat la phase d'arrosage
Le panneau Solaire :
Base de 20W .. qui ne sera sans doute jamais
atteinte ..mais avec un rendement moyen de 20%
devrait quand meme pouvoir generer > = 100Wh par jour
*Le Regulateur fournit sera testé , mais
remplacé par la suite , par le systeme d'arrosage
Regulateur de charge EP5 5A 12V crepusculaire timer
minuterie (11.81 HT)
Modele : LS0512R
12V, 5A
codage leds T=ABCD :
T=13 :dusk to dawn
T=14: Test
T=15: Manual
La Batterie :
J'avais vu une batterie 12V 7AH à 8,47 ! .. mais qui a
disparu 3 jours apres..dommage
Apres consulatations de plusieurs sites internet , il s'avere que
si on a que cela à commander, les frais
d'envoi pese lourd .. j'ai donc acheté ma batterie dans un
magasin dedié au batteries VOLTEO à St Priest
Batterie YUASA NP 7-12
YUASA NP 7-12 PLOMB ÉTANCHE 12V 7AH Idéal pour toutes les utilisations tels que : Alarme,Portail électrique, UPS,Solaire Onduleur,Bloc issue de secours Tension (V) 12V Capacité (Ah) 7 Longueur (mm) 151 Largeur (mm) 65 Hauteur (mm) 97.5 Poids (kg) 2.65 Technique : Batterie au plomb étanche sans entretien. Utilisation aussi performante en charge permanente qu'en charge cyclique. Durée de vie en floating Série NP : 5 ans En utilisation cyclique : 180 à 1200 cycles. Températures d'utilisation : -15°C à + 40°C en charge et -20°C à +60°C en décharge. |
![]() |
Gestion Alimentation Electrique (PIC 18F26K22 et
Afficheur Nokia )
Parametres à suivre :
Tension Solar Panel :
pouvant évoluer de 10 à 21V , on limitera la lecture à 20V ..
Pont diviseur resitif 1/4 pour avoir 5V avec 20V en entree
en jouant avec EA2=Vcc/2 = 5/2= 2,5V comme VREF- , on a alors un
effet loupe et la relation :
- en sortie : 2,5 à 5V pour 0 à 1024 points, correspondant à
- en entree : 10 à 20V
Tension Batterie :
Pont diviseur resitif 1/3 pour avoir 5V avec 15V en entree
en jouant avec EA2=Vcc/2 = 5/2= 2,5V comme VREF- , on a alors un
effet loupe et la relation :
- en sortie : 2,5 à 5V pour 0 à 1024 points, correspondant à
- en entree : 7.5 à 15V
.... * meme si UBAT ne peut pas descendre en dessous de 10V !
Courant de Charge / decharge :
Usage d'un capteur à effet de hall ACS712-5
Malheureusement, la reference 5A n'est pas la gamme de ce capteur
, mais la zone de conformité sur la precision
Ce capteur delivre185mV/Amp , en supposant que la sortie soit
lineaire de 0 à 5V , on aurait alors +-13,5 Amperes pleine
echelle
A zero Ampere, ce capteur delivre Vcc/2 ! à 5V => 2,5V
La batterie 7AH sera chargée au 1/10em de sa capacité soit 0,7A
La consommation Pompe + Electronique ne devrait pas dépasser 1
Amp.
La resolution avec ACS712 -> direct sur entree ADC MCU est
TROP FAIBLE !
On se contentera alors d'une gamme maxi de +-2,5A, mais pour
toute la gammme réelle de mesure ( soit global=5A)
soit avec un signal 'entree de 5 * 185 mV = 925mV
On est loin des 5V de la gamme d'entree ADC 10 bits du MCU
donc, on intercalle un ampli differentiel AOP , pour obtenir ,
via un GAIN de 5000mV/925mV => G=5,4
et pour tenir compte du décalage de zero du capteur, l'entree -
de l'AOP sera reliée à VCC/2 =+2,5V
On a alors au final +-2,5A pour +- 512 points avec 512 points
pour Zero ampere
Vu le niveau de bruit elevé sur la mesure , il faut le filtrer
- analogiquement : via un filtre passe bas RC R=390 ohms C=2,2µF
- via un moyennage de 8 mesures consecutives , par software
- une procedure de reglage , compensation REELLE du decalage de
zero
de la chaine de mesure ACS712 + AOP ..
En reunissant les condition I Amps=0 , appui sur un BP pour
memoriser la valeur de l'offset
tension mesurée sur EA0 = sortie AOP , moyenne de 8 mesures
minimum, stockée en EEPROM
Cette mesure servira à faire le VRAI zero , qui
'est pas forcément la valeur theorique 512
Cette approche semble donner de bon resultat , deja , avec un AOP
TLC271
Test Amplification de la mesure avec un
AOP MCP602 :
* cellule filtrage C1 remplacé par 2,2µF polyester (RC= 10K
& 2,2µF)
Test reel sous 12V , commande PWM ampoule
de voiture 12V 25W
avec MOSFET type P IRF9Z14 coté HIGH SIDE
Un transistor BC107B NPN est utiliser pour faire le transfert de
niveau de commande coté High Side.
Tension au bornes de la lampe et image du courant vu par la
sortie capteur ACS712-5
PWM 8 bits 1Khz , la consigne PWM provient de la lecture potar
sur EA1 -> entier 10 bits 0 à 1023
Ratio PMW= EA1 >>2
![]() |
![]() |
U Lampe | I (image de Amps) Lampe |
La commande est nette et sans bavure ..de 0 à
1023 pts
Le MOSFET ne s'echauffe pratiquement pas.
Test reel avec Alim.15V simulant le
Panneau solaire et Batterie 12V 7AH
*Pas assez de soleil ( Pluvieux) pour utiliser le panneau solaire
qui ne delivre que 12,4V
Je prends donc une alim DC 15,8V , avec la lampe 12V 21W = 0,9
ohms à froid, en serie, comme source equivalente
au panneau solaire .
La Batterie 12V 7AH YUSAWA est cette fois, utilisée comme charge
(Load)
EA1 => consigne 10B PWM (1Khz)
Sortie PIC PWM RC2 Attaque le BC107 NPN qui commande le IRF9Z14
Canal P Mosfet
La Tension U solar a tendance à s'ecrouler un peu, en fonction
du courant delivré .. normal !
Dans ce test seule la valeur de PWM est modifiée.
ATTENTION avec les mesures
OSCILLO et autres elements raccordés au MCU PIC
Mesure High_side coté +12V Gnd Oscillo = Source Mosfet et Drain
Mosfet ...pour mesurer la chute de tension aux bornes du MOSFET P.
Dans ce cas, court-circuit batterie par le circuit de masse/terre
BNC oscill et masse USB du Pickit2 relié au PC ( chassis relié
à la masse et terre)
un fil entre MCU (breadboard) et -Batterie qui fume ...
Mesuré ~18 ohms entre BNC oscillo et masse cordon USB du Pickit2
Schema
de principe , partie puissance Solar System
TEST avec chargeur 12V 1A, delivrant 19V à vide et 16,5V à 0,4
Amps
Essai avec consigne de courant = Capacité AH/10 soit 0,7 Amps.
La mesure ne peut atteindre la consigne , avec U bat > 14,3V !
trop chargée.
=> il faut passer en regul de tension et faible curent maxi ..
avec 0,40 Amps on est déja au
Maxima!
Le lien ci dessous explique bien cela:
https://www.legallou.com/Modelisme-Tech/ChargeurBatterie12v/Info.html
Résumé
11,4v très déchargée (probablement foutu, si la batterie ne se
maintient pas en tension après recharge)
12v mal chargée (batterie à recharger d'urgence)
13,8v charge maxi (arrêt de charge large sécurité)
14,4v charge maxi (c'est la tension de charge permanente sur une
voiture) au delà de 14,4v début de création de gaz - danger
Controle du Courant de charge en fonction
de la tension Batterie :
Usage d'une table pour moduler le courant de charge en fonction
de la tension U Batterie
Le maximum de courant imposé 100 % ne se fera que si la batterie
est bien dechargée :
si Ubatt entre 11 et 12V ...100%
Si Ubatt entre 12 et 13V .. 70%
si UBatt entre 13 et 14V .. 40%
si Ubat>14V .. 4%
si Ubat > 14,4V ..on arrete tout
élements clés:
const char ICharge_7AH=0.7; // 7AH/10=> 0,7A
const unsigned char Charge_Table[]={4,40,70,100};
Le regulateur :
La consigne est issue de la capacité Batterie en Ampere Heure /
10 , sot 7AH /10 => 0,7 A
La mesure de courant , issue de l'entree EA0 , gamme 0 à 5V,
permet de mesurer les courants Positifs ou Negatifs
vu que le capteur ACS712-5 donne 2,5V à 0 amps.
Un entier signé est utilisé pour qu'au final on ait EA1-512 =>
resulat Positif ou Negatif..
Un ampli MCP602 est utiliser pour augmenter la sensibilite de
mesure qui passe alors de +-13,5 Amps à
+- 2,5 Amps via le gain de 5,4 de L'AOP.
Cette mesure resultante EA1 est moyennée toutes les 8 mesures,
sur laquelle on enleve l'offset REEL
correspondant à celui de l'ACS712 , avec derive amplifiée AUSSI
dans le meme rapport de GAIN MCP602 = 5,4
Il est donc VITAL de compenser ces derives.. en faisant une
lecture à I Amps=0, soit sur demande.
via Terminal cde= "ZERO_AMPS", soit avec la
connaissance de l'environnement : ex: pas de demande de charge.
La Tension Batterie est aussi accumulée ,moyennée sur 8 valeurs,
sur l'entree EA1
Cette entree utilise -VREF (RA2 =VCC/2=2,5V) pour faire un
declage de mesure 2,5 à 5V pour 0 à 1023 points.
La tension maxi batterie sera considérée de 15V => diviseur
par 3 pour aller sur EA1
Le minima mesurable se retrouvant alors à 15.2=7,5V pour 0
points .. et 1023 points pour 15V
Pour affiner la mesure, rajout d'un coefficiant de
calibrationUbatt .. ici : Ubatt=7.6/1024.. au lieu de 7.5/1024
Il suffit de prendre la valeur entiere de la tension de batterie,
avec 14V comme limite, pour pouvoir definir un index
permettant de delimiter un pourcentage de la charge optimale , en
fonction de l'etat , en Volt, en cours .
De sorte à ne JAMAIS SURCHARGER la batterie
L'autorisation de charge pourrait etre permanente, vu que dans la
version definitive, seul le panneau solaire ,
pourrait recharger la batterie ! ce qui ne semble pas evident ou
possible avec un temps d'automne/hiver.
C'est pourquoi il est prevu ce mode Chargeur Secteur ..
Le MCU reste alimenté en permanence via le convertisseur DC/DC
à decoupage 12V/6V DC
Suivit d'un regulateur LM2940-5 Low drop regulator voltage pour
le +5V VCC PIC et autres..
2 diodes anti retour empeche les sources de tensions de se
melanger..
ARROSAGE PLANTES
Projet Parallele
Le LCD est un LCD 4x20 Chars piloté en I2C via un module PigBack
PCF8754A
Sur le Bus I2C, une RTC DS1307 ( et une EEPROM 24C32 !)
Lien utile pour VERIFIER QUI
EST SUR LE BUS .
Brouillon du projet :
Capteur à fouche de secheresse :
Test Capteur SX300 LM393 : mesure analogique et seuil de
secheresse ?
Secheresse, car la sortie A0 (analogique) AUGMENTE avec la
secheresse !
connecté sur Entree ANA RA3 PIC18F26K22 .
Simulation avec R aux bornes de la fourche (Infini = 100% sec)
R | EA3 |
infini | 1023 |
270K | 987 |
100K | 868 |
47K | 676 |
22K | 397 |
15K | 200 |
<10K | 0 |
au final
.. à proscrire car en DC
La Pompe :
Mesure d'Humidité pour Arrosage Plantes
Capteur de mesure Humidité et Temperature , liaison au PIC en
mode 1 fil (O.W.S).
Les infos sont collectées sur la pin RC0.
![]() |
![]() |
DHT22 AM2302 Mesure Temperature Ambiant et Taux Humidite |
Datasheet composant
La version simplifié .. test de ce capteur
_18F26K22_DHT_Humidity_Temper_170906.zip
Model AM2302 | |
Power supply Output signal digital signal Sensing element Operating range humidity Accuracy Resolution or sensitivity Repeatability Humidity Long-term Interchangeability fully |
3.3-5.5V DC via 1-wire bus (OWS) Polymer humidity capacitor 0-100%RH ; temperature -40~80Celsius humidity +-2% RH(Max +-5%RH); temperature +-0.5Celsius humidity 0.1% RH; temperature 0.1Celsius humidity +-1% RH; temperature +-0.2Celsius hysteresis +-0.3%RH Stability +-0.5% RH/year interchangeable |
Pin Out |
with 0.1" spacing |
1 |
VCC (3 to 5V power) Data out Not connected Ground |
PROBLEMES RENCONTRES :
Un test sur 24H00 du programme d'application _18F26K22_Irrigation_Control_170924.c
Montre que le programme BUG .. se fige , avec dernieres valeurs
affichées OK sur le LCD et affichées OK sur le Terminal PC
Le PIC ne fait pas de RESET !
..
Premieres verif :
Suspicion sur STACK POINTER .. dans la gestion
LCD I2C , le stack pointer va jusqu'à une profondeur de 7/7
vu sur la fenetre compilateur MikroC Pro -> Statistics
Bien que je ne vois pas de RESET associé à un
eventuel debordement de pile ..
la partie de programme incriminée:
void LCD_Chr(unsigned char L,unsigned char Col,unsigned char d)
{
//Go_To_Line_Col(L,Col); // <-- OLD appel de fonction
imbriqué avec LCD_Cmd
LCD_Cmd(LINE[L]+Col-1); // New pas d'appel imbriqué
Delay_ms(10);
LCD_putch(d);
}
l'appel à GO_TO_Line est remplacé par un simpe adressage
indexé via la table
unsigned char LINE[]={0x00,0x80,0xC0,0x94,0xD4};
// dummy,line1,2,3,4
j'ai maintenant un current depth de 6/6 au lieu de 7/7
.. mais cela ne résoud RIEN .
Plantage en moins d' 1heure
une autre piste :
en mettant un simple TXRE='@'; dans le debut de traitement d'interruption
UART RX
void Interrupt() iv 0x0008 ics ICS_AUTO
{ Drapeaux.Gie=1;
if (( RC1IF_bit==1) && (RC1IE_bit==1) )
{
TXREG='@';
c1 = UART1_Read();
// TXREG1=c1;
je m'apercois que j'ai plein d'appel interrupt UART RX , alors
que je n'envoie RIEN au clavier
ma liaison UART RX pinRC7 était restée flottante au bout d'un
fil de 10 cm ! et non raccordée au cable PROLIC
Le rebranchement de cette liaison supprime ce probleme !.. ( ou
en mettant une pullup R=4,7K vers +VCC)
A nouveau un plantage en moins de
24H00 ..
En cherchant dans le module annexe
traitant le capteur DTH22
j'ai trouvé une autre zone de programme pouvant provoquer un
blocage programme ,et sans RESET.
dans ma fonction lecture DTH22 humidite et temperature ..
où on attend le changement d'état d'un bit, provenant du Sensor
DTH22
dans une lecture boucle sans fin while ..
unsigned char DHT22_Read_Byte(void) //
lecture en moins de 2mS
{
unsigned char i,j;
TimeOut=0;
for(j = 0; j < 8; j++)
{
while(!DHT22_Pin);
lieu propice à un blocage complet de programme , si le SENSOR ne
repond pas correctement
=> correctif
Rajout d'un TimeOut, par simple comptage du nombre de boucle
Avec l'analyser SQ50 .. je peux voir que la lecture d'un byte se
fait en ~ 1mS
je suis partit donc sur un maxima de 400 boucles (minima de 400x0,25=100µS
par etat bit)
#define TIME_OUT_BIT 400 // at 16Mhz
unsigned char DHT22_Read_Byte(void) // lecture en moins de 2mS
{
unsigned char i,j;
TimeOut=0;
for(j = 0; j < 8; j++)
{
while(!DHT22_Pin)
{
TimeOut++;
if (TimeOut>=TIME_OUT_BIT) break; // timeout 400*0.25=100µS
at 16Mhz
};
Delay_us(50);
Il n'y a plus de possibilté de rester
coincé dans un while..
La trame de lecture Byte DHT22:
L'outil SQ50 m'a permis de mettre en evidence la necessité d'avoir
un temps mort de plus de 45mS entre les mesures .;
mais ne peut pas resoudre un blocage intempestif .. ( du moins,
à ma connaissance du moment !)
Un compteur comptabilise le nombre de debordements .. et est
razé ensuite toute les 8 boucles .
si compteur >0, affichage de celui ci sur LCD et UART display,
à la place de l'Indice , pour TRACER l'evenement
si la contremesure est bonne, il ne devrait PLUS y avoir de
plantage
Au sujet de ce DTH22 AM2302 et au vu de sa
datasheet
IL y a un truc qui me chiffonne dans la spec sheet du
DTH22 , page 9, paragraph 7. ..
où il est question d'une periode de lecture > 2 sec ( et 1,7
seconde pour le AM2303) !
J'ai deja remarqué que je ne peux pas relire le DTH22 avec un
intervalle de temps < 480mS
sinon j'ai des messages de defauts.."Pas de reponse DTH22"
J'ai du inserer une Tempo de 250mS au sein de ma boucle
principale .. qui globalement s'execute en ~450mS
et lancer cette mesure 1 fois sur 4.
// Attente de xxxms =Timeout Timer0 OU sur arrivée String sur RX
UART1
// AM2303 *Collecting period should be : >1.7 second.
// AM2302 *Collecting period should be : >2 second.
Arme_Timer0_250mS();
while ((Flag_Buffer1==0) && (Flag_Timer0==0)) ;
mais de la à parler de 2sec ..
2000mS ! .. sans aucune explication..
Les Mesures ANA sont accumulées pendant 8 boucles (secondaires)
pour en faire la moyenne ,
De ce fait l'affichage des mesures ANA LCD est rafraichi dans la
BOUCLE PRINCIPALE , donc toute les 3,5sec, ainsi que l'affichage
UART
Seule la mesure d'Humidité est rafraichie toute les 4 boucles ,
soit 2 fois dans une boucle principale ( intervalle de
temps > 1,7sec)
La valeur de l'indice en cours , permet l'alternance d'affichage
de DTH22 data ou Dat Time , si il est pair ou impair.
Avvec cet interval de mesure > 1,7sec .. 4 timeout bit sur
11522 mesures .. c'est OK
Display Terminal :
version du projet MikroC 2017:
_18F26K22_Irrigation_Control_170925.zip
![]() |
_lib_Math.mcl" " _lib_MathDouble.mcl" " _lib_System.mcl" " _lib_Delays.mcl" " _lib_CType.mcl" " _lib_CString.mcl" " _lib_CStdlib.mcl" " _lib_CMath.mcl" " _lib_Conversions.mcl" " _lib_OneWire.mcl" " _lib_ADC_K22_B.mcl" " _lib_EEPROM_1024.mcl" " _lib_I2C_c34b12.mcl" " _lib_PWM_c21.mcl" " _lib_UART_c67b67.mcl" Available RAM: 3875 [bytes],
|
Project Manager | Librairies MikroC utilisées |
Recapitulatif :
Type de mesure | Sensor | interface | MCU | gamme | pts | ||
Tension Batterie | diviseur R3/R4=1/4 | EA1 | 7.5-15V | 0 - 1023 | |||
Tension Solar Panel | diviseur R5/R6=1/3 | EA3 | 10-20V | 0 - 1023 | |||
Courant de Charge / decharge | ACS712-5 | AOP | EA0 | +- 2,5A | +- 512 | ||
Taux d'ensoleillement | LDDR | EA4 | 0-100% | 0 - 1023 | |||
Reference VCC/2 | diviseur R1/R2=1/2 | EA2 | +2.5V | 512 | |||
Capteur Humidite SOL | SB LM393 | EAx | 0 - 1023 | ||||
Temperature Exterieur | DHT22 | OWS | -10 à -45°C | ||||
Humidite | DTH22 | OWS | 0 à 100% | ||||
Temperature | DS18B20 | OWS | -10 à +45 |
Application Android ( Appinventor 2):
![]() |
![]() |
Designer | control block |
Fichier Application AI2 : Arrosage_Auto_170829.aia
Fichier executable Andorid : Arrosage_Auto_170829.apk
La suite ...
Version Mai/Juin 2018
Le Schema et le Prototype :
rev 15/06/2018
Winschem : Irrigation_Plantes_18F26K22_180615.wh5
au format A3 : Irrigation_Plantes_schema_18F26K22_180615.pdf
Modif sur RTC DS1307 , pour avoir SQWE 1Hz sur
JP2 au lieu de JP1
La pin SC JP2 va sur une reserve d'emplacement pour un capteur DS18B20
..qui n'est pas installé !
La pastille est donc libre , raccordée à SC.. il suffit de
relier la pastille de sortie JP2 , avec celle ci.
pour avoir SQWE 1HZ sur Pin 1 JP2.
pour les tests , un potar 10 tours remplace / simule la mesure
de courant ...
La tension batterie est simulée avec une alim externe ajustable
10V à 15V
Affectaction des pins MCU
18F26K22 (DIP28 etroit )
Pin 28 RB7 -----------------ICSP Data .. keept free Pin 27 RB6 -----------------ICSP Clock ..keept free Pin 26 RB5 BP5 Pin 25 RB4 BP4 Pin 24 RB3 -----> PWM Output CCP3 (not used) Pin 23 RB2 BP2 Pin 22 RB1 BP1 Pin 21 RB0 * option Interrupt pin for 5 BP keyboard <--- OR function for 5 PB panel Pin 20 VDD --------------+5V Pin 19 Vss ---------Gnd --0V Pin 18 RC7 RX UART <-- Keyboard * mettre pull up de 2,7K si alim 3,6V et cordon Prolic 5V Pin 17 RC6 TX UART --> Display * mettre une pull up de 2.7 si RX non utilisée Pin 16 RC5 Pin 15 RC4 SDA <-----------------> RTC 1307 --- EEPROM 24C32 ---- LCD 4x20 (avec pull-up) Pin 14 RC3 SCL -------------------> RTC 1307 -----EEPROM 24C32 (not used) Pin 13 RC2 ---------> PWM2 10bits output --> cde TR et MOSFET Pin 12 RC1 ---------> Synchro SQ50 Pin 11 RC0 <-------Humidity OWS --DTH22 AM2302 Pin 10 RA6 Pin 9 RA7 Pin 8 VSS --------- Vss ---Gnd 0V Pin 7 RA5 <------- Forcage RTC DS1307 (1ere Init!) Pin 6 RA4 ---------> Output --Pump Relay--+Vcc Pin 5 RA3 <-----* Analog Input EA3 = Fourche Mesure de Secheresse Pin 4 RA2 <---- Analog Input EA2 = VCC/2 Pin 3 RA1 <-----Analog input EA1 = U batterie Pin 2 RA0 <------Analog Input EA0 = Mesure de courant Pin 1 RE3 MCLR Reset --- 5,2k--- Pullup et PRGM --------ICSP PGRM |
Considerations Hardwares :
* Capteur à fourche "Secheresse" |
* Remise en cause du capteur à fourche "Secheresse"
Capteur SX300 LM393 mesure et seuil Humidité qui fonction en DC ( courant continu) et qui finira ,par electrolyse à se blinder . Je recherche une solution pour alimenter/utiliser cette fourche en alternatif |
Capteur Temperature et Humidite DHT11 | * suite aleas de mesure , et delai de 2 sec annoncé
sur datasheet Mesure DTH22 effecturée toutes les 4 boucles soit 540x4=2160mS > 2 sec Rajout d'un indicateur de fiabilité : Status : Nb Defaut DTH22= 0 Tres bonne fiabilité si on tient compte du delai inter-mesures |
Module RTC DS1307 | Rajout d'une led sur la sortie 1Hz => rtemoin de
bon fonctionnement Entree PIC prevu pour la 1ere Init ou si changement de pile Aleas constaté lors du rajout LCD I2C .. because doublement des R pull up sur SCL et SDA 2x2,7K en parralele => trop faible . enlevé les 2 R pull up puisque le LCD en est DEJA EQUIPé. MAJ via terminal ..OK |
Mesure de courant via AC712 | 180mV/Amp , probleme majeur = derive du zero qui est
à VCC/2 Usage de la mesure VCC/2 via une autre entree, pour annuler l'offset => insuffisant Moyennage de 8 mesures Ana Auto Zero : Coupure alim Solar panel via MOSFET pour mesurer la sortie ACS712 et stocker cet offset en EEPROM. Ensuite la mesure utilise cet offset pour ramener la mesure dans le bon quadran 0 à +2,5A de charge batterie. On ne mesure plus le courant debité par la batterie. L'offset en EEPROM PIC est restitué en debut de programme. |
Mesure de UBat | La tension Batterie est mesurée via un pont diviseur
2,7k+ (2x2,7k en parrallele), diviseur par 3 soit pour 7,5 à 15V=> 2,5 à 5V .... #define Calibre_UBat 7.6/1024.0 , Effet Loupe: EA3 recoit +VCC/2 soit +2,5V pour calibrer la mesure de EA1 UBat entre 2,50 et 5,00V EA3 devenant -Vref pour l'ADC. le +VREF etant +VCC |
Mesure de Niveau | Etude mesure de niveau capactive , avec un PIC 12F ou
16F ou avec un LM311 oscillateur d'apres les teste Mesure LC Meter 16F1847 ....à suivre |
Explications & Modifications:
Environnemen t: MikroC Pro 7.2.0
A suivre ...
FOSC interne 8x4=32MHz
LCD 4x20 en I2C
Regulation du courant de charge batterie :
Lors de l'eclairement maxi du Panneau solaire, la tension de
sortie de celui ci peut monter au dessus de 20V
Sa capacite de courant tourne alors autours de 1,7A . Pour une
batterie de 7AH, le courant de charge recommandé est de 0,7A.
Un mosfet commandé en PWM sur 10 bits (0 à 100%) est intercalé
entre la sortie Panneau Solaire et la batterie , pour regler le
courant de charge.
La tension batterie peut evoluer , en gros de 11V mini à 14 V
Maxi (valeur entiere de Volt)
J'utilise une table indexé par UBatt -11 => ce qui donne 4
valeurs possible d'ouverture de passage pour le courant venat du
P.S.
const char ICharge_7AH=0.7; //
7AH/10=0,7A
const unsigned char Charge_Table[]={4,40,70,100};
Index= 14 - Ent(Ubat)
V | 0 | 1 | 2 | 3 |
% | 4 | 40 | 70 | 100 |
si VBat=11V .. on a besoin de recharger au maxi .. 100% de 0,7A
La mesure de courant, faite par l'ACS712 est comparée à la
charge necessaire ..et suivant l'ecart , j'augmente ou
diminue PROPORTIONNELLEMENT le % PWM de +-1% à chaque boucle (
periode boucle T=3 sec)
Cette boucle de regulation , de type
Proportionnelle Integrale, lente , donne satisfaction.
Elle sert meme , dans le cas ou le panneau solaire est remplacé
par un chargeur (Alim DC 12V continu (19V de crete))
Mosfet Canal P employé pour regulation charge batterie.
voir section principe_charge_batterie
Controle PWM:
La Liaison UART 19200,8,N,1 avec un terminal PC
(peut eventuellement se faire SANS FIL , en connectant le module
HC06 et BlueSoleil + cle Bluetooth sur le PC)
La reception est gérée par interruption sur UART RX
Une fenetre temporelle minimale de 250mS , dans la boucle
principale du programme
permet de faciliter la capture, sans perturber le reste. et
deroute le programme sur la gestion des messages
si il y a activation du flag de reception
Bien que le flag puisse etre aussi activé dans d'autres portions
du programme principal.
Arme_Timer0_250mS(); // waiting delay
while ((Flag_Buffer1==0) && (Flag_Timer0==0)) ;
if (Flag_Buffer1==1)Check_Messages_from_UART();
Liste des commandes possibles : | ||
HELP | Affiche la Liste des commandes | |
Zero_Amps | Mesure l'offset ACS712 et le stoke en EEPROM | |
Status | Etat COM du capteur DTH22 | |
Manu | controle direct pompe possible Mode=0 | |
Auto | Controle Pompe F(parametres) Mode=1 | |
AAF x | x=1 =Arrosage Automatique Forcé (sans tenir compte des capteurs) | |
Ppe 0 | ou 1, 1=Marche Pompe (en manuel seulement!) | |
Duree xx | Durre de marche pompe avec xx 01 à 25 Mn | |
Verbose x | 0=mode Muet 1=Mode Bavard | |
Charge x | 1=Charge batterie par Panel ,0= pas de charge | |
Plage=07;08;19;20; | Plages horaire arrosage 07H..8H00 ou 19H..20H | |
Show Plage | visu palge Horaire sur LCD (et terminal si Bavard) | |
U;28;05;18;01;10;38# | Sequence pour MAJ RTC : 28 Mai 2018 Lundi 10H38 |
En automatique Auto et AAF=0
La commande de la pompe est assujettie à Toutes les conditions
suivantes:
Mode AUO ...... Auto_Mode==1
Plage Horaire OK ............. OK_To_Water=1;
Taux Humidité < 60% ...... RH<600
Marche AUto Forcée ....AAF=0
1 seule fois par jour .. Once=0
sinon :
En Marche Auto Forcée......AAF=1
uniquement la condition Plage Horaire OK ............. OK_To_Water=1;
Les plages horaires sont définies en heures pleines.
Show Plage: Affichage double : en Mn et en HH sur le LCD.
Un seul arrosage est possible (soit le matin, sit le soir),
géré par la variable Once
à suivre ... stockage en Eeprom Plage
Horaire ..
En mode Manuel, possibilite de commander
directement la Pompe ..à n'importe quel momment.
Le LCD affiche la Minute en cours TMn ( varie de 0000 à 1439 )
Un indice , correspondant à un compteur de boucle principale du
programme, est affiché aussi sur le LCD
En mode Bavard la valeur de EA2 ( mesure de VCC/2) est affichée
à la place de l'indice.
Suite gros plantage momentané : impression
de 65535 caracteres '.' sur le terminal, apres Relecture de la
RTC !
Ce probleme ne pouvait apparaitre que le Lundi , et en mode
Bavard activé
La cause :
Mauvaise utilisation de la valeur de jS jour
Semaine , dans la RTC (valeur jS 01 à 07 )
Mais avec 07 , le pointeur table JourSemaine deborde .. car la
table va de 0 à 6
avec 0=Dimanche , 7 =Samedi
il faut donc utilser jS-1 comme indice .
.Heureusement, l'usage du jour de la semaine est traité en
principe, hors des sub routines RTC .
Mode Muet (ou presque !) : ligne affichée de 61 caracteres,
exemple
Autoriz=0;Mode=1;Ppe=0;Ar= 0;Tp= 26.0°C;Hu=
63.0%;Amp=+0.08;
Mode Bavard : ligne de 143 caracteres
Bavard OK
Lundi 28/05/18;14:10:52;Autoriz=0;Mode=1;Ppe=0;Ar=
0;Tp= 26.0°C;Hu= 63.0%;E0= 531;Amp=+0.09;EA2= 591 E1= 612;E3=
690;TMn= 850;UB= 12.04V
Software :
le projet zipé : _Irrigation_Solar_system_180530.zip
le source principal : _18F26K22_Irrigation_Control_180529.c
Mesure Humidite et temperature : DHT22_AM2302_Sensor.c
Afficheur LCD 4x20 en I2C : LCD_4x20_I2C.c
Gestion RTC DS1307 en I2C : Tiny_RTC_DS1307.c
Chargeur: 18F26K22_Irrigation_UART_ADC_RTC1307_DHT22_180528.hex
Montage composants et
soudures....avec le petit fer 8W USB !
*correctif schema circuit reset => petit strap sous le circuit
imprimé
*Impossible de monter le PIC sur un support Tulipe, because PINS
portB touche le support => PIC monté direct
*Condo de decouplage trop pres de la RTC .. mais implanté quand
meme .
...Suite 2019
le Projet était au point mort , à cause de la mauvaise
fiabilité/precision de la mesure de courant avec l' ACS712
J'avais donc commandé fin 2018 des INA219 ... mais circuit
intégré (CMS) vraiment trop petit !
j'ai donc recommandé ce mois ci (MARS 2109) des modules
INA219 ,
lié en I2C au PIC (au lieu de Analogique).. mesure le COURANT ET
LA TENSION !
ce module parait tres performant
Allez, on voit ça !
lien
sur TEST module INA219 avec un PIC18F46K22 ..(ou n'importe
quel PIC avec un I2C hardware ..!)
La suite
Mise en oeuvre pour l'été ..... conecté avec Panneau Solar,
Batterie et pompe .. + 4 bacs de bambous
Retour à l'index general