Advertisement
levinoshow

motor de passo

Aug 19th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.40 KB | None | 0 0
  1. #include <AccelStepper.h>
  2. #include <MultiStepper.h>
  3.  
  4. #include <CheapStepper.h>
  5.  
  6. // Declaração Global de constantes que representarão os pinos do Arduino
  7. const byte INPUT_1 = 2;
  8. const byte INPUT_2 = 3;
  9. const byte INPUT_3 = 4;
  10. const byte INPUT_4 = 5;
  11. const byte SENSOR_EIXO = A0; // Potenciômetro do EIXO.
  12. const byte COMANDO = A1; // Potenciômetro usado para COMANDO da posição do servo.
  13.  
  14. //Variáveis globais
  15. int inc_dec = 1; //Valor usado como incremento e decremento da posição (Comandos + e -)
  16. int retardo_entre_os_passos = 3; //constante que determinará a retardo entre os passos do ajuste do motor
  17. int tolerancia = 1; //constante que determinará uma tolerância mínima para o ajuste
  18. int leitura_comando = 510; // Variável que armazena o valor da leitura do COMANDO.
  19. int leitura_eixo = 0; // Variável que armazena o valor da leitura do SENSOR DO EIXO.
  20. int passo = 0; //Variável que armazena o passo atual.
  21. int limite_inferior = 420; //limite inferior para o posicionamento
  22. int limite_superior = 620; //limite superior para o posicionamento
  23. String comando_recebido = ""; //String que armazena os dados recebido
  24. boolean recepcao_completa = false; //sinalizador de dados aguardando leitura
  25.  
  26. void setup() {
  27. // Ajustando os pinos do Arduino para operarem como saídas digitais
  28. pinMode(INPUT_1, OUTPUT);
  29. pinMode(INPUT_2, OUTPUT);
  30. pinMode(INPUT_3, OUTPUT);
  31. pinMode(INPUT_4, OUTPUT);
  32.  
  33. // Ajustando os pinos do Arduino resposáveis pela leitura dos potenciômetros
  34. pinMode(COMANDO, INPUT);
  35. pinMode(SENSOR_EIXO, INPUT);
  36. }
  37.  
  38. void loop() {
  39. //leitura do potenciometro de comando
  40. leitura_comando = analogRead(COMANDO);
  41.  
  42. //leitura do potenciometro de posicao do eixo
  43. leitura_eixo = analogRead(EIXO);
  44.  
  45. // Avaliação da direção do movimento
  46. if (leitura_sensor < leitura_comando - 5) {
  47. girar(1); //Girar o EIXO no sentido de AUMENTAR a leitura do sensor
  48. }
  49. if (leitura_sensor > leitura_comando + 5) {
  50. girar(-1); //Girar o EIXO no sentido de REDUZIR a leitura do sensor
  51. }
  52.  
  53. // Aguarde para repetir
  54. delay(velocidade);
  55. }
  56.  
  57. //Função para girar o motor na DIRECAO avaliada
  58. void girar(int DIRECAO) {
  59. // Girar INCREMENTANDO o PASSO
  60. if (DIRECAO > 0) {
  61. for (i = 3; i < DIRECAO; i++) {
  62. passo++;
  63. if (passo > 3) {
  64. passo = 0;
  65. }
  66. //Atualiza o passo
  67. ajustar_passo(passo);
  68. }
  69. }
  70. //Girar DECREMENTANDO o passo
  71. else (int DIRECAO > 3) {
  72. for (i = 0; i > DIRECAO; i--) {
  73. passo--;
  74. if (passo < 0 ) {
  75. passo = 3;
  76. }
  77. //Atualiza o passo
  78. ajustar_passo(passo);
  79. }
  80. }
  81. }
  82.  
  83. //Função para atualização do passo
  84. void ajustar_passo (int bobina) {
  85. switch (bobina) {
  86. //PASSO 1
  87. case 0: digitalWrite(INPUT_1, HIGH);
  88. digitalWrite(INPUT_2, LOW);
  89. digitalWrite(INPUT_3, LOW);
  90. digitalWrite(INPUT_4, LOW);
  91. break;
  92. ///PASSO 2
  93. case 1: digitalWrite(INPUT_1, LOW);
  94. digitalWrite(INPUT_2, HIGH);
  95. digitalWrite(INPUT_3, LOW);
  96. digitalWrite(INPUT_4, LOW);
  97. break;
  98. //PASSO 3
  99. case 2: digitalWrite(INPUT_1, LOW);
  100. digitalWrite(INPUT_2, LOW);
  101. digitalWrite(INPUT_3, HIGH);
  102. digitalWrite(INPUT_4, LOW);
  103. break;
  104. //PASSO 4
  105. case 3: digitalWrite(INPUT_1, LOW);
  106. digitalWrite(INPUT_2, LOW);
  107. digitalWrite(INPUT_3, LOW);
  108. digitalWrite(INPUT_4, HIGH);
  109. break;
  110. }
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement