RuiViana

Bobinadeira_V_4.0__PRESSOR.ino

May 5th, 2020
221
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. /*
  3.    Nome do Projeto:  Bobinadeira
  4.    Nome do Aquivo:   bobinadeira_Botao13.ino
  5.    link:        http://labdegaragem.com/forum/topics/bobinadeira-autom-tica-controlada-com-arduino
  6.    Dependencias:     funcoes13.ino
  7.    MCU:              ATmega
  8.    Board:            Arduino Uno/Mega/Mini
  9.    Compilador        N/A
  10.    IDE:              Arduino IDE 1.8.5
  11.    Hardware:         Arduino UNO/MEGA/Mini
  12.    Escrito por:      Rui Viana
  13.    Modificado por:   N/A
  14.    Data:             23/06/2018
  15.    Uso:              Didático
  16.    Desenhos          CONTADOR2_SIMU.PDF
  17.    Copyright @       N/A
  18.  
  19.    Este programa é software livre;
  20.    e é distribuído na esperança que possa ser útil, mas SEM QUALQUER GARANTIA;
  21.    mesmo sem a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM DETERMINADO FIM.
  22. */
  23. //#define debug
  24. #include <LiquidCrystal.h>
  25.  
  26. #include <Stepper.h>                                        // Biblioteca para uso do step motor
  27. Stepper stepper(200, PA12, PA11);                           // Portas do step e steps por volta
  28.  
  29. LiquidCrystal lcd(PA5, PA4, PA3, PA2, PA1, PA0);
  30.  
  31. #define brk PB9                                              // Controle do break
  32. //Botoes para controle do menu
  33. #define BT1 PB8                                              //Enter                  
  34. #define BT2 PB7                                              //down
  35. #define BT3 PB6                                              //Left
  36. #define BT4 PB5                                              //Right
  37. #define BT5 PB4                                              //Up
  38. #define BT6 R                                                //Reset
  39.  
  40. #define encoder PA15                                          // Entrada do encoder do motor principal
  41. //#define motor_carretel PB12                                   // Port motor do carretel PB13
  42.  
  43. int     numEsp         = 903;                               // Numero de espiras previstas
  44. float   bitFio         = 0.5;                                // Bitola do fio em mm
  45. float   carrLeng       = 26;                                // Comprimento do carretel
  46. int     numEspAtual    =  0;                                // Numero de espirar atuais
  47. bool    incrementou = false;                                // Controle de incremento de espiras
  48. int     espFase        =  1;                                // N de espiras por etapa
  49. int     espCam         =  0;                                // Calcula o numero de espira por camada
  50. int     camf           =  0;                                // Numero de camada feita
  51. float   dln            =  0;                                // Fator de correção de largura
  52. float   dciclos        =  0;                                // Fator de correção passo
  53. bool    isolador    = false;                                // Contrele de isolador de camada
  54. int     menu           =  0;                                // Telas do sistema
  55. int     conta          =  0;                                // Variavel encoder
  56. int     conta_old      =  0;                                // Estado ant encoder
  57. int     cstep          =  0;                                // Contador de passos
  58. int     ciclos         =  0;                                // Calcula o numero de ciclos da guia linear para cada passo
  59. bool    direct         =  1;                                // Sentido da guia
  60. float   incrementa     =  1;                                // Offset de incremento
  61. bool    pause       = false;                                // Contrele de pause
  62.  
  63. // Controle do motor da bobina
  64.  
  65. #define  EnaA PA6                                             // Habilita motor
  66. #define  IN1 PB13                                             // Fase1 do motor
  67. #define  IN2 PB14                                             // Fase2 do motor
  68. #define  cntl PA7                                             // Central do pot
  69. int velocidade = 0;                                           // Velocidade do motor
  70. //---------------------------------------------------------
  71. void ligaMotor()
  72. {
  73.   digitalWrite(IN1, HIGH);
  74.   digitalWrite(IN2, LOW);
  75.   analogWrite(EnaA, velocidade);                            // PWM com o valor de velocidase calculado
  76. }
  77. //---------------------------------------------------------
  78. void desligaMotor()
  79. {
  80.   velocidade = 0;                                           // Zera velocidade
  81.   digitalWrite(IN1, HIGH);                                  //
  82.   digitalWrite(IN2, HIGH);                                  //
  83.   analogWrite(EnaA, velocidade);                            //
  84. }
  85. //---------------------------------------------------------
  86. void setup()
  87. {
  88.   Serial.begin(115200);
  89.   stepper.setSpeed(600);                                    // Define velocidade do step
  90.   lcd.begin(16, 2);                                         // Inicializa LCD
  91.   pinMode(encoder, INPUT);                                  // Encoder como INPUT
  92.   pinMode(brk, INPUT_PULLUP);                               // Break como INPUT
  93. #ifdef  debug
  94.   pinMode(encoder, INPUT_PULLUP);                           // Debug
  95. #endif
  96.   pinMode(BT1, INPUT_PULLUP);                               // Botoes como INPUT
  97.   pinMode(BT2, INPUT_PULLUP);
  98.   pinMode(BT3, INPUT_PULLUP);
  99.   pinMode(BT4, INPUT_PULLUP);
  100.   pinMode(BT5, INPUT_PULLUP);
  101.   //  pinMode(motor_carretel, OUTPUT);                          // Port do motor do carretel como saida
  102.   //  digitalWrite(motor_carretel, LOW);                        // Desliga motor do carretel
  103.   desligaMotor();
  104.   // Controle do motor
  105.   pinMode(IN1, OUTPUT);                                     // Fase1 do motor
  106.   pinMode(IN2, OUTPUT);                                     // Fase2 do motor
  107.   pinMode(EnaA, OUTPUT);                                    // Habilita motor
  108.   pinMode(cntl, INPUT);                                     // Central do pot
  109.   digitalWrite(EnaA, HIGH);                                 // Habilita motor em HIGH
  110.   attachInterrupt(digitalPinToInterrupt(PA15), contagem, RISING);
  111.  
  112.   Serial.println("Iniciando......");
  113.  
  114. }
  115. //--------------------------------------------------------
  116. void contagem()
  117. {
  118.   numEspAtual++;
  119.   incrementou = true;                                     // Informa incremento de espiras
  120. }
  121. //---------------------------- LOOP -----------------------------
  122. void loop()
  123. {
  124.   int pot = 0;                                              // Variavel para receber o valor analogico
  125.   pot = analogRead(cntl);                                   // Le o port analogico
  126.   velocidade = map(pot, 0, 4095, 20, 252);                  // Converte o valor
  127.   Serial.print("velocidade  "); Serial.println(velocidade);
  128.   selecao();                                                // Rotina IHM
  129.   cstep = 0;                                                // Zera contador de passos do step
  130.   ligaMotor();
  131.   //digitalWrite(motor_carretel, HIGH);                       // Liga motor de giro do carretel
  132.   //conta = digitalRead(encoder);                             // Atualiza a contagem de espiras
  133. //  if (conta == LOW and conta_old == HIGH)                   // Se sensor motor HIGH e conta_old LOW  (Houve ciclo do motor)
  134. //  {
  135. //    incrementou = true;                                     // Informa incremento de espiras
  136. //    numEspAtual++;                                          // Incrementa numero de espiras feitas
  137. //  }
  138.   conta_old = conta;                                        // Atualiza contador de pulso
  139.   if (incrementou == true)                                  // Houve incremento de espiras
  140.   {
  141.     LCDContagem();                                          // Mostra contagem de espiras e camadas
  142.     incrementou = false;                                    // Desabilita informar incremento de espiras
  143.     if (numEspAtual == numEsp)                              // Numero de espiras realizadas = num de espiras esperadas
  144.     {
  145.       desligaMotor();
  146.       //digitalWrite(motor_carretel, LOW);                    // Desliga motor de giro do carretel
  147.       endProcess();                                         // Para processo
  148.     }
  149.     if (numEspAtual < numEsp)                               // Numero de espiras realizadas < num de espiras esperadas
  150.     {
  151.       if (direct != LOW)                                    // Se direcao e CW
  152.       {
  153.         while (cstep < ciclos)                              // Enquanto contagem de passos for menor que ciclos
  154.         {
  155.           clockwise();                                      // Gira um step CW
  156.           cstep = cstep + 1;                                // Incrementa contador de passos
  157.         }
  158.       }
  159.       else                                                  // Se direcao e CCW
  160.       {
  161.         while (cstep < ciclos)                              // Enquanto contagem de passos for menor que ciclos
  162.         {
  163.           counterclockwise();                               // Gira um step CCW
  164.           cstep = cstep + 1;                                // Incrementa contador de passos
  165.         }
  166.       }
  167.       if (numEspAtual % espCam == 0)                        // Se modulo de qte de espiras por camada = 0
  168.       {
  169.         camf++;                                             // Incremen ta contador de camadas
  170.         LCDContagem();                                      // Mostra contagem de espiras e camadas
  171.         direct = not(direct);                               // Inverte direcao do step
  172.         if (isolador == true)                               // Se precisa de isolador ligado
  173.         {
  174.           desligaMotor();
  175.           //digitalWrite(motor_carretel, LOW);                // Desligue o motor do carretel
  176.           int t = 0;                                        // Define t como inteiro e igual a zero  ??
  177.           for (t = 0; t < 50;)                              // Faca 50 vezes ??
  178.           {
  179.             if (digitalRead(brk) == 0)                      // Se o brake foi pressionado
  180.             {
  181.               delay(500);                                   // Delay
  182.               break;                                        // termine o for
  183.             }
  184.           }
  185.         }
  186.       }
  187.       while (pause == HIGH)
  188.       {
  189.         desligaMotor();
  190.         //digitalWrite(motor_carretel, LOW);                    // Desligue o motor do carretel
  191.         if (digitalRead(brk) == 0)                            // Se o brake foi pressionado
  192.         {
  193.           delay(30);                                          // Debouncing
  194.           if (digitalRead(brk) == 0)                          // Se o brake continua pressionado
  195.           {
  196.             pause = LOW;                                      // Desabilita pause
  197.             delay(500);                                       // Delay
  198.           }
  199.         }
  200.       }
  201.     }
  202.   }
  203.   if (digitalRead(brk) == 0)                                // Se o brake foi pressionado
  204.   {
  205.     delay(30);                                              // Debouncing
  206.     if (digitalRead(brk) == 0)                              // Se o brake continua pressionado
  207.     {
  208.       pause = HIGH;                                         // Habilita pause
  209.     }
  210.   }
  211. }
RAW Paste Data