jueves, 20 de abril de 2017

Control de bomba de una cisterna

El almacenamiento de agua en una cisterna, permite contar con una reserva para abastecer una vivienda o negocio, almacenando agua durante las horas que la red de abastecimiento nos permita.

De esta manera, aumentamos al máximo la cantidad de agua disponible, o bien, evitamos agotar nuestras existencias cuando el suministro se vuelve irregular.

En ocasiones, el tinaco está un tanto inaccesible para revisar constantemente el nivel de reserva que nos queda, de manera que es más cómodo y conveniente contar con un sistema automático que haga el trabajo por nosotros.

El objetivo de este proyecto es construir un sistema automático para controlar la bomba de una cisterna. El sistema está siempre pendiente del nivel de agua en el tinaco y cuando se alcanza el nivel crítico, activa una bomba que eleva agua desde una cisterna a nivel del suelo.

Circuito de control de bomba para una cisterna.

El circuito consta de un microcontrolador -en este caso se utilizó la placa electrónica programable modelo MSP 430 Launchpad de Texas Instruments-, un circuito relevador de voltaje de 120V a 10A, accionado con 5.0V, una entrada en PULL-UP que recibe la señal del electronivel instalado en el tinaco, un sensor de iluminación -LDR 2 Mega_Ohm-, una barra de led's para señalar el estado de reposo, un buzzer y un led rojo para señalar el estado activo del sistema, una fuente de alimentación de 5.0V a 500mA con salida USB y un electro-nivel en el tinaco conectado al circuito PULL-UP del sistema. 

El botón pulsador de la placa Launchpad se utiliza para simular el estado del sensor electro-nivel, de manera que en cualquier momento se puede checar el estado de funcionamiento de la bomba de cisterna. El sensor de iluminación -LDR- se calibró para que el sistema evite activar la bomba durante la noche. Para esto, se midió la intensidad lumínica durante la noche -con luz artificial- y durante el día en el sitio donde se colocó la placa. Como la intensidad era alrededor de 200 con luz artificial y alrededor de 400 con luz natural -lecturas de 0 a 1023-, se colocó un valor de 275 en la instrucción condicional if que acciona la bomba. Esto con el fin de evitar molestos ruidos durante la noche, que puedan perturbar el sueño de los inquilinos.

    if (state2 > 275)     {      digitalWrite(LED,HIGH);    }
    else    {      digitalWrite(LED,LOW);    }

En este caso, el pin marcado con la etiqueta LED, acciona al mismo tiempo un led rojo y un relevador de voltaje.

Como sabemos, las salidas en los pines de la placa MSP 430 Launchpad, tienen un voltaje de 3.3V. En el caso del relevador de voltaje accionado con 5.0V, se soldaron unos headers a la toma directa del USB situados en los costados del conector hembra (USB) de la placa. La alimentación del relevador se hace en una etapa de potencia, a través de un transistor NPN. Para proteger los circuitos al activar la bobina del relevador, se colocó un diodo.
El transistor se activa a través de una resistencia de 1.0 a 1.5 k_Ohm

La señal del electro-nivel en el tinaco, se conectó en el sitio marcado para el pulsador (ver diagrama), de manera que al cerrarse el circuito, la señal digital cambiará de 1 a 0 lógico. La resistencia en PullUp deberá ser 6.0 k_Ohm máximo para que el voltaje que reciba el pin sea mayor a 1,8V (1 lógico de 1.8 a 3.3V).

Se colocó una resistencia de 4.7 k_Ohm

Como la bomba de cisterna tiene una potencia de 1.0HP y un consumo de 6.2A, se colocó un relevador de 120V a 10.0A.

Operación diurna

Para evitar que se generen ruidos intensos durante la noche, el sistema cuenta con un sensor de iluminación y un código para que en caso de ser necesario bombear agua, esto se haga solamente durante el día. Las condiciones en que el sistema puede operar y fueron descritas, unas líneas más arriba.

Glosario de términos

Bomba. Bomba centrífuga de 1.0 HP, accionada por energía eléctrica (120V), con control de nivel (electro-nivel).
Tinaco. Depósito de agua menor de 1.0 metro cúbico de capacidad, alojado en la azotea del edificio. Puede o no contar con válvula accionada por flotador conectada a la red pública de suministro.
Cisterna. Depósito de agua de cualquier volumen, alojado al nivel del suelo o debajo de este nivel, con válvula accionada por flotador conectada a la red pública de suministro.

Código

/*
Prueba del sensor digital ELECTRONIVEL
*/
// #define LED1 P1_0 // OUTPUT
#define RX P1_1 // INPUT
#define TX P1_2 // OUTPUT
#define S2 P1_3 // INPUT

#define LDR A4 // P1_4 // INPUT
// #define ELECTRONIVEL P1_5 // INPUT
#define BUZZER P1_6 // OUTPUT
#define LED P1_7 // OUTPUT

#define bit0 P2_0
#define bit1 P2_1
#define bit2 P2_2
#define bit3 P2_3
#define bit4 P2_4
#define bit5 P2_5

void setup()
{
  pinMode(RED_LED,OUTPUT);
  pinMode(GREEN_LED,OUTPUT);
  pinMode(LED,OUTPUT);
  pinMode(BUZZER,OUTPUT);
  // pinMode(LDR,INPUT);
  pinMode(S2,INPUT_PULLUP);
  
  pinMode(bit0,OUTPUT);
  pinMode(bit1,OUTPUT);
  pinMode(bit2,OUTPUT);
  pinMode(bit3,OUTPUT);
  pinMode(bit4,OUTPUT);
  pinMode(bit5,OUTPUT);
  
  Serial.begin(9600);
}
void loop()
{
  int state1=digitalRead(S2);
  int state2=analogRead(LDR);
  Serial.print(state1);
  Serial.print("\t");
  Serial.println(state2);
  while (state1==0) 
  {
    digitalWrite(RED_LED,HIGH);
    digitalWrite(BUZZER,HIGH);
    delay(200); 
    // digitalWrite(LED,LOW);
    digitalWrite(RED_LED,LOW);
    digitalWrite(BUZZER,LOW);
    delay(100);
    // digitalWrite(LED,HIGH);
    digitalWrite(RED_LED,HIGH);
    digitalWrite(BUZZER,HIGH);
    delay(200); 
    // digitalWrite(LED,LOW);
    digitalWrite(RED_LED,LOW);
    digitalWrite(BUZZER,LOW);
    if (state2 > 275)
    {
      digitalWrite(LED,HIGH);
    }
    else
    {
      digitalWrite(LED,LOW);
    }
    state2=analogRead(LDR);
    state1=digitalRead(S2);
    Serial.print(state1);
    Serial.print("\t");
    Serial.println(state2);
    delay(1500);
  }
  
  digitalWrite(LED,LOW);
  delay(200);
    
  //digitalWrite(LED,HIGH);
  digitalWrite(bit0,HIGH);
  digitalWrite(bit1,HIGH);
  digitalWrite(bit2,HIGH);
  //digitalWrite(BUZZER,HIGH);
  //digitalWrite(GREEN_LED,HIGH);
  delay(50);
  //digitalWrite(LED,LOW);
  digitalWrite(bit0,LOW);
  digitalWrite(bit1,LOW);
  digitalWrite(bit2,LOW);
  //digitalWrite(BUZZER,LOW);
  //digitalWrite(GREEN_LED,LOW);
  
  digitalWrite(bit3,HIGH);
  digitalWrite(bit4,HIGH);
  digitalWrite(bit5,HIGH);
  delay(50);
  digitalWrite(bit3,LOW);
  digitalWrite(bit4,LOW);
  digitalWrite(bit5,LOW);
  
  delay(1700);
}

No hay comentarios:

Publicar un comentario