{"id":63,"date":"2025-09-30T10:58:14","date_gmt":"2025-09-30T13:58:14","guid":{"rendered":"http:\/\/educate.poa.ifrs.edu.br\/?page_id=63"},"modified":"2025-09-30T10:58:14","modified_gmt":"2025-09-30T13:58:14","slug":"portao-com-controle-a","status":"publish","type":"page","link":"http:\/\/educate.poa.ifrs.edu.br\/index.php\/portao-com-controle-a\/","title":{"rendered":"Port\u00e3o com Controle (A)"},"content":{"rendered":"\n<p><strong>Programando um sistema de acesso automatizado<\/strong>.<\/p>\n\n\n\n<p>Vamos criar um sistema de acesso inteligente! Nesta atividade, o desafio \u00e9 projetar e construir um port\u00e3o ou cancela que abre e fecha com o toque de um bot\u00e3o. Este projeto \u00e9 uma introdu\u00e7\u00e3o fant\u00e1stica \u00e0 l\u00f3gica de programa\u00e7\u00e3o de estados \u2014 ensinar o rob\u00f4 a &#8220;lembrar&#8221; se est\u00e1 aberto ou fechado \u2014 e uma forma pr\u00e1tica de entender como funcionam os port\u00f5es autom\u00e1ticos que vemos no dia a dia.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Roteiro para Professores (Foco no Aprofundamento T\u00e9cnico)<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Objetivo da Atividade:<\/strong> Implementar um sistema de controle de estado (toggle) utilizando um input digital (bot\u00e3o) para alternar a posi\u00e7\u00e3o de um Servo Motor entre dois \u00e2ngulos definidos (aberto\/fechado), introduzindo conceitos de detec\u00e7\u00e3o de borda e vari\u00e1veis de estado.<\/li>\n\n\n\n<li><strong>Conceitos Tecnol\u00f3gicos Fundamentais:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Vari\u00e1vel de Estado:<\/strong> Utiliza\u00e7\u00e3o de uma vari\u00e1vel (geralmente booleana) para que o programa &#8220;lembre&#8221; o estado atual do sistema (ex: <code>bool portaoAberto = false;<\/code>).<\/li>\n\n\n\n<li><strong>Detec\u00e7\u00e3o de Borda de Subida (Edge Detection):<\/strong> T\u00e9cnica de programa\u00e7\u00e3o para detectar o momento exato em que um bot\u00e3o \u00e9 pressionado (transi\u00e7\u00e3o de LOW para HIGH), evitando que o estado mude centenas de vezes enquanto o bot\u00e3o est\u00e1 pressionado.<\/li>\n\n\n\n<li><strong>Input Digital com Resistor de Pull-down:<\/strong> Garantir uma leitura est\u00e1vel do estado <code>LOW<\/code> do bot\u00e3o quando ele n\u00e3o est\u00e1 pressionado.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Princ\u00edpio L\u00f3gico:<\/strong> Para criar um efeito &#8220;toggle&#8221;, o c\u00f3digo n\u00e3o pode simplesmente reagir ao estado <code>HIGH<\/code> do bot\u00e3o. Ele precisa de uma l\u00f3gica mais refinada:\n<ol start=\"1\" class=\"wp-block-list\">\n<li>O programa l\u00ea o estado atual do bot\u00e3o.<\/li>\n\n\n\n<li>Ele compara o estado atual com o estado anterior (lido no ciclo passado).<\/li>\n\n\n\n<li><strong>SE<\/strong> o estado anterior era <code>LOW<\/code> <strong>E<\/strong> o estado atual \u00e9 <code>HIGH<\/code>, significa que o bot\u00e3o ACABOU de ser pressionado.<\/li>\n\n\n\n<li>Apenas nesse momento, a vari\u00e1vel de estado (<code>portaoAberto<\/code>) \u00e9 invertida (<code>true<\/code> vira <code>false<\/code> e vice-versa).<\/li>\n\n\n\n<li>O servo motor \u00e9 ent\u00e3o movido para a posi\u00e7\u00e3o correspondente ao novo estado.<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li><strong>Guia de Solu\u00e7\u00e3o de Problemas (Troubleshooting):<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Port\u00e3o abre e fecha muito r\u00e1pido ao segurar o bot\u00e3o:<\/strong> O c\u00f3digo n\u00e3o est\u00e1 implementando a detec\u00e7\u00e3o de borda corretamente. Verifique a l\u00f3gica que compara o estado atual com o anterior do bot\u00e3o.<\/li>\n\n\n\n<li><strong>Bot\u00e3o n\u00e3o responde ou funciona de forma intermitente:<\/strong> O pino de entrada pode estar &#8220;flutuando&#8221;. Certifique-se de que h\u00e1 um resistor de pull-down (10k Ohm) conectando o pino do bot\u00e3o ao GND.<\/li>\n\n\n\n<li><strong>Servo treme (zumbido):<\/strong> Problema de alimenta\u00e7\u00e3o. O servo pode exigir mais corrente do que a porta USB pode fornecer. Considere uma fonte de alimenta\u00e7\u00e3o externa.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Desafio Extra (N\u00edvel Avan\u00e7ado):<\/strong>\n<ul class=\"wp-block-list\">\n<li>Adicionar dois LEDs de status: um LED vermelho que acende quando o port\u00e3o est\u00e1 fechado e um LED verde que acende quando est\u00e1 aberto.<\/li>\n\n\n\n<li>Implementar um &#8220;fechamento autom\u00e1tico&#8221;: ap\u00f3s o port\u00e3o ser aberto, programe-o para fechar sozinho depois de um determinado tempo (ex: 10 segundos), utilizando a fun\u00e7\u00e3o <code>millis()<\/code> para um controle de tempo n\u00e3o bloqueante.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Materiais Necess\u00e1rios:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Hardware:<\/strong> SmartMotor com Servo Motor (Placa B) <strong>OU<\/strong> (Kit Arduino, Protoboord, Servo Motor, Bot\u00e3o, Resistor 10k Ohm); materiais para a estrutura.<\/li>\n\n\n\n<li><strong>Software:<\/strong> Arduino IDE e\/ou conta na plataforma TinkerCAD.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Possibilidades de Aplica\u00e7\u00e3o e Expans\u00e3o:<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Trava Eletr\u00f4nica:<\/strong> Adaptar o mecanismo para controlar uma pequena trava ou ferrolho.<\/li>\n\n\n\n<li><strong>Controle de Estado de Sistemas:<\/strong> Usar a l\u00f3gica &#8220;toggle&#8221; para ligar e desligar qualquer dispositivo, como luzes, ventiladores ou bombas de \u00e1gua.<\/li>\n\n\n\n<li><strong>Cancela de Estacionamento:<\/strong> Construir uma maquete funcional de um estacionamento com cancelas na entrada e na sa\u00edda.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>Programa\u00e7\u00e3o Sugerida<br><\/strong>\/\/ Inclui a biblioteca Servo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">include<\/h3>\n\n\n\n<p>\/\/ Cria o objeto para controlar o servo.<br>Servo servoPortao;<\/p>\n\n\n\n<p>\/\/ Pinos dos componentes<br>const int pinoBotao = 2;<br>const int pinoServo = 9;<\/p>\n\n\n\n<p>\/\/ \u00c2ngulos para as posi\u00e7\u00f5es do port\u00e3o<br>const int anguloFechado = 0;<br>const int anguloAberto = 90;<\/p>\n\n\n\n<p>\/\/ Vari\u00e1veis para a l\u00f3gica Toggle<br>bool portaoAberto = false; \/\/ &#8220;Mem\u00f3ria&#8221; do estado do port\u00e3o (come\u00e7a fechado)<br>int estadoBotaoAnterior = LOW; \/\/ &#8220;Mem\u00f3ria&#8221; do estado do bot\u00e3o<\/p>\n\n\n\n<p>void setup() {<br>servoPortao.attach(pinoServo);<br>pinMode(pinoBotao, INPUT);<\/p>\n\n\n\n<p>\/\/ Inicia o port\u00e3o na posi\u00e7\u00e3o fechada.<br>servoPortao.write(anguloFechado);<br>}<\/p>\n\n\n\n<p>void loop() {<br>\/\/ L\u00ea o estado atual do bot\u00e3o.<br>int estadoBotaoAtual = digitalRead(pinoBotao);<\/p>\n\n\n\n<p>\/\/ Verifica se o bot\u00e3o ACABOU de ser pressionado (detec\u00e7\u00e3o de borda).<br>if (estadoBotaoAnterior == LOW &amp;&amp; estadoBotaoAtual == HIGH) {<br>\/\/ Inverte o estado do port\u00e3o.<br>portaoAberto = !portaoAberto;<br>}<\/p>\n\n\n\n<p>\/\/ Move o servo para a posi\u00e7\u00e3o correta baseada no estado atual.<br>if (portaoAberto) {<br>servoPortao.write(anguloAberto);<br>} else {<br>servoPortao.write(anguloFechado);<br>}<\/p>\n\n\n\n<p>\/\/ Atualiza o estado anterior do bot\u00e3o para o pr\u00f3ximo ciclo.<br>estadoBotaoAnterior = estadoBotaoAtual;<\/p>\n\n\n\n<p>\/\/ Pequeno delay para estabilidade.<br>delay(50);<br>}<\/p>\n\n\n\n<p><strong>Programa\u00e7\u00e3o em Blocos<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gfbilhalva4.wordpress.com\/wp-content\/uploads\/2024\/01\/image-10.png?w=308\" alt=\"\" class=\"wp-image-117\"\/><\/figure>\n\n\n\n<p><strong>Esquem\u00e1tico Eletr\u00f4nico<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gfbilhalva4.wordpress.com\/wp-content\/uploads\/2024\/01\/image-9.png?w=1024\" alt=\"\" class=\"wp-image-116\"\/><\/figure>\n\n\n\n<p><strong>SmartMotors<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"318\" src=\"http:\/\/educate.poa.ifrs.edu.br\/wp-content\/uploads\/2025\/09\/image-4-1024x318.png\" alt=\"\" class=\"wp-image-65\" srcset=\"http:\/\/educate.poa.ifrs.edu.br\/wp-content\/uploads\/2025\/09\/image-4-1024x318.png 1024w, http:\/\/educate.poa.ifrs.edu.br\/wp-content\/uploads\/2025\/09\/image-4-300x93.png 300w, http:\/\/educate.poa.ifrs.edu.br\/wp-content\/uploads\/2025\/09\/image-4-768x238.png 768w, http:\/\/educate.poa.ifrs.edu.br\/wp-content\/uploads\/2025\/09\/image-4.png 1325w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Programando um sistema de acesso automatizado. Vamos criar um sistema de acesso inteligente! Nesta atividade, o desafio \u00e9 projetar e construir um port\u00e3o ou cancela que abre e fecha com o toque de um bot\u00e3o. Este projeto \u00e9 uma introdu\u00e7\u00e3o fant\u00e1stica \u00e0 l\u00f3gica de programa\u00e7\u00e3o de estados \u2014 ensinar o rob\u00f4 a &#8220;lembrar&#8221; se est\u00e1 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-63","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"http:\/\/educate.poa.ifrs.edu.br\/index.php\/wp-json\/wp\/v2\/pages\/63","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/educate.poa.ifrs.edu.br\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/educate.poa.ifrs.edu.br\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/educate.poa.ifrs.edu.br\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/educate.poa.ifrs.edu.br\/index.php\/wp-json\/wp\/v2\/comments?post=63"}],"version-history":[{"count":1,"href":"http:\/\/educate.poa.ifrs.edu.br\/index.php\/wp-json\/wp\/v2\/pages\/63\/revisions"}],"predecessor-version":[{"id":67,"href":"http:\/\/educate.poa.ifrs.edu.br\/index.php\/wp-json\/wp\/v2\/pages\/63\/revisions\/67"}],"wp:attachment":[{"href":"http:\/\/educate.poa.ifrs.edu.br\/index.php\/wp-json\/wp\/v2\/media?parent=63"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}