Criando Robo com Arduino – Parte IV (Montando o Robo)

O tutorial de hoje é o final da serie de 4 tutoriais “Criando Robo com Arduino”. Para a primeira parte vermos como fazer o chassi que sustentará os motores, sensores e o arduino. Existem vários modelos na internet e um muito utilizado é o que se encontra abaixo:

Para não fugir a regra, usaremos esse mesmo modelo por ser mais simples o processo de corte, perfuração e montagem. O material a ser usado para construção do chassi pode ser : PVC, Acrilico, MDF entre outros… Para este caso irei utilizar PVC por ser um material barato, fácil de conseguir e cortar.

As rodas A e B foram retiradas de uma impressora antiga que tinha em casa e possuem esse formato:

A roda de apoio pode ser encontrada em lojas de ferragens e é chamada de “rodízio”: Preço pago: R$ 4,00.

A montagem deve ser feita conforme as imagens abaixo:

Acredito que essas imagens serão suficientes para que você possa montar a sua própria versão do robô, por isso vamos a parte da montagem do hardware e do código. A montagem do hardware é a mesma do tutorial 3:

Código do Robô:

O que o código faz?Seguindo os passos abaixo podemos determinar a ação do robô.

1- Inicia parado esperando por meio segundo.
2- Verifica a distancia que o robô esta de um determinado obstáculo.
3- Escreve a distancia no display LCD.
4- Anda para frente.
5 – Verifica a distancia novamente.
6- Escreve no LCD.

7- Verifica a primeira distancia com a segunda distancia: Se as duas distancias forem iguais, então quer dizer que o robô não andou para frente como deveria quando chamada a função para andar para frente (Passo 4). Se as distancias são iguais, então ele emite um sinal de alerta e vira 90° para a direita.

8- Caso a segunda distancia seja menor ou igual a 15 cm o robô emite um alerta, da a ré e vira para a direita 90°. Essa atitude serve para que o robô não bata em obstáculos.

9-  Se a segunda distancia for maior que 1000 cm (1 metro) então o robô emite um alerta, da a ré e vira para a esquerda.

10- Caso as ações não satisfaçam nenhuma das condições acima, então o robô continua andando para frente durante um determinado período. Escreve a distancia no LCD

11- Volta para o Passo 1.

/*
# Autor: Fernando Krein Pinheiro
# Data: 09/03/2012
# Linguagem: C/C++

# ========= IMPORTANTE ===========
# O codigo esta livre para usar,
# citar e compartilhar desde que
# mantida sua fonte e seu autor.
# Obrigado.

----------------------------------

   Para rotacao em graus
   pode ser utilizada a
   funcao delay(). Valores
   que correspondem aos graus
   para delay() sao:

   GRAUS         DELAY
   360           520
   270           390
   180           260
   90            130
*/

#include <LiquidCrystal.h>
#include <Ultrasonic.h>
#include <Servo.h>

#define echoPin 13
#define trigPin 12

Servo motorDireita, motorEsquerda;
Ultrasonic distancia(12,13);
LiquidCrystal lcd(9, 11, 5, 4, 3, 2);

int pinoAnalogico = 3;
int valorAnalogico;
int pinoPotenciometro = 0;
long valorPotenciometro = 0;
int BUZZER = 1;

void setup()
{
  iniciar_Motor();
  Serial.begin(9600);

  pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);
  lcd.begin(16, 2);
}

void loop()
{

    rotacao_Parado();
    delay(500);
    int dist = ultrasonico();
    escrever_LCD();
    rotacao_Frente();
    int dist2 = ultrasonico();
    escrever_LCD();
    if(dist == dist2)
    {
       Alerta(BUZZER, 2000, 300);
       rotacao_Direita();

    }
    else
       if(dist2 <= 15)
       {
	    Alerta(BUZZER, 2000, 300);
            rotacao_Re();
            rotacao_Direita();
	}
    else
       if(dist2 > 1000)
       {
	   Alerta(BUZZER, 2000, 300);
           rotacao_Re();
           rotacao_Esquerda();
       }
       else
           rotacao_Frente();
     escrever_LCD();

}

void rotacao_Parado()
{
   Serial.println("Motor Parado");
   motorDireita.detach();
   motorEsquerda.detach();
}

void rotacao_Frente()
{

   iniciar_Motor();
   Serial.println("Motor Frente");
   motorDireita.write(0);
   motorEsquerda.write(180);
   delay(600);
   rotacao_Parado();

}

void rotacao_Re()
{

   iniciar_Motor();
   Serial.println("Motor Re");
   motorDireita.write(180);
   motorEsquerda.write(0);
   delay(600);
   rotacao_Parado();
}

void rotacao_Direita()
{

   iniciar_Motor();
   Serial.println("Motor Direita");
   motorDireita.write(180);
   motorEsquerda.write(180);
   delay(250);
   rotacao_Parado();
}
void rotacao_Esquerda()
{

   iniciar_Motor();
   Serial.println("Motor Esquerda");
   motorDireita.write(0);
   motorEsquerda.write(0);
   delay(250);
   rotacao_Parado();
}

void iniciar_Motor()
{
	motorDireita.attach(7);
        motorEsquerda.attach(6);
}

int ultrasonico()
{
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);
  int cm = (distancia.Ranging(CM));
  Serial.print("Distancia em CM: ");
  Serial.println(cm);
  return cm;
}

void escrever_LCD()
{
        int distancia;
	valorPotenciometro = analogRead(pinoPotenciometro);
        distancia = ultrasonico();
	lcd.setCursor(0,0);
	lcd.print("Distancia: ");
        lcd.print(distancia);
	lcd.setCursor(13,1);
}
void Alerta (unsigned char BUZZER, int frequencia, long tempoMilisegundos)
{
    int Contador, x=0;
    long pausa = (long)(1000000/frequencia);
    long loopT = (long)((tempoMilisegundos*1000)/(pausa*2));
    while(x<3)
    {
    	for (Contador=0;Contador<loopT;Contador++)
    	{
        	digitalWrite(BUZZER,HIGH);
        	delayMicroseconds(pausa);
        	digitalWrite(BUZZER,LOW);
        	delayMicroseconds(pausa);
    	}
		delay(100);
      		x++;
    }
}

Vídeo de demonstração: OBS: No vídeo o robô apenas esta com seu funcionamento básico, sem o uso do display LCD e nem do dispositivo para o sinal sonoro, embora todo o código tenha sido testado e funcionado em perfeitas condições na montagem completa do robô. Note também que o robô está sendo alimentado através de uma tomada e não por baterias 9v, mas nada impede que você o alimente com a bateria, isso fica a seu critério.

14 comentários em “Criando Robo com Arduino – Parte IV (Montando o Robo)

  1. ola este projerto e muito bom sempre gostei de veiculo autonamos como estou começando agora com arduino este serar o primeiro que vou montar ate eu conseguir fazer alguns projertos. OBS ;;;; mas o melhor de todos foi o projerto de assensibilidade do inicio da pargina simples e de grande valor ; ;;;;

  2. Olá, estou seguindo o tutorial para montar o meu robôzinho… mas quando insiro os dois servos nada funciona… já refiz as ligações várias vezes. Poderia me ajudar?

  3. Olá amigo, gostei muito do projeto, suas aulas são nota mil, caso eu queira aperfeiçoar acrescentando por ex: comando de voz para movimentar partes, controlar por controles, instalar web e instar um som pra ele, vc tem mais tutorial? pergunto porque tem um kit neste site bem interessante, mais que eu tenho medo de comprar e não vir. http://www.ez-robot.com/

    Obrigado!

  4. kkkkkkkkkkkkkkkkkkkkkkkkkkk postei um comentaria acima pois não estava conseguindo abrir e video, agora que consegui, to aqui morrendo de rir, tá muito engraçado kra, mais fica algumas a mensagem acima para você me responder se possível kkkk eu vou rir sozinho se eu conseguir fazer isso kkk.

  5. kra que controle é aquele que vc usa pra movimentar a cabeça dele?? e como tu fez pra dar esse movimento todo na cuca dele??? kkk tá irado!!! não me canço de ver.

Deixe um comentário