Robô De Sumô

by eduardogalinagoncalves in Circuits > Arduino

478 Views, 2 Favorites, 0 Comments

Robô De Sumô

capa.PNG

Este trabalho visa o desenvolvimento de um robô sumô utilizando uma base impressa em 3D, componentes eletrônicos acessíveis e programação com Arduino. A base e as rodas do robô foram projetadas e impressas em 3D, proporcionando flexibilidade no design e facilidade de personalização. O robô é equipado com sensores de proximidade para detectar obstáculos e reagir ao oponente no combate, além de ser alimentado por baterias recarregáveis.

A montagem do robô envolveu a integração de componentes mecânicos e eletrônicos, além de ajustes feitos durante o processo, como a correção de desalinhamento das rodas e a calibração do sensor. O trabalho também abordou a resolução de problemas relacionados à distribuição de peso e conectividade elétrica. Ao final, o robô foi ajustado para operar de forma eficaz em uma arena de sumô, oferecendo uma solução prática e funcional para competições. Este projeto demonstra como a combinação de impressão 3D e Arduino pode ser uma poderosa ferramenta no desenvolvimento de robôs personalizados e competitivos.


Supplies

ferramentas.PNG

Passo a Passo:

Primordialmente, solicitamos ao Prof. João Vitor para que imprimisse toda a base do robô sumô juntamente com o suporte do sensor ultrassônico e as rodas dianteiras. A partir deste momento, selecionamos os materiais que iríamos utilizar durante a montagem. Inicialmente parafusamos o Arduíno Uno na parte superior do robô, posteriormente, parafusamos o suporte do sensor na parte superior frontal do robô, onde logo em seguida encaixamos o sensor ultrassônico, Após algumas tentativas e testes mal sucedidos, conseguimos encaixar as rodas dianteiras com êxito. Logo após, colocamos o motor ao lado das rodas, na parte superior, fazendo assim com que o nosso robô pudesse se locomover. Passado alguns dias, passamos em umas loja de material de construção (Taquetti variedades), onde compramos uma “roda boba” 25x31mm, onde posteriormente foi parafusada na parte inferior traseira do nosso robô, oferecendo assim uma melhor estabilidade para locomoção do nosso robô. Após alguns processos de testes e análises, fomos até a caldeiraria do Senai Linhares realizar o recorte de uma chapa metálica, para que assim pudesse haver a instalação da mesma na parte frontal do nosso robô, com o objetivo principal de atingirmos os robôs adversários pela parte inferior, fazendo assim com que eles “tombassem”. Fixamos as baterias de Lítio (que fazem com que os motores não descarreguem) na parte superior traseira do robô. O protoboard foi instalada na parte superior direita do robô, onde é feita parte da ligação elétrica dos componentes eletrônicos por meio de cabos jumpers, onde foram utilizados em maior parte os cabos macho/fêmea, para fazer a ligação entre todos os componentes eletrônicos (Arduino Uno, Sensor Ultrassônico, duas baterias de lítio e os motores).

OBS: Apesar do diagrama e a programação estarem corretamente implementados, não foi possível realizar os testes do robô sumô em movimento devido à falta de carga nas baterias disponíveis (onde são necessários 9V para um bom funcionamento do carrinho), que foram testadas previamente. Consequentemente, não foi possível avaliar o desempenho completo do robô durante as simulações de movimentação, limitando a análise ao restante dos componentes físicos e eletrônicos do sistema.


Código

codigo.PNG
codigo2.PNG

Código do robô:

Definições de Pinos

O código começa definindo os pinos para o controle dos motores e para o sensor ultrassônico:

  1. IN1, IN2, IN3, IN4: São os pinos conectados aos drivers dos motores, controlando o movimento do robô.
  2. TRIG_PIN e ECHO_PIN: São os pinos conectados ao sensor ultrassônico. O pino TRIG é usado para enviar um sinal de "trigger", e o ECHO recebe o eco do sinal, permitindo calcular a distância.

Definição de Velocidade

A constante MOTOR_SPEED define a velocidade máxima dos motores (255 é o valor máximo de PWM no Arduino).

Função setup()

Essa função inicializa os pinos, configurando-os corretamente:

  1. initMotorPins(): Define os pinos dos motores como saídas.
  2. initUltrasonicSensor(): Define os pinos do sensor ultrassônico.
  3. Serial.begin(9600): Inicializa a comunicação serial para mostrar a distância no monitor serial.

Função loop()

A função loop() é executada repetidamente. O fluxo é o seguinte:

  1. readDistance() é chamada para medir a distância usando o sensor ultrassônico.
  2. A distância é exibida no monitor serial.
  3. controlMotorsBasedOnDistance(distance) decide como os motores irão se comportar com base na distância medida.

Medição da Distância: readDistance()

Esta função envia um sinal de "trigger" para o sensor ultrassônico e calcula o tempo de viagem do sinal refletido, o que permite determinar a distância do objeto. A fórmula usada é:

  1. distância (cm) = (duração do eco * 0.0344) / 2, onde 0.0344 é a velocidade do som em cm/µs.

Controle dos Motores: controlMotorsBasedOnDistance(distance)

Dependendo da distância medida, a função decide o comportamento do robô:

  1. Se a distância for menor que 10 cm, o robô para os motores (stopMotors()).
  2. Se a distância for menor que 20 cm, o robô anda devagar (moveForwardSlow()).
  3. Caso contrário, o robô anda normalmente para frente (moveForward()).

Movimentos do Robô

  1. moveForward(): Faz os motores girarem com a velocidade máxima.
  2. moveForwardSlow(): Faz os motores girarem com metade da velocidade máxima.
  3. moveMotors(int speed): Controla os motores, definindo a direção e a velocidade. A função usa PWM para controlar a intensidade dos sinais nos pinos IN1, IN2, IN3 e IN4.
  4. stopMotors(): Desliga os motores, fazendo o robô parar completamente.

Funções de Rotação

  1. rotate180Left() e rotate180Right(): Fazem o robô girar 180 graus para a esquerda ou para a direita. A lógica de controle dos motores é invertida para um movimento de rotação.
  2. rotateMotors(): Controla os pinos dos motores de forma que o robô possa girar.

Conclusão

Em resumo, o código permite que o robô se movimente e interaja com o ambiente com base na distância de objetos detectados pelo sensor ultrassônico. Ele se adapta automaticamente, ajustando a velocidade dos motores ou parando quando se aproxima de obstáculos. Além disso, o robô pode realizar rotações de 180 graus, o que facilita manobras em espaços mais apertados.


Diagrama Elétrico

diagrama.PNG

Diagrama elétrico feito no TinkerCad

Desafios

  1. Ajuste e Alinhamento dos Componentes
  2. Durante a montagem, um dos principais desafios foi o desalinhamento das rodas e a dificuldade de fixação de alguns componentes na base impressa em 3D. A precisão da impressão nem sempre foi perfeita, o que exigiu ajustes manuais, como o alargamento de furos para garantir um encaixe adequado das peças.


  1. Distribuição de Peso e Estabilidade
  2. A distribuição de peso no robô foi uma preocupação constante, principalmente devido à bateria e ao Arduino estarem localizados na parte superior, o que poderia causar instabilidade. A correção envolveu ajustes no posicionamento dos componentes para garantir que o robô não perdesse equilíbrio durante o movimento ou fosse facilmente derrubado.


  1. Calibração do Sensor de Proximidade
  2. A calibração do sensor de proximidade foi desafiadora, pois ele não estava inicialmente detectando os objetos de forma eficaz, especialmente em ambientes com variações de luz ou outras interferências. Foi necessário ajustar o código do Arduino e testar diferentes configurações para melhorar a resposta do sensor.


Programação e Resposta dos Motores

A programação inicial não estava gerando a resposta esperada nos motores, com o robô apresentando movimentos descontrolados ou falhas em sua movimentação. Ajustes no código e testes repetidos ajudaram a otimizar os comandos e melhorar a precisão do controle de movimentação.