Arduino Nano - Botão - Servo Motor

Neste tutorial, você vai aprender a controlar um servo motor usando um Arduino Nano e um botão. Quando o botão é pressionado, o servo motor gira 90 graus. Se o botão for pressionado novamente, o servo motor volta para 0 grau. Essa ação se repete continuamente.

Este tutorial tem duas seções:

Hardware Necessário

1×Official Arduino Nano
1×Alternatively, DIYables Nano V3.0 Development Board
1×Cabo USB A para Mini-B
1×Botão para Protoboard com Capa
1×Kit de Botões para Protoboard
1×Botão de Pressão para Painel
1×Módulo de Botão
1×Servo Motor
1×Protoboard
1×Fios Jumper
1×(Opcional) Conector de Alimentação DC
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para Arduino Nano
1×(Recomendado) Placa de Expansão Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentação para Arduino Nano

Or you can buy the following kits:

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 Botão

Se você não conhece servo motores e botões (incluindo pinagens, como funcionam e como programá-los), os tutoriais a seguir podem ajudar:

Diagrama de Ligação

Diagrama de ligação do Arduino Nano com botão e servo motor

This image is created using Fritzing. Click to enlarge image

Note que o diagrama de ligação mostrado acima é adequado apenas para um servo motor de baixo torque. Caso o motor vibre em vez de girar, é preciso usar uma fonte de alimentação externa para operar o servo motor. O diagrama de ligação a seguir mostra como conectar o servo motor a uma fonte de alimentação externa.

Diagrama de ligação do Arduino Nano com servo motor e botão

This image is created using Fritzing. Click to enlarge image

Veja A melhor forma de alimentar o Arduino Nano e outros componentes.

Não se esqueça de conectar o GND da fonte externa ao GND do Arduino.

Código Arduino Nano - Botão Controla o Servo Motor Sem Debounce

/* * Este código de Arduino Nano foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano/arduino-nano-button-servo-motor */ #include <Servo.h> const int BUTTON_PIN = 2; // The Arduino Nano pin connected to button's pin const int SERVO_PIN = 9; // The Arduino Nano pin connected to servo motor's pin Servo servo; // create servo object to control a servo int angle = 0; // The current angle of servo motor int prev_button_state; // The previous state of button int button_state; // The current state of button void setup() { Serial.begin(9600); // Initialize the Serial to communicate with the Serial Monitor. pinMode(BUTTON_PIN, INPUT_PULLUP); // set arduino pin to input pull-up mode servo.attach(SERVO_PIN); // attaches the servo on pin 9 to the servo object servo.write(angle); button_state = digitalRead(BUTTON_PIN); } void loop() { prev_button_state = button_state; // save the last state button_state = digitalRead(BUTTON_PIN); // read new state if(prev_button_state == HIGH && button_state == LOW) { Serial.println("The button is pressed"); // change angle of servo motor if(angle == 0) angle = 90; else if(angle == 90) angle = 0; // rotate the servo motor to the angle position servo.write(angle); } }

Passos Rápidos

  • Conecte um cabo USB ao seu Arduino Nano e ao PC.
  • Abra o Arduino IDE e selecione a placa e a porta corretas.
  • Cole o código no IDE e abra-o.
  • Clique no botão Upload do IDE para enviar o código para o Arduino Nano.
  • Pressione o botão várias vezes.
  • Observe o movimento do servo motor.

※ Nota:

Na prática, o código mencionado acima nem sempre funciona corretamente. Para garantir que ele funcione bem, precisamos fazer o debounce do botão. Fazer o debounce do botão pode ser difícil para quem é novo no assunto. Felizmente, com a ajuda da biblioteca ezButton, essa tarefa fica muito mais simples.

Código Arduino Nano - Botão Controla o Servo Motor Com Debounce

Por que o debounce é necessário? Veja o Arduino Nano - Tutorial de Debounce de Botão para mais informações.

/* * Este código de Arduino Nano foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano/arduino-nano-button-servo-motor */ #include <Servo.h> #include <ezButton.h> const int BUTTON_PIN = 2; // The Arduino Nano pin connected to button's pin const int SERVO_PIN = 9; // The Arduino Nano pin connected to servo motor's pin ezButton button(BUTTON_PIN); // create ezButton object for pin 7; Servo servo; // create servo object to control a servo int angle = 0; // The current angle of servo motor void setup() { Serial.begin(9600); // Initialize the Serial to communicate with the Serial Monitor. button.setDebounceTime(50); // set debounce time to 50 milliseconds servo.attach(SERVO_PIN); // attaches the servo on pin 9 to the servo object servo.write(angle); } void loop() { button.loop(); // MUST call the loop() function first if(button.isPressed()) { Serial.println("The button is pressed"); // change angle of servo motor if(angle == 0) angle = 90; else if(angle == 90) angle = 0; // rotate the servo motor to the angle position servo.write(angle); } }

Passos Rápidos

  • Instale a biblioteca ezButton. Consulte o Como Fazer para ver as instruções.
  • Abra o código no Arduino IDE.
  • Clique no botão Upload do Arduino IDE para fazer o upload do código para o Arduino Nano.
  • Pressione o botão várias vezes.
  • Observe as mudanças no servo motor.

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!