Primero que nada quiero aclarar que el contenido de mi tema no coincide con temas previos publicados en este foro y no me ayudan a resolver mi caso particular 
Hola, les cuento que estoy haciendo un proyecto de llenado automatico de mi tinaco, esto debido a los problemas que he tenido por ejemplo: dejar abierta la llave que llena un tambo como de 50 litros (que funciona como cisterna) y el agua se esta tire y tire sin que me de cuenta, o que el tinaco este vacio y no me percate de ello me meta a bañar y el agua se me acabe a medio baño, tambien me a pasado que mientras estoy llenando el tinaco no me doy cuenta que no le cabe mas agua y sigo mandandole agua hasta que esta comienza a caer del tinaco me doy cuenta que ya se lleno.
En fin un sin numero de problemas a los que ya deseo darle una buena solucion y para eso esta mi proyecto.
Este proyecto se llevara acabo con los siguientes componentes (tratare de ser lo mas preciso posile aunque algunos componentes pueden variar debido a que mi proyecto esta en fase de desarrollo):
- 1 PIC16F877A 44-PIN-TQFP este es para montaje superficial (SMD)
- 6 Switch´s para deternimar el nivel del agua en el tinaco y la cisterna (3 en cada contenedor)
- 1 electrovalvula 1/2" Normalmente Cerrada (NC)
- 1 bomba de agua para llenar el tinaco
- 1 PCB de doble cara
- 1 cristal a 4 MHZ (SMD)
- 2 capacitores de 22pf (SMD 0805)
- 2 resistencias de 330R (SMD 0805)
- 1 Frasco de estaño en pasta para soldar los compenentes SMD con facilidad y sin utilizar pasta
- 1 cautin a base de gas butano para soldar los componentes SMD
- 1 frasco con pegamento a base de carbon conductivo para comunicar la cara TOP con la DOWN de la PCB de doble cara
- Brocas para hacer los orificios que van desde 0.2mm a 2mm
- 2 moc3011
- 2 BT137
- 1 7805 para regular el voltage del PIC
- 1 capacitores de 104nf (SMD 0805)
Dejo simulacion hecha en proteus, la cual donde estan los switch´s de 6 pines seran sustituidos por los switchs que mediran el nivel del agua.
Y donde van los led´s que representan la bomba y la electrovalvula seran sustituidos por dos moc3011 y sus respectivos BT137
Sin mas les dejo mi codigo fuente el cual seguro estoy va asufrir aun cambios pero almenos ya cumple algunas condiciones
Y aqui una consulta, como hacer para que mi codigo se vuelva a ejecutar hasta que X condicion se cumpla? Me refiero a que si mi cisterna tiene 1/3 de agua y el tinaco esta vacio 0/3 en mi programa la bomba comienza a enviar agua debido a que la cisterna si tiene agua, pero como hacer para que ignore todas las condiciones que hay en el programa y solo vuelva a enviar nuevamente agua hasta que la cisterna este llena por completo?, y ya que este llena la cisterna comience a enviar agua pero que ahora si tome en cuenta todas mis condiciones que puse en el programa.
Siento que podria ser con una interupcon pero la verdad no se si sea posible hacerlo asi......
Salu2
Hola, les cuento que estoy haciendo un proyecto de llenado automatico de mi tinaco, esto debido a los problemas que he tenido por ejemplo: dejar abierta la llave que llena un tambo como de 50 litros (que funciona como cisterna) y el agua se esta tire y tire sin que me de cuenta, o que el tinaco este vacio y no me percate de ello me meta a bañar y el agua se me acabe a medio baño, tambien me a pasado que mientras estoy llenando el tinaco no me doy cuenta que no le cabe mas agua y sigo mandandole agua hasta que esta comienza a caer del tinaco me doy cuenta que ya se lleno.
En fin un sin numero de problemas a los que ya deseo darle una buena solucion y para eso esta mi proyecto.
Este proyecto se llevara acabo con los siguientes componentes (tratare de ser lo mas preciso posile aunque algunos componentes pueden variar debido a que mi proyecto esta en fase de desarrollo):
- 1 PIC16F877A 44-PIN-TQFP este es para montaje superficial (SMD)
- 6 Switch´s para deternimar el nivel del agua en el tinaco y la cisterna (3 en cada contenedor)
- 1 electrovalvula 1/2" Normalmente Cerrada (NC)
- 1 bomba de agua para llenar el tinaco
- 1 PCB de doble cara
- 1 cristal a 4 MHZ (SMD)
- 2 capacitores de 22pf (SMD 0805)
- 2 resistencias de 330R (SMD 0805)
- 1 Frasco de estaño en pasta para soldar los compenentes SMD con facilidad y sin utilizar pasta
- 1 cautin a base de gas butano para soldar los componentes SMD
- 1 frasco con pegamento a base de carbon conductivo para comunicar la cara TOP con la DOWN de la PCB de doble cara
- Brocas para hacer los orificios que van desde 0.2mm a 2mm
- 2 moc3011
- 2 BT137
- 1 7805 para regular el voltage del PIC
- 1 capacitores de 104nf (SMD 0805)
Dejo simulacion hecha en proteus, la cual donde estan los switch´s de 6 pines seran sustituidos por los switchs que mediran el nivel del agua.
Y donde van los led´s que representan la bomba y la electrovalvula seran sustituidos por dos moc3011 y sus respectivos BT137
Sin mas les dejo mi codigo fuente el cual seguro estoy va asufrir aun cambios pero almenos ya cumple algunas condiciones
Código:
#include <16f877a.h>
#fuses xt,nowdt
#use delay(clock=4000000)
//Declaracion de variables globales
#DEFINE retardo 250 // Retardo de 250ms
void main(void)
{
set_tris_a(0b00001110);
set_tris_b(0b11111110);
///////////////////////////////////////////////////////////////////////////////////////////////////
while(true)
{
///////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////// BLOQUE PARA LLENADO DE CISTERNA Y TINACO////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
//SI CISTERNA ESTA 3/3 Y TINACO 0/3 (1)(SI CUMPLE)
if(((input(PIN_A1)==0)&&(input(PIN_A2)==0))&&(input(PIN_A3)==1)&&(input(PIN_E2)==1)&&(input(PIN_E1)==1)&&(input(PIN_E0)==1))
output_high(pin_b0); // ENCIENDE BOMBA PORQE LA CISTERNA ESTA LLENA 3/3 Y EL TINACO VACIO 0/3
//SI CISTERNA ESTA 2/3 ALTO Y TINACO 1/3 BAJO (2)(SI CUMPLE)
else if((((input(PIN_A1)==1)&&(input(PIN_A2)==0))&&(input(PIN_A3)==1))&&(input(PIN_E2)==0)&&(input(PIN_E1)==1)&&(input(PIN_E0)==1))
output_high(pin_b0); // ENCIENDE BOMBA PORQE LA CISTERNA TIENE 2/3 Y EL TINACO ESTA 1/3
//SI CISTERNA ESTA 1/3 Y TINACO 2/3 ALTO (3)(SI CUMPLE)
else if((((input(PIN_A1)==1)&&(input(PIN_A2)==1))&&(input(PIN_A3)==1))&&(input(PIN_E2)==0)&&(input(PIN_E1)==0)&&(input(PIN_E0)==1))
output_high(pin_b0); // ENCIENDE BOMBA PORQE LA CISTERNA TIENE 1/3 Y EL TINACO 2/3
//SI CISTERNA ESTA 0/3 Y TINACO 3/3 BAJO (4)(SI CUMPLE)
else if((((input(PIN_A1)==1)&&(input(PIN_A2)==1))&&(input(PIN_A3)==0))&&(input(PIN_E2)==0)&&(input(PIN_E1)==0)&&(input(PIN_E0)==1))
output_low(pin_b0); // APAGA BOMBA PORQUE LA CISTERNA 0/3 Y TINACO 3/3 BAJO
//SI CISTERNA ESTA 0/3 Y TINACO 3/3 (5)(SI CUMPLE)
else if((((input(PIN_A1)==1)&&(input(PIN_A2)==1))&&(input(PIN_A3)==0))&&(input(PIN_E2)==0)&&(input(PIN_E1)==0)&&(input(PIN_E0)==0))
output_low(pin_b0); // APAGA BOMBA PORQUE LA CISTERNA LLEGO A 0/3 Y EL TINACO ESTA 3/3
//SI CISTERNA ESTA 0/3 Y TINACO 0/3 (6)(SI CUMPLE)
else if((((input(PIN_A1)==1)&&(input(PIN_A2)==1))&&(input(PIN_A3)==0))&&(input(PIN_E2)==1)&&(input(PIN_E1)==1)&&(input(PIN_E0)==1))
output_low(pin_b0); //APAGA BOMBA PORQUE LA CISTERNA LLEGO A 0/3 Y EL TINACO ESTA 0/3
//SI CISTERNA ESTA 0/3 Y TINACO 1/3 ALTO (7)(SI CUMPLE)
else if((((input(PIN_A1)==1)&&(input(PIN_A2)==1))&&(input(PIN_A3)==0))&&(input(PIN_E2)==0)&&(input(PIN_E1)==1)&&(input(PIN_E0)==1))
output_low(pin_b0); //APAGA BOMBA PORQUE LA CISTERNA LLEGO A 0/3 Y EL TINACO ESTA 1/3
//SI CISTERNA ESTA 3/3 Y TINACO 3/3 BAJO (9)(SI CUMPLE))
else if((((input(PIN_A1)==0)&&(input(PIN_A2)==0))&&(input(PIN_A3)==1))&&(input(PIN_E2)==0)&&(input(PIN_E1)==0)&&(input(PIN_E0)==1))
output_high(pin_b0); //PRENDE BOMBA PORQUE LA CISTERNA LLEGO A 3/3 Y EL TINACO ESTA 3/3 BAJO
//APAGA BOMBA PORQUE LA CISTERNA TIENE 0/3 Y TINACO 3/3 BAJO
//SI CISTERNA ESTA 3/3 Y TINACO 3/3 ALTO (10)(SI CUMPLE)
else if((((input(PIN_A1)==0)&&(input(PIN_A2)==0))&&(input(PIN_A3)==1))&&(input(PIN_E2)==0)&&(input(PIN_E1)==0)&&(input(PIN_E0)==0))
output_low(pin_b0); //APAGA BOMBA PORQUE LA CISTERNA TIENE 3/3 Y TINACO 3/3 ALTO
}
}
Y aqui una consulta, como hacer para que mi codigo se vuelva a ejecutar hasta que X condicion se cumpla? Me refiero a que si mi cisterna tiene 1/3 de agua y el tinaco esta vacio 0/3 en mi programa la bomba comienza a enviar agua debido a que la cisterna si tiene agua, pero como hacer para que ignore todas las condiciones que hay en el programa y solo vuelva a enviar nuevamente agua hasta que la cisterna este llena por completo?, y ya que este llena la cisterna comience a enviar agua pero que ahora si tome en cuenta todas mis condiciones que puse en el programa.
Siento que podria ser con una interupcon pero la verdad no se si sea posible hacerlo asi......
Salu2
Adjuntos
Última edición: