Um servo é um sistema de malha fechada com motor DC + caixa redutora + potenciómetro interno. Aceita PWM a 50 Hz: pulso de 1 ms → 0°, 1.5 ms → 90°, 2 ms → 180°.
| Pulso | Ângulo | Comando |
|---|---|---|
| ~1 000 µs | 0° | servo.write(0) |
| ~1 500 µs | 90° (centro) | servo.write(90) |
| ~2 000 µs | 180° | servo.write(180) |
#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
Servo sv;
int ultAng = -1;
void mostrarAng(int a) {
if(a == ultAng) return;
lcd.setCursor(0,1); lcd.print("Angulo: ");
lcd.print(a); lcd.print(" graus ");
ultAng = a;
}
void setup() {
lcd.init(); lcd.backlight();
sv.attach(9); sv.write(90);
lcd.setCursor(0,0); lcd.print("Servo D9 — Varred.");
}
void loop() {
for(int a=0; a<=180; a+=2) { sv.write(a); mostrarAng(a); delay(15); }
for(int a=180; a>=0; a-=2) { sv.write(a); mostrarAng(a); delay(15); }
}void loop() {
int raw = analogRead(A0);
int ang = map(raw, 0, 1023, 0, 180);
sv.write(ang);
lcd.setCursor(0,1); lcd.print("Ang: "); lcd.print(ang); lcd.print(" graus ");
lcd.setCursor(0,2); lcd.print("Raw: "); lcd.print(raw); lcd.print(" ");
delay(20);
}struct Pos { int ang; int ms; const char* nome; };
const Pos seq[] = {
{ 0, 800, "Fechado "},
{ 45, 600, "Ajar "},
{ 90, 1200,"Meio aberto"},
{180, 800, "Aberto "}
};
void loop() {
for(auto& p : seq) {
sv.write(p.ang);
lcd.setCursor(0,1); lcd.print(p.nome);
lcd.setCursor(0,2); lcd.print(p.ang); lcd.print(" graus ");
delay(p.ms);
}
}