Icono del sitio ELECTROALL

Como hacer un dispensador de AGUA

YouTube
YouTube
Instagram
Instagram
GitHub
GitHub

Desde hace un buen tiempo llevo desarrollando una tarjeta electrónica que me permita controlar un dispensador de agua. Y sí efectivamente ya lo tenemos concluido, y en este video te enseñaré desde el esquemático electrónico, la creación de la tarjeta PCB y las conexiones con los dispositivos externos.

Primero veamos el planteamiento del problema, que deseamos lograr? Si bien es cierto los dispensadores de agua tiene que tener la característica de auto atención y que debe estar instado a la calle, o en una esquina. Ahora surge la pregunta, que componentes se requiere para lograr la automatización correspondiente? Primero, un dispensador de monedas, ya sea de una moneda o multimoneda, normalmente estos dispositivo suele tener estas características. Primero, para que el dispensador pueda filtrar las monedas se debe colocar a este molde, por ejemplo, si yo quiero que el litro de agua cueste 1 sol entonces pondré una moneda de 1 sol a esta parte, lo siguiente es reconocer los pines de salida y entrada,  por el primer pin se alimenta con 12V por el tercer pin ingresa un 0V, estos dos son la entrada de alimentación, el segundo pin es la señal de salida de 0V, es decir, que cuando ingresa una moneda manda una señal de 0V, por último también tendremos una señal de salida de 0V, este pin normalmente es para los contadores mecánicos, pero para este proyecto no será necesario. Ahora para poder extraer el agua colocaremos una pequeña bombita, estos son los típicos que vemos en las peceras, o en los acuarios, que solo tienen dos cables y que se alimentan con 12V. ahora para poder administrar la salida del agua con la cantidad exacta colocaremos un sensor de flujo este tipo que tiene 3 cables, dos de alimentación Normalmente el color rojo para 12V y el color negro para cero voltios, finalmente el ultimo cable de color verde para la salida de la señal de los pulsos altos. Y obviamente para llevar una administración adecuada de estos dispositivos necesitamos una tarjeta de control, que crearemos nosotros mismos ya pueda ser usando los microcontroladores de Atmel, pic, esp32, etc, etc en este caso usaremos el microcontrolador atmega328P, Y para poder visualizar el proceso de llenado del líquido usaremos una pantalla de 20*4, finalmente para dar marcha al proceso integraremos un pulsador. Muy bien, estos son todos los dispositivos que vamos a usar. Ahora veamos el esquemático y la creación de la tarjeta PCB.

DATOS TÉCNICOS
  1. Tensión de alimentación……………………….…………12VDC
  2. Corriente de alimentación………………….……………28mA
  3. Entadas digitales 5-12VDC……………………….……6
  4. Entadas Analógicas 0-5VDC……………………….……2
  5. Salidas RLY…………………………………………………………4
      • Tensión AC…………..……….………………….….……250V
      • Corriente AC…………………………………………….10A
      • Tensión DC………………………………………………30V
      • Corriente DC……………………………………………10A
  6. Salidas RLY…………………………………………………………4
      • TensiónDC…………..……….………………….….……12V
      • Corriente DC…………………………………………….500mA
  7. Entorno de programación………………………..………..Arduino IDE
  8. Comunicación I2C……………………………….……..………..Sí
  9. DIP switch conf…………………………………………………………Sí
  10. Condiciones ambientales min……………………….….-40°
  11. Condiciones ambientales max…………………..……….150°
  12. Dimensiones……………………………………………………….85x65mm
  13.  Empotrable………………………………….……………………Sí
  14. Programación directa (PC-Tarjeta electrónica)…………Sí
TARJETA PCB
LISTA DE MATERIALES
Categoría Cantidad Referencias Valor PCB Package Datasheet
Condensadores 2 C1,C7 100uF ELEC-RAD13
Condensadores 1 C2 220uF CAP SMD 6.3X7.7MM ALUMINUM 220UF/16V
Condensadores 1 C3 100nF 1206_CAP
Condensadores 2 C4,C8 1000uF ELEC-RAD20
Condensadores 10 C5,C6,C9,C10,C11,C12,C13,C14,C15,C16 100nF 0603_CAP
Condensadores 4 C17,C18,C19,C20 10uF 1206_CAP
Resistencias 7 R1,R2,R3,R7,R9,R11,R24 1k 0603_RES
Resistencias 1 R4 1M 0603_RES
Resistencias 13 R5,R8,R10,R12,R13,R15,R17,R19,R21,R23,R25,R38,R39 10k 0603_RES
Resistencias 6 R6,R14,R16,R18,R20,R22 2.2k 1206_RES
Resistencias 4 R26,R27,R28,R29 4.7k 0603_RES
Resistencias 4 R30,R31,R32,R33 220 0603_RES
Resistencias 4 R34,R35,R36,R37 1k 1206_RES
Integrados 1 U1 LM2576-5,0 TO170P1410X464-6
Integrados 1 U2 ATMEGA328P QFP80P900X900X120-32
Integrados 1 U3 CH340C SO16
Integrados 5 U4,U5,U6,U7,U8 ILD207T SO8
Integrados 1 U9 ULN2803 SO18W
Transistores 4 Q1,Q2,Q3,Q4 PMBT3904,215 SOT23-3
Diodos 3 D1,D2,D12 B330A-13-F SMA(DO-214AC)
Diodos 5 D3,D8,D9,D10,D11 LED-RED LEDC2012X120
Diodos 5 D4,D5,D6,D7,D13 1N4148W SOD-123
Miscelánea 1 BTN1 RST BUTTON SMD 2P
Miscelánea 1 DSW1 DIPSW_2 SW-DIP2
Miscelánea 1 F1 1A FUSE SMD
Miscelánea 1 J1 MICRO USB B MICRO USB B
Miscelánea 7 J2,J3,J6,J7,J8,J9,J10 TBLOCK-M3 TERMINAL BLOCK 3P
Miscelánea 4 J4,J5,J11,J12 TBLOCK-M2 TERMINAL BLOCK 2P
Miscelánea 1 J13 CONN-SIL4 CONN 4P 2.5MM
Miscelánea 1 L1 100u INDUCTOR 100UH
Miscelánea 4 RL1,RL2,RL3,RL4 12V RL12V NORMAL
Miscelánea 1 X1 CRYSTAL SMD S OSCILADOR SMD CERAMIC RESONATORS
CONEXIONES EXTERNAS
CODIGO
#include <LiquidCrystal_I2C.h> // Debe descargar la Libreria que controla el I2C
#include<Wire.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);

// ENTRADAS DIGITALES EXT 12V
const int in2 = 3;
const int in3 = 4;
const int in4 = 5;
const int in5 = 6;
const int in6 = 7;

// ENTRADAS DIP SWITCH
const int in7 = 8;
const int in8 = 9;

// SALIDAS TRANSISTORES
const int OUT1 = 10;
const int OUT2 = 11;
const int OUT3 = 12;
const int OUT4 = 13;

// SALIDAS RELAYS
const int E_V   = 14;
const int BOMBA = 15;
const int OUT7  = 16;
const int OUT8  = 17;

int contador = 0;

volatile double flujo;

int S_F = 0;
int P_C = 0;
int OK  = 0;
int OP2 = 0;
int OP3 = 0;
int RV2 = 0;

int LAST_C_P = 0;

int filling = 0;
int TIME = 3000;
boolean TIEMPO = false;
byte soles = 0;
boolean E0, E1, E2 = false;
boolean T01, T12, T20 = false;

void setup() {
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  lcd.setCursor(1, 0);
  lcd.print("ELECTROALL.");
  delay(600);
  lcd.setCursor(2, 1);
  lcd.print("ELECTROALL..");
  delay(700);
  lcd.setCursor(3, 2);
  lcd.print("ELECTROALL...");
  delay(800);
  lcd.setCursor(4, 3);
  lcd.print("ELECTROALL...");
  delay(1000);
  lcd.clear();
  pinMode(in2, INPUT);
  pinMode(in3, INPUT);
  pinMode(in4, INPUT);

  pinMode(in5, INPUT);
  pinMode(in6, INPUT);

  pinMode(OUT1, OUTPUT);
  pinMode(OUT2, OUTPUT);
  pinMode(OUT3, OUTPUT);
  pinMode(OUT4, OUTPUT);

  pinMode(E_V,   OUTPUT);
  pinMode(BOMBA, OUTPUT);
  pinMode(OUT7,  OUTPUT);
  pinMode(OUT8,  OUTPUT);
  flujo = 0;
  attachInterrupt(0, pulse, RISING);  //DIGITAL Pin 2: Interrupt 0
  //attachInterrupt(1, coin, RISING);  //DIGITAL Pin 3: Interrupt 1
}

void loop() {
  P_C = digitalRead(in2);
  OK  = digitalRead(in3);
  OP2 = digitalRead(in4);
  OP3 = digitalRead(in5);
  RV2 = digitalRead(in6);

  if (E0 == true) {
    if (P_C != LAST_C_P) {
      if (P_C == LOW) {
        if (soles < 3) {
          soles++;
          lcd.clear();
        }

      }
    }
  }
  LAST_C_P = P_C;
  //INICIALIZACION***************************
  if ((!E1 && !E2) == true) {
    E0 = true;
  }

  //TRANSITION*********************************
  //from
  if (E0 == true && (soles == 1 || soles == 2 || soles == 3) && OK == true) {
    lcd.clear();
    T01 = true;
    T20 = false;
  }
  if (E1 == true && (filling == 1 || filling == 2 || filling == 3) ) {
    lcd.clear();
    T12 = true;
    T01 = false;
  }
  if (E2 == true && TIEMPO == true ) {
    lcd.clear();
    T20 = true;
    T12 = false;
  }
  //ETAPA**************************************
  if (E0 && T01 == true) {
    E0 = false;
    E1 = true;
  }
  if (E1 && T12 == true) {
    E1 = false;
    E2 = true;
  }
  if (E2 && T20 == true) {
    E2 = false;
    E0 = true;
  }

  //ACTUADORES*********************************
  //Reposo
  if (E0 == true) {
    digitalWrite(E_V,   LOW);
    digitalWrite(BOMBA, LOW);
    flujo = 0;
    filling = 0;

    if (soles == 0) {
      lcd.setCursor(0, 0);
      lcd.print("BIENVENIDOS A H2O FT");
      lcd.setCursor(2, 1);
      lcd.print("CUANTOS L DESEA?");
      lcd.setCursor(0, 3);
      lcd.print("1L = 1 2L = 2 3L = 3");
    }
    if (soles == 1) {
      lcd.setCursor(4, 0);
      lcd.print("TIENE UN SALDO");
      lcd.setCursor(2, 1);
      lcd.print("DE: S/.");
      lcd.print(soles);
      lcd.setCursor(3, 3);
      lcd.print("1 litro de agua");
    }
    if (soles == 2) {
      lcd.setCursor(4, 0);
      lcd.print("TIENE UN SALDO");
      lcd.setCursor(2, 1);
      lcd.print("DE: S/.");
      lcd.print(soles);
      lcd.setCursor(3, 3);
      lcd.print("2 litro de agua");
    }
    if (soles == 3) {
      lcd.setCursor(4, 0);
      lcd.print("TIENE UN SALDO");
      lcd.setCursor(2, 1);
      lcd.print("DE: S/.");
      lcd.print(soles);
      lcd.setCursor(3, 3);
      lcd.print("3 litro de agua");
    }
  }

  // LLENANDO AGUA
  if (E1  == true) {
    digitalWrite(E_V,   HIGH);
    digitalWrite(BOMBA, HIGH);

    if (soles == 1) {
      lcd.setCursor(5, 0);
      lcd.print("LLENANDO...");
      lcd.setCursor(3, 1);
      lcd.print("1 Litro de agua");
      lcd.setCursor(0, 3);
      lcd.print("PROCESO Ltrs. = ");
      lcd.print(flujo);
      if (flujo >= 1.0) {
        filling = 1;
      }
    }
    if (soles == 2) {
      lcd.setCursor(5, 0);
      lcd.print("LLENANDO...");
      lcd.setCursor(3, 1);
      lcd.print("2 Litros de agua");
      lcd.setCursor(0, 3);
      lcd.print("PROCESO Ltrs. = ");
      lcd.print(flujo);
      if (flujo >= 2.0) {
        filling = 2;
      }
    }
    if (soles == 3) {
      lcd.setCursor(5, 0);
      lcd.print("LLENANDO...");
      lcd.setCursor(3, 1);
      lcd.print("3 Litros de agua");
      lcd.setCursor(0, 3);
      lcd.print("PROCESO Ltrs. = ");
      lcd.print(flujo);
      if (flujo >= 3.0) {
        filling = 3;
      }
    }
  }

  //COMPLETADO
  if (E2 == true) {
    digitalWrite(E_V,   LOW);
    digitalWrite(BOMBA, LOW);

    lcd.setCursor(6, 0);
    lcd.print("COMPLETO!");
    lcd.setCursor(1, 1);
    lcd.print("RETIRE EL PRODUCTO");
    lcd.setCursor(1, 3);
    lcd.print("MUCHAS GRACIAS...");

    soles = 0;
    delay(TIME);
    TIEMPO = true;
  }

}

void pulse() {
  flujo += 1.0 / 450.0;
}
/*
  void coin() {
  soles++;
  }*/
VIDEO
Salir de la versión móvil