You are on page 1of 24

ZRAKOPLOVNA TEHNIČKA ŠKOLA

RUDOLFA PEREŠINA
Rudolfa Fizira 6, 10410 VELIKA GORICA

ZAVRŠNI RAD

Robotski Asistent

Mentor: Učenik: Filip Belinić


Marijana Srebrenović, prof. dip. Ing. Razred: 4.IRE
Šk. Godina: 2020./2021.

Velika Gorica, 2021.

0|Stranica
IZJAVA

Ja, Filip Belinić, učenik Zrakoplovno tehničke škole Rudolfa Perešina,


dajem izjavu o samostalnoj izradi završnog rada uz pomoć stručne
osobe, mentorice Marijane Srebrenović. Zahvaljujem prof. dipl. ing. el.
techn. Marijani Srebrenović na pomoći pri savjetovanju i izradi
završnog rada.

Datum i mjesto:

Potpis:
Filip Belinić

1|Stranica
Sadržaj:
Str.

1) Uvod………………………………………… 3

2) Komponente i Alati……………………….. 4

3) Opis Komponenata……………………….. 5

4) Postupak Izrade…………………………… 7

5) Programiranje……………………………... 15

6) Literatura…………………………………… 23

2|Stranica
1) Uvod

Kao svoj završni rad svojevoljno sam odabrao projekt koji sam nazvao
„Robotski Asistent“. Na izradu završnog rada me potaknula činjenica da u
određenim dijelovima kokpita i zrakoplova ne postoji dovoljno prostora za
normalno odrađivanje pregleda, zamjene dijelova i ugradnje modifikacija. Na
temelju toga sam se odlučio za ovu temu kako bi u nekoj određenoj mjeri olakšao
taj posao. Ovaj Robotski asistent sastoji se od 2 djela: RC Car + RC Robotic Arm.
Prijenos snage temeljiti će se na izravnom prijenosu tj. kada su na vratila
pričvršćeni zupčanici koji se dodiruju i na taj način izravno prenose snagu motora.

U današnje vrijeme sve češće se koristi robotika kako bi se pojedini zadatci


olakšali, te kako bi se zadatci odradili sa preciznošću i brzinom, što su neke od
bitnijih stvari u današnje vrijeme kada se veliki dio stvari radi u velikim količinama
koje je potrebno proizvesti u što kraćem vremenskom roku. Leonardo da Vinci je
oko 1500. godine izradio mehanički automat u obliku lava koji se pokrenuo,
rastvorio prsni koš i pokazao francuski grb. Industrijski robot je uređaj koji može
manipulirati dijelovima, alatima, pomagalima te prilagodljivim promjenama
programa obavljati različite proizvodne zadaće. Industrijski roboti poznatiji su pod
nazivom "robotska ruka". Razvoj robota i robotike odvijao se je u nekoliko etapa:
Roboti prve generacije: automatski ponavljaju zadani pokret, najbrojniji u
tvorničkim pogonima, upravljački sustav lako se prilagođuje ručnim operacijama,
uporaba: prešanje, zavarivanje i sl.
Roboti druge generacije: mogućnost snalaženja u nepredvidljivim okolnostima
radnog prostora - opremljeni su senzorima (osjetilima), od senzora dobivaju
informacije, snalaženje i postupci u radnom prostoru su programirani, uporaba:
rad na pokretnoj vrpci, montažnim operacijama, bojenju itd…
Roboti treće generacije: primjena raznolikih senzora i umjetna inteligencija,
opremljeni računalima i usavršenim programima, sposobni su prepoznavati
okolinu, analizirati svoje učinke i učiti iz svojih pogrešaka, samostalno i
inteligentno mijenjaju svoj način rada kako bi se prilagodili uvjetima rada i
poboljšali radni učinak.

3|Stranica
2) Komponente I Alati

1. Arduino UNO,

2. Jumper Žice,

3. Breadboard (Eksperimentalna Pločica),

4. Štampana (Bušena) Pločica,

5. Kućište I Dijelovi Ruke Isprintani Pomoću 3D Printera,

6. Aluminijsko Kućište Za DC Motore,

7. HC-05 Bluetooth Modul,

8. Servo Motor Towerpro SG90 (180º),

9. Servo Motor Towerpro MG995 (360º),

10. DC Motor Driver Dual H-Bridge L298N,

11. DC Motori,

12. Vijci I Matice M4,

13. Vijci I Matice M2,

14. Križni Odvijač,

15. Vilasti Ključ M2

16. Vilasti Ključ M4,

17. Lemna stanica,

18. Tinol Žica Za Lemljenje,

19. Pasta Za Lemljenje,

20. Pinceta,

21. Protu uteg za održavanje ravnoteže.

4|Stranica
3) Opis komponenata

Arduino UNO - Pločica opremljena skupovima pinova za digitalni i analogni ulaz /


izlaz koji se mogu povezati s raznim pločama za proširenje i drugim krugovima. Ploča
sa 14 digitalnih pinova, može se programirati s Arduino IDE (Integrated Development
Environment), preko tipa B USB kabla.

Bread Bord - Eksperimentalna pločica, protoboard, konstruktivna je osnova za


izradu prototipova elektronike.

Štampana Ploča - Sredstvo kojim se mehanički i električki povezuju elektroničke


komponente. Sastoji se od podloge od izolatorskog materijala na kojoj se različitim
postupcima oblikuje vodljiva struktura.

HC-05 - Full-duplex bluetooth modul koji služi kao prijamnik i/ili odašiljač signala za
pokretanje i kontrolu DIY (Do It Yourself / Uradi Sam) projekata.

Servo Motor Towerpro Sg90 (180º), Mg995 (360º) - Servo motori koji se mogu
kontrolirati pomoću Arduino ploče koja služi za programiranje (zadavanje određenih
zadataka). SG90 je slabiji motor koji se koristi za manje projekte gdje nije potrebna
velika snaga (1.8 kgf·cm), dok se MG995 koristi za veće projekte i tamo gdje je
potrebna veća snaga (10 kgf·cm). (kgf·cm = kilogram snage po centimetru)

5|Stranica
DC Motor Driver Dual H-Bridge L298N - L298N driver za motor koristi takozvani H-
most (engl. H-bridge) integrirani čip. H-most je strujni krug koji se sastoji od 4
prekidača spojenih s motorom. Ako S2 i S3 prekidače zatvorimo, a S1 i S4 prekidače
otvorimo, struja će teći u određenom smjeru. Ako zamijenimo stanja prekidača tako
da su S2 i S3 otvoreni, a S1 i S4 zatvoreni, struja će kroz motor proteći u suprotnom
smjeru. Uz to, ne smijemo zatvoriti sva četiri prekidača odjednom ili oba prekidača na
jednoj strani H-mosta (npr. S1 i S2) jer time izazivamo kratki spoj.

DC Motori - istosmjerni motor ili motor za istosmjernu struju pretvara istosmjernu


električnu struju u kružno gibanje. Stroj je tako konstruiran da može raditi kao
električni generator istosmjerne struje ako se mehanički pokreće vanjskom silom.

Lemna Stanica - pored lemilice sadrži i bazu na kojoj se podešava temperatura.


Najčešće se na ili pored baze nalazi i stalak na koji se može staviti lemilica kako bi se
ohladila. Zbog mogućnosti za precizno podešavanje temperature ove lemilice se
koriste u profesionalnim servisima električnih uređaja.

Tinol Žica za Lemljenje - Tinol žica je vrsta lema (metalno vezno sredstvo koje se
koristi kod lemljenja kojemu je talište barem 50°C niže od tališta lemljenoga
materijala) koja sadrži Tinol u svojoj bazi.

Pasta za Lemljenje - Kiselina koja čisti od oksidacije i masnoća kako bi se lem


dobro primio na drugi metal.

6|Stranica
4) Postupak izrade
Postupak izrade je podijeljen u dva djela: 1) Priprema komponenti
2) Sastavljanje

1) Priprema komponenti:
Neke od komponenata naručene su s internetskih stranica DIYkits.eu i e-radionica.
To su komponente: Štampana (Bušena) Pločica, Aluminijsko Kućište za DC Motore,
Servo Motor Towerpro SG90, Servo Motor Towerpro MG995, DC Motor Driver Dual
H-Bridge L298N, DC Motori i HC-05 Bluetooth Modul.

Tinol žica za Lemljenje, Pasta za Lemljenje i Lemna stanica su kupljene u dućanu


Chipoteka.

Komponente Arduino UNO, Jumper žice i Breadboard sam imao kod kuće od
prijašnjih projekata koje sam radio.

Tehnički priručnik o spajanju dijelova je pronađen na internetu na stranici


proizvođača (Arduino) i Arduino forumu (Arduino project HUB). Dijelovi robotske ruke
isprintane su na 3D printeru DaVinci jr. i korišten je PLA žuti prozirni filament sa
mrežastom popunom za printanje komponenti.

7|Stranica
2) Sastavljanje:
2.1 Pripremanje svih potrebnih materijala za izradu „Robotskog Asistenta“.

Sl.2.1

2.2 Sljedeće sam montirao Arduino na aluminijsko postolje, te sam pričvrstio DC


motore zajedno s kućištima u kojima se nalazi prijenos na koji je spojen adapter koji
se spaja na kotač. Žice na DC motorima su spojene na način da kada se pritisne
komanda da se robot kreće naprijed, svi kotači se okreću u istom smjeru.

Sl.2.2

8|Stranica
2.3 Zatim sam na aluminijsko kućište montirao H-Bridge L298N te sam na
konstrukciju stavio razdjelnike (spacere) koji će odvajati gornji i donji dio kućišta kako
bi komponente između kućišta imale prostora za normalan rad, a pritom ne bi bile
vidljive sa vanjske strane konstrukcije.

Sl.2.3

2.4 Na H-Bridge L298N sam spojio DC motore kako bi ih taj modul mogao
kontrolirati, a modul sam spojio na Arduino pomoću Jumper žica na odgovarajuće
izlaze (pinove).

Sl.2.4

9|Stranica
2.5 Nakon toga sam na Arduino spojio Bluetooth modul koji će u ovom projektu služiti
kao „Slave“ (prijemnik podataka) kako bi mogli kontrolirati cijeli projekt, također spojio
sam indikacijsku LED diodu koja će nam prikazivati stanje (Uključeno / Isključeno).

Sl.2.5
Ovim dijelom sam završio sa sastavljanjem pogonskog dijela Robotskog Asistenta.
Kotači su stavljeni u zadnjem postupku radi lakše ugradnje robotske ruke i testiranja
dijelova.
Sada slijedi postupak sastavljanja robotske ruke koja će služiti za obavljanje zadanih
radnji.

2.6 Glavni dio robotske ruke sastavio sam koristeći dijelove koje sam prethodno
isprintano na 3D printeru, a povezao sam ih pomoću M3 vijaka i matica pošto veza
treba biti pokretna kako bi se ruka pomicala, a ne fiksna.

10 | S t r a n i c a
Sl.2.6

2.7 Priprema potrebnih dijelova za sastavljanje robotske ruke.

Sl.2.7

2.8 U ovom djelu sastavio sam postolje ruke tako što sam montirao servo motor u
unutrašnjost postolja te na njega učvrstio prvi dio ruke koji će kontrolirati okretanje
ruke lijevo - desno.

Sl.2.8

11 | S t r a n i c a
2.9 Potom sam montirao ostale motore na njihova predviđena mjesta koji će
kontrolirati pomicanje gore - dolje i naprijed - nazad djela ruke te motore koji će
kontrolirati Roll (okretanje) i Pitch (kut) hvataljke kao i motor koji će otvarati - zatvarati
gripper.

Sl.2.9

2.10 Zatim montiramo 1. od 2 dijela ruke na servo motor koji je spojen na postolje
ruke i stavljamo gumicu kako bi olakšali motoru pokret prema gore tj. dajemo mu
pomoćni otpor za pomicanje.

Sl.2.10

12 | S t r a n i c a
2.11 Ovdje sam na 2. dio ruke montirao gripper (hvataljku) zajedno s dijelovima za
Roll i Pitch.

Sl.2.11

2.12 Naposljetku sam spojio 1. dio ruke koji je bio spojen na postolje i 2. dio ruke na
koji je montiran gripper.

Sl.2.12

13 | S t r a n i c a
Ovim djelom sam završio sastavljanje Robotske ruke koja će se nalaziti na
aluminijskom kućištu automobila i koja će obavljati zadane zadatke.

2.13 Naposljetku sam montirao Robotsku ruku na aluminijsko postolje (automobil)


pomoću M4 vijaka i matica te sam spojio sve motore i žice na Arduino pločicu uz
pomoć Jumper žica.

Sl.2.13

Zaključno s ovim dijelom postupka izrade, projekt „Robotski Asistent“ je uspješno


sastavljen, a u sljedećem poglavlju opisat ću programiranje koje sam odradio kako bi
se robot mogao pokretati.

14 | S t r a n i c a
5) Programiranje

Kao pomoć pri programiranju koristio sam se sljedećim stranicama:


Arduino Reference,
Arduino Project HUB,
How To Mechatronics.

Pri programiranju automobila koristio sam kod koji služi za kontrolu svih DC motora
koji su spojeni na DC Motor Driver Dual H-Bridge L298N te koji je spojen na Arduino
Uno koji preko HC-05 Bluetooth modula prima signale za pomicanje motora.

Prvi dio koda služi za određivanje pina na koji je spojen motor, te za određivanje pina
na koji je spojena indikacijska LED lampica za indikaciju da je automobil upaljen.

void setup() {
pinMode(13,OUTPUT); //left motors forward
pinMode(12,OUTPUT); //left motors reverse
pinMode(11,OUTPUT); //right motors forward
pinMode(10,OUTPUT); //right motors reverse
pinMode(9,OUTPUT); //Led
Serial.begin(960);
}

Ovaj dio koda služi za prikupljanje podataka s HC-05 Bluetooth modula kako bi
odredio pomicanje motora.
void loop() {
if(Serial.available()){
t = Serial.read();
Serial.println(t);
}

U slučaju visokog napona na pinovima 11 i 13, svi motori se pomiču naprijed.


if(t == 'F'){ //move forward(all motors rotate in forward
direction)
digitalWrite(13,HIGH);
digitalWrite(11,HIGH);
}

15 | S t r a n i c a
Ako je visoki napon na pinovima 10 i 12, svi motori se pomiču unazad.
else if(t == 'B'){ //move reverse (all motors rotate in reverse
direction)
digitalWrite(12,HIGH);
digitalWrite(10,HIGH);
}

Ako je visoki napon na pinu 11, pomiču se lijevi motori, a desni se ne pale.
else if(t == 'L'){ //turn right (left side motors rotate in
forward direction, right side motors doesn't rotate)
digitalWrite(11,HIGH);
}

Ako je visoki napon na pinu 13, pomiču se desni motori, a lijevi se ne pale.
else if(t == 'R'){ //turn left (right side motors rotate in
forward direction, left side motors doesn't rotate)
digitalWrite(13,HIGH);
}

Paljenje / gašenje indikacijske LED lampice.


else if(t == 'W'){ //turn led on or off)
digitalWrite(9,HIGH);
}
else if(t == 'w'){
digitalWrite(9,LOW);
}

Ako je niski napon na pinovima 10, 11, 12 i 13, svi motori se ne pale.
else if(t == 'S'){ //STOP (all motors stop)
digitalWrite(13,LOW);
digitalWrite(12,LOW);
digitalWrite(11,LOW);
digitalWrite(10,LOW);
}
delay(100);
}

16 | S t r a n i c a
Za programiranje Robotske ruke koristio sam kod sa stranice How To Mechatronics
kako bi se određeni servo motori pomicali pomoću signala zaprimljenih s HC-05
modula.

Prvo moramo uključiti SoftwareSerial knjižnicu za serijsku komunikaciju Bluetooth


modula kao i servo knjižnicu.
#include <SoftwareSerial.h>

#include <Servo.h

Servo servo01;

Servo servo02;

Servo servo03;

Servo servo04;

Servo servo05;

Servo servo06;

SoftwareSerial Bluetooth(3, 4); // Arduino(RX, TX) - HC-05 Bluetooth


(TX, RX)

int servo1Pos, servo2Pos, servo3Pos, servo4Pos, servo5Pos, servo6Pos; //


current position

int servo1PPos, servo2PPos, servo3PPos, servo4PPos, servo5PPos,


servo6PPos; // previous position

int servo01SP[50], servo02SP[50], servo03SP[50], servo04SP[50],


servo05SP[50], servo06SP[50]; // for storing positions/steps

int speedDelay = 20;

int index = 0;

String dataIn = "";

17 | S t r a n i c a
U odjeljku za postavljanje moramo inicijalizirati servo motore i Bluetooth modul i
pomaknuti robotsku ruku u početni položaj. To radimo pomoću funkcije write () koja
servo jednostavno pomiče u bilo koji položaj od 0° do 180°.
void setup() {

servo01.attach(5);

servo02.attach(6);

servo03.attach(7);

servo04.attach(8);

servo05.attach(9);

servo06.attach(10);

Bluetooth.begin(38400); // Default baud rate of the Bluetooth module

Bluetooth.setTimeout(1);

delay(20);

// Robot arm initial position

servo1PPos = 90;

servo01.write(servo1PPos);

servo2PPos = 150;

servo02.write(servo2PPos);

servo3PPos = 35;

servo03.write(servo3PPos);

servo4PPos = 140;

servo04.write(servo4PPos);

servo5PPos = 85;

servo05.write(servo5PPos);

servo6PPos = 80;

servo06.write(servo6PPos);

18 | S t r a n i c a
U odjeljku petlje, pomoću funkcije Bluetooth.available (), neprestano provjeravamo
postoje li dolazni podaci s mobitela.
// Check for incoming data

if (Bluetooth.available() > 0) {

dataIn = Bluetooth.readString(); // Read the data as string

Arduinu, pomoću funkcije startWith () provjeravamo prefiks svakog dolaznog podatka


i tako znamo kako dalje postupiti.
// If "Waist" slider has changed value - Move Servo 1 to position

if (dataIn.startsWith("s1")) {

String dataInS = dataIn.substring(2, dataIn.length()); // Extract


only the number. E.g. from "s1120" to "120"

servo1Pos = dataInS.toInt(); // Convert the string into integer

Ovdje možemo jednostavno pozvati funkciju write () i servo će ići u taj položaj, ali na
taj način servo bi radio maksimalnom brzinom što je previše za robotsku ruku.
Umjesto toga trebamo kontrolirati brzinu servo servera, pa sam koristio FOR petlje
kako bih postupno pomicao servo s prethodnog na trenutni položaj primjenjujući
vrijeme kašnjenja između svake interakcije. Promjenom vremena odgode možete
promijeniti brzinu servo pogona.
// We use for loops so we can control the speed of the servo

// If previous position is bigger then current position

if (servo1PPos > servo1Pos) {

for ( int j = servo1PPos; j >= servo1Pos; j--) { // Run servo


down

servo01.write(j);

delay(20); // defines the speed at which the servo rotates

// If previous position is smaller then current position

if (servo1PPos < servo1Pos) {

for ( int j = servo1PPos; j <= servo1Pos; j++) { // Run servo up

19 | S t r a n i c a
servo01.write(j);

delay(20);

servo1PPos = servo1Pos; // set current position as previous


position

Ista metoda se koristi za pogon svake osi robotske ruke. Ispod njih je gumb SAVE.
Ako pritisnemo tipku SAVE, položaj svakog servo motora pohranjuje se u niz. Svakim
pritiskom indeks se povećava pa se niz popunjava korak po korak.
// If button "SAVE" is pressed

if (dataIn.startsWith("SAVE")) {

servo01SP[index] = servo1PPos; // save position into the array

servo02SP[index] = servo2PPos;

servo03SP[index] = servo3PPos;

servo04SP[index] = servo4PPos;

servo05SP[index] = servo5PPos;

servo06SP[index] = servo6PPos;

index++; // Increase the array index

20 | S t r a n i c a
Zatim, ako pritisnemo tipku RUN, pozivamo prilagođenu funkciju runservo () koja
pokreće pohranjene korake. Pogledajmo ovu funkciju. Dakle, ovdje pokrećemo
pohranjene korake iznova i iznova dok ne pritisnemo tipku RESET. Korištenjem
petlje FOR prolazimo kroz sve položaje pohranjene u nizovima i istodobno
provjeravamo dolazne podatke s pametnog telefona. Ti podaci mogu biti tipka RUN /
STOP koja zaustavlja robota i ako se ponovo klikne nastavlja se s automatskim
pokretima. Također, ako promijenimo položaj klizača brzine, koristit ćemo tu
vrijednost za promjenu vremena kašnjenja između svake interakcije u donjim
petljama FOR, koja kontrolira brzinu servo motora.
// Automatic mode custom function - run the saved steps

void runservo() {

while (dataIn != "RESET") { // Run the steps over and over again until
"RESET" button is pressed

for (int i = 0; i <= index - 2; i++) { // Run through all steps(index)

if (Bluetooth.available() > 0) { // Check for incomding data

dataIn = Bluetooth.readString();

if ( dataIn == "PAUSE") { // If button "PAUSE" is pressed

while (dataIn != "RUN") { // Wait until "RUN" is pressed


again

if (Bluetooth.available() > 0) {

dataIn = Bluetooth.readString();

if ( dataIn == "RESET") {

break;

// If SPEED slider is changed

if (dataIn.startsWith("ss")) {

String dataInS = dataIn.substring(2, dataIn.length());

speedDelay = dataInS.toInt(); // Change servo speed (delay time)

// Servo 1

21 | S t r a n i c a
if (servo01SP[i] == servo01SP[i + 1]) {

if (servo01SP[i] > servo01SP[i + 1]) {

for ( int j = servo01SP[i]; j >= servo01SP[i + 1]; j--) {

servo01.write(j);

delay(speedDelay);

if (servo01SP[i] < servo01SP[i + 1]) {

for ( int j = servo01SP[i]; j <= servo01SP[i + 1]; j++) {

servo01.write(j);

delay(speedDelay);

Na sličan način kao što je ranije objašnjeno s ovim IF naredbama i FOR petljama,
servo upravljače premještamo u njihov sljedeći položaj. Pritisnemo li tipku RESET,
obrisat ćemo sve podatke iz nizova na nulu i također resetirati indeks na nulu kako
bismo mogli re - programirati ruku robota novim pokretima.
// If button "RESET" is pressed

if ( dataIn == "RESET") {

memset(servo01SP, 0, sizeof(servo01SP)); // Clear the array data to 0

memset(servo02SP, 0, sizeof(servo02SP));

memset(servo03SP, 0, sizeof(servo03SP));

memset(servo04SP, 0, sizeof(servo04SP));

memset(servo05SP, 0, sizeof(servo05SP));

memset(servo06SP, 0, sizeof(servo06SP));

index = 0; // Index to 0

To su svi postupci za programiranje koda koji se koristi za kontroliranje Robotske


ruke.

22 | S t r a n i c a
6) Literatura

https://howtomechatronics.com

https://create.arduino.cc/projecthub

https://www.arduino.cc/reference/en

https://www.circuito.io

https://www.youtube.com/watch?
v=_B3gWd3A_SI&ab_channel=HowToMechatronics

https://www.youtube.com/watch?v=vyZwYuF-wi0&ab_channel=TheWrench

23 | S t r a n i c a

You might also like