Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
VISOKA TEHNIČKA ŠKOLA U BJELOVARU
Tehnička dokumentacija iz kolegija Osnove robotike
Programabilni robot
Dino Rais
Bjelovar, srpanj 2017
ii
Sadržaj
Uvod ........................................................................................................................................................... 1
1. Opis projektnog zadatka .................................................................................................................. 2
2. Opis hardvera ................................................................................................................................... 4
2.1 Tehničke specifikacije mikrokontrolera ATmega328p .................................................................... 6
3. Programski kod ................................................................................................................................ 9
4. Zaključak ........................................................................................................................................ 14
5. PRIVITAK ..................................................................................................................................... 15
1
Uvod
Programabilni robot je robot koji može učiti "pamtiti" pozicije u koje je bio ručno
doveden te nakon spremanja zadanih pozicija iste može neprekidno ponavljati. Ideja
za ovaj projekt došla je prilikom rada sa industrijskim robotom i proučavanjem
robotskih ćelija za robotsko zavarivanje. Pošto su mi postupci zavarivanja kao što su
MIG/MAG i TIG vrlo interesantni, tako su me robotske ćelije za zavarivanje dosta
zainteresirale te sam razmišljao o izradi robota za zavarivanje MAG postupkom, ali
sam od toga ubrzo odustao zbog cijene izrade takvoga robota koji bi zaista bio
funkcionalan u procesu robotiziranog zavarivanje. Nakon razmišljanja o tome što
bih mogao napraviti kako bih mogao malo više naučiti o robotima i robotici, odlučio
sam napraviti jednog robota igračku koja sasvim dobro može poslužiti za učenje
programiranja zadanih pozicija i ponavljanje istih.
2
1. Opis projektnog zadatka
Svrha ovoga projekta je ideja da se napravi model robotske ruke koja će se moći
ručno pozicionirati na željenu poziciju. Robot se ručno dovede na željene pozicije te se
nakon svake ručno dovedene pozicije pozicija pamti unutar upravljačke jedinice robota
pritiskom na tipkalo. Nakon spremanja željenih pozicija, robot se iz moda programiranja
pokreče u mod rada, odnosno izvršavanja zadanih pozicija.
Na fotografiji 1.1 prikazana je robotska ruka sa četiri stupnja slobode gibanja i hvataljkom
izvdenenom pomoću pincete, kako bi bila što manje mase, korištena pri radu na ovome
projektu, a na slici 1.2 prikazana je upravljačka jedinica koja je upravljala robotom sa slike
1.1 ali montirana na robotsku ruku popularnog imena "uArm".
Slika 1.1 Četiri osna robotska ruka sa hvataljkom
Slika 1.2 Robotska ruka "uArm" i upravljačka jedinica robota
3
Svrha ovog projekta je isključivo zasnovana na učenju sa principima rada robota i
upravljačkih sustava robota, odnosno ideja da se sa relativno malom količinom novca
napravi robot koji može ponavljati spremljene pozicije nekakvom točnošću koje zahtjeva
premještanje nekakvih predmeta sa jednog mjesta na drugo.
Na slici 1.3 prikazana je shema sklopa za upravljanje programabilnim robotom.
Slika 1.3 Shema sklopa za upravljanje robotom
4
2. Opis hardvera
Za realizaciju ovoga projekta korišteno je mikroračunalo na razvojnom okruženju
popularnog naziva "Arduino UNO" na kojem se nalazi mikroračunalo ATmega328p čija se
fotografija nalazi na slici 2.1. Za pogon robota korišteni su servo motori SG90 i MG995,
motor SG90 prikazan je slikom 2.2, a servo motor MG995 slikom 2.3 i 2.4.
Slika 2.1 Arduino UNO
Slika 2.2 Servo motor oznake SG90
5
Slika 2.3 Servo motor oznake MG995
Slika 2.4 Prijenosnik snage servo motora MG995
6
2.1 Tehničke specifikacije mikrokontrolera ATmega328p
Za projekt korišteno je Atmelovo mikroračunalo AVR porodice ATmega
328P, navedeno mikroračunalo korišteno je isključivo iz razloga što se nalazi
na Arduino UNO razvojnom okruženju. Tablica 2.1.1. prikazuje korištene
pinove na Arduino UNO razvojnom okruženju. Raspored pinova na
mikrokontroleru ATmega 328P prikazan je na slici 2.1.1.
Tehniča specifikacija korištenog mikroračunala ATmega 328P:
visoke performanse,
mala snaga,
Atmel® AVR 8-bitni mikrokontroler,
RISC arhitektura:
- 131 instrukcija,
- 32 registra opće namjene,
- do 20 MIPS (20 milijuna instrukcija u jednoj sekundi) na frekvenciji od 20
MHz
32 kB (engl. In-System Self-Programmable) programske Flash memorije,
1kB EEPROM memorije,
2kB SRAM memorije,
ciklus pisanja/brisanja: Flash 10 000 puta/EEPROM 100 000 puta,
dva 8-bitna tajmera (engl. timers)/brojača (engl. counters) s djeljiteljem
frekvencije radnog takta,
jedan 16-bitni tajmer/brojač s djeliteljem frekvencije radnog takta,
timer realnog vremena sa odvojenim oscilatorom,
šest PWM kanala,
osam kanala analogno-digitalnih pretvornika (rezolucija od 10 bitova),
serijsko sučelje sa dvije žice (eng. Two-Wire Serial Interface),
Master/Slave SPI sučelje (eng. Serial Peripheral Interface),
programljivi USART (engl. Universal Synchronous and Asynchronous
Serial Receiver and Transmitter),
programljivi vremenski brojač za nadzor ispravnog rada (engl. Watchdog
timer) sa odvojenim oscilatorom (engl. On-chip Oscillator)
7
Power-on Reset,
programljivi detektor pada napona napajanja (engl. Brown Out Detection),
unutarnji i vanjski izvor prekida (engl. interrupts),
28 digitalno ulazno/izlazna pina,
TQFP podnožje s 32 pina,
radni napon: 1,8 - 5,5 V,
radni takt: 0 - 20MHz pri radnom naponu: 4.5 - 5.5 V,
potrošnja (1MHz, 1,8 V, 25˚C, ATmega 328P)
- aktivan: 0,2 mA,
- u mirovanju: 0,75 µA.
Slika 2.1.1. Raspored pinova na mikrokontroleru ATmega 328P
Raspored pinova na mikrokontroleru ATmega 328P prikazan je na slici 2.1.1.
8
Tablica 2.1.1: Lista korištenih pinova mikrokontrolera
PIN Opis
PIN 2 Tipkalo
PIN 8 Kip prekidač (programiranje)
PIN 7 Kip prekidač (pokretanje)
PIN 4 Led dioda 5mm, zelena
PIN AO Potenciometar za 1. zglob robota
PIN A1 Potenciometar za 2. zglob robota
PIN A2 Potenciometar za 3. zglob robota
PIN A3 Potenciometar za 4. zglob robota
PIN A4 Potenciometar za hvataljku
PIN D3 Servo motor MG995
PIN D5 Servo motor MG995
PIN D6 Servo motor MG995
PIN D10 Servo motor MG995
PIN D11 Servo motor SG90
9
3. Programski kod
Programski kod pisan je u programskom okruženju Arduino.
#include <Servo.h>
Servo servo_0;
Servo servo_1;
Servo servo_2;
Servo servo_3;
Servo servo_4;
int senzor_1 = A0; // 1. zglob
int senzor_2 = A1; // 2. zglob
int senzor_3 = A2; // 3. zglob
int senzor_4 = A3; // 4. zglob
int senzor_5 = A4; // hvataljka
int pot1, pot2, pot3, pot4, pot5, poz1, poz2, poz3, poz4, poz5;
//polja za motore
int zglob_1[150];
int zglob_2[150];
int zglob_3[150];
int zglob_4[150];
int hvataljka[150];
int i = 0;
int poz_u_polju = 0;
float nova_vr_poz1 = 0, nova_vr_poz2 = 0, nova_vr_poz3 = 0, nova_vr_poz4 = 0,
nova_vr_poz5 = 0;
float stara_vr_poz1 = 0, stara_vr_poz2 = 0, stara_vr_poz3 = 0, stara_vr_poz4 = 0,
stara_vr_poz5 = 0;
10
void setup()
{
pinMode(7, INPUT); //prekidač za pokretanje rada robota prema snimljenim
točkama____neće se koristiti, ali je spojeno na Arduino UNO
pinMode(8, INPUT); // sets the digital pin 8 as input
pinMode(2, INPUT); //TIPKALO__
pinMode(4, OUTPUT); // sets the digital pin 4 as outtput___LED dioda zelena
digitalWrite(4, HIGH); // sets the LED on
servo_0.attach(3); // attaches the servo
servo_1.attach(5);
servo_2.attach(6);
servo_3.attach(9);
servo_4.attach(10);
Serial.begin(115200); // Baudrate
Serial.println("robot je spreman...");
//delay(1000);
digitalWrite(4, LOW);
}
void loop()
{
//------------------------------------------------------------------------------------------------
programiranje pozicija robota
if(digitalRead(8) == true && digitalRead(7) == false)
{
//čitanje analognih ulaza i pomicanje motora prema očitanim vrednostima
pot1 = analogRead(senzor_1);
Serial.println(pot1);
pot2 = analogRead(senzor_2);
Serial.println(pot2);
11
pot3 = analogRead(senzor_3);
Serial.println(pot3);
pot4 = analogRead(senzor_4);
Serial.println(pot4);
pot5 = analogRead(senzor_5);
Serial.println(pot5);
//preračunavanje u kut zakreta servomootra
poz1 = pot1/6;
poz2 = pot2/6;
poz3 = pot3/6;
poz4 = pot4/6;
poz5 = pot5/6;
//smanjenje podrhtavanja servo motora tijekom programiranja pozicija
/* nova_vr_poz1 =(float) poz1;
stara_vr_poz1 = 0,9*stara_vr_poz1 + 0,1*nova_vr_poz1;
nova_vr_poz2 = (float)poz2;
stara_vr_poz2 = 0,9*stara_vr_poz2 + 0,1*nova_vr_poz2;
nova_vr_poz3 = (float)poz3;
stara_vr_poz3 = 0,9*stara_vr_poz3 + 0,1*nova_vr_poz3;
nova_vr_poz4 =(float) poz4;
stara_vr_poz4 = 0,9*stara_vr_poz4 + 0,1*nova_vr_poz4;
nova_vr_poz5 =(float) poz5;
stara_vr_poz5 = 0,9*stara_vr_poz5 + 0,1*nova_vr_poz5;
//pokretanje servo motora
servo_0.write((int)(stara_vr_poz1));
servo_1.write((int)(stara_vr_poz2));
12
servo_2.write((int)(stara_vr_poz3));
servo_3.write((int)(stara_vr_poz4));
servo_4.write((int)(stara_vr_poz5));
*/
//pokretanje servo motora
servo_0.write(poz1);
servo_1.write(poz2);
servo_2.write(poz3);
servo_3.write(poz4);
servo_4.write(poz5);
//spremanje pozicije pritiskom na TIPKALO
if(digitalRead(2)==true)
{
digitalWrite(4, HIGH); delay(500);
zglob_1[poz_u_polju]=poz1;
zglob_2[poz_u_polju]=poz2;
zglob_3[poz_u_polju]=poz3;
zglob_4[poz_u_polju]=poz4;
hvataljka[poz_u_polju]=poz5;
poz_u_polju = poz_u_polju + 1;
delay(3000);
digitalWrite(4, LOW); delay(500);
}
}
// ---------------------------------------------------------------------------------
START___izvoĎenje zapisanih pozicija
if(digitalRead(7) == true && digitalRead(8)== false)
13
{
digitalWrite(4, HIGH); delay(500);
digitalWrite(4, LOW); delay(500);
for (i=0; i < poz_u_polju; i = i + 1)
{
digitalWrite(4, HIGH); delay(100);
servo_0.write(zglob_1[i]);
delay(100);
servo_1.write(zglob_2[i]);
delay(100);
servo_2.write(zglob_3[i]);
delay(100);
servo_3.write(zglob_4[i]);
delay(100);
servo_4.write(hvataljka[i]);
delay(100);
digitalWrite(4, LOW); delay(100);
}
}
i = 0;
}
14
4. Zaključak
Kao zaključak ovoga projekta naveo bih da je veliki problem financijski jeftinih
konstrukcijskih i pogonskih rješenja mehaničke konstrukcije robotske ruke veliki problem,
koji se rezultira kao nepreciznost ponavljanja zadane pozicije, zbog raznih faktora kao što
su velika zračnost unutar pojedinih zglobova osi robota, mali potezni momenti servo
motora, vrlo malena nosivost robota što u konačnici robota čini nesposobnim za obavljanje
svoje osnovne funkcije. Ali sve u svemu osnovni zaključak ovog projekta je da se na
njemu puno naučilo i što je najvažnije robot je odraĎivao zadanu funkciju prebacivanja
objekta sa jednog mjesta na drugu te je zadane pozicije uspješno ponavljao.
15
5. PRIVITAK
Privitak ovom dokumentu su dva videa koji se nalaze na Google disk-u, a njihove
URL adrese su slijedeće:
https://drive.google.com/open?id=0B3ez4XzQffoAaG56RElTT1dOVzQ
https://drive.google.com/open?id=0B3ez4XzQffoAZTZ1NU1uXzFlZzQ