Si tenemos un jardín, nunca viene mal disponer de un automatismo que lo riegue automáticamente a una hora que le especifiquemos. Por ello, voy a presentar en esta entrada un simple pero funcional circuito para poder automatizar dicha tarea.
Para ello vamos a utilizar un microcontralador de la familia Microchip: el PIC12F683 (DataSheet). Se trata de un pequeño microcontrolador CMOS de 8 bits y 8 pines que será muy útil para este proyecto. Este microcontrolador llevará la cuenta del tiempo con ayuda de un cristal de cuarzo de 8 MHz, y conmutará una electro-válvula para abrir o cerrar el paso de agua a los aspersores. Para verlo de una manera más sencilla, dividimos el circuito en varias partes:
- La unidad central:
Aquí se muestra como está conectado el cristal de cuarzo en el microcontrolador, así como el puerto ICSP para poder programarlo una vez esté montado (¿Cómo programar un PIC?):
- Entradas y salidas:
Utilizaremos un relé de estado sólido para poder conmutar una electro-válvula a 230V AC desde el microcontrolador. Para ello necesitaremos un optoacoplador MOC3022 (DataSheet), un triac de potencia BT136 (DataSheet) y un par de resistencias. Un LED de 3mm en serie con el LED del optoacoplador, indicará el estado del relé.
Como elemento de entrada, dispondremos de un pulsador para realizar el reset externo del microcontrolador. Una resistencia de Pull-Up mantiene en estado alto el pin durante el funcionamiento normal.
- Fuente de alimentación:
Dado que el sistema lleva la cuenta del tiempo, si por alguna casualidad se quedase sin energía, se perdería la cuenta de la hora; y en lugar de ser un riego programado de manera precisa, podría convertirse en una ducha si nos pillase en ese momento en el jardín. Por ello, se dispone de un sistema de alimentación ininterrumpida.
Utilizando un par de simples diodos rectificadores y un regulador lineal LM78L05 (DataSheet), se pueden utilizar dos lineas de alimentación. En una conectaremos una fuente conmutada que transforme los 230V AC a 12V DC; y en la segunda conectaremos una pila de 9V. De esta manera, mientras exista voltaje de la fuente, el diodo de la pila queda totalmente bloqueado (ya que está polarizado con una diferencia de potencial inversa) y no gasta nada de la pila. Pero si por alguna razón la fuente deja de suministrar voltaje, entraría en funcionamiento la pila manteniendo constante la cuenta del tiempo.
Una vez unidas todas las partes vistas anteriormente, queda el siguiente circuito:
PCB disponible en: Layout_Download
Una vez realizado el circuito, será necesario cargar el programa en el microcontrolador:
//
//
// Temporizador para automatizar
// el riego de un jardín mediante
// una electrovalvula a 230V
// controlada mediante un triac
// y un optoacoplador con fototriac.
// El algoritmo de la base de tiempo
// es exacto, por lo tanto la precisión
// depende solo del cristal de cuarzo
// (estos tienen una precisión muy exacta).
//
//
// PIC12F683
// Uso del TIMER1
//
// Copyright (c) 2016 Aaron G.
// All rights reserved.
#include <12f683.h> // Dispositivo
#fuses hs,nowdt,mclr,noprotect,nocpd,nobrownout
#define hora_inicio 7 // Hora de inicio
#define minuto_inicio 0 // Minuto de inicio
#define hora_final 7 // Hora de paro
#define minuto_final 30 // Minuto de paro
#use delay(xtal=8000000) // Frecuencia de trabajo
#define freq_inst 2000000 // Frecuencia Timer1
#define rele pin_a1
int8 Hora=13,Minuto=5,Segundos=30; // Especificar hora actual
int32 Ticker;
// Algoritmo de la base de tiempo
#int_TIMER1
void TIMER1_isr(void){
Ticker-=65536;
if(Ticker<65536){
Ticker+=freq_inst;
Segundos++;
if(Segundos==60){
Minuto++;
Segundos=0;
if(Minuto==60){
Hora++;
Minuto=0;
if(Hora==24) Hora=0;
}
}
}
}
// Programa principal
void main(void){
setup_comparator(nc_nc_nc_nc);
set_tris_a(0x08);
Ticker=freq_inst;
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
output_a(0);
while(1){
if((Hora==hora_inicio)&&(Minuto==minuto_inicio)) output_high(rele);
if((Hora==hora_final)&&(Minuto==minuto_final)) output_low(rele);
}
}
//
// Temporizador para automatizar
// el riego de un jardín mediante
// una electrovalvula a 230V
// controlada mediante un triac
// y un optoacoplador con fototriac.
// El algoritmo de la base de tiempo
// es exacto, por lo tanto la precisión
// depende solo del cristal de cuarzo
// (estos tienen una precisión muy exacta).
//
//
// PIC12F683
// Uso del TIMER1
//
// Copyright (c) 2016 Aaron G.
// All rights reserved.
#include <12f683.h> // Dispositivo
#fuses hs,nowdt,mclr,noprotect,nocpd,nobrownout
#define hora_inicio 7 // Hora de inicio
#define minuto_inicio 0 // Minuto de inicio
#define hora_final 7 // Hora de paro
#define minuto_final 30 // Minuto de paro
#use delay(xtal=8000000) // Frecuencia de trabajo
#define freq_inst 2000000 // Frecuencia Timer1
#define rele pin_a1
int8 Hora=13,Minuto=5,Segundos=30; // Especificar hora actual
int32 Ticker;
// Algoritmo de la base de tiempo
#int_TIMER1
void TIMER1_isr(void){
Ticker-=65536;
if(Ticker<65536){
Ticker+=freq_inst;
Segundos++;
if(Segundos==60){
Minuto++;
Segundos=0;
if(Minuto==60){
Hora++;
Minuto=0;
if(Hora==24) Hora=0;
}
}
}
}
// Programa principal
void main(void){
setup_comparator(nc_nc_nc_nc);
set_tris_a(0x08);
Ticker=freq_inst;
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
output_a(0);
while(1){
if((Hora==hora_inicio)&&(Minuto==minuto_inicio)) output_high(rele);
if((Hora==hora_final)&&(Minuto==minuto_final)) output_low(rele);
}
}
El programa se basa en la interrupción del Timer1. El algoritmo de la base de tiempo es exacto, por lo tanto el único error que puede haber es el del cristal de cuarzo.
Al inicio del programa se establecen las definiciones de la hora a la que queremos que se inicie el riego y la hora a la que queremos que finalice (todo en formato de 24h). Se establecen también las variables de la hora actual, es decir, hay que especificar la hora a la que comenzaremos a alimentar el circuito. Para ello es necesario poner unos minutos más de la hora actual para tener tiempo de compilar y programar el firmware; y cuando sea la hora que hemos especificado, bastará con pulsar el botón de reset para que el microcontrolador empiece a contar desde ese momento.
No hay comentarios:
Publicar un comentario