4.7 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
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
}
}
}