Arduino Forum

International => Portugues => Topic started by: Gilmitomilagre on Jun 14, 2018, 07:35 pm

Title: Sensor HCSR 04
Post by: Gilmitomilagre on Jun 14, 2018, 07:35 pm
Bem, Estou desenvolvendo um robô para uma competição nacional, ele deve seguir uma linha preta no chão, usamos o sensor de refletancia QRE - Analogico.
O problema esta em uma linha da programação na parte do ultrassonico : long microsec = ultrasonic.timing();





//quanto menor o valor, mais luz infravermelha chega ao sensor, portanto está no branco
//quanto maior o valor, menos luz infraverm. chega ao sensor, portanto está no preto

#include <Ultrasonic.h>
#define echoPin 13
#define trigPin 12

Ultrasonic ultrasonic(12, 13);
int sensorLinhaDir = A1;
int sensorLinhaEsq = A2;
int sensorCantoEsq = A0;
int sensorCantoDir = A3;

int S7 = A7;// sensor obstaculo
int valorsensorobs = 0;
int valorcorteobs = 50;
int S13 = 13;
int val = 0;
int distancia = 0;
int disdir= 0;
int disesq = 0;

int ValorCorte = 950;

//Standard PWM DC control
int E1 = 5;     //M1 Speed Control
int E2 = 6;     //M2 Speed Control
int M1 = 4;    //M1 Direction Control //motores da direita
int M2 = 7;    //M1 Direction Control //motores da esquerda

const int velocidade = 180;

int valorLinhaEsq, valorLinhaDir, valorCantoEsq, valorCantoDir = 0;  // variable to store the value coming from the sensor


void setup() {
   
   pinMode(4, OUTPUT);
   pinMode(5, OUTPUT);
   pinMode(6, OUTPUT);
   pinMode(7, OUTPUT);
   pinMode(echoPin, INPUT);
   pinMode(trigPin, OUTPUT);

}


void loop() {

 float cmMsec, inMsec;
 long microsec = ultrasonic.timing();
 
 cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
 Serial.print("MS: ");
 Serial.print(microsec);
 Serial.print(", CM: ");
 Serial.print(cmMsec);
 delay(100);
 

 valorLinhaEsq = analogRead(sensorLinhaEsq);    
 valorLinhaDir = analogRead(sensorLinhaDir);
 valorCantoEsq = analogRead(sensorCantoEsq);
 valorCantoDir = analogRead(sensorCantoDir);

 if ((cmMsec > 20))
   {

digitalWrite (dir1,LOW); //VELOCIDADE
   digitalWrite (M2,LOW);
   analogWrite (E1,velocidade2); //SENTIDO DE ROTAÇÃO
   analogWrite (E2,velocidade2);
   delay(200);
 }
   
     if ((cmMsec <= 20))    
//indo para direita
{
   digitalWrite (M1,HIGH); //VELOCIDADE
   digitalWrite (M2,LOW);
   analogWrite (E1,0); //SENTIDO DE ROTAÇÃO
   analogWrite (E2,0);
   delay(500);
 }


 else{
 if((valorLinhaEsq > ValorCorte)&&(valorLinhaDir > ValorCorte)){
   analogWrite (E1,velocidade);  //VELOCIDADE    
   analogWrite (E2,velocidade);  //VELOCIDADE
   digitalWrite(M1,LOW);  //SENTIDO DE ROTACAO
   digitalWrite(M2,LOW);  //SENTIDO DE ROTACAO  
 }
 
if((valorLinhaEsq < ValorCorte)&&(valorLinhaDir > ValorCorte)){
   analogWrite (E1,velocidade);  //CURVA PARA DIREITA    
   analogWrite (E2,velocidade);
   digitalWrite(M1,HIGH);
   digitalWrite(M2,LOW);      
 }
 if((valorLinhaEsq > ValorCorte)&&(valorLinhaDir < ValorCorte)){
   analogWrite (E1,velocidade);   // CURVA PARA ESQUERDA  
   analogWrite (E2,velocidade);
   digitalWrite(M1,LOW);
   digitalWrite(M2,HIGH);    
 }
 }
 
 
/* if((valorLinhaEsq > ValorCorte)&&(valorLinhaDir > ValorCorte)
                     &&(valorCantoEsq > ValorCorte)&&(valorCantoDir > ValorCorte)){
   digitalWrite(M1,LOW); //SENTIDO DE ROTACAO
   digitalWrite(M2,HIGH); //SENTIDO DE ROTACAO
   analogWrite (E1,velocidade);  //VELOCIDADE    
   analogWrite (E2,velocidade);  //VELOCIDADE  
   delay(100);
}*/
 
 
}
Title: Re: Sensor HCSR 04
Post by: luisilva on Jun 14, 2018, 09:30 pm
Com um post desta forma não é muito fácil ajudar. Repare que nem se deu ao trabalho de ler as regras do fórum e postar o código de forma correcta.

Qual é exactamente o problema com essa linha de programação? O que faz o robô e o que deveria fazer?

PS.: Uma vez que coloca aqui código para outros entenderem, não acha que o deveria colocar na sua forma final? (Estou a ver pelo menos um bloco de código comentado. Deveria ser incluído no código final? Já foi excluído do projecto há algum tempo e não deve ser considerado? É neste bloco que está o problema que o traz aqui?)