Ed. Técnica, perguntado por raulxcom25, 10 meses atrás

João está programando um robô carro para andar 30cm para frente e quando ele reconhecer a cor preta no chão, voltar 30 cm. Explique como João deve fazer para programar?

Soluções para a tarefa

Respondido por rafaelrosagui
2

1) Para programar esse robô João pode utilizar a plataforma Arduino integrado com um sensor optico de reconhecimento. Segue a programação do robô:

AF_DCMotor motor_esq(1); //Seleciona o motor 1

AF_DCMotor motor_dir(2); //Seleciona o motor 42

int SENSOR1, SENSOR2, //SENSOR3;  Sensor de movimentação e optico

//deslocamentos de calibracao

int leftOffset = 0, rightOffset = 0, centre = 0;

//pinos para a velocidade e direcao do motor

int speed1 = 3, speed2 = 11, direction1 = 12, direction2 = 13;

//velocidade inicial e deslocamento de rotacao

int startSpeed = 30, rotate = 30;  //Deslocamento de 30 cm

//limiar do sensor

int threshold = 30;

//velocidades iniciais dos motores esquerdo e direito

int left = startSpeed, right = startSpeed;

//Rotina de calibracao do sensor

void calibrate()

{

for (int x=0; x<10; x++) //Executa 10 vezes para obter uma media

{

  delay(100);

  SENSOR1 = analogRead(0);

  SENSOR2 = analogRead(1);

  SENSOR3 = analogRead(2);

  leftOffset = leftOffset + SENSOR1;

  centre = centre + SENSOR2;

  rightOffset = rightOffset + SENSOR3;

  delay(100);

}

//obtem a media para cada sensor

leftOffset = leftOffset /30; //Deslocamento para esquerda

rightOffset = rightOffset /30; //Deslocamento para direita

centre = centre / 30;   //Raio de deslocamento

//calcula os deslocamentos para os sensores esquerdo e direito

leftOffset = centre - leftOffset;

rightOffset = centre - rightOffset;

}

void setup()

{

 calibrate();

 delay(3000);

}

void loop()

{

 //utiliza a mesma velocidade em ambos os motores

 left = startSpeed;

 right = startSpeed;

 //le os sensores e adiciona os deslocamentos

 SENSOR1 = analogRead(0) + leftOffset;

 SENSOR2 = analogRead(1);

 SENSOR3 = analogRead(2) + rightOffset;

 //Se SENSOR1 for maior do que o sensor do centro + limiar,

// vire para a direita

 if (SENSOR1 > SENSOR2+threshold)

 {

   left = startSpeed + rotate;

   right = startSpeed - rotate;

 }

 //Se SENSOR3 for maior do que o sensor do centro + limiar,

// vire para a esquerda

 if (SENSOR3 > (SENSOR2+threshold))

 {

   left = startSpeed - rotate;

   right = startSpeed + rotate;

 }

//Envia os valores de velocidade para os motores

 motor_esq.setSpeed(left);

 motor_esq.run(FORWARD);

 motor_dir.setSpeed(right);

 motor_dir.run(FORWARD);

}

Perguntas interessantes