Sunteți pe pagina 1din 15

UNIVERSITATEA

POLITEHNICĂ TIMIȘOARA,

FACULTATEA DE INGINERIE
DIN HUNEDOARA,

CONCURSUL ,,Anton
Saimac” 2023

Robotul Kick-Start
(MIȘA 30)

ELEVI PROFESOR
COORDONATOR:
SOCOTEANU PAUL DANIEL NISTOR MIRCEA
IACOB IANIS CRISTIAN ALEXANDRU
MADARAS LEVENTE
Definirea problemei: Noile tehnologii, inclusiv robotica, sunt
ignorate de publicul larg.

În societatea din zilele noastre, o foarte mare problemă este faptul


că majoritatea populației ignoră noile tehnologii, crezând că cele vechi
funcționează la fel de bine [1].
Însă, putem vedea că în cele mai mari fabrici din lume, de
autoturisme, de haine, de orice, s-a început folosirea pe scară largă a
roboților în cele mai grele munci, în cele repetitive sau în cele care
necesită o acuratețe imposibil de realizat de către o persoană [2].
Noi ne-am propus să arătăm oamenilor importanța roboticii prin
intermediul celui mai urmărit sport din România, adică fotbalul! Am decis
să realizăm un robot care să dea lovitura de începere la un meci oficial
de fotbal. În onoarea lui Michael Klein, la comemorarea a 30 de ani de
la dispariția sa, robotul i-a purtat din nou numele pe teren, acesta
purtând numărul 30 și numele “Mișa” [Fig.1]. Ne-am gândit că acest
lucru va aduce robotica la cunoștința mai multor oameni din oraș, așa că
ne-am apucat de îndată de lucru.

Fig 1. - Robotul cu numele


și cu numărul
HARDWARE
Pentru robot am folosit:
● Două motoare DC GoBILDA (Pentru cele două brațe de pe
robot)
● Patru motoare DC Core Hex de la REV (Pentru roți)
● Electronică REV (Control Hub și Expansion Hub)
● Un REV Claw acționat de un REV Smart Robot Servo
(Pentru a ține mingea pe loc)
● Patru roți cu înveliș din cauciuc cu încă 8 roți Duo Traction
Wheel de la REV.
● Un Slim Robot Battery de la REV.

Specificațiile pieselor: [3],[4]


● Primul motor GoBILDA, care învârte brațul pe care este plasată
gheara:
-Stall torque: 9.2 N*m
-Stall current: 9.2 A
-Rotații pe minut: 84 RPM
-Curentul folosit: 0.25 A
-Voltaj: 12V DC

● Al doilea motor GoBILDA, care lovește mingea:


-Stall torque: 3.7 N*m
-Stall current: 9.2 A
-Rotații pe minut: 223 RPM
-Curentul folosit: 0.25 A
-Voltaj: 12V DC

● Cele patru motoare Core Hex:


-Stall torque: 3.2 N*m
-Stall current: 4.4 A
-Rotații pe minut: 125 RPM
-Curentul folosit: 0.16 A (măsurat de noi) [Fig.2]
-Voltaj: 12V DC
Fig.2 - Măsurarea curentului folosit

● Control Hub-ul de la REV:


-4 porturi pentru motoare DC, cu tot cu encoder.
-6 porturi Servo pentru servomotoare
Interfețe pentru senzori și electronice:
-8 porturi de intrare/ieșire
-4 porturi analog de intrare
-4 porturi independente I2C

Interfețe de expansiune:
-2 porturi RS485
Limbaje de programare acceptate:
-Blocks
-OnBot Java
-Java

● Expansion Hub-ul de la REV:


-4 porturi pentru motoare DC
-6 porturi pentru servomotoare
-8 porturi intrare/ieșire
-4 porturi analog de intrare
-4 porturi independente I2C

Interfețe de expansiune:
-2 porturi RS485
● REV Smart Robot Servo
-Stall torque: 1.3 N*m
-Stall current: 2 A
-Unghi maxim: 270°
-Voltaj: 4.8V-7.4V (6V bază)

● Roțile Traction
-Raza: 5 cm
-Grosimea: 1.3 cm

● Roțile mari:
-Raza: 5 cm
-Grosimea: 2.5 cm

● Robot slim battery:


-Voltaj: 12V
-Capacitate: 3000mAh
-Siguranță: 20A ATM

Prima dată am lucrat la brațul robotului și ne-am propus să


imprimăm mingii o viteză de 1m/s. Pentru acest lucru am folosit un corp
cu masa ~500g. (Profilul și paleta aveau ~200g) [Fig.3]

Fig.3 - Cântărirea brațului

Apoi, ne-am apucat de șasiu, pe care am montat prima data


motoarele, împreuna cu rotile. [Fig.4]
Fig.4 - Șasiul cu roțile montate

După ce am terminat șasiul robotului, am decis să montăm


panourile pe el. Pe aceste panouri am montat o transversală pentru a
pune cele două brațe. [Fig.5]

Fig.5 - Unul dintre cele două panouri

Apoi, am montat pe transversală, prin intermediul a două profile de


GoBILDA, cele două motoare pe care am pus brațele cu niște hub-uri.
[Fig.6][Fig.7]
Fig.6 - Cele două motoare prinse Fig.7 - Imagine cu un hub [3].
cu două profile.

Pe REV Claw am plasat un resort pentru a o ține închisă în timp ce


servo-ul nu e în funcțiune. [Fig.8]

Fig.8 - Resortul pus pe REV


Claw
PROGRAMARE
Programul pentru controlarea robotului a fost programat în
OnBotJava deoarece am folosit electronică folosită în competiția FTC.
Am învățat, în timp ce am scris programul, cum și ce trebuie scris din
cartea ,,Learn Java for FTC” de Alan Smith [5].
Prima dată am scris programul pentru lovirea mingii, care
controlează un motor DC numit ,,MotorAdidas”. Motorul, care este
controlat cu un encoder, se va roti încet la poziția ,,220”, adică își va lua
avânt, apoi va merge la poziția ,,-150” cu viteză maximă, lovind mingea.
Aceasta este partea din program care execută acest lucru:

if (gamepad1.y) {
servo.setPosition(0.45);
}

if (gamepad1.b) {
stare = 0;
}

if (stare == 0) {
servo.setPosition(-0.3);
brat.setTargetPosition(900);
brat.setMode(DcMotor.RunMode.RUN_TO_POSITION);
brat.setPower(1);

while (brat.isBusy()) {
}

MotorAdidas.setTargetPosition(220);
MotorAdidas.setMode(DcMotor.RunMode.RUN_TO_POSITION);
MotorAdidas.setPower(-0.1);

while (MotorAdidas.isBusy());

stare = 1;
}

if (stare == 1) {
MotorAdidas.setTargetPosition(-150);
MotorAdidas.setMode(DcMotor.RunMode.RUN_TO_POSITION);
MotorAdidas.setPower(1);

while (MotorAdidas.isBusy()) {
if (gamepad1.x) {
MotorAdidas.setPower(0);
stare = 10;
}
}

stare = 2;
}

if (stare == 2) {
MotorAdidas.setTargetPosition(0);
MotorAdidas.setMode(DcMotor.RunMode.RUN_TO_POSITION);
MotorAdidas.setPower(0.2);

while (MotorAdidas.isBusy()) {
if (gamepad1.x) {
MotorAdidas.setPower(0);
stare = 10;
}
}

MotorAdidas.setPower(0);
brat.setTargetPosition(0);
brat.setMode(DcMotor.RunMode.RUN_TO_POSITION);
brat.setPower(0.5);

while (brat.isBusy());
brat.setPower(0);
stare = 3;
}
Partea de program cu care am controlat roțile:
rf.setPower(-yr);
lf.setPower(-yl);
rb.setPower(-yr);
lb.setPower(yl);
[rf - right forward
lf - left forward
rb - right back
lb - left back
yr - valoarea gamepad1.right_stick_y
yl - valoarea gamepad1.left_stick_y]

Tot programul:

package org.firstinspires.ftc.teamcode;

import com.qualcomm.robotcore.eventloop.opmode.OpMode;
import com.qualcomm.robotcore.hardware.DcMotorEx;
import com.qualcomm.robotcore.hardware.Servo;
import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
import
org.firstinspires.ftc.robotcore.external.navigation.Position;
import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.hardware.DcMotor;
import com.qualcomm.robotcore.hardware.DcMotorSimple;
import com.qualcomm.robotcore.hardware.Gamepad;

@TeleOp()
public class Misa extends OpMode {
int start=1;
double yl;
double yr;
private DcMotorEx MotorAdidas;
private DcMotor rf;
private DcMotor lf;
private DcMotor rb;
private DcMotor lb;
private DcMotor brat;
private Servo servo;
private double maxSpeed = 1;
int stare=7;
int pos=-220;
Gamepad gamepad = gamepad1;
double viteza=0;
@Override

public void init() {


rf = hardwareMap.get(DcMotor.class, "rightforward");
lf = hardwareMap.get(DcMotor.class, "leftforward");
rb = hardwareMap.get(DcMotor.class, "rightback");
lb = hardwareMap.get(DcMotor.class, "leftback");
brat = hardwareMap.get(DcMotor.class, "brats");
servo = hardwareMap.get(Servo.class, "gheara");
MotorAdidas = hardwareMap.get(DcMotorEx.class,
"MotorAdidas");

MotorAdidas.setMode(DcMotor.RunMode.STOP_AND_RESET_ENCODER);

MotorAdidas.setMode(DcMotor.RunMode.RUN_USING_ENCODER);

MotorAdidas.setDirection(DcMotorSimple.Direction.FORWARD);

MotorAdidas.setZeroPowerBehavior(DcMotor.ZeroPowerBehavior.BRA
KE);
brat.setMode(DcMotor.RunMode.STOP_AND_RESET_ENCODER);
brat.setMode(DcMotor.RunMode.RUN_USING_ENCODER);

brat.setZeroPowerBehavior(DcMotor.ZeroPowerBehavior.BRAKE);
servo.setDirection(Servo.Direction.REVERSE);

servo.setPosition(-1);

@Override

public void loop() {


double powermax = 1;
double powerint = -0.1;
double powera = -0.2;
int auleu = 0;
double yl = -gamepad1.left_stick_y;
double yr = -gamepad1.right_stick_y;

if (gamepad1.y) {
servo.setPosition(0.45);
}

if (gamepad1.b) {
stare = 0;
}

if (stare == 0) {
servo.setPosition(-0.3);
brat.setTargetPosition(900);
brat.setMode(DcMotor.RunMode.RUN_TO_POSITION);
brat.setPower(1);

while (brat.isBusy()) {
}

MotorAdidas.setTargetPosition(220);
MotorAdidas.setMode(DcMotor.RunMode.RUN_TO_POSITION);
MotorAdidas.setPower(-0.1);

while (MotorAdidas.isBusy()) {

stare = 1;
}

if (stare == 1) {
MotorAdidas.setTargetPosition(-150);
MotorAdidas.setMode(DcMotor.RunMode.RUN_TO_POSITION);
MotorAdidas.setPower(1);

while (MotorAdidas.isBusy()) {

stare = 2;
}

if (stare == 2) {
MotorAdidas.setTargetPosition(0);
MotorAdidas.setMode(DcMotor.RunMode.RUN_TO_POSITION);
MotorAdidas.setPower(0.2);

while (MotorAdidas.isBusy()) {

MotorAdidas.setPower(0);
brat.setTargetPosition(0);
brat.setMode(DcMotor.RunMode.RUN_TO_POSITION);
brat.setPower(0.5);
while (brat.isBusy());
brat.setPower(0);
stare = 3;
}

rf.setPower(-yr);
lf.setPower(-yl);
rb.setPower(-yr);
lb.setPower(yl);
telemetry.addData("Pozitie Encoder",
MotorAdidas.getCurrentPosition());
telemetry.update();
}
}

Roțile robotului le controla cu cele doua ,,stick-uri” de pe gamepad.


Uitandu-ne din fața lui, stick-ul din dreapta controlează roțile din dreapta,
și stickul din stânga le controlează
pe cele din stânga. În felul acesta
putem schimba direcția robotului,
așa ca la un tanc.
Pentru a lovi mingea, trebuie
întâi apăsat butonul ,,y” de pe
gamepad, care deschide gheara,
apoi butonul ,,b” care ridica brațul
cu gheara, apoi paleta, după care
lovește mingea și aduce tot înapoi
la poziția inițială.[Fig.9]

Pentru a înfrumuseța
programul, ne-am folosit de
inteligența artificială, adică de
ChatGPT [6].

Fig.9 - Gamepadul folosit de noi


REZULTATE OBȚINUTE

Pe lângă faptul că toți oamenii care au fost prezenți la meci au


văzut potențialul roboticii, s-a vorbit și în mass-media despre ,,MIȘA 30”.
Pe pagina de FaceBook a celor de la FC Corvinul Hunedoara s-a postat
despre robot și înainte, dar și după lovitura de începere [7],[8]. Cei de la
Corvinul au mai postat și pe pagina de YouTube [9], care a adunat
~1000 de vizualizări. Am mai apărut și la televiziunea națională, unde
robotul a fost prezentat întregii țări [Fig.10].

Fig.10 - Robotul fiind prezentat la știri

Bibliografie
1. Critical Role of Science, Technology, Innovation Cannot Be Ignored, Economic and Social
Council President Tells Multi-Stakeholder Forum -
https://press.un.org/en/2018/ecosoc6925.doc.htm

2. Istoria roboților KUKA - https://www.kuka.com/ro-ro/companie/prin-kuka/istoric

3. GoBILDA - https://www.gobilda.com/

4. REV Robotics - https://www.revrobotics.com/

5. Learn Java for FTC - https://github.com/alan412/LearnJavaForFTC

6. ChatGPT - https://openai.com/blog/chat
7. Imagine de dinaintea loviturii -
https://www.facebook.com/photo/?fbid=512928967711459&set=a.363418419329182

8. Postarea de după lovitură -


https://www.facebook.com/fccorvinul1921/posts/pfbid02Jbv7S7wPUbZhUPYGqb2t5kQWSps
W9Rn9K3CbjvJarPnMWLJyBALER4fpURG4eWLzl

9. Postarea de pe YouTube - https://www.youtube.com/watch?v=QnBNEncZer0

S-ar putea să vă placă și