RuiViana

Bobinadeira_V_2.0__PRESSOR.ino

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