10.4 Senzorul de distanță REV

Senzorul de distanță REV

Senzorul de distanță 2m de la REV Robotics utilizează modulul de măsurare a laserului ST Microelectronics VL53L0X (ToF) pentru măsurarea distanțelor până la 2 metri. Spre deosebire de alți senzori care se bazează pe intensitatea luminii reflectate, acest senzor măsoară cât timp este nevoie ca lumina să revină înapoi, acest lucru duce la măsurători mult mai precise, care sunt independente de reflexie.

Acest senzor ne permite măsurarea distanței în 4 mărimi:

  • Milimetrii(MM);
  • Centimetrii(CM);
  • Inchi(IN)
  • Metri(M)

Cum îl putem utiliza în cel mai eficient mod?

Cel mai eficient mod în care senzorul de distanță poate fi folosit este în perioada de autonomie. Cu ajutorul acestuia putem măsura distanța față de un obstacol și îl putem evita, robotul neavand nici o daună. Totodată putem să măsurăm distanța față de un obiect și să îndeplinim task-urile din autonomie(mutarea unui obiect, eliberarea marker-ului etc.)

Tips and tricks

Cel mai recomandat mod de lucu ar fi în centimetrii(CM) pentru distanțe scurte, pentru a avea precizie în spațiile mici, iar în metrii(M) pentru a avea precizie pe distanțele mai lungi.

Cod exemplu

package org.firstinspires.ftc.teamcode;

import com.qualcomm.hardware.rev.Rev2mDistanceSensor;

import com.qualcomm.robotcore.eventloop.opmode.Autonomous;

import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;

import com.qualcomm.robotcore.hardware.DcMotor;

import com.qualcomm.robotcore.hardware.DistanceSensor;

import com.qualcomm.robotcore.util.ElapsedTime;

import org.firstinspires.ftc.robotcore.external.navigation.DistanceUnit;

@Autonomous(name=„Seznor Distanta”, group=„Iterative Opmode”)

//@Disabled

public class SenzorDistantaCurs extends LinearOpMode

{

// Declararea OpMode-urilor

   private ElapsedTime runtime = new ElapsedTime();//declararea timpului parcurs

   DcMotor leftmotor1;// Declararea motoarelor

   DcMotor leftmotor2;

   DcMotor rightmotor1;

   DcMotor rightmotor2;

   private DistanceSensor sensorRange;

   double power=0.5; //declararea vitezei

   @Override

   public void runOpMode() throws InterruptedException{

       telemetry.addData(„Status”, „Initialized”);

       telemetry.update();

       leftmotor1=hardwareMap.dcMotor.get(„stanga fata”);//declararea motorului pentru a-l putea folosi in program

       leftmotor2=hardwareMap.dcMotor.get(„stanga spate”);

       rightmotor1=hardwareMap.dcMotor.get(„dreapta fata”);

       rightmotor2=hardwareMap.dcMotor.get(„dreapta spate”);

  sensorRange = hardwareMap.get(DistanceSensor.class, „Distanta Fata”);

       Rev2mDistanceSensor sensorTimeOfFlight = (Rev2mDistanceSensor)sensorRange; //Stabilirea Senzorului de distanta REV

       waitForStart();

       runtime.reset();

      leftmotor1.setPower(-power);// Setarea motoarelor astfel incat sa mearga in fata

       leftmotor2.setPower(power);

       rightmotor1.setPower(-power);

       rightmotor2.setPower(power);

       while (opModeIsActive()){

           double p= sensorRange.getDistance(DistanceUnit.CM); // variabila care masoara distanta in cm fata de obstacol

           if(p<30) //Daca distanta fata de obstacol este mai mica de 30 de cm atunci robotul se opreste

           {

               leftmotor1.setPower(0);

               leftmotor2.setPower(0);

               rightmotor1.setPower(0);

               rightmotor2.setPower(0);

           }

           leftmotor1.setPower(power);

           leftmotor2.setPower(-power);

           rightmotor1.setPower(power);

           rightmotor2.setPower(-power);

           sleep(1000);// Acesta merge o secunda in spate pentru a evita contactul cu obstacolul

           leftmotor1.setPower(0);

           leftmotor2.setPower(0);

           rightmotor1.setPower(0);

           rightmotor2.setPower(0);

           telemetry.addData(„Status”,runtime.toString());

           telemetry.update();

           idle();//Sfarsit Program

       }

   }

}