Início›Servo
⬤ Servo · Intermédio

🦾 Servo Motor — Posição Precisa

⏱️ 30 min🧩 Servo.write() · Potenciómetro · Sequências · 2 Servos

Nesta página

🔄 Varredura com LCD

ex_servo.ino
#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);
Servo sv;
int ultA = -1;

void mostrar(int a, const char* pos) {
  if(a==ultA) return;
  lcd.setCursor(0,1); lcd.print("Ang: ");lcd.print(a);lcd.print(" graus  ");
  lcd.setCursor(0,2); lcd.print(pos);lcd.print("        ");
  ultA = a;
}

void setup() {
  lcd.init(); lcd.backlight();
  sv.attach(9); sv.write(90);
  lcd.setCursor(0,0); lcd.print("Servo D9 Varredura");
}

void loop() {
  for(int a=0; a<=180; a+=2) { sv.write(a); mostrar(a,"AVANCA"); delay(15); }
  for(int a=180; a>=0; a-=2) { sv.write(a); mostrar(a,"RECUA "); delay(15); }
}

🎛️ Controlo por Potenciómetro e Sequências

ex_servo_pot_seq.ino
// Potenciómetro em A0
void loop_pot() {
  int ang = map(analogRead(A0), 0, 1023, 0, 180);
  sv.write(ang);
  lcd.setCursor(0,1); lcd.print(ang); lcd.print(" graus  ");
  delay(20);
}

// Sequência programada
struct Pos { int ang; int ms; const char* n; };
const Pos seq[] = {{0,800,"Fechado"},{90,1200,"Meio   "},{180,800,"Aberto "}};
void loop_seq() {
  for(auto& p : seq) {
    sv.write(p.ang);
    lcd.setCursor(0,1); lcd.print(p.n);
    lcd.setCursor(0,2); lcd.print(p.ang); lcd.print(" graus  ");
    delay(p.ms);
  }
}

🦾 Dois Servos com Joystick

ex_2servos.ino
#include <Servo.h>
Servo sv1, sv2;
#define JX A0
#define JY A1
#define DZ 80
int a1=90, a2=90;

void setup() {
  sv1.attach(9);  sv1.write(90);
  sv2.attach(10); sv2.write(90);
}

void loop() {
  int dx = analogRead(JX)-512;
  int dy = analogRead(JY)-512;
  if(dx> DZ) a1=constrain(a1+2,0,180);
  if(dx<-DZ) a1=constrain(a1-2,0,180);
  if(dy> DZ) a2=constrain(a2+2,0,180);
  if(dy<-DZ) a2=constrain(a2-2,0,180);
  sv1.write(a1); sv2.write(a2);
  lcd.setCursor(0,1); lcd.print("J1:");lcd.print(a1);lcd.print("  J2:");lcd.print(a2);lcd.print("  ");
  delay(20);
}

🏆 Para ir mais longe

PR.FT9_5 · LCD 20×4 · L293D Motor Driver · Arduino UNO Rev3 · Início · led.dge.medu.pt