En este proyecto se presenta un sistema electrónico para dispensadores automáticos de agua, capaz de aceptar monedas y billetes, calcular el saldo disponible y entregar vuelto mediante un hopper. El sistema incorpora funciones de enjuague, selección de diferentes cantidades de agua, control preciso mediante sensor de flujo y monitoreo del nivel de agua. Además, se muestra el diseño de la tarjeta electrónica, las conexiones externas y el funcionamiento integral del equipo, ofreciendo una solución moderna y eficiente para emprendimientos en la venta automatizada de agua.
DATOS TECNICOS

- Microcontrolador ESP32.
- Alimentación de 12 VDC.
- Acepta monedas y billetes.
- Sistema de cambio mediante hopper.
- Sensor de flujo de agua para medición precisa.
- Sensor de nivel de agua.
- Selección de 2 L, 7 L, 10 L y 20 L.
- Función de enjuague automático.
- Pantallas para saldo y litros dispensados.
- Salidas mediante TRIAC para bomba y electroválvulas.
- Compatible con 110/220 VAC.
- Función de pausa y apagado automático.
- Parámetros configurables (precios, litros y calibración).
LISTA DE MATERIALES

| Quantity | Comment | Designator | Footprint | Value | Manufacturer Part |
| 1 | 470uF | C1 | CAP-SMD_BD10.0-L10.3-W10.3-LS11.3-FD | 470uF | VT1V471M1010 |
| 1 | 1uF | C2 | C1206 | 1uF | CL31B105KBHNNNE |
| 16 | 100nF | C3,C4,C5,C6,C7,C8,C9,C14,C15,C16, C17,C18,C19,C20,C21,C22 |
C0603 | 100nF | CC0603KRX7R9BB104 |
| 1 | 220uF | C10 | CAP-SMD_BD8.0-L8.3-W8.3-LS9.3-FD-2 | 220uF | UCD1V221MNL1GS |
| 3 | 10uF | C11,C12,C13 | CAP-SMD_L3.2-W1.6-RD-C7171 | 10uF | TAJA106K016RNJ |
| 5 | 100nF | C23,C24,C25,C26,C27 | CAP-TH_L12.0-W4.0-P10.00-D0.6 | 100nF | CFC2E104JE1I120B5100 |
| 1 | WJ2EDGR-5.08-8P | CN1 | CONN-TH_8P-P5.08_WJ2EDGR-5.08-8P | WJ2EDGR-5.08-8P | |
| 7 | WJ2EDGR-5.08-2P | CN2,CN8,CN9,CN10,CN11,CN12,CN13 | CONN-TH_WJ2EDGR-5.08-2P | WJ2EDGR-5.08-2P | |
| 1 | 2.0-2*4P直简牛 | CN3 | IDC-TH_8P-P2.00_BOOMELE2X4P | 2.0-2*4P直简牛 | |
| 2 | ZX-XH2.54-3PZZ | CN4,CN6 | CONN-TH_3P-P2.54_2501S-3P | ZX-XH2.54-3PZZ | |
| 1 | ZX-XH2.54-4PZZ | CN5 | CONN-TH_4P-P2.50_4PIN | ZX-XH2.54-4PZZ | |
| 1 | WAFER-XH2.54-6PZZ | CN7 | CONN-TH_XH2.54-6P | WAFER-XH2.54-6PZZ | |
| 5 | SS34 | D1,D2,D3,D4,D5 | SMA_L4.3-W2.6-LS5.2-RD | SS34 | |
| 1 | SS210 | D6 | SMA_L4.3-W2.6-LS5.2-RD | SS210 | |
| 1 | 5x20BLX-A型保险丝支架XC-7 | F1 | FUSE-TH_L22.6-W9.0 | 5x20BLX-A型保险丝支架XC-7 | |
| 1 | 68uH | L1 | IND-SMD_L7.1-W6.6-1 | 68uH | PSPMAA0605H-680M-IGF |
| 10 | KT-0805G | LED1,LED2,LED3,LED4,LED5,LED6, LED9,LED10,LED11,LED12 |
LED0805-R-RD | KT-0805G | |
| 2 | FJ8401AH | LED7,LED8 | LED-SEG-TH_FJ8401AH | FJ8401AH | |
| 1 | XL-502SURC | LED13 | LED-TH_BD5.9-P2.54-FD-1 | XL-502SURC | |
| 1 | 333-2SUGC/S400-A4 | LED14 | LED-TH_BD5.8-P2.54-FD | 333-2SUGC/S400-A4 | |
| 1 | 333-2UYC/S530-A3-L | LED15 | LED-TH_BD5.4-P2.54-FD | 333-2UYC/S530-A3-L | |
| 1 | XL-502UBC | LED16 | LED-TH_BD5.9-P2.54-RD_BLUE | XL-502UBC | |
| 5 | NCD0805R1 | LED17,LED18,LED19,LED20, LED21 |
LED0805-R-RD | NCD0805R1 | |
| 10 | MMBT2222A 1P | Q1,Q2,Q3,Q4,Q5,Q6,Q7, Q8,Q9,Q10 |
SOT-23-3_L2.9-W1.3-P1.90-LS2.4-BR | MMBT2222A 1P | |
| 5 | BTB16Q-600BW | Q11,Q12,Q13,Q14,Q15 | TO-263AB_L10.0-W9.2-P5.08-LS15.4-BL | BTB16Q-600BW | |
| 10 | 2.2kΩ | R1,R2,R3,R4,R5,R6,R22, R23,R24,R31 |
R0805 | 2.2kΩ | 0805W8F2201T5E |
| 26 | 10kΩ | R7,R8,R9,R10,R11,R12,R13, R14,R15,R26,R28,R29,R30, R35,R36,R37,R38,R40,R42, R44,R46,R48,R50,R52,R54,R56 |
R0603 | 10kΩ | 0603WAF1002T5E |
| 20 | 1kΩ | R16,R17,R18,R19,R20,R21, R25,R27,R32,R33,R34,R39, R41,R43,R45,R47,R49,R51, R53,R55 |
R0603 | 1kΩ | 0603WAF1001T5E |
| 14 | 330Ω | R57,R58,R59,R60,R61,R62, R63,R64,R65,R66,R67,R68, R69,R70 |
R0805 | 330Ω | 0805W8F3300T5E |
| 10 | 120Ω | R71,R72,R73,R74,R75,R76, R77,R78,R79,R80 |
R1206 | 120Ω | 1206W4F1200T5E |
| 4 | TC-6610-9-260G | SW1,SW2,SW3,SW4 | SW-TH_4P-L5.0-W5.0-P4.50-LS6.5 | TC-6610-9-260G | |
| 1 | 12V | TP1 | Test-Point-0.5mm | ||
| 1 | 5V | TP2 | Test-Point-0.5mm | ||
| 1 | Coin | TP3 | Test-Point-0.5mm | ||
| 1 | 3.3V | TP4 | Test-Point-0.5mm | ||
| 9 | EL3H7(B)(TA)-G | U1,U2,U3,U4,U5,U6,U10, U11,U12 |
SOP-4_L4.4-W2.8-P1.27-LS7.0-TL | EL3H7(B)(TA)-G | |
| 1 | XL1509-5.0E1 | U7 | SOIC-8_L5.0-W4.0-P1.27-LS6.0-BL | XL1509-5.0E1 | |
| 1 | MAX7219EWG+T | U8 | SOIC-24_L15.4-W7.5-P1.27-LS10.3-BL | MAX7219EWG+T | |
| 1 | LD1117S33CTR | U9 | SOT-223-4_L6.5-W3.5-P2.30-LS7.0-BR | LD1117S33CTR | |
| 1 | ESP32-WROOM-32E-N4 | U13 | WIFI-SMD_ESP32-WROOM-32E | ESP32-WROOM-32E-N4 | |
| 1 | 74HC595D,118 | U14 | SOIC-16_L9.9-W3.9-P1.27-LS6.0-BL | 74HC595D,118 | |
| 5 | MOC3083S-TA1 | U15,U16,U17,U18,U19 | SMD-6_L7.3-W6.5-P2.54-LS10.2-BL | MOC3083S-TA1 | |
| 2 | 74HC14D,653 | U20,U21 | SOIC-14_L8.7-W3.9-P1.27-LS6.0-BL | 74HC14D,653 |
CONEXIONES EXTERNAS


DESCARGAR CODIGO 100% FUNCIONAL
CODIGO DEMO

// DEMO DISPENSADOR DE AGUA - ESP32
// Visualización por Serial Monitor
#define COIN_PIN 14
#define BTN_ENJUAGUE 33
#define BTN_2L 32
#define BTN_10L 34
#define BOMBA 17
#define EV_ENJUAGUE 16
#define EV_AGUA 19
float saldo = 0;
void setup() {
Serial.begin(115200);
pinMode(COIN_PIN, INPUT_PULLDOWN);
pinMode(BTN_ENJUAGUE, INPUT_PULLDOWN);
pinMode(BTN_2L, INPUT_PULLDOWN);
pinMode(BTN_10L, INPUT_PULLDOWN);
pinMode(BOMBA, OUTPUT);
pinMode(EV_ENJUAGUE, OUTPUT);
pinMode(EV_AGUA, OUTPUT);
digitalWrite(BOMBA, LOW);
digitalWrite(EV_ENJUAGUE, LOW);
digitalWrite(EV_AGUA, LOW);
Serial.println("=== DISPENSADOR DE AGUA ===");
}
void loop() {
// Simulación ingreso de moneda
if (digitalRead(COIN_PIN)) {
saldo += 1.0;
Serial.print("Saldo: S/");
Serial.println(saldo);
delay(500);
}
// Enjuague
if (digitalRead(BTN_ENJUAGUE) && saldo > 0) {
Serial.println("Iniciando enjuague...");
digitalWrite(BOMBA, HIGH);
digitalWrite(EV_ENJUAGUE, HIGH);
delay(5000);
digitalWrite(BOMBA, LOW);
digitalWrite(EV_ENJUAGUE, LOW);
Serial.println("Enjuague terminado");
Serial.println("Seleccione litros");
}
// Producto 2L = S/1
if (digitalRead(BTN_2L) && saldo >= 1) {
saldo -= 1;
Serial.println("----------------");
Serial.println("Producto: 2 Litros");
Serial.print("Vuelto: S/");
Serial.println(saldo);
dispensar(2);
}
// Producto 10L = S/3
if (digitalRead(BTN_10L) && saldo >= 3) {
saldo -= 3;
Serial.println("----------------");
Serial.println("Producto: 10 Litros");
Serial.print("Vuelto: S/");
Serial.println(saldo);
dispensar(10);
}
}
void dispensar(float litrosObjetivo) {
digitalWrite(BOMBA, HIGH);
digitalWrite(EV_AGUA, HIGH);
float litros = 0;
while (litros < litrosObjetivo) {
delay(500);
litros += 0.5; // Simulación
Serial.print("Dispensando: ");
Serial.print(litros);
Serial.println(" L");
}
digitalWrite(BOMBA, LOW);
digitalWrite(EV_AGUA, LOW);
Serial.println("Dispensado completado");
Serial.println();
saldo = 0;
}


