sexta-feira, 26 de abril de 2013

2º Projeto - Controle de Servo com Potenciômetro (exibindo a posição no lcd)

Neste projeto vamos controlar um servo utilizando um potenciômetro (projeto 25 do livro Arduino Básico de Michael McRoberts), porém, adicionei um lcd que ira mostrar a posição em graus do servo.

Materiais:

  • Arduino Uno
  • Servo motor (micro ou pequeno)
  • 2 potenciômetros (100k para controlar o servo e 10k para ajustar o cursorlight do lcd)
  • resistor limitador de corrente 220 ohm
  • Display lcd 16x2 (verifique o datasheet do display para conectalo)

Código:


#include <Servo.h> // inclui a biblioteca servo
#include <LiquidCrystal.h> // inclui a biblioteca LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // pinos conectados ao lcd
Servo servo1;  //cria um servo
void setup() {
servo1.attach(8); // Anexa o servo (físico), no pino 5, ao objeto servo (lógico)
lcd.begin(16,2); // declara um lcd com 16 colunas e 2 linhas
}
void loop() {
int angle = analogRead(0); // Lê o valor do potenciômetro
angle=map(angle, 0, 1023, 0, 179); // Mapeia os valores de 0 a 180 graus
servo1.write(angle); // Escreve o ângulo para o servo
delay(15); // Espera de 15ms, para permitir que o servo atinja a posição
lcd.setCursor(0,0); /* define a posição do cursor */
lcd.print("Angulo: ");  // printa Angulo
lcd.setCursor(7,1);
lcd.print(angle); /* printa a leitura do angulo de 0 a 180 */
if(angle < 10) { // se for menor que 10 apaga os digitos "sobrando"
  lcd.setCursor(8,1);
  lcd.print("  ");
  }
  if(angle < 100){
    lcd.setCursor(9,1);
    lcd.print("  ");
  }
}
 E sempre que você alterar o potenciômetro a posição do servo ira aparecer no lcd. 

3 comentários:

  1. Excelentes tópicos, muita informações consegui aqui! estou construindo um braço robotico, esta quase pronto! quero mostrar as posições dos servo em display lcd 20x4 mas o lcd mostra alguns caracteres estranhos(parece letras japonesas).
    ex:
    if (results.value == 16761405 || results.value == 2400 || results.value == 352)
    if(pos1 < 179)
    pos1 = pos1 + 1;
    delay(35);
    Serial.println("Posicao J1");
    Serial.println(pos1);
    lcd.setCursor(0,1);
    lcd.print(pos1);
    j1.write(pos1);

    o que pode estar errado ? Obrigado e Excelente trabalho!

    ResponderExcluir
    Respostas
    1. Obrigado Leandro, desculpa a demora pra responder, o blog esta meio parado pq a facul ta puxando rsrs
      bom quando eu tive esse problema dos caracteres, era mal contado com o display LCD

      Excluir
  2. Tem a necessidade de utilizar o potenciômetro para o LCD? Se sim qual a sua função?

    ResponderExcluir