Professional Documents
Culture Documents
RUDOLFA PEREŠINA
Rudolfa Fizira 6, 10410 VELIKA GORICA
ZAVRŠNI RAD
Robotski Asistent
0|Stranica
IZJAVA
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.
3|Stranica
2) Komponente I Alati
1. Arduino UNO,
2. Jumper Žice,
11. DC Motori,
20. Pinceta,
4|Stranica
3) Opis komponenata
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.
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.
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.
Komponente Arduino UNO, Jumper žice i Breadboard sam imao kod kuće od
prijašnjih projekata koje sam radio.
7|Stranica
2) Sastavljanje:
2.1 Pripremanje svih potrebnih materijala za izradu „Robotskog Asistenta“.
Sl.2.1
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
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.
Sl.2.13
14 | S t r a n i c a
5) Programiranje
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);
}
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);
}
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.
#include <Servo.h
Servo servo01;
Servo servo02;
Servo servo03;
Servo servo04;
Servo servo05;
Servo servo06;
int index = 0;
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.setTimeout(1);
delay(20);
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) {
if (dataIn.startsWith("s1")) {
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
servo01.write(j);
19 | S t r a n i c a
servo01.write(j);
delay(20);
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")) {
servo02SP[index] = servo2PPos;
servo03SP[index] = servo3PPos;
servo04SP[index] = servo4PPos;
servo05SP[index] = servo5PPos;
servo06SP[index] = servo6PPos;
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
dataIn = Bluetooth.readString();
if (Bluetooth.available() > 0) {
dataIn = Bluetooth.readString();
if ( dataIn == "RESET") {
break;
if (dataIn.startsWith("ss")) {
// Servo 1
21 | S t r a n i c a
if (servo01SP[i] == servo01SP[i + 1]) {
servo01.write(j);
delay(speedDelay);
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(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
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