Sensor Ultrassom para Robô COmpetição

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Sensor Ultrassom para Robô COmpetição

Mensagem  Flávio Gilberto em Qui 16 Out - 9:51

Estou precisando de ajudar para terminar a programação de um robô para competição.
Estou usando o sensor ultrassom HCSR-04 para o robô detectar obstáculos e depois, dentro de um loop conseguir desviar do mesmo. O programa funciona corretamente. O problema é que de alguma forma, o sensor frontal fica com valor zero (0) de vez em quando e prejudica o desempenho do robô. Porém, quando coloco o programa do ultrassom apenas para informar a distancia, fica apresentando a distância normal, sem oscilações. Resumindo: no programa do robô (o circuito eletrônico usa todas as portas digitais para sensores, servos - apenas este com alimentação externa) a distância do sensor frontal não fica constante com o sensor parado - parecendo até mal funcionamento. Favor ajudar, que meus alunos já tentaram, eu já tentei, mudei o formato do programa, já troquei vários sensores, porém, estou achando que o problema é nas portas do Arduino. Agradeço antecipadamente. Flávio

#include
#include
#include "Ultrasonic.h"
Ultrasonic ultrasonic(7,6);
long microsec = 0;
float distanciaCM = 0;

Servo servo1; // servo ESQUERDA 72 e 73 para
Servo servo2; // servo DIREITA 69 e 70 para

//#define echoPin 6 //Pino 8 recebe o pulso do echo
//#define trigPin 7 //Pino 7 envia o pulso para gerar o echo
#define echoPin3 8
#define trigPin3 9
#define echoPin2 10
#define trigPin2 11

int sensoresquerda = 2;
int sensordireita = 5;
int sensoresqMEIO = 3;
int sensordirMEIO = 4;

long duration = 0;
float distancia = 0;

int valorsensoresqMEIO = 0;
int valorsensordirMEIO = 0;
int valorsensoresquerda = 0;
int valorsensordireita = 0;

int tempo = 0;
int tempogira = 900;
int s1frente = 90;
int s2frente = 49;
void setup() //------------------------------------------------------------------------
{
//configuração dos pinos dos sensores
pinMode (sensoresquerda, INPUT);
pinMode (sensordireita, INPUT);
pinMode(sensoresqMEIO, INPUT);
pinMode(sensordirMEIO, INPUT);

// pinMode(echoPin, INPUT);
// pinMode(trigPin, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin3, INPUT);
pinMode(trigPin3, OUTPUT);

Serial.begin (9600);
servo1.attach(13); // portas dos servos 1 e 2
servo2.attach(12);
}
void loop() //-----------------------------------------------------------------------
{


servo1.write(90);
servo2.write(49);

microsec = ultrasonic.timing(); //Lendo o sensor
distanciaCM = ultrasonic.convert(microsec, Ultrasonic::CM); //Convertendo a distância em CM
Serial.print(distanciaCM);
Serial.println(" cm");
if (distanciaCM <= 4)
{
Serial.print("OBSTÁCULO");
servo1.write(180); // GIRA PARA DIREITA
servo2.write(180);
delay(700);
int sinal = 0;

while (sinal != 1)
{
digitalWrite(trigPin2, LOW);
delayMicroseconds(2);
digitalWrite(trigPin2, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin2, LOW);
long duration2 = pulseIn(echoPin2,HIGH);
long d2 = duration2 /29 / 2 ;

digitalWrite(trigPin3, LOW);
delayMicroseconds(2);
digitalWrite(trigPin3, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin3, LOW);
long duration3 = pulseIn(echoPin3,HIGH);
long d3 = duration3 /29 / 2 ;

if (d2 > d3)
{
servo1.write(72); // gira para esquerda com servo1 parado // 72 e 0
servo2.write(0);
delay (150);
}
if (d2 < d3)
{
servo1.write(180); // 180 - 69
servo2.write(69);
delay (150);
}
if (d2 == d3)
{
servo1.write(90); // PARA FRENTE
servo2.write(49);
delay (100);
}}


delay (50);
} }

Flávio Gilberto

Mensagens : 1
Data de inscrição : 16/10/2014

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum