← Sair
Cancela Automática com Servo Motor e Sensor
Modo Bancada · Plugada

Cancela Automática com Servo Motor e Sensor

Atuadores + sensores · Lógica condicional · Automação real

🎯 O que vamos aprender
  • • Integrar entrada (sensor ultrassônico) e saída (servo motor) num mesmo sistema.
  • • Programar uma decisão condicional baseada em distância medida.
  • • Compreender o conceito de PWM (modulação por largura de pulso) usado pelo servo.
  • • Construir um protótipo funcional que simula uma situação real de automação.
🧰 O que vamos usar
Placa Arduino (Uno / Nano / Mega)
Placa Arduino (Uno / Nano / Mega)
Protoboard
Protoboard
Jumpers (M/M e M/F)
Jumpers (M/M e M/F)
Sensor Ultrassônico (HC-SR04)
Sensor Ultrassônico (HC-SR04)
Servo Motor (SG90 / MG90S)
Servo Motor (SG90 / MG90S)
Computador / Laptop
Computador / Laptop

• 1× Arduino UNO R3 (com cabo USB) • 1× Protoboard 400 pontos • 1× Sensor ultrassônico HC-SR04 • 1× Servo motor SG90 • 1× Resistor 220Ω (1/4W) • 8× Jumpers macho-macho coloridos • 1× Computador com Arduino IDE instalado

Arduino IDE
Arduino IDE
Scratch / mBlock
Scratch / mBlock
🪜 Passo 1 de 5

Introdução / Contextualização

Mostre vídeos curtos de cancelas reais em estacionamentos. Pergunte: 'Como ela sabe que o carro chegou?'. Apresente o servo motor pegando ele na mão — explique que ele gira até um ângulo específico (0° a 180°), diferente de um motor comum que só gira. Mostre a biblioteca Servo.h como atalho pra controlá-lo. Apresente o conceito de FUNÇÃO em programação — usando medirDistancia() como exemplo. Explique por que separar em função: deixa o loop limpo, evita repetição. Discuta o if-else: 'Se o objeto está perto, abre. Senão, fecha'. Mostre que isso é a estrutura básica de QUALQUER automação.

🪜 Passo 2 de 5

Montagem do Circuito / Hardware

1. Sensor HC-SR04: VCC→5V, GND→GND, TRIG→9, ECHO→10 (igual aula anterior). 2. Servo SG90: fio vermelho→5V, marrom→GND, laranja→pino 6. 3. Cole o palito/canudo no eixo do servo — esse é a 'cancela'. 4. Apoie o sensor de modo que aponte na direção do carro vindo. 5. Posicione o servo perpendicular ao 'caminho do carro'. 6. Use fita adesiva pra fixar tudo na mesa.

🪜 Passo 3 de 5

Programação / Codificação

1. Cole o código no Arduino IDE. 2. Compile (✓) — Arduino IDE precisa da biblioteca Servo (já vem instalada). 3. Envie pra placa. 4. Abra o Monitor Serial pra ver as distâncias. 5. Aproxime a mão (ou um livro) do sensor: a cancela DEVE subir.

🪜 Passo 4 de 5

Teste, Depuração e Ajustes

1. Distância > 15 cm: cancela fechada (0°). 2. Aproxime até < 15 cm: cancela abre (90°). 3. Afaste: cancela fecha de novo. 4. Variação: troque DIST_LIMITE pra 30 cm e veja o comportamento. 5. Desafio: adicione um LED vermelho que acende quando fechada e verde quando aberta.

🪜 Passo 5 de 5

Encerramento / Socialização

Cada trio apresenta seu protótipo simulando um carro chegando. Discussão final: 'Onde mais no seu dia-a-dia tem um sistema sensor → decisão → atuador?'. (Porta de shopping, sabonete líquido automático, descarga automática). Registrar a arquitetura SCA: Sensor → Controlador → Atuador.

🔌 Montagem do robô

Placa: Arduino Nano

⬇ baixar SVG
🧰 Montagem do robôPlaca: Arduino Nano · 2 componentes · 2 ligações detectadas do códigoNANO133V3AREFA0A1A2A3A4A5A6A75VRSTGNDVIN12111098765432GNDRST10Arduino NanoD9 (TRIG), D10 (ECHO) · medição de distân…Sensor Ultrassônico(HC-SR04)— cmD6 · abertura e fecham…Servo MotorservoLEGENDA DOS FIOSDigitalOutro / dados
🧰 Montagem do robôArduino Nanoplaca controladoraSensor Ultrassônico…D9 (TRIG), D10 (ECHO)Servo MotorD6
💻 O código
aula.ino
// Cancela automática — servo abre quando objeto chega perto
#include <Servo.h>

const int TRIG = 9;
const int ECHO = 10;
const int SERVO_PIN = 6;
const int DIST_LIMITE = 15;  // cm — abre se objeto mais perto que isso

Servo cancela;

void setup() {
  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);
  cancela.attach(SERVO_PIN);
  cancela.write(0);  // Começa fechada
  Serial.begin(9600);
}

float medirDistancia() {
  digitalWrite(TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);
  long duracao = pulseIn(ECHO, HIGH);
  return duracao * 0.034 / 2;
}

void loop() {
  float d = medirDistancia();
  Serial.print("Dist: "); Serial.print(d); Serial.println(" cm");

  if (d > 0 && d < DIST_LIMITE) {
    cancela.write(90);   // Abre (90 graus)
    Serial.println("ABERTA");
  } else {
    cancela.write(0);    // Fecha (0 grau)
    Serial.println("fechada");
  }

  delay(200);
}
🔀 Como o programa pensa
flowchart TD A(["Início"]) --> B["Medir distância com sensor"] B --> C{"Distância menor que limite?"} C -->|Sim| D["Abrir cancela"] C -->|Não| E["Fechar cancela"] D --> B E --> B
🧱 Em blocos
quando @greenFlag for clicado
sempre
  medir distância
  se <distância menor que 15 cm> então
    abrir cancela
  senão
    fechar cancela
  end
end
🎥 Veja funcionando
🔗 Abrir o vídeo
Pra fechar

Você chegou ao fim! 🎉

O que foi mais difícil? O que você faria diferente? Conte pra turma!

✓ Sair