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

Panneau Solaire Photovoltaique 20W 12V Polycristallin
Serie NX Camper Nautica NX20P
21,57 € HT
Réf. NX20P
EAN 7427509431457
Fabricant Energiasolare100
cellules encapsulées en EVA (l'éthylène acétate de vinyle)
pellicule de protection résistent aux agents atmosphériques
Cadre en aluminium
Puissance maximale Pmax 20 W
Tension circuit ouvert (Voc) 22,25 V
Courant de court-circuit (Isc) 1,34 A
Tension à Pmax (Vmp) 18 V
Courant à Pmax (Imp) 1,12 A
Cellules POLY
Dimensions 510 x 290 x 25 mm
Poids 2 Kg
_Systeme_Arrosage/images/Panneau_20W_12V.gif
donnees techniques click sur image pour details

*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 :


images/t_ACS712_MCP602_Amplification.gif
   


* 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.

images/t_Test_Cde_PWM_High_side.gif Mosfet_IRFZ914_P_Pinout.jpg
Test Commande High Side via MOSFET canal P Pinout MOSFET canal N


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

images/t_Test_Charging_battery_by_PWM_170918.gif

*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)


images/t_Danger_Oscillo_PICKIT2_170916.gif
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

images/t_Solar_System_Schem_driving_Both_Panel_and_Charger_170922.gif

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

images/t_Algo_controle_Amps_PWM10B.gif

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

images/t_Proto_DTH22_test_170906.gif

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 :

images/t_Solar_system_brouillon_171001.gif


Capteur à fouche de secheresse :

images/t_Detecteur_Humidite_SBC_LM393.gif


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 :

images/t_Pompe_DC808_12V_4-5W.gif



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
2
3
4

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

images/t_PB_Stack_Full_enabled.gif
   

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:
images/t_DHT_AM2302_Humid_Temp_Sensor_SQA_Trame.gif

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 :


images/t_Display_Terminal_170924.gif





version du projet MikroC 2017:

_18F26K22_Irrigation_Control_170925.zip

images/Projet_Manager_18F26K22_Irrigation_170925.gif _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],
Available ROM: 65536 [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.


images/t_RTC_DS1307_Module_details.gif

images/t_irrigation_system_Schema_180615.gif images/t_Proto_Arrosage_180528.gif
schema prototype

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



REALISATION C.I.

14/06/2018

images/t_Irrigation_system_C_I_180601_rev.gif images/t_Irrigation_system_C_I_realise_180614.gif
etude (C) Geamel Realistaion (C) Geamel 14/06/2018



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 .

images/t_Arrosage_Auto_PIC18F_Circuit_Imprime_composants_180615.gif images/t_Arrosage_Auto_PIC18F_Montage_Run_180615.gif
details vue composants Systeme run ( sans le panel solar,ni batterie, ni pompe)



...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



../common/GIF/mylogo1.jpg


Retour à l'index general