Tradutor

Pesquisar este blog

quinta-feira, 1 de novembro de 2012

Projeto - Carro que desvia obstáculos.



- Componentes: 1 Placa Arduíno + 2 Motores + 1 Sensor ultrassônico + Fios + Materiais descartáveis (para montar o carro).

- Descrições: O sensor ultrassônico tem um emissor e um receptor, o transmissor manda um som que logo é percebido pelo receptor e assim podendo detectar se há um objeto a sua frente e qual a sua distancia. Como mostra na figura abaixo.


 - O carro funciona da seguinte maneira: A medida que ele chega perto do obstaculo, no monitor ficará listando a distância que o carro esta, no caso do nosso carro ele foi programado para parar a 5 cm do obstaculo, quando isso acontece ele gira para os dois lados medindo a distancia, o lado que tiver mais distancia ate o próximo obstaculo ele irá seguir.


Carro =>



Código =>



int PortPin2 = 2;    // Motor 1
int PortPin3 = 3;    // Motor 1
int PortPin4 = 4;    // Motor 2
int PortPin5 = 5;    // Motor 2
int distancia = 0;
int disdir= 0;
int disesq = 0;

#define echoPin 13
#define trigPin 12

#include "Ultrasonic.h"

Ultrasonic ultrasonic(12,13);

void setup()   {
  Serial.begin(9600);
  pinMode(PortPin2, OUTPUT);
  pinMode(PortPin3, OUTPUT);
  pinMode(PortPin4, OUTPUT);
  pinMode(PortPin5, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);

}

void loop()  {
  drive_frente();
  delay(100);   
  distancia = ultrasonico();
  Serial.println(distancia);
  delay(10);

  if(distancia <= 5){
    drive_esquerda();
    delay(1500);
    drive_stop();
    delay(200);
    disesq = ultrasonico();
    Serial.print("Esquerda: ");
    Serial.println (disesq);
    drive_direita();
    delay(2900);
    drive_stop();
    delay(200);
    disdir = ultrasonico();
    Serial.print("Direita: ");
    Serial.println(disdir);
    if(disdir >= disesq){
      Serial.println("-->Direita");
      drive_frente();
    }
    else{
      Serial.println("<--Esquerda");
      drive_esquerda();
      delay(2800);
      drive_stop();
      delay(200);
      drive_frente();
    }
  }  
}

void drive_esquerda(){           //função drive_esquerda
  digitalWrite(PortPin2, LOW);     //Motor 1
  digitalWrite(PortPin3, HIGH);    //Motor 2
  digitalWrite(PortPin4, HIGH);    //Motor 1
  digitalWrite(PortPin5, LOW);     //Motor 2
}

void drive_direita(){             //função drive_direita
  digitalWrite(PortPin2, HIGH);     //Motor 1
  digitalWrite(PortPin3, LOW);      //Motor 1
  digitalWrite(PortPin4, LOW);      //Motor 2
  digitalWrite(PortPin5, HIGH);     //Motor 2
}

void drive_stop(){                //função drive_stop
  digitalWrite(PortPin2, LOW);      //Motor 1
  digitalWrit  e(PortPin4, LOW);      //Motor 2
  digitalWrite(PortPin3, LOW);      //Motor 1
  digitalWrite(PortPin5, LOW);      //Motor 2
}

void drive_re(){                  //função drive_re
  digitalWrite(PortPin2, HIGH);     //Motor 1
  digitalWrite(PortPin3, LOW);      //Motor 1
  digitalWrite(PortPin4, HIGH);     //Motor 2
  digitalWrite(PortPin5, LOW);      //Motor 2
}

void drive_frente(){              //função drive_frente
  digitalWrite(PortPin2, LOW);      //Motor 1
  digitalWrite(PortPin3, HIGH);     //Motor 1
  digitalWrite(PortPin4, LOW);      //Motor 2
  digitalWrite(PortPin5, HIGH);     //Motor 2
}

int ultrasonico(){

  digitalWrite(trigPin, LOW);

  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);

  int distancia = (ultrasonic.Ranging(CM));

  return(distancia);

}



20 comentários:

  1. olá eu posso tirar essa função: int distancia = (ultrasonic.Ranging(CM)); porque esta aparecendo o seguinte erro: class ultrasonic has no member named ranging. Posso tirar esta linha??????????obrigado

    ResponderExcluir
  2. pode me enviar por email quem me responder.weslersonaraujo@hotmail.com

    ResponderExcluir
  3. ola pessoal alguem sabe como consertar esses erros:( se alguem arrumar no código tbm agradeço):

    EXPECTED '(' BEFORE 'ELSE'
    sketch_jul28a.ino: In function 'void pedra()':
    sketch_jul28a:63: error: expected `(' before 'else'
    sketch_jul28a:86: error: expected `}' at end of input

    código:
    #include"Ultrasonic.h"//incluir o arquivo da lib
    #include"Servo.h"//incluir o arquivo da lib
    #define TRIG_PIN 7
    #define ECHO_PIN 4
    #define SEE 3
    #define SED 0
    #define DMF 10
    #define DMT 9
    #define EMF 5
    #define EMT 6
    Servo motor;// lib servor
    Ultrasonic OurModule(TRIG_PIN,ECHO_PIN);//lib Ultrasonic
    int vel=255;//velocidade curva
    int tempo1=350;//tempo de curva
    void move(int DmF,int DmT,int EmF,int EmT)
    {
    analogWrite(DMF,DmF);
    analogWrite(DMT,DmT);
    analogWrite(EMF,EmF);
    analogWrite(EMT,EmT);
    }
    void linha(){
    if(digitalRead(SEE)==1){//esquerda
    move(vel,0,0,vel);
    delay(tempo1);
    Serial.print("esquerda");
    Serial.println("\n");
    Serial.println(digitalRead(SED));
    }
    else if(digitalRead(SEE)==1){//direita
    move(0,vel,vel,0);
    delay(tempo1);
    Serial.print("direita");
    Serial.println("\n");
    Serial.println(digitalRead(SEE));
    }
    Serial.print("seguindo para frente");
    Serial.println("\n");
    move(150,0,150,0);
    delay(10);
    }
    void pedra (){
    int Sensor_teste=0;
    motor.write(90);
    delay(500);
    motor.write(0);//realocar para esquerda
    delay(500);
    if(OurModule.Ranging(CM)>10){
    motor.write(90);
    delay(500);
    Sensor_teste=1;
    }
    motor.write(180);//realocar para direita
    delay(500);
    if(OurModule.Ranging(CM)>10){
    motor.write(90);
    delay(500);
    Sensor_teste=2;
    }//parte responsavel pelo movimento do carro apos detectar os objetos
    if(Sensor_teste==2){//se encontrar uma pedra na direita virar para esquerda
    move(vel,0,0,vel);
    delay(tempo1);
    }if else(Sensor_teste==1){//se encontar uma pedra na esquerda vira para
    direita
    move(0,vel,vel,0);
    delay(tempo1);
    else{//caso não houver nehuma pedra virar para direita por padrão
    move(0,vel,vel,0);
    delay(tempo1);
    }
    }
    void setup(){
    pinMode(SED,INPUT);
    pinMode(SEE,INPUT);
    Serial.begin(9600);
    motor.attach(8);
    delay(500);
    }
    void loop(){
    linha();
    if(OurModule.Ranging(CM)<15){
    delay(200);
    if(OurModule.Ranging(CM)<15){
    }
    }
    }

    ResponderExcluir
  4. pode me enviar por email quem me responder.weslersonaraujo@hotmail.com

    ResponderExcluir
  5. ola leonardo vou pedir um favor pra vc. vc poderia arrumar os erros que eu postei acima arrume pra mim direto no código.. pq eu nao sei onde é que é a função eu n sei mexer com isso. pelo amor de deus.deus vai te abençoar em dobro.

    ResponderExcluir
  6. instalei a placa certinho. fui passar o codigo pa placa arduino e apareceu isso no final ;avrdude: stk500_getsync(): not in sync: resp=0x00 o q é isso?

    ResponderExcluir
    Respostas
    1. Cara, provavelmente o seu computador não encontrou a porta serial do Arduíno, você instalou os drivers? se não, siga nosso tutorial http://robo4edu.blogspot.com.br/2012/09/passo-1-instalando-driver.html

      Excluir
  7. olá voce pode me passar o esquema de ligação,na placa arduino do seu robo.(deste que esta aki no blog).

    ResponderExcluir
  8. eita erro q persiste
    sketch_robo.ino: In function 'int ultrasonico()':
    sketch_robo:111: error: 'class Ultrasonic' has no member named 'Ranging'
    sketch_robo:111: error: 'CM' was not declared in this scope

    ResponderExcluir
    Respostas
    1. a sua biblioteca ultrassonic nao tem a funcao rangning tenta achar uma mais recente

      Excluir
  9. segue o código corrigido

    int PortPin2 = 2; // Motor 1
    int PortPin3 = 3; // Motor 1
    int PortPin4 = 4; // Motor 2
    int PortPin5 = 5; // Motor 2
    int distancia = 0;
    int disdir= 0;
    int disesq = 0;

    #define echoPin 13
    #define trigPin 12

    #include "Ultrasonic.h"

    Ultrasonic ultrasonic(12,13);

    void setup() {
    Serial.begin(9600);
    pinMode(PortPin2, OUTPUT);
    pinMode(PortPin3, OUTPUT);
    pinMode(PortPin4, OUTPUT);
    pinMode(PortPin5, OUTPUT);
    pinMode(echoPin, INPUT);
    pinMode(trigPin, OUTPUT);

    }

    void loop() {
    drive_frente();
    delay(100);
    distancia = ultrasonico();
    Serial.println(distancia);
    delay(10);

    if(distancia <= 5){
    drive_esquerda();
    delay(1500);
    drive_stop();
    delay(200);
    disesq = ultrasonico();
    Serial.print("Esquerda: ");
    Serial.println (disesq);
    drive_direita();
    delay(2900);
    drive_stop();
    delay(200);
    disdir = ultrasonico();
    Serial.print("Direita: ");
    Serial.println(disdir);
    if(disdir >= disesq){
    Serial.println("-->Direita");
    drive_frente();
    }
    else{
    Serial.println("<--Esquerda");
    drive_esquerda();
    delay(2800);
    drive_stop();
    delay(200);
    drive_frente();
    }
    }
    }

    void drive_esquerda(){ //função drive_esquerda
    digitalWrite(PortPin2, LOW); //Motor 1
    digitalWrite(PortPin3, HIGH); //Motor 2
    digitalWrite(PortPin4, HIGH); //Motor 1
    digitalWrite(PortPin5, LOW); //Motor 2
    }

    void drive_direita(){ //função drive_direita
    digitalWrite(PortPin2, HIGH); //Motor 1
    digitalWrite(PortPin3, LOW); //Motor 1
    digitalWrite(PortPin4, LOW); //Motor 2
    digitalWrite(PortPin5, HIGH); //Motor 2
    }

    void drive_stop(){ //função drive_stop
    digitalWrite(2, LOW); //Motor 1
    digitalWrite(4, LOW); //Motor 2
    digitalWrite(3, LOW); //Motor 1
    digitalWrite(5, LOW); //Motor 2
    }

    void drive_re(){ //função drive_re
    digitalWrite(PortPin2, HIGH); //Motor 1
    digitalWrite(PortPin3, LOW); //Motor 1
    digitalWrite(PortPin4, HIGH); //Motor 2
    digitalWrite(PortPin5, LOW); //Motor 2
    }

    void drive_frente(){ //função drive_frente
    digitalWrite(PortPin2, LOW); //Motor 1
    digitalWrite(PortPin3, HIGH); //Motor 1
    digitalWrite(PortPin4, LOW); //Motor 2
    digitalWrite(PortPin5, HIGH); //Motor 2
    }

    int ultrasonico(){

    digitalWrite(trigPin, LOW);

    delayMicroseconds(2);

    digitalWrite(trigPin, HIGH);

    delayMicroseconds(10);

    digitalWrite(trigPin, LOW);


    return(distancia);

    }

    ResponderExcluir
  10. Alguém sabe como conecto dois sensores, ultrassônico e infravermelho, em um só arduíno?

    ResponderExcluir
  11. olá eu posso tirar essa função: int distancia = (ultrasonic.Ranging(CM)); porque esta aparecendo o seguinte erro: class ultrasonic has no member named ranging. Posso tirar esta linha??????????obrigado

    ResponderExcluir
  12. Como pode 2 pessoas terem a mesma lógica?
    Eu fiz minha propria lógica de decisão (existe várias maneiras)... e por coincidencia achoi esse código e é exatamente a mesma logica, extrutura.. só muda as variaveis direita e esquerda kkkk PENSAMOS IGUAL KKKK

    ResponderExcluir
  13. Ou será que já vi esse código antes e estava no meu subconciente ?? kkkk

    ResponderExcluir
  14. Uma dica pra quem não conseguir usar o código... a razão é a seguinte... existe várias bibliotecas pro ultrasonico, e todas tem funções diferentes... o autor do tópico deveria ter colocado a bibliote que ele ultilizou.

    ResponderExcluir
  15. Olá. uma duvida em relação a esse projeto, os motores são alimentados como?

    ResponderExcluir