Vídeo: Robô com motor shield – Parte 1 7

Um robô móvel autônomo consiste em uma unidade robótica que pode-se locomover (tracionado por rodas) e detectar obstáculos frontais, laterais, no chão, etc. Hoje demonstraremos a parte 1 do desenvolvimento de um robô com motor shield, que é um robô móvel autônomo 4×4, somando os conhecimentos estudados até aqui com o Motor Shield L293D e o controle de servo motores.

Robô com motor shield: Lógica de funcionamento do 

A lógica de funcionamento do Robô 4×4 é bem interessante, sendo o fluxograma explícito na Figura 1.

Lógica de funcionamento robô

Figura 1 – Fluxograma da lógica de funcionamento do robô

É aconselhável que você dedique alguns minutos na análise do fluxograma, para compreender a lógica de funcionamento do Robô 4×4. Mas basicamente, efetuam-se as configurações iniciais do microcontrolador do Arduino (sistema embarcado utilizado no controle), então o robô move-se para frente a partir de uma velocidade determinada pelo usuário. No entretempo, a unidade lê a distância de um possível obstáculo frontal. Se a distância estiver ok, significa que não há obstáculos frontais e o robô pode continuar seguindo em frete.

Quando a distância for inferior a um limite que ainda será determinado, o robô para de mover-se para frente, então faz uma análise de sua posição atual. Primeiro lê a distância da esquerda e armazena em sua memória, depois lê a distância da direita e também armazena. Por fim, calculará qual distância é maior, para seguir o caminho por ela. Interessante não é mesmo?

O software completo, aplicando-se sensor ultrasônico e servo motor, será apresentado na segunda parte do artigo. Nesta parte 1, apresentaremos a plataforma com o Motor Shield, e efetuaremos o controle dos 4 motores, a partir de um teste no loop infinito.

O robô pode ser observado na Figura 2.

Robô montado

Figura 2 – Robô Móvel 4×4 Autônomo montado

Conexão do motor shield e parte mecânica

A mecânica consiste em um chassi para robótica de alumínio, com 4 motores, 4 caixas de redução e 4 rodas, proporcionando tração nas 4, a partir do controle feito pelo Motor Shield.

O hardware eletrônico do Arduino com Motor Shield, pode ser observado no diagrama esquemático do Figura 3.

Diagrama esquemático robô com motor shield

Figura 3 – Diagrama Esquemático parcial do Robô

Observe que ainda não foram incluídos o servo motor e o sensor ultrassônico, tópicos que serão abordados na segunda parte do projeto. O Motor Shield, como já visto, pode ser encaixado diretamente sobre o Arduino e as ligações estão indicadas em forma de labels no diagrama. Para alimentação dos circuitos lógicos, utilizou-se uma bateria alcalina de 9V e para alimentação dos motores, 5 pilhas alcalinas AA ligadas em série.

Programa robô com motor shield

Para teste de locomoção do robô, desenvolveu-se um software bem simples, porém interessante, pois pode-se observar como controlar 4 motores com Motor Shield L293D. No loop infinito, testamos as funções de movimentação do robô: frente, trás, direita, esquerda e parada.

/*
   Aula 71 - Robô com Motor Shield - Parte 1
       
   Autor: Eng. Wagner Rambo  Data: Junho de 2016
*/

// --- Bibliotecas Auxiliares ---
#include <AFMotor.h>         //Inclui biblioteca AF Motor
 
// --- Seleção dos Motores ---
AF_DCMotor motor1(1); //Seleção do Motor 1
AF_DCMotor motor2(2); //Seleção do Motor 2
AF_DCMotor motor3(3); //Seleção do Motor 3
AF_DCMotor motor4(4); //Seleção do Motor 4

// --- Mapeamento de Hardware ---

// --- Protótipo das Funções Auxiliares ---
void robot_forward(unsigned char v);  //Função movimenta robô frente
void robot_backward(unsigned char v); //Função movimenta robô trás
void robot_left(unsigned char v);     //Função movimenta robô esquerda
void robot_right(unsigned char v);    //Função movimenta robô direita
void robot_stop(unsigned char v);     //Função para para o robô

// --- Variáveis Globais ---
unsigned char velocidade = 0x00; //armazena velocidade motores (8 bits)
         
// --- Configurações Iniciais ---
void setup()
{
  //A biblioteca configura as entradas e saídas pertinentes...  
  velocidade = 0xFF; //Inicia velocidade no valor máximo
} //end setup


// --- Loop Infinito ---
void loop()
{
     robot_forward(velocidade);
     delay(500);
  
     robot_backward(velocidade);
     delay(500);
     
     robot_right(velocidade);
     delay(500);
     
     robot_left(velocidade);
     delay(500);
    
     robot_stop(velocidade);
     delay(500);
} //end loop


// --- Desenvolvimento das Funções Auxiliares ---

void robot_forward(unsigned char v)
{
     motor1.setSpeed(v);
     motor1.run(FORWARD);
     motor2.setSpeed(v);
     motor2.run(FORWARD);
     motor3.setSpeed(v);
     motor3.run(FORWARD);
     motor4.setSpeed(v);
     motor4.run(FORWARD);

} //end robot forward


void robot_backward(unsigned char v)
{
     motor1.setSpeed(v);
     motor1.run(BACKWARD);
     motor2.setSpeed(v);
     motor2.run(BACKWARD);
     motor3.setSpeed(v);
     motor3.run(BACKWARD);
     motor4.setSpeed(v);
     motor4.run(BACKWARD);

} //end robot backward


void robot_left(unsigned char v)
{
     motor1.setSpeed(v);
     motor1.run(FORWARD);
     motor2.setSpeed(v);
     motor2.run(FORWARD);
     motor3.setSpeed(v);
     motor3.run(BACKWARD);
     motor4.setSpeed(v);
     motor4.run(BACKWARD);

} //end robot left


void robot_right(unsigned char v)
{
     motor1.setSpeed(v);
     motor1.run(BACKWARD);
     motor2.setSpeed(v);
     motor2.run(BACKWARD);
     motor3.setSpeed(v);
     motor3.run(FORWARD);
     motor4.setSpeed(v);
     motor4.run(FORWARD);

} //end robot right


void robot_stop(unsigned char v)
{
     motor1.setSpeed(v);
     motor1.run(RELEASE);
     motor2.setSpeed(v);
     motor2.run(RELEASE);
     motor3.setSpeed(v);
     motor3.run(RELEASE);
     motor4.setSpeed(v);
     motor4.run(RELEASE);

} //end robot stop

Para mais detalhes, acesse o vídeo disponível no início deste post, e para download dos arquivos utilizados aqui acesse este link.

Gostou? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

7 Comentários

  1. olá, tem como usar essa base 4WD pra controlar via bluetooth?

    1. Olá Erisson.

      Sim, é possível, porém teria que adaptar o sistema para comunicar com um módulo HC-05 ou uma placa que possua comunicação bluetooth.

      Além disso, será necessário efetuar as alterações necessárias no código para que o comando seja via celular ou outro dispositivo bluetooth.

      Att.
      Vitor Mattos.
      Suporte Técnico MakerHero.

  2. Como posso comprar a lista de materiais completa desse projeto?
    Vem um pdf ou manual de passo a passo?

  3. Qual kit Arduino comprar para fazer este robô motorshield ? Onde comprar o chassi?

  4. Olá, na ultima foto é possível ver um chassi transparente e os 4 motores. Uma coisa que de meu curiosidade é que esse motor tem um eixo passante. De um lado do eixo está a roda e do outro lado há um disco preto. O que seria esse disco preto? Seria um encoder? Na MakerHero há algum encoder que possa se encaixado no eixo desse motor para fazer o controle de velocidade ou trabalhar com odometria?

  5. lança a segunda parte

Trackbacks and Pingbacks

  1. […] desenvolveremos o sistema de sensoriamento do mesmo. Na primeira parte deste projeto, no post Robô com Motor Shield – Parte 1, explanamos sobre o controle dos motores e lógica de […]