

No post de hoje, iremos te mostrar o passo a passo da montagem do nosso robô sumô utilizando a plataforma Arduino juntamente do kit de robótica 4WD em acrílico. Antes de começarmos, você sabe como funciona a competição de robô sumô?Existem vários torneios de robótica nos quais existe a modalidade de robô sumô controlado e robô sumô autônomo. No primeiro caso, os competidores controlam seus robôs por meio de controles que podem ser joysticks, smartphones ou computadores. Já no segundo caso, a programação deverá prever e identificar o adversário e as bordas da arena, tendo, dessa forma, movimentações e ataques autônomos.

Agora que você já sabe o que é e como funciona um sumô de robôs, é hora de conhecer os componentes do nosso projeto de hoje:











































A seguir, descrevemos todo o esquema elétrico do robô feito no software fritzing. A criação do esquema elétrico irá facilitar na hora da montagem, bem como na manutenção do robô.
É hora de colocarmos o nosso robô para pensar. Para a programação, iremos utilizar duas bibliotecas: Arduino Motor Shield, que você poderá baixar neste link, e Ultrasonic, que pode ser baixada neste link.A lógica do nosso robô é bastante simples. Ao ligar, ele irá girar para esquerda e verificar com o sensor ultrassônico se existe algo próximo dele. A distância de aferição será 20cm. Caso ele detecte algo, irá andar para frente até que o sensor reflexivo encontre a borda da arena. No nosso caso, estamos testando em uma arena de fundo branco e borda preta. Os sensores reflexivos, apesar de estarem ligados nas portas analógicas, estão sendo utilizados no modo digital, branco (0) e preto (1).
//Programa: Robô sumô
//Autor: Alexsandro
//Blog: Eletrogate
//Versão: 1.0
//********************Inclusão das bibliotecas**************
#include <AFMotor.h>//Biblioteca do motor shield
#include <Ultrasonic.h>//Bibloteca do sensor ultrassônico
//********************Definição dos pinos********************
#define trigger A2
#define echo A3
#define sensor1 A4
#define sensor2 A5
//********************Criação dos objetos********************
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);
Ultrasonic ultrasonic(trigger, echo);
//********************Função de configuração******************
void setup() {
//Configuração de velocidade dos motores
motor1.setSpeed(255);//Velocidade vai de 0 a 255
motor2.setSpeed(255);
motor3.setSpeed(255);
motor4.setSpeed(255);
Serial.begin(9600);//Habilita a comunicação serial
pinMode(sensor1, INPUT);//Configura o pino do sensor 1 como entrada
pinMode(sensor2, INPUT);//Configura o pino do sensor 2 como entrada
}
//********************Função de principal********************
void loop() {
//Cálculo e conversão da leitura do sensor ultrassônico
long microsec = ultrasonic.timing();
float distancia = ultrasonic.convert(microsec, Ultrasonic::CM);
//Mostra as leitura dos sensores
//Quando for ler remova o /* */
/*
Serial.print("A distancia: ");
Serial.println(distancia);
Serial.print("Sensor da frente: ");
Serial.println(digitalRead(sensor1));
Serial.print("Sensor da tras: ");
Serial.println(digitalRead(sensor2));
delay(1000);
*/
//Verifica se tem alguma coisa na sua frente e se os sensor estão no branco
if (distancia > 20 && digitalRead(sensor1) == 0 && digitalRead(sensor2) == 0) {
Serial.println("procurando oponente");
//Duas formas de procurar o oponente na arena
procura();//Procura em forma de quadrado
//esquerda();//Fica girando
}
//Se caso encontrar algo na sua frente
if (distancia < 20 && distancia > 0 && digitalRead(sensor1) == 0 && digitalRead(sensor2) == 0) {
while (digitalRead(sensor1) == 0) { //Prende na condição até o sensor encotrar a borda da arena
Serial.println("achei o oponente");
frente();//Movimenta para frente
}
parada();
delay(1000);
tras();
delay(1000);
}
//Se caso encontre a borda e não o oponente
if (digitalRead(sensor1) == 1 && digitalRead(sensor2) == 0) {
Serial.println("Sensor da frente achou borda");
tras();
delay(500);
}
if (digitalRead(sensor1) == 0 && digitalRead(sensor2) == 1) {
Serial.println("Sensor de tras achou borda");
frente();
delay(500);
}
}
//********************Movimenta o robô para frente********************
void frente() {
motor1.run(FORWARD); //Motor traseiro esquerdo
motor2.run(FORWARD); //Motor dianteiro esquerdo
motor3.run(FORWARD); //Motor dianteiro direito
motor4.run(FORWARD); //Motor traseiro direito
}
//********************Movimenta o robô para trás********************
void tras() {
motor1.run(BACKWARD); //Motor traseiro esquerdo
motor2.run(BACKWARD); //Motor dianteiro esquerdo
motor3.run(BACKWARD); //Motor dianteiro direito
motor4.run(BACKWARD); //Motor traseiro direito
}
//********************Parada dos motores********************
void parada() {
motor1.run(RELEASE); //Motor traseiro esquerdo
motor2.run(RELEASE); //Motor dianteiro esquerdo
motor3.run(RELEASE); //Motor dianteiro direito
motor4.run(RELEASE); //Motor traseiro direito
}
//********************Movimenta o robô para esquerda********************
void esquerda() {
motor1.run(FORWARD); //Motor traseiro esquerdo
motor2.run(FORWARD); //Motor dianteiro esquerdo
motor3.run(BACKWARD); //Motor dianteiro direito
motor4.run(BACKWARD); //Motor traseiro direito
}
//********************Movimenta o robô em forma de quadrado********************
void procura() {
frente();
delay(300);
esquerda();
delay(300);
}É hora de vermos o resultado de todo o nosso trabalho. Vamos testar o nosso robô sumô nos dois modos da programação, girando e andando em forma de quadrado. São quatros vídeos de demonstração do robô funcionando.Vídeo 1.
Vídeo 2.Vídeo 3.Vídeo 4.Assim, concluímos o nosso robô sumô. Pudemos observar o quanto a plataforma Arduino é fantástica. Com ela, é possível elaborar projetos com cunho educacional e cientifico. Hoje, aplicamos junto desta plataforma dois tipos de sensores e um drive de potência para montagem de um robô de competição. Espero que este conteúdo tenha sido de grande ajuda e que você tenha conseguido finalizar e testar o seu robô. Deixe o seu comentário, sugestão e nos marque @eletrogate nas redes sociais com o seu robô pronto.Conheça a Metodologia Eletrogate e ofereça aulas de robótica em sua escola!
|
O sumô de robôs é uma competição de robótica em que dois robôs tentam se empurrar para fora de uma arena circular similar a um dohyō. Os robôs utilizados nesta competição são chamados “robôs de sumô” ou “sumobots”. Existem diversos torneios no Brasil nos quais os robôs podem ser montados utilizando várias plataformas, dentre elas o Arduino. Existem as modalidades autônoma e controlada. Neste post iremos aprender a montar um robô sumô utilizando a plataforma Arduino e o kit chassi 4WD.
Encontre tudo na Loja Eletrogate com frete grátis para compras acima de R$ 200