Controlando um servo com um potenciômetro e um LCD1602 usando Arduino

Controlando um servo com um potenciômetro e um LCD1602 usando Arduino

Neste tutorial, aprenderemos como controlar um servo motor usando um potenciômetro e exibir o valor do potenciômetro, bem como o ângulo do servo, em um display LCD1602. Este projeto é uma ótima maneira de combinar vários componentes e entender como eles podem trabalhar juntos para criar um sistema interativo. Ao final deste tutorial, você terá uma configuração funcional que permite ajustar o ângulo do servo com um manípulo enquanto exibe simultaneamente os valores no LCD.

Antes de entrarmos na fiação e no código, é útil entender os componentes que vamos usar. O potenciômetro atua como um resistor variável que pode ajustar a tensão de saída com base na sua posição, o que usaremos para determinar o ângulo do servo. O LCD1602 exibirá o valor atual do potenciômetro e o ângulo correspondente do servo. Você pode consultar o vídeo (no vídeo em 00:00) para um guia visual de todo o processo.

Hardware explicado

Os principais componentes que usaremos neste projeto são:

  • Placa Arduino:Isso servirá como o controlador de todo o sistema, processando as entradas do potenciômetro e controlando a posição do servo com base nessas entradas.
  • Potenciômetro:Um potenciômetro de 10 kΩ será usado para fornecer uma entrada analógica ao Arduino. Ele tem três terminais: um ligado a 5V, outro ao terra (GND) e o terminal do meio ligado a um pino analógico (A0) do Arduino.
  • Servomotor:Este servo será controlado enviando-lhe um ângulo com base na posição do potenciômetro. O fio de sinal conecta-se a um pino digital do Arduino (pino 9).
  • Display LCD1602:Este display mostrará o valor do potenciômetro e o ângulo do servo. Ele se conecta a vários pinos digitais do Arduino para controle.

O potenciômetro funciona variando a resistência e, assim, a tensão em seu terminal do meio, que o Arduino lê como uma entrada analógica. O motor servo é controlado enviando-lhe um sinal específico de modulação por largura de pulso (PWM) correspondente ao ângulo desejado. O LCD1602 utiliza uma biblioteca que nos permite controlar facilmente seu display e exibir informações referentes ao potenciômetro e ao servo.

Detalhes da ficha técnica

Fabricantevários
Número da peçaLM016L
Tensão lógica/IO5 V
Tensão de alimentação4,5 - 5,5 V
Corrente de saída (por canal)até 2 mA
Corrente de pico (por canal)20 mA
Orientação sobre a frequência PWM50 Hz
Limiares da lógica de entrada0.3 x Vcc(baixo), 0.7 x Vcc(alto)
Queda de tensão / RDS (ligado)/ saturação0,2 V máx.
Limites térmicos85 °C
PacoteDIP de 16 pinos
Notas / variantesdisplay de 16x2 caracteres

  • Conecte o pino central do potenciômetro ao pino analógico A0.
  • Certifique-se de que o servo esteja alimentado por uma fonte de 5V e conectado ao pino digital 9.
  • Use a biblioteca apropriada para o LCD e certifique-se de que ela esteja incluída no seu Arduino IDE.
  • Tenha cuidado com a fiação para evitar curtos-circuitos, especialmente com as conexões do servo.
  • Verifique se o LCD está inicializado corretamente no código para evitar problemas de exibição.
Arduino wiring for LCD1602 12wires servo and pot
Arduino wiring for LCD1602 12wires servo and pot

Instruções de fiação

Para ligar os componentes, comece conectando o potenciômetro. Conecte um dos pinos externos do potenciômetro ao pino 5V do Arduino e o outro pino externo ao terra. O pino do meio vai para o pino analógicoA0.

Em seguida, para o servo motor, conecte o fio marrom ou preto ao terra, o fio vermelho ao pino de 5V e o fio amarelo ou laranja ao pino digital9no Arduino. Para o LCD1602, conecte oVDDpino para 5V,RWaterrar, eV0ao pino do meio do potenciômetro para ajuste de contraste. ConecteRSfixar12,ENprender11,D4fixar5,D5prender4,D6fixar3, eD7fixar2.

Também é recomendado incluir um resistor de 220 ohms em série com o LED, se estiver a usar um, ligando-o à alimentação de 5 V. Além disso, um capacitor de 470 µF pode ser ligado entre a alimentação e o terra do servo para filtrar quaisquer ruídos durante a operação.

Exemplos de Código e Passo a Passo

O código começa incluindo as bibliotecas necessárias e inicializando os pinos do LCD e do servo. O trecho a seguir mostra a configuração do LCD e do servo:

void setup() {
  lcd.begin(16, 2);
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Robojax Servo Knob");
  delay(2000);
}

Este trecho inicializa o LCD para 16 colunas e 2 linhas, conecta o servo ao pino 9 e exibe uma mensagem de boas-vindas no LCD. Olcd.clear()A função garante que quaisquer mensagens anteriores sejam removidas.

Em seguida, o loop lê continuamente o valor do potenciômetro e atualiza a posição do servo e o display LCD:

void loop() {
  val = analogRead(potpin);            // reads the value of the potentiometer
  angle = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo
  myservo.write(angle);                  // sets the servo position according to the scaled value
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Pot. Value:");
  lcd.setCursor(11, 0);
  lcd.print(val);
  lcd.setCursor(0, 1);
  lcd.print("Angle     :");
  lcd.setCursor(11, 1);
  lcd.print(angle);
  delay(500);
}

Este loop lê o valor do potenciômetro, mapeia-o para um ângulo correspondente para o servo e atualiza o display LCD com o valor do potenciômetro e o ângulo do servo. Odelay(500)no final do loop evita que a exibição seja atualizada muito rapidamente.

Demonstração / O que esperar

Ao ligar o sistema, o LCD exibirá Robojax Servo Knob por 2 segundos, seguido pelo valor do potenciômetro e pelo ângulo do servo. À medida que você gira o potenciômetro, o ângulo do servo mudará de acordo e o novo valor do potenciômetro será refletido no LCD. Se você perceber qualquer comportamento inesperado, como o servo se mover na direção errada, verifique a fiação do potenciômetro e as conexões do servo (no vídeo em 10:00).

Imagens

SG90_servo_motor-1
SG90_servo_motor-1
SG90_servo_motor-0
SG90_servo_motor-0
Arduino wiring for LCD1602 12wires servo and pot
Arduino wiring for LCD1602 12wires servo and pot
97-This is the Arduino code for controlling a servo with a potentiometer and an LCD1602.
Idioma: C++
Copiado!

Recursos e referências

Arquivos📁

Nenhum arquivo disponível.