Temporizador diario programable
Necesitaba usar un temporizador, para operar una pequeña bomba de niebla para un pequeño invernadero, programable de la siguiente manera:
1): activo desde horas, a horas durante todo el día.
2): activación a intervalos programables.
3): Bomba activa durante un tiempo específico.
Tiré lo que necesitaba en papel:

Existen en el mercado temporizadores con disco programador que permiten una programación similar, pero no son tan precisos como me gustaría, por ejemplo tengo uno que tiene pasos de 15 minutos o 4 selectores cada hora. No es lo que necesito.
entonces, como se mencionó, papel y boli, y comienzo a definir las partes principales que compondrán el temporizador.
FOTO: es exagerado, mucha memoria flash, pero un número adecuado de pines: el probado 16F876 va bien.
LCD: en primis, Pensé en el clásico 16×2 pero luego opté por un 16×4 para una visualización completa de los parámetros ajustados.
Claramente debe haber un reloj que mantenga la hora incluso en caso de un corte de energía.
Este es el primer problema: Podría usar la EEprom interna y escribir horas y minutos, pero cuando regresó la energía, el tiempo estaría mal: idea descartada.
Segunda solución, mantenga siempre el PIC encendido y reinicialice la pantalla LCD en cada reinicio…. Necesitaría una batería recargable lo suficientemente grande con los problemas asociados: idea descartada
En un proyecto de hace unos años, Había usado una batería que me mantuvo con energía durante todo el circuito., pero no me parece el caso: batería que consta de 6 stilo 1,5V, no tienen una gran duración. Esta solucion tambien, rechazado.
Tengo algunos RTC en el cajón (Reloj en tiempo real) tipo DS1307 nunca utilizado, ha llegado el momento de usarlos.
Para simplificar, empiezo a buscar en la red ejemplos de uso de este RTC y hay muchos: todos, sin embargo, tienen la característica de que la programación de la hora y el calendario, tiene que hacerse en el programa luego, una vez completado, encaja en el PIC y desde allí. No me gusta, así que empiezo a trabajar en el software para poder configurarlo durante el uso..
Estableciste todo lo que necesitas, el proyecto empieza a tomar forma.

Después de mucho estudio SW y HW, como puedes ver en esta primera foto, aquí está el proyecto experimental del que nacerá la versión definitiva y funcional. Declaro que desde hace muchos años no hago circuitos impresos pero uso la base muy cómoda 1000 agujeros.
ESQUEMA:

Este es el esquema principal del proyecto..
Muy simple, PIC 16F876 con cuarzo de 4 MHz, RTC DS1307 con cristal de 32768Hz, Batería de litio CR2032 que alimenta el RTC en caso de un corte de energía, siete botones para las distintas funciones y un relé de 12 V con cambio de 10 / 15A para operar la bomba.
El PIC almacena toda la programación realizada en la EEprom interna precisamente la hora y minutos del inicio, hora y minutos de la parada o intervalo dentro del cual el temporizador está activo. Luego posteriormente almacena el carácter cíclico de la nebulización en minutos y por último la duración de la misma siempre en minutos.. Todo esto sucede al ingresar al MENÚ2 con el botón correspondiente. Señalo, que luego de programar el Flash de la foto con el archivo .hex, por lo tanto, en el primer uso, Programación TEMPORIZADOR DEBE llevarse a cabo.
Nella EEprom, también se almacenan otros parámetros. Por simplicidad, Calculo todo en minutos (horas x 60 + minutos) para iniciar y detener el temporizador. Empezando desde el principio, memorizado en la EEprom a partir de la dirección 16 (en decimal) este valor. Siendo una variable WORD (2 Bytes) el siguiente almacenamiento se llevará a cabo desde la ubicación 18 y así. La segunda memorización, contendrá el valor anterior, añadido al tiempo cíclico y así sucesivamente hasta que se alcanza el tiempo del temporizador de parada. El siguiente ejemplo:

A partir de estos ajustes con el temporizador activado desde 08:00 todos 22:30: nebulización cada 30 minutos con hora 10 acta.

Como se puede ver en el contrato de arrendamiento. 16 (10 en hexadecimele) tendremos la primera activación un 480 minutos u horas 08:00 y por supuesto despues 10 minutos se apaga. La siguiente activación (alquiler 18) pasará a 510 minutos o en 08:30 por 10 acta. Así que hasta el último valor 1320 o la 22:00. después de lo cual el temporizador se desactiva.
Esta información se puede ver claramente mirando la lista de programas.
Pasando all'HW, Q1 es el transistor que permitirá la activación del relé, Q2, por otro lado, permite que se encienda la luz de fondo de la pantalla. J1 es el conector ICSP utilizado para programar el PIC FLASH sin tener que extraerlo del circuito. Tenga en cuenta que en esta etapa, la fuente de alimentación del PIC debe ser proporcionada por el circuito del temporizador porque no lo tomo del PICKIT.
En el diagrama no he mostrado las fuentes de alimentación para la pantalla LCD: Son los siguientes:
ALFILER 1: GND
PIN2: VDD
PIN3 : debe estar conectado al cursor de un recortador de 10Kohm que a su vez está conectado entre tierra y VDD: ajusta el contraste de los personajes.
Yo PIN dal 7 Alabama 10 (D0-D4), deben estar conectados a tierra o dejarse libres: la pantalla LCD funciona con bus a 4 poco.
Veamos los botones ahora:
Empezando por la izquierda, encontramos el botón Ligero para encender / apagar la luz de fondo de la pantalla.
A continuación se muestra el botón MINUTERO que activa / desactiva el temporizador: el estado, se muestra en la segunda línea de la pantalla LCD con Ton o Toff. Naturalmente su Toff, el relé nunca se activará.
A continuación se muestra el botón Manual. Se utiliza para realizar pruebas., activar la bomba. Este comando se muestra mediante el led amarillo en el panel frontal.
Continuemos con dos botones + mi – que se utilizan durante las distintas programaciones de los dos menús.
los MENÚ2 la CONFIGURAR TEMPORIZADOR que le permite ingresar a la programación de los tiempos del temporizador. Funciona de la siguiente manera: premendolo, se accede a la programación del temporizador de la HORA DE INICIO. Si no tocas los botones + mi – presionando menu2 nuevamente cambia al temporizador de MINUTOS de INICIO. Si no cambian, avanzar con menu2 al temporizador STOP HOURS. Si no cambias, com menu2 continuar con el temporizador STOP MINUTES. Con menu2 continúas con PUMP EVERY: . Esta es la ciclicidad de actuación, luego pasamos a PUMP PER: cuál es la duración de la bomba en.
MENU2 termina aquí, pero recuerdo que SOLO en el primer inicio después de cargar el flash del PIC, la EEProm está vacía por lo que es necesario hacer un cambio con las teclas + mi – de uno de los valores. Si se ha realizado un cambio, todos los ajustes se almacenan en la EEprom, incluidos los datos calculados desde la ubicación de la memoria 16 como se describió anteriormente. Repito solo al primer comienzo.
El botón permanece MENÚ1 la Configurar reloj que se utiliza para configurar el reloj y el calendario del DS1307. Los ajustes se realizan de la misma forma que en el menú 2.. Primer día de la semana, luego el día del mes, el mes y finalmente el año. Continuar con horas y minutos. En este punto, al presionar MENU1, los datos se envían al RTC y desde allí comienza con segundos = 0. Este botón no sobresale del contenedor., su uso es bastante raro.
En la pantalla LCD, también encontramos otros dos símbolos al final de la tercera y cuarta línea: Un asterisco * indica que estamos dentro del rango START / STOP. A aparece en la cuarta línea # que indica el relé activo como el LED rojo en el frente del contenedor y el que está cerca de la salida (D4).

Esta es la fuente de alimentación, simple y filtrado ya que alimenta una bomba a través del relé.
Izquierda, está la entrada de 12Vdc donde conecto una fuente de alimentación de 12V 5A. Continúa de dos maneras, el primero a través del fusible 6.3A y a través del relé (cual es el comandado por el PIC). A continuación se muestran varios diodos FAST para intentar eliminar en la mayor medida posible las perturbaciones generadas por la activación de la bomba. D2 es un diodo doble en TO220 mientras que D3 lo conecté directamente al conector de salida. El LED D4, sirve para indicar con su encendido, que en la práctica el fusible F1 no está roto. La indicación del relé activo, también lo obtuvimos de la placa principal y se muestra en el panel frontal con un LED rojo. La segunda forma, comienza desde D1 y sirve para suministrar los 5VDC para todo el circuito a través de un LM7805 equipado con un pequeño disipador de calor. Una nota a destacar es precisamente la presencia de los grupos D1 y C3 que en el momento de la activación de la bomba, debe asegurarse de que cualquier caída de voltaje excesiva en la fuente de alimentación no perturbe el PIC.
SOFTWARE:
En cuanto al software, utilicé el Proton básico desde que conozco lo básico desde hace muchos años, desde los días de la ZX80, ZX81, Espectro, QL, Qbasic para dos y Visual basic para windows
Desde el siguiente enlace puedes descargar el archivo en básico simplemente cópielo en la página en blanco de PROTON y rellénelo.
El archivo .hex resultante, se cargará en el PIC con un pickit2 o pickit3 u otro dispositivo de su elección.
El Proton es un muy buen programa., Lo he estado usando poco tiempo pero siempre descubro características interesantes: permite que se use GRATIS para diferentes tipos de PIC, incluido 16F876. Gracias a Picmicro675 que me hizo comprender las ventajas de este programa y muchas funciones muy útiles en la programación., sin mencionar que el compilado ocupa menos flash que otros compiladores y es más rápido en ejecución: y no es barato.
Veamos cómo está estructurado el programa. La parte inicial, recopila todos los parámetros de configuración del PIC y los dispositivos utilizados y la definición de las variables utilizadas. También está habilitado el uso de interrupciones, que utilicé como explicaré más adelante. Claramente comienza con el Principal que es el programa principal donde se describen todos los comandos que se ejecutan. Primero, el sub se llama EN ESO sección donde se inicializan los registros y las variables, luego comienza leyendo el DS1307, las llaves y actúas en consecuencia. Hay muchos subs que procesan los datos que se les dan y devuelven los resultados.. Tenemos debajo el sub para configurar el temporizador.: aquí hay una variable “modificación” que está configurado (= 1) si se modifica algún dato y, en consecuencia, se almacenan todos los datos relativos, nella EEprom. A continuación se muestra el sub para configurar el reloj / calendario de manera similar a la configuración del temporizador. Llegamos así a la sección que gestiona las interrupciones. Tuve que usar dos de ellos y precisamente uno que reacciona a la presión de una de las teclas conectadas en el puerto B 4 un 7. El segundo, relativo al RB0 que escucha la presión del botón en la puerta B. 0. Con estas dos interrupciones, Administro el encendido de la retroiluminación de la pantalla.. Pulsando un botón en los puertos b4-7, Yo uso el TIMER1, para generar una interrupción cada 100 ms : contado 10 interrumpir, yo obtengo 1 de acuerdo con lo que utilizo para el tiempo del recuento de la luz de fondo 60. El botón en Portb0 en su lugar, Lo uso para encender o apagar la luz de fondo sin tiempo. a fin, hay dos tablas para convertir de número a día de la semana y la segunda de número a mes.
REALIZACIÓN:
Aquí está el proyecto terminado:
Vista interna: puede ver los conectores para la pantalla y el de los botones frontales y los LED. Abajo, el estabilizador y el relé. Sobre el relé la batería CR2032.
A continuación se muestra una vista trasera de la pantalla., teclado y led


Vista interior del lado de los componentes

Lado de soldadura: abajo, nota ese pequeño anillo (masa) hecho con alambre para cableado, sirve para dar un mayor blindaje de cuarzo al RTC.

Para etiquetas amarillas: Los creé con Excel con varios intentos para el tamaño y centrado de los personajes.. Entonces los corté, cinta de doble cara para pegarlos al contenedor y cinta transparente para protegerlos.
Montaje completado, trabajo hecho. Espero no haber anotado a nadie, y también espero que este proyecto pueda ser de utilidad.
Pierluigi

Gracias Giuseppe.
Estoy de acuerdo con usted sobre la precisión, pero creo que puede ser aceptable.. Monté dos como se puede ver en las fotos, uno en un protoboard y el otro “en caja”. Los he estado dejándolos puestos durante varios días y veo que la precisión es aceptable, Los reviso con relojes radiocontrolados. entonces, siendo arreglado con el “reciclaje” de los componentes, Usé lo que tengo en los cajones.
gracias, Pierluigi
Felicitaciones por la realización del proyecto. . Verifique que el Ds1307 podría traer un error de tiempo causado por la deriva del cristal.
Para una mayor precisión, puede usarlo para aquellos que desean un DS3231 .
y, también habíamos pensado en el higrómetro, pero por el momento no se necesitaba. sin embargo, hay espacio para HW y SW, Lo pensare.
Un práctico temporizador con periodos personalizados. Un proyecto muy bonito.
Para la construcción, también es adecuado el montaje en un orificio múltiple con enrutamiento de montaje rápido. Si fuera un proyecto que requiriera mayor compacidad, entonces puedes pensar en los realizados por servicios profesionales.
Luego vi el propósito del humidificador., podrías agregar un sensor de humedad.
Disfruto haciendo estos proyectos, No los hago para trabajar, así que no pierdo tiempo en la placa de circuito impreso.. Paré hace unos veinte años cuando los realicé con fotograbado a doble cara. Entonces ya no pude encontrar fibra de vidrio presensibilizada de calidad: ya no eran buenos así que renuncié. Tengo todo lo que necesito, pero ya no lo soporto.
Proyecto original, completo en cada parte y fácilmente replicable.
Solo un pequeño defecto es la realización en millefiori que no hace que la realización sea profesional..
Entre nosotros, a quién le importa, tienen todos los elementos para que se imprima en ellos.. Cuando tengo que liberar mi mente como en estos días también pruebo complejas creaciones en millefiori. Una manera de “desenchufar” y mantén otros pensamientos alejados.