Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Programa para el llenado de botellas mediante un flujometro
- con sensor hall magnetico, el cual desplazara las botellas
- a traves de una barra transportadora con un motor paso a paso o DC
- y un sensor de color para diferenciar el tamaño de la botella a llenar
- Se usará un contador de cuantas botellas de 1 lt y de medio lt llena
- a parte de otro contador de los litros dispensados desde que se ejecuta
- el programa en el arduino
- Pines del Arduino
- PIN 0 = Motor paso paso
- PIN 1 = Motor paso paso
- PIN 2 = Sensor Hall del Flujometro
- PIN 3 = Motor paso paso
- PIN 4 = Motor paso paso
- PIN 5 = LCD D7
- PIN 6 = LCD D6
- PIN 7 = LCD D5
- PIN 8 = LCD D4
- PIN 9 = LCD E
- PIN 10 = LCD RS
- PIN 11 = Motor DC
- PIN 12 = ElectroValvula
- PIN 13 = Led Encendido
- PIN 14 O A0 = Sensor Herradura
- PIN 15 O A1 = LDR
- PIN 16 O A2 = LED Rojo
- PIN 17 O A3 = LED Verde
- PIN 18 O A4 = Suiche
- */
- #include <AccelStepper.h> // Libreria Motor paso a paso
- #include <LiquidCrystal.h> // Libreria LCD
- volatile int ContadorL; // Variable del Contador de llenado
- int ContadorLT; // Contador de Litros totales
- AccelStepper stepper1(AccelStepper::HALF4WIRE, 0, 3, 1, 4); // Pines secuenciales en el ULN2003 y de ahi al Motor desde azul hasta naranja
- LiquidCrystal lcd(10, 9, 8, 7, 6, 5); // Pines de la LCD
- const int PwmMI = 200; // PWM del Motor DC para arrancar
- const int PwmMP = 0; // PWM del Motor DC para frenar
- const int MotorDC = 11; // Pin del Motor DC
- const int ElectroV = 12; // Pin salida Electro Valvula
- const int LED = 13; // Pin del LED de Encendido en el Arduino
- const int Herradura = 14; // Pin del Sensor de Herradura
- int HerraduraS; // Variable del Sensor de Herradura
- const int LDR = 15; // Pin del LDR
- int LDRS; // Variable del Sensor LDR
- const int LEDR = 16; // Pin del LED Rojo
- const int LEDV = 17; // Pin del LED Verde
- const int Suiche = 18; // Pin del Suiche de Encendido
- int OnOff; // Variable del Suiche
- const int PulsosML = 239; // Pulsos para medio litro
- const int PulsosL = 478; // Pulsos para un litro
- volatile int LlenandoPor; // Porcentaje de Llenado
- int LitroT; // Sumador de Litros Totales
- int BotellasL; // Botellas Litro Llenadas
- int BotellasML; // Botellas Medio Litro Llenadas
- void setup()
- {
- stepper1.setMaxSpeed(1000); // Velocidad Maxima del Motor
- stepper1.setAcceleration(200); // Aceleracion del Motor
- stepper1.setSpeed(400); // Velocidad en modo RUN
- lcd.begin(16, 2); // Tamaño de la LCD e inicio
- attachInterrupt(0, Hall, RISING); // Inicio del Contador del Flujometro
- pinMode(MotorDC, OUTPUT); // Pin Salida Motor DC
- pinMode(ElectroV, OUTPUT); // Pin Salida ElectroValvula
- pinMode(LED, OUTPUT); // Pin Salida LED
- pinMode(Herradura, INPUT); // Pin Entrada Sensor Herradura
- pinMode(LDR, INPUT); // Pin Entrada Señal LDR
- pinMode(LEDR, OUTPUT); // Pin Salida al LED Rojo
- pinMode(LEDV, OUTPUT); // Pin Salida al LED Verde
- pinMode(Suiche, INPUT); // Pin Entrada del Suiche On Off
- }
- void loop()
- {
- OnOff = digitalRead(Suiche); // Lectura del Suiche
- if (OnOff == HIGH) // Decision para el Suiche
- {
- digitalWrite(LED, HIGH); // Activa el LED
- HerraduraS = digitalRead(Herradura); // Comienza a leer el Sensor de Herradura
- if (HerraduraS == LOW) // Si esta apagado...
- {
- analogWrite(MotorDC, PwmMI); // Arranca el motor DC
- lcd.clear(); // Limpia la Pantalla LCD
- lcd.print("Esperando por"); // Escribe en la LCD
- lcd.setCursor(0, 1);
- lcd.print("una botella");
- }
- else // Si el suiche esta en alto...
- {
- analogWrite(MotorDC, PwmMP); // Para el Motor DC
- lcd.clear(); // Limpia la Pantalla
- lcd.print("Leyendo la"); // Escribe en la pantalla
- lcd.setCursor(0, 1);
- lcd.print("botella ahora");
- delay(500);
- digitalWrite(LEDR, HIGH); // Enciende el LED Rojo
- delay(200);
- LDRS = digitalRead(LDR); // Lee si se refleja la luz roja
- if (LDRS == HIGH); // Si se refleja va al programa MedioL
- {
- MedioL(); // Inicia el programa MedioL
- digitalWrite(LEDR, LOW); // Apaga el Led Rojo
- delay(100);
- }
- digitalWrite(LEDV, HIGH); // Enciende el LED Verde
- delay(200);
- LDRS = digitalRead(LDR); // Lee si se refleja la luz verde
- if (LDRS == HIGH);
- {
- Litro(); // Inicia el programa Litro
- digitalWrite(LEDV, LOW); // Apaga el Led Verde
- delay(100);
- }
- }
- }
- else // Si esta apagado el Suiche On Off
- {
- lcd.clear(); // Limpia la LCD
- digitalWrite(LED, LOW); // Apaga el LED
- analogWrite(MotorDC, PwmMP); // Para el Motor
- }
- }
- void Hall() // Programa para el Contador
- {
- ContadorL++; // Contador de Pulsos del Hall
- ContadorLT++; // Contador para totalizar los litros gastados
- }
- void MedioL() // Programa para llenado de Medio Litro
- {
- lcd.clear(); // Limpia la LCD
- lcd.print("Botella Medio"); // Escribe en la LCD
- lcd.setCursor(0, 1);
- lcd.print("Litro Encontrada");
- delay(200);
- digitalWrite(ElectroV, HIGH); // Activa la Electro Valvula
- stepper1.setCurrentPosition(0); // Posiciona el Motor Paso a Paso de la Llave
- stepper1.runToNewPosition(800); // Abre la llave (Media Vuelta)
- while (LlenandoPor < 60); // Mientras el porcentaje sea menor a 60 mantendra la llave igual
- {
- LlenandoPor = PulsosML - ContadorL / 2.39; // Formula para llevar a porcentaje de medio litro
- lcd.clear(); // Limpia la LCD
- lcd.print("Llenando Botella"); // Escribe en la LCD
- lcd.setCursor(0, 1);
- lcd.print("MedioL= ");
- lcd.print(LlenandoPor);
- }
- stepper1.runToNewPosition(600); // Cierra un poco la llave
- while (LlenandoPor < 80); // Hasta que no alcance 80% no cambia
- {
- LlenandoPor = PulsosML - ContadorL / 2.39;
- lcd.clear();
- lcd.print("Llenando Botella");
- lcd.setCursor(0, 1);
- lcd.print("MedioL= ");
- lcd.print(LlenandoPor);
- }
- stepper1.runToNewPosition(400); // Cierra un poco mas la llave
- while (LlenandoPor < 95); // Hasta que no llegue a 95% no cambia
- {
- LlenandoPor = PulsosML - ContadorL / 2.39;
- lcd.clear();
- lcd.print("Llenando Botella");
- lcd.setCursor(0, 1);
- lcd.print("MedioL= ");
- lcd.print(LlenandoPor);
- }
- lcd.clear();
- lcd.print("Llenado Completo");
- stepper1.runToNewPosition(0); // Cierra la llave
- digitalWrite(ElectroV, LOW); // Cierra la Electro Valvula
- LlenandoPor = 0; // Resetea el porcentaje de llenado
- ContadorL = 0; // Resetea el contador de litros
- LitroT = ContadorLT / 478; // Totaliza los litros
- BotellasML = BotellasML++; // Totaliza las botellas llenadas de medio litro
- lcd.clear(); // Limpia la LCD
- lcd.print("Litros Totales"); // Escribe en la LCD los litros totales gastados
- lcd.setCursor(0,1);
- lcd.print("Llenados= ");
- lcd.print(LitroT);
- delay(500);
- lcd.clear();
- lcd.print("Botellas MedioL"); // Escribe en la LCD las botellas de medio litro llenadas
- lcd.setCursor(0, 1);
- lcd.print("Llenas= ");
- lcd.print(BotellasML);
- delay(500);
- }
- void Litro()
- {
- lcd.clear();
- lcd.print("Botella de un");
- lcd.setCursor(0, 1);
- lcd.print("Litro Encontrada");
- delay(200);
- digitalWrite(ElectroV, HIGH);
- stepper1.setCurrentPosition(0);
- stepper1.runToNewPosition(800);
- while (LlenandoPor < 60);
- {
- LlenandoPor = PulsosL - ContadorL / 4.78;
- lcd.clear();
- lcd.print("Llenando Botella");
- lcd.setCursor(0, 1);
- lcd.print("1 Litro= ");
- lcd.print(LlenandoPor);
- }
- stepper1.runToNewPosition(600);
- while (LlenandoPor < 80);
- {
- LlenandoPor = PulsosL - ContadorL / 4.78;
- lcd.clear();
- lcd.print("Llenando Botella");
- lcd.setCursor(0, 1);
- lcd.print("1 Litro= ");
- lcd.print(LlenandoPor);
- }
- stepper1.runToNewPosition(400);
- while (LlenandoPor < 95);
- {
- LlenandoPor = PulsosL - ContadorL / 4.78;
- lcd.clear();
- lcd.print("Llenando Botella");
- lcd.setCursor(0, 1);
- lcd.print("1 Litro= ");
- lcd.print(LlenandoPor);
- }
- lcd.clear();
- lcd.print("Llenado Completo");
- stepper1.runToNewPosition(0);
- digitalWrite(ElectroV, LOW);
- LlenandoPor = 0;
- ContadorL = 0;
- LitroT = ContadorLT / 478;
- BotellasL = BotellasL++;
- lcd.clear();
- lcd.print("Litros Totales");
- lcd.setCursor(0,1);
- lcd.print("Llenados= ");
- lcd.print(LitroT);
- delay(500);
- lcd.clear();
- lcd.print("Botellas 1 Litro");
- lcd.setCursor(0, 1);
- lcd.print("Llenas= ");
- lcd.print(BotellasL);
- delay(500);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement