Arduino - Encoder Rotativo - Servo Motor

Neste tutorial, vamos aprender a programar o Arduino para girar um servo motor de acordo com o valor de saída do encoder rotativo.

Hardware Necessário

1×Arduino Uno R3
1×Cabo USB 2.0 tipo A/B (para PC com USB-A)
1×Cabo USB 2.0 tipo C/B (para PC com USB-C)
1×Servo Motor
1×Encoder Rotativo
1×Protoboard
1×Fios Jumper
1×(Recomendado) Shield com Bornes de Parafuso para Arduino Uno
1×(Recomendado) Sensors/Servo Expansion Shield for Arduino Uno
1×(Recomendado) Shield de Protoboard para Arduino Uno
1×(Recomendado) Case para Arduino Uno
1×(Recomendado) Placa Base de Prototipagem e Kit de Protoboard para Arduino Uno

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.

Buy Note: For controlling multiple servo motors, use the PCA9685 16 Channel PWM Servo Driver Module to save MCU pins and simplify wiring.

Sobre o Servo Motor e o Encoder Rotativo

Se você ainda não conhece o servo motor e o encoder rotativo (pinagem, como funcionam, como programar ...), aprenda sobre eles nos seguintes tutoriais:

Diagrama de Ligação

Diagrama de Ligação do Encoder Rotativo e Servo Motor com Arduino

This image is created using Fritzing. Click to enlarge image

Código Arduino

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-rotary-encoder-servo-motor */ #include <Servo.h> #define CLK_PIN 2 #define DT_PIN 3 #define SW_PIN 4 #define SERVO_PIN 9 #define DIRECTION_CW 0 // clockwise direction #define DIRECTION_CCW 1 // counter-clockwise direction int counter = 0; int direction = DIRECTION_CW; int CLK_state; int prev_CLK_state; Servo servo; // create servo object to control a servo void setup() { Serial.begin(9600); // configure encoder pins as inputs pinMode(CLK_PIN, INPUT); pinMode(DT_PIN, INPUT); // read the initial state of the rotary encoder's CLK pin prev_CLK_state = digitalRead(CLK_PIN); servo.attach(SERVO_PIN); // attaches the servo on pin 9 to the servo object servo.write(0); } void loop() { // read the current state of the rotary encoder's CLK pin CLK_state = digitalRead(CLK_PIN); // If the state of CLK is changed, then pulse occurred // React to only the rising edge (from LOW to HIGH) to avoid double count if (CLK_state != prev_CLK_state && CLK_state == HIGH) { // if the DT state is HIGH // the encoder is rotating in counter-clockwise direction => decrease the counter if (digitalRead(DT_PIN) == HIGH) { counter--; direction = DIRECTION_CCW; } else { // the encoder is rotating in clockwise direction => increase the counter counter++; direction = DIRECTION_CW; } Serial.print("DIRECTION: "); if (direction == DIRECTION_CW) Serial.print("Clockwise"); else Serial.print("Counter-clockwise"); Serial.print(" | COUNTER: "); Serial.println(counter); if (counter < 0) counter = 0; else if (counter > 180) counter = 180; // sets the servo angle according to the counter servo.write(counter); } // save last CLK state prev_CLK_state = CLK_state; }

Passos Rápidos

  • Conecte o Arduino ao PC via cabo USB
  • Abra o Arduino IDE, selecione a placa e a porta corretas
  • Copie o código acima e abra-o no Arduino IDE
  • Clique no botão Upload no Arduino IDE para carregar o código no Arduino
Arduino IDE - Carregar o Código
  • Abra o Serial Monitor
  • Gire o encoder rotativo
  • Observe a rotação do servo motor
  • Veja o resultado no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
DIRECTION: Clockwise | COUNTER/ANGLE: 19 DIRECTION: Clockwise | COUNTER/ANGLE: 26 DIRECTION: Clockwise | COUNTER/ANGLE: 34 DIRECTION: Clockwise | COUNTER/ANGLE: 46 DIRECTION: Clockwise | COUNTER/ANGLE: 53 DIRECTION: Counter-clockwise | COUNTER/ANGLE: 46 DIRECTION: Counter-clockwise | COUNTER/ANGLE: 34 DIRECTION: Counter-clockwise | COUNTER/ANGLE: 26 DIRECTION: Counter-clockwise | COUNTER/ANGLE: 16 DIRECTION: Counter-clockwise | COUNTER/ANGLE: 06
Ln 11, Col 1
Arduino Uno on COM15
2

Explicação do Código

Leia a explicação linha por linha nas linhas de comentário do código-fonte!

Vídeo

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!