Portão com Controle (B)

Programando um sistema de acesso automatizado.

Vamos criar um sistema de acesso inteligente! Nesta atividade, o desafio é projetar e construir um portão ou cancela que abre e fecha com o toque de um botão. Este projeto é uma introdução fantástica à lógica de programação de estados — ensinar o robô a “lembrar” se está aberto ou fechado — e uma forma prática de entender como funcionam os portões automáticos que vemos no dia a dia.

Roteiro para Educadores (Foco na Prática Pedagógica)

  • Objetivo da Atividade: Construir um portão funcional que abre com um toque no botão e fecha com um segundo toque, utilizando um servo motor para o movimento.
  • Habilidades e Competências da BNCC:
    • Pensamento Científico, Crítico e Criativo: Projetar e construir um mecanismo funcional, aplicando lógica para resolver um problema de automação.
    • Cultura Digital: Desenvolver o pensamento computacional ao programar um sistema que alterna entre dois estados (aberto/fechado).
    • Trabalho e Projeto de Vida: Entender como a automação impacta a segurança e a conveniência em ambientes residenciais e comerciais.
  • Desenvolvimento Sugerido:
    1. Aquecimento (Portas Abertas): Forme os grupos e converse sobre os diferentes tipos de portões automáticos que existem. Onde eles são usados? Quais as vantagens (segurança, conforto)?
    2. O Desafio de Engenharia: A missão é criar não apenas o portão, mas também a estrutura ao redor (muros, paredes). O botão de controle deve ser acessível. Incentive os grupos a desenharem o design antes de construir.
    3. Construção e Programação: Os estudantes montam a estrutura física e o circuito. A parte principal da programação é ensinar o Arduino a “lembrar” se o portão está aberto ou fechado para que ele saiba o que fazer no próximo toque.
  • Dicas Pedagógicas para Engajar a Turma:
    • Diversidade de Mecanismos: Incentive a criatividade no design! O “portão” pode ser uma cancela que sobe e desce, um portão de correr lateral, um portão de duas folhas ou até mesmo uma persiana.
    • Foco na Lógica: Este projeto é perfeito para reforçar os conceitos de condição (SE o botão for tocado) e ciclo (o programa está sempre verificando o botão).
    • Integração de Projetos: Lembre aos alunos que este portão pode ser a entrada da garagem da “Casa Automatizada”, conectando as atividades.
  • Como Avaliar a Aprendizagem:
    • Funcionalidade “Toggle”: O principal critério é o funcionamento correto: um toque abre, outro toque fecha?
    • Design e Criatividade: Avalie a solução mecânica encontrada pelo grupo para o portão e sua estrutura.
  • Desafio Extra (Para os mais avançados):
    • Adicionar um segundo botão. Agora, um botão será exclusivo para abrir e o outro, exclusivo para fechar o portão.
  • Materiais Necessários:
    • Para Construção: SmartMotor com Servo Motor (Placa B) OU (Kit Arduino, Protoboard, Servo Motor, Botão/Sensor tátil); objetos para a estrutura do portão (papelão, palitos, etc.).
    • Para Simulação: Computadores com acesso à internet e conta na plataforma TinkerCAD.
  • Guia Rápido de Lógica:
    • Princípio Lógico: O sistema funciona como um interruptor de luz. O programa precisa de uma “memória” (uma variável) para saber se o portão está aberto ou fechado. Ao pressionar o botão, ele inverte o estado: se estava fechado, abre; se estava aberto, fecha.
  • Possibilidades de Projetos Interdisciplinares:
    • Segurança e Sociedade: Discutir como a automação de acesso mudou a segurança nas cidades.
    • Arte e Design: Criar portões elaborados e decorativos, transformando um projeto funcional em uma peça de arte cinética.

Programação Sugerida
// Inclui a biblioteca Servo.

include

// Cria o objeto para controlar o servo.
Servo servoPortao;

// Pinos dos componentes
const int pinoBotao = 2;
const int pinoServo = 9;

// Ângulos para as posições do portão
const int anguloFechado = 0;
const int anguloAberto = 90;

// Variáveis para a lógica Toggle
bool portaoAberto = false; // “Memória” do estado do portão (começa fechado)
int estadoBotaoAnterior = LOW; // “Memória” do estado do botão

void setup() {
servoPortao.attach(pinoServo);
pinMode(pinoBotao, INPUT);

// Inicia o portão na posição fechada.
servoPortao.write(anguloFechado);
}

void loop() {
// Lê o estado atual do botão.
int estadoBotaoAtual = digitalRead(pinoBotao);

// Verifica se o botão ACABOU de ser pressionado (detecção de borda).
if (estadoBotaoAnterior == LOW && estadoBotaoAtual == HIGH) {
// Inverte o estado do portão.
portaoAberto = !portaoAberto;
}

// Move o servo para a posição correta baseada no estado atual.
if (portaoAberto) {
servoPortao.write(anguloAberto);
} else {
servoPortao.write(anguloFechado);
}

// Atualiza o estado anterior do botão para o próximo ciclo.
estadoBotaoAnterior = estadoBotaoAtual;

// Pequeno delay para estabilidade.
delay(50);
}

Programação em Blocos

Esquemático Eletrônico

SmartMotors