Vídeo: Robô com motor shield – Parte 1
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.
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.
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.
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 ? Ajude-nos a melhorar o blog atribuindo uma nota a este tutorial (estrelas no final do artigo), comente e visite nossa loja FILIPEFLOP!
Site: Blog FILIPEFLOP