Advertisement
Guest User

Llenadora tuning xd

a guest
Dec 8th, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.63 KB | None | 0 0
  1. /* Programa para el llenado de botellas mediante un flujometro
  2. con sensor hall magnetico, el cual desplazara las botellas
  3. a traves de una barra transportadora con un motor paso a paso o DC
  4. y un sensor de color para diferenciar el tamaño de la botella a llenar
  5. Se usará un contador de cuantas botellas de 1 lt y de medio lt llena
  6. a parte de otro contador de los litros dispensados desde que se ejecuta
  7. el programa en el arduino
  8.  
  9. Pines del Arduino
  10.  
  11. PIN 0 = Motor paso paso
  12. PIN 1 = Motor paso paso
  13. PIN 2 = Sensor Hall del Flujometro
  14. PIN 3 = Motor paso paso
  15. PIN 4 = Motor paso paso
  16. PIN 5 = LCD D7
  17. PIN 6 = LCD D6
  18. PIN 7 = LCD D5
  19. PIN 8 = LCD D4
  20. PIN 9 = LCD E
  21. PIN 10 = LCD RS
  22. PIN 11 = Motor DC
  23. PIN 12 = ElectroValvula
  24. PIN 13 =  Led Encendido
  25. PIN 14 O A0 = Sensor Herradura
  26. PIN 15 O A1 = LDR
  27. PIN 16 O A2 = LED Rojo
  28. PIN 17 O A3 = LED Verde
  29. PIN 18 O A4 = Suiche
  30. */
  31.  
  32. #include <AccelStepper.h>    // Libreria Motor paso a paso
  33. #include <LiquidCrystal.h>   // Libreria LCD
  34.  
  35. volatile int ContadorL;    // Variable del Contador de llenado
  36. int ContadorLT;    // Contador de Litros totales
  37. AccelStepper stepper1(AccelStepper::HALF4WIRE, 0, 3, 1, 4);    // Pines secuenciales en el ULN2003 y de ahi al Motor desde azul hasta naranja
  38. LiquidCrystal lcd(10, 9, 8, 7, 6, 5);    // Pines de la LCD
  39. const int PwmMI = 200;    // PWM del Motor DC para arrancar
  40. const int PwmMP = 0;      // PWM del Motor DC para frenar
  41. const int MotorDC = 11;    // Pin del Motor DC
  42. const int ElectroV = 12;    // Pin salida Electro Valvula
  43. const int LED = 13;    // Pin del LED de Encendido en el Arduino
  44. const int Herradura = 14;    // Pin del Sensor de Herradura
  45. int HerraduraS;    // Variable del Sensor de Herradura
  46. const int LDR = 15;    // Pin del LDR
  47. int LDRS;    // Variable del Sensor LDR
  48. const int LEDR = 16;    // Pin del LED Rojo
  49. const int LEDV = 17;    // Pin del LED Verde
  50. const int Suiche = 18;    // Pin del Suiche de Encendido
  51. int OnOff;    // Variable del Suiche
  52. const int PulsosML = 239;    // Pulsos para medio litro
  53. const int PulsosL = 478;    // Pulsos para un litro
  54. volatile int LlenandoPor;    // Porcentaje de Llenado
  55. int LitroT;    // Sumador de Litros Totales
  56. int BotellasL;    // Botellas Litro Llenadas
  57. int BotellasML;    // Botellas Medio Litro Llenadas
  58.  
  59.  
  60.  
  61. void setup()
  62. {
  63.   stepper1.setMaxSpeed(1000);    // Velocidad Maxima del Motor
  64.   stepper1.setAcceleration(200);    // Aceleracion del Motor
  65.   stepper1.setSpeed(400);    // Velocidad en modo RUN
  66.   lcd.begin(16, 2);    // Tamaño de la LCD e inicio
  67.   attachInterrupt(0, Hall, RISING);    // Inicio del Contador del Flujometro
  68.   pinMode(MotorDC, OUTPUT);    // Pin Salida Motor DC
  69.   pinMode(ElectroV, OUTPUT);    // Pin Salida ElectroValvula
  70.   pinMode(LED, OUTPUT);    // Pin Salida LED
  71.   pinMode(Herradura, INPUT);    // Pin Entrada Sensor Herradura
  72.   pinMode(LDR, INPUT);    // Pin Entrada Señal LDR
  73.   pinMode(LEDR, OUTPUT);    // Pin Salida al LED Rojo
  74.   pinMode(LEDV, OUTPUT);    // Pin Salida al LED Verde
  75.   pinMode(Suiche, INPUT);    // Pin Entrada del Suiche On Off
  76. }
  77.  
  78. void loop()
  79. {
  80.   OnOff = digitalRead(Suiche);    // Lectura del Suiche
  81.   if (OnOff == HIGH)    // Decision para el Suiche
  82.   {
  83.     digitalWrite(LED, HIGH);    // Activa el LED
  84.     HerraduraS = digitalRead(Herradura);    // Comienza a leer el Sensor de Herradura
  85.     if (HerraduraS == LOW)    // Si esta apagado...
  86.     {
  87.       analogWrite(MotorDC, PwmMI);    // Arranca el motor DC
  88.       lcd.clear();    // Limpia la Pantalla LCD
  89.       lcd.print("Esperando por");    // Escribe en la LCD
  90.       lcd.setCursor(0, 1);
  91.       lcd.print("una botella");      
  92.     }
  93.     else    // Si el suiche esta en alto...
  94.     {
  95.       analogWrite(MotorDC, PwmMP);    // Para el Motor DC
  96.       lcd.clear();    // Limpia la Pantalla
  97.       lcd.print("Leyendo la");    // Escribe en la pantalla
  98.       lcd.setCursor(0, 1);
  99.       lcd.print("botella ahora");
  100.       delay(500);
  101.       digitalWrite(LEDR, HIGH);    // Enciende el LED Rojo
  102.       delay(200);
  103.       LDRS = digitalRead(LDR);    // Lee si se refleja la luz roja
  104.       if (LDRS == HIGH);    // Si se refleja va al programa MedioL
  105.       {
  106.         MedioL();    // Inicia el programa MedioL
  107.         digitalWrite(LEDR, LOW);    // Apaga el Led Rojo
  108.         delay(100);
  109.       }
  110.       digitalWrite(LEDV, HIGH);    // Enciende el LED Verde
  111.       delay(200);
  112.       LDRS = digitalRead(LDR);    // Lee si se refleja la luz verde
  113.       if (LDRS == HIGH);
  114.       {
  115.         Litro();    // Inicia el programa Litro
  116.         digitalWrite(LEDV, LOW);    // Apaga el Led Verde
  117.         delay(100);
  118.       }
  119.     }
  120.   }
  121.   else    // Si esta apagado el Suiche On Off
  122.   {
  123.     lcd.clear();    // Limpia la LCD
  124.     digitalWrite(LED, LOW);    // Apaga el LED
  125.     analogWrite(MotorDC, PwmMP);    // Para el Motor
  126.   }
  127. }
  128.  
  129. void Hall()    // Programa para el Contador
  130. {
  131.   ContadorL++;    // Contador de Pulsos del Hall
  132.   ContadorLT++;    // Contador para totalizar los litros gastados
  133. }
  134.  
  135. void MedioL()    // Programa para llenado de Medio Litro
  136. {
  137.   lcd.clear();    // Limpia la LCD
  138.   lcd.print("Botella Medio");    // Escribe en la LCD
  139.   lcd.setCursor(0, 1);
  140.   lcd.print("Litro Encontrada");
  141.   delay(200);
  142.   digitalWrite(ElectroV, HIGH);    // Activa la Electro Valvula
  143.   stepper1.setCurrentPosition(0);    // Posiciona el Motor Paso a Paso de la Llave
  144.   stepper1.runToNewPosition(800);    // Abre la llave (Media Vuelta)
  145.   while (LlenandoPor < 60);    // Mientras el porcentaje sea menor a 60 mantendra la llave igual
  146.   {
  147.     LlenandoPor = PulsosML - ContadorL / 2.39;    // Formula para llevar a porcentaje de medio litro
  148.     lcd.clear();    // Limpia la LCD
  149.     lcd.print("Llenando Botella");    // Escribe en la LCD
  150.     lcd.setCursor(0, 1);
  151.     lcd.print("MedioL= ");
  152.     lcd.print(LlenandoPor);
  153.   }
  154.   stepper1.runToNewPosition(600);    // Cierra un poco la llave
  155.   while (LlenandoPor < 80);    // Hasta que no alcance 80% no cambia
  156.   {
  157.     LlenandoPor = PulsosML - ContadorL / 2.39;
  158.     lcd.clear();
  159.     lcd.print("Llenando Botella");
  160.     lcd.setCursor(0, 1);
  161.     lcd.print("MedioL= ");
  162.     lcd.print(LlenandoPor);
  163.   }
  164.   stepper1.runToNewPosition(400);    // Cierra un poco mas la llave
  165.   while (LlenandoPor < 95);    // Hasta que no llegue a 95% no cambia
  166.   {
  167.     LlenandoPor = PulsosML - ContadorL / 2.39;
  168.     lcd.clear();
  169.     lcd.print("Llenando Botella");
  170.     lcd.setCursor(0, 1);
  171.     lcd.print("MedioL= ");
  172.     lcd.print(LlenandoPor);
  173.   }
  174.   lcd.clear();
  175.   lcd.print("Llenado Completo");
  176.   stepper1.runToNewPosition(0);    // Cierra la llave
  177.   digitalWrite(ElectroV, LOW);    // Cierra la Electro Valvula
  178.   LlenandoPor = 0;    // Resetea el porcentaje de llenado
  179.   ContadorL = 0;    // Resetea el contador de litros
  180.   LitroT = ContadorLT / 478;    // Totaliza los litros
  181.   BotellasML = BotellasML++;    // Totaliza las botellas llenadas de medio litro
  182.   lcd.clear();    // Limpia la LCD
  183.   lcd.print("Litros Totales");    // Escribe en la LCD los litros totales gastados
  184.   lcd.setCursor(0,1);
  185.   lcd.print("Llenados= ");
  186.   lcd.print(LitroT);
  187.   delay(500);
  188.   lcd.clear();
  189.   lcd.print("Botellas MedioL");    // Escribe en la LCD las botellas de medio litro llenadas
  190.   lcd.setCursor(0, 1);
  191.   lcd.print("Llenas= ");
  192.   lcd.print(BotellasML);
  193.   delay(500);
  194. }
  195.  
  196. void Litro()
  197. {
  198.   lcd.clear();
  199.   lcd.print("Botella de un");
  200.   lcd.setCursor(0, 1);
  201.   lcd.print("Litro Encontrada");
  202.   delay(200);
  203.   digitalWrite(ElectroV, HIGH);
  204.   stepper1.setCurrentPosition(0);
  205.   stepper1.runToNewPosition(800);
  206.   while (LlenandoPor < 60);
  207.   {
  208.     LlenandoPor = PulsosL - ContadorL / 4.78;
  209.     lcd.clear();
  210.     lcd.print("Llenando Botella");
  211.     lcd.setCursor(0, 1);
  212.     lcd.print("1 Litro= ");
  213.     lcd.print(LlenandoPor);
  214.   }
  215.   stepper1.runToNewPosition(600);
  216.   while (LlenandoPor < 80);
  217.   {
  218.     LlenandoPor = PulsosL - ContadorL / 4.78;
  219.     lcd.clear();
  220.     lcd.print("Llenando Botella");
  221.     lcd.setCursor(0, 1);
  222.     lcd.print("1 Litro= ");
  223.     lcd.print(LlenandoPor);
  224.   }
  225.   stepper1.runToNewPosition(400);
  226.   while (LlenandoPor < 95);
  227.   {
  228.     LlenandoPor = PulsosL - ContadorL / 4.78;
  229.     lcd.clear();
  230.     lcd.print("Llenando Botella");
  231.     lcd.setCursor(0, 1);
  232.     lcd.print("1 Litro= ");
  233.     lcd.print(LlenandoPor);
  234.   }
  235.   lcd.clear();
  236.   lcd.print("Llenado Completo");
  237.   stepper1.runToNewPosition(0);
  238.   digitalWrite(ElectroV, LOW);
  239.   LlenandoPor = 0;
  240.   ContadorL = 0;
  241.   LitroT = ContadorLT / 478;
  242.   BotellasL = BotellasL++;
  243.   lcd.clear();
  244.   lcd.print("Litros Totales");
  245.   lcd.setCursor(0,1);
  246.   lcd.print("Llenados= ");
  247.   lcd.print(LitroT);
  248.   delay(500);
  249.   lcd.clear();
  250.   lcd.print("Botellas 1 Litro");
  251.   lcd.setCursor(0, 1);
  252.   lcd.print("Llenas= ");
  253.   lcd.print(BotellasL);
  254.   delay(500);
  255. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement