Automatisk bevattning system
Komponenterna är:
1 PIC 16F628A
2 ledde
2 220 ohm. resistor
1 68K ohm. resistor
1 BC237 transistor
1 1N4148 diod
1 12 volt RA12W-K relay
1 tryckknapp
1 7805 dc-dc regulator
1 1000 uf kondensator
1 100 uf kondensator
2 terminaler med 2 hål y 1 terminal med 3 hål.
2 dubbla band av tre stift y 6 byglar
1 strömkälla 12 V. y 0, 5A.
1 vattennivån sensor
1 elektrisk vattenpump
Med byglar kan band kan du ändra vattning intervall och med de andra hopparna band du ändra vattning hållbarhet. Du kan också testa systemet med en knapp. När vattennivån är låg, känner sensorn det och pic inte slå på vattenpumpen att skydda den.
Koden är skriven i C för CCS:
Main.h
---------------------------------------------------------------------------------------------------------------------
#include < 16F628A.h >
#FUSES NOWDT //No titta på hund Timer
#FUSES INTRC_IO //Internal RC Osc, ingen CLKOUT
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code inte skyddas från behandlingen
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOMCLR //Master klart pin används för I/O
#FUSES NOLVP //No låg spänning prgming, B3(PIC16) eller B5(PIC18) används för I/O
#FUSES NOCPD //No EE skydd
#use delay(clock=4000000)
#use fast_io(A)
#use fast_io(B)
#define CUANTAS 15
---------------------------------------------------------------------------------------------------------------------
Main.c
---------------------------------------------------------------------------------------------------------------------
#include "main.h"
int inicio = -1;
Int32 segundos = 0;
int interrupciones = CUANTAS;
Int32 repeticiones [] = {7 * 24 * 3600, 6 * 24 * 3600, 5 * 24 * 3600, 4 * 24 * 3600, 3 * 24 * 3600, 2 * 24 * 3600, 24 * 3600, 12 * 3600};
Int16 duraciones [] = {16000, 14000, 12000, 10000, 8000, 6000, 4000, 2000};
#INT_RTCC
void cronometro()
{
om (--interrupciones == 0)
{
++ segundos;
interrupciones = CUANTAS;
}
}
#INT_RB
void nivel()
{
delay_ms(20);
IF(input(PIN_B4) == 1)
{
output_high(PIN_A0);
output_low(PIN_A3);
}
annat
{
output_low(PIN_A0);
}
}
#INT_EXT
void empiece()
{
delay_ms(20);
IF(Inicio == 0)
{
Inicio = 1;
}
}
void 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);
för (contador = 0; contador < 8; contador ++)
{
om (contador % 2 == 0)
{
output_high(PIN_A1);
}
annat
{
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;
}
annars om (segundos > = repeticiones[(input_b() & 0x0F) >> 1])
{
Inicio = 1;
}
}
}
---------------------------------------------------------------------------------------------------------------------
Du kan titta på källkoden bättre i http://www.sistemasorp.es/2011/02/07/sistema-de-riego-automatico/ (spanska)