<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>robô em labirinto - MCU &amp; FPGA</title>
	<atom:link href="https://mcu.tec.br/tags/robo-em-labirinto/feed/" rel="self" type="application/rss+xml" />
	<link>https://mcu.tec.br</link>
	<description>Microcontroladores &#38; FPGA</description>
	<lastBuildDate>Sat, 22 Mar 2025 01:40:05 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://mcu.tec.br/wp-content/uploads/2025/02/Robo-para-o-site-MCU.tec_.br-512x512-1-150x150.png</url>
	<title>robô em labirinto - MCU &amp; FPGA</title>
	<link>https://mcu.tec.br</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Algoritmo da Mão Direita para Solução de Labirintos</title>
		<link>https://mcu.tec.br/algoritimos/algoritmo-da-mao-direita-para-solucao-de-labirintos/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=algoritmo-da-mao-direita-para-solucao-de-labirintos</link>
		
		<dc:creator><![CDATA[Carlos Delfino]]></dc:creator>
		<pubDate>Fri, 28 Mar 2025 01:33:33 +0000</pubDate>
				<category><![CDATA[Algoritimos]]></category>
		<category><![CDATA[algoritmo da mão direita]]></category>
		<category><![CDATA[código em C]]></category>
		<category><![CDATA[controle de motores]]></category>
		<category><![CDATA[controle de robô]]></category>
		<category><![CDATA[labirinto com robô]]></category>
		<category><![CDATA[navegação em labirinto]]></category>
		<category><![CDATA[programação embarcada]]></category>
		<category><![CDATA[resolver labirintos]]></category>
		<category><![CDATA[robô em labirinto]]></category>
		<category><![CDATA[robô seguidor de parede]]></category>
		<category><![CDATA[robótica educacional]]></category>
		<category><![CDATA[sensores de parede]]></category>
		<guid isPermaLink="false">https://mcu.tec.br/?p=232</guid>

					<description><![CDATA[<p>Aprenda como implementar o algoritmo da mão direita em robôs com motores independentes para solucionar labirintos. Inclui explicação didática e exemplo de código em C.</p>
<p>The post <a href="https://mcu.tec.br/algoritimos/algoritmo-da-mao-direita-para-solucao-de-labirintos/">Algoritmo da Mão Direita para Solução de Labirintos</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">O algoritmo da mão direita é uma técnica simples e eficaz utilizada para navegar e escapar de labirintos do tipo <em>simples</em> (ou seja, labirintos em que todas as paredes são interconectadas e não existem áreas isoladas). A ideia central é manter sempre a &#8220;mão direita&#8221; encostada em uma parede enquanto se avança pelo labirinto, garantindo que eventualmente se encontre a saída. Esse algoritmo é especialmente útil em robôs móveis com sensores de proximidade e motores independentes.</p>



<h3 class="wp-block-heading">Como Funciona</h3>



<p class="wp-block-paragraph">Imagine caminhar por um labirinto com a mão encostada sempre à parede da direita. Se houver um caminho à direita, vire à direita. Caso contrário, se à frente for possível, siga em frente. Se à frente não for possível, vire à esquerda até encontrar uma direção livre. Essa técnica garante a saída de qualquer labirinto que seja <em>simplesmente conexo</em> (sem loops desconectados ou “ilhas”).</p>



<h3 class="wp-block-heading">Aplicação no Controle de Robôs</h3>



<p class="wp-block-paragraph">Num robô com dois motores — um para a roda esquerda e outro para a direita — podemos implementar esse algoritmo controlando a direção com base nas leituras de sensores que detectam parede à direita, à frente e à esquerda. A função que aciona os motores será <code>controle_motor(int8_t motor_esq, int8_t motor_dir)</code>, onde valores positivos movem o motor para frente e negativos para trás.</p>



<p class="wp-block-paragraph">Exemplo:</p>



<ul class="wp-block-list">
<li><code>controle_motor(100, 100);</code> → anda para frente.</li>



<li><code>controle_motor(-100, 100);</code> → gira para a esquerda.</li>



<li><code>controle_motor(100, -100);</code> → gira para a direita.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Código em C (Simplificado)</h3>



<p class="wp-block-paragraph">Aqui está uma simulação básica do algoritmo, assumindo funções fictícias de leitura de sensores:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="#include <stdint.h&gt;
#include <stdbool.h&gt;

// Protótipo da função de controle do motor
void controle_motor(int8_t motor_esq, int8_t motor_dir);

// Protótipos de sensores (implementação depende do hardware)
bool parede_direita();
bool parede_frente();
bool parede_esquerda();

// Ações básicas
void andar_frente() {
    controle_motor(100, 100);
}

void girar_direita() {
    controle_motor(100, -100);
}

void girar_esquerda() {
    controle_motor(-100, 100);
}

void parar() {
    controle_motor(0, 0);
}

// Loop principal
void resolver_labirinto() {
    while (true) {
        if (!parede_direita()) {
            // Gira para a direita e anda
            girar_direita();
        } else if (!parede_frente()) {
            andar_frente();
        } else {
            // Enquanto houver parede à frente, girar à esquerda
            while (parede_frente()) {
                girar_esquerda();
            }
        }
        // Pequeno atraso ou leitura de sensores para próxima decisão
    }
}
" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #616E88">#include &lt;stdint.h&gt;</span></span>
<span class="line"><span style="color: #616E88">#include &lt;stdbool.h&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">//</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">Protótipo</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">da</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">função</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">de</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">controle</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">do</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">motor</span></span>
<span class="line"><span style="color: #88C0D0">void</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">controle_motor</span><span style="color: #ECEFF4">(</span><span style="color: #88C0D0">int8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">motor_esq,</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">int8_t</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">motor_dir</span><span style="color: #ECEFF4">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">//</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">Protótipos</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">de</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">sensores</span><span style="color: #D8DEE9FF"> (implementação </span><span style="color: #A3BE8C">depende</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">do</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">hardware</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #88C0D0">bool</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">parede_direita</span><span style="color: #ECEFF4">()</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #88C0D0">bool</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">parede_frente</span><span style="color: #ECEFF4">()</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #88C0D0">bool</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">parede_esquerda</span><span style="color: #ECEFF4">()</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">//</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">Ações</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">básicas</span></span>
<span class="line"><span style="color: #88C0D0">void</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">andar_frente</span><span style="color: #ECEFF4">()</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">controle_motor(100,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">100</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">void</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">girar_direita</span><span style="color: #ECEFF4">()</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">controle_motor(100,</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">-100</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">void</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">girar_esquerda</span><span style="color: #ECEFF4">()</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">controle_motor(-100,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">100</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">void</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">parar</span><span style="color: #ECEFF4">()</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">controle_motor(0,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">//</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">Loop</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">principal</span></span>
<span class="line"><span style="color: #88C0D0">void</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">resolver_labirinto</span><span style="color: #ECEFF4">()</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">while</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">(</span><span style="color: #88C0D0">true</span><span style="color: #ECEFF4">)</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">(</span><span style="color: #81A1C1">!</span><span style="color: #88C0D0">parede_direita</span><span style="color: #ECEFF4">())</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #88C0D0">//</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">Gira</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">para</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">a</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">direita</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">e</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">anda</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #88C0D0">girar_direita</span><span style="color: #ECEFF4">()</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">else</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">(</span><span style="color: #81A1C1">!</span><span style="color: #88C0D0">parede_frente</span><span style="color: #ECEFF4">())</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #88C0D0">andar_frente</span><span style="color: #ECEFF4">()</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">else</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #88C0D0">//</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">Enquanto</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">houver</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">parede</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">à</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">frente,</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">girar</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">à</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">esquerda</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #81A1C1">while</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">(</span><span style="color: #88C0D0">parede_frente</span><span style="color: #ECEFF4">())</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #88C0D0">girar_esquerda</span><span style="color: #ECEFF4">()</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">        }</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #88C0D0">//</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">Pequeno</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">atraso</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">ou</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">leitura</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">de</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">sensores</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">para</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">próxima</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">decisão</span></span>
<span class="line"><span style="color: #D8DEE9FF">    }</span></span>
<span class="line"><span style="color: #D8DEE9FF">}</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<ul class="wp-block-list">
<li>O algoritmo da mão direita <strong>não funciona em labirintos com &#8220;ilhas&#8221; ou passagens desconectadas</strong>.</li>



<li>É simples de implementar em microcontroladores e ideal para robôs iniciantes.</li>



<li>Pode ser complementado com sensores infravermelhos ou ultrassônicos para detecção de paredes.</li>



<li>É um bom ponto de partida para algoritmos mais avançados como DFS, BFS ou A*.</li>
</ul>



<p class="wp-block-paragraph"></p><p>The post <a href="https://mcu.tec.br/algoritimos/algoritmo-da-mao-direita-para-solucao-de-labirintos/">Algoritmo da Mão Direita para Solução de Labirintos</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">232</post-id>	</item>
	</channel>
</rss>
