Les composants sont :
1 PIC 16F628A
2 led
2 220 ohms. résistance
1 68K ohm. résistance
1 BC237 transistor
1 diode 1N4148
1 relais de courant de 12 volts RA12W-K
1 bouton poussoir
1 régulateur 7805 de dc / dc
1 1000 uf condensateur
1 100 uf condensateur
2 bornes avec 2 trous y 1 terminal avec 3 trous.
2 doubles bandes de cavaliers y 6 trois broches
1 alimentation 12 V. y 0, 5 a.
1 capteur de niveau d’eau
1 pompe à eau électrique
Avec cavaliers bande vous pouvez modifier l’intervalle d’arrosage et avec les autres cavaliers bande vous pouvez changer la durabilité d’arrosage. Aussi, vous pouvez tester le système avec un bouton. Lorsque le niveau d’eau est faible, le capteur détecte qu'il et le commandant de bord n’allument la pompe à eau pour le protéger.
Le code est écrit en C pour CCS :
main.h
---------------------------------------------------------------------------------------------------------------------
#include < 16F628A.h >
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, aucun CLKOUT
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code ne pas protégé contre la lecture
#FUSES NOBROWNOUT //No réinitialisation de la chute de tension
#FUSES NOMCLR //Master clair code pin utilisé pour e/s
#FUSES NOLVP //No basse tension prgming, B3(PIC16) ou B5(PIC18) utilisé pour e/s
Protection de EE #FUSES NOCPD //No
#use delay(clock=4000000)
#use fast_io(A)
#use fast_io(B)
#define CUANTAS 15
---------------------------------------------------------------------------------------------------------------------
main.c
---------------------------------------------------------------------------------------------------------------------
#include « main.h »
inicio d’int = -1 ;
Int32 segundos = 0 ;
interrupciones int = CUANTAS ;
Int32 repeticiones [] = {7 * 24 * 3600, 3600 * 24 * 6, 5 * 24 * 3600, 4 * 24 * 3600, 3600 * 24 * 3, 2 * 24 * 3600, 24 * 3600, 12 * 3600} ;
Int16 duraciones [] = {16000 14000 12000, 10000, 8000, 6000, 4000, 2000} ;
#INT_RTCC
Sub cronometro()
{
Si (--interrupciones == 0)
{
++ segundos ;
interrupciones = CUANTAS ;
}
}
#INT_RB
Sub nivel()
{
delay_ms(20) ;
if(Input(PIN_B4) == 1)
{
output_high(PIN_A0) ;
output_low(PIN_A3) ;
}
d’autre
{
output_low(PIN_A0) ;
}
}
#INT_EXT
Sub empiece()
{
delay_ms(20) ;
if(Inicio == 0)
{
Inicio = 1 ;
}
}
Sub main()
{
int contador ;
set_timer0(0) ;
setup_timer_0 (RTCC_INTERNAL| RTCC_DIV_256) ;
setup_timer_1(T1_DISABLED) ;
setup_timer_2(T2_DISABLED,0,1) ;
setup_comparator(NC_NC_NC_NC) ;
setup_vref(false) ;
port_b_pullups(true) ;
set_tris_a(0) ;
output_low(PIN_A0) ;
output_low(PIN_A1) ;
output_low(PIN_A3) ;
enable_interrupts(INT_RTCC) ;
enable_interrupts(INT_RB) ;
enable_interrupts(INT_EXT) ;
enable_interrupts(Global) ;
delay_ms(1000) ;
Inicio = 0 ;
for(;;)
{
if(Inicio == 1)
{
disable_interrupts(INT_EXT) ;
pour (contador = 0; contador < 8; contador ++)
{
Si (contador % 2 == 0)
{
output_high(PIN_A1) ;
}
d’autre
{
output_low(PIN_A1) ;
}
delay_ms(1000) ;
}
if(Input(PIN_B4) == 0)
{
output_high(PIN_A1) ;
output_high(PIN_A3) ;
delay_ms(duraciones[input_b() >> 5]) ;
}
output_low(PIN_A1) ;
output_low(PIN_A3) ;
enable_interrupts(INT_EXT) ;
delay_ms(1000) ;
interrupciones = CUANTAS ;
Segundos = 0 ;
Inicio = 0 ;
}
ElseIf (segundos > = repeticiones[(input_b() & 0x0F) >> 1])
{
Inicio = 1 ;
}
}
}
---------------------------------------------------------------------------------------------------------------------
Vous pouvez regarder le code source mieux dans http://www.sistemasorp.es/2011/02/07/sistema-de-riego-automatico/ (en espagnol)