Académique Documents
Professionnel Documents
Culture Documents
...
ta je to robot?
Malo istorije
Ideje koje predstavljaju zaetke automatizovane maine moemo
pronai ako zavirimo daleko u prolost pratei mitove o mehanikim
stvorenjima, zamiljene koncepte i pronalaske.
Jedan od koncepta potie jo iz 4. veka pre n.e. kada je grki
matematiar Archytas od Tarentuma osmislio mehaniku pticu, goluba
koji je trebalo da pokree vodena para.
Znaajan pronalaza tog doba jeste Ctesibius od Alexandrie, fiziar i
pronalaza iz Egipta, koji je oko 250. god. pre n.e. napravio vodeni sat clepsydra.
Heron od Alexandrie (10-70. god. n.e.), grki matematiar i inenjer,
imao je brojne izume meu mainama od kojih se za jednu tvrdilo da je
navodno mogla da imitira ljudski glas.
BEOGRADSKA KOLA
Rajko Tomovi
Miomir Vukobratovi
Ubrzo, 1971. godine, istraivanja su se okrenula razvoju prvog
aktivnog egzoskeleta. Ova maina je sluila kao osnovni pokreta za
paraplegiare tako to je nadoknaivala 50 odsto sile potrebne za
pokretanje tela.
Upotrebljivi prototipi egzoskeleta napravljeni su 1974. kao kompletni
ureaji snabdeveni elektropneumatskim i elektromehanikim
motorima. Sledee godine, istraivanja na Institutu se vode u
laboratoriji za biodinamiku i okreu se industrijskoj robotici.
U Institutu Mihailo Pupin je 1978. napravljen u svetu prvi
industrijski robot sa antropomorfnom konfiguracijom, koji je
potom poeo da se upotrebljava u jugoslovenskoj industriji. Sledeih
godina su razvijeni novi modeli aktivnih skeleta kao i cela ortopedska
ruka za distrofiare.
Tokom osamdesetih, a posebno devedesetih, istraivanja robota u
Beogradu gube na intenzitetu.
Pionirski doprinos Beogradske kole robotike pokrenuo je
istraivanja ortopedskih pomagala i uporedo, postavio robote na noge
Najvaniji korak u razvoju Beogradske
kole robotike
bio je Vukobratoviev rad o
taki nula momenta, objavljen jo
1969. godine.
Re je o teorijskom modelu kretanja
humanoidnog robota na kome se i
danas zasniva kretanje svih vrsta
androida. Pre nego to je ovaj model
kretanja poeo da se primenjuje kod
humanoida, roboti su imali veliki
problem sa odravanjem ravnotee u
pokretu. Princip koji je osmislio
profesor Vukobratovi i danas se,
gotovo pola veka kasnije, primenjuje
kod mnogih ovekolikih robota,
ukljuujui i ASIMO robota.
Kretanje robota
Premda su izgled i sposobnosti robota razliite, svi roboti su
uglavnom mehanike strukture koje predstavljaju kinematiki lanac.
Lanac je formiran od karika (kao kosti kod oveka) i motora (miia)
koji zdrueno funkcioniu izvodei razliite pokrete sa vie stepena
slobode.
Ono to zapravo pokree robota su
DC motori (motori jednosmerne struje),
step (korani) motori sa kontrolisanim uglom pomeranja,
piezo (ultrasonini) motori fundamentalno drugaijeg principa
rada, kao i
hidrauliki aktuatori velikog izlaznog momenta.
Mobilni robot
Mobilni roboti su klasa robota koji mogu autonomno da se kreu,
menjajui svoju poziciju i/ili orijentaciju u prostoru i obavljajui pri
tome neke specifine zadatke.
Njihova pozicija u prostoru ograniena je izgledom radnog prostora
(veliinom i pozicijom prepreka), i autonomnim radijusom kretanja
robota (potreba za energijom i komunikacijom).
Konstrukcija
Mobilni robot, koji je predmet ovog izlaganja, realizovan je sa
pogonom na dva toka u konfiguraciji sa tzv. diferencijalnim
pogonom (differential drive). Ose obrtanja pogonskih tokova su fiksne
i podudaraju se, a svaki toak ima nezavisan pogon.
Kretanje ovog mobilnog robota je zasnovano na konceptu trenutnog
pola rotacije. Odnosno, u zavisnosti od meusobnog odnosa brzine
kretanja pogonskih tokova, bie izveden odreeni nain kretanja.
Da bi se postigla statika stabilnost, pored dva pogonska toka, dodat
je jedan pomoni toak, tzv. caster.
...
Robotom se upravlja korienjem komercijalnog LG daljinskog
upravljaa za TV. Komande prima IR prijemnik koji je prikljuen na
Arduino mikrokontrolersku ploicu.
...
Korani motor
Korani motor (stepping motor) je jednosmerni (DC) motor koji
svoju punu rotaciju moe ostvariti u nekoliko koraka i moe se
zaustaviti na odreenom koraku bez ijednog povratnog senzora
(feedback sensor). Za razliku od obinih jednosmernih motora koji se
konstantno okreu kada na krajeve namotaja (polove) dovedemo
jednosmerni napon, na polove koranog motora dovodimo povorke
(nizove) pravougaonih impulsa.
Ovi motori se dele u dve grupe: unipolarne i bipolarne step motore.
Kod oba tipa motora jedan dovedeni impuls uzrokuje pomeranje za
jedan korak ija veliina u stepenima zavisi od vrste primenjenog step
motora.
Ovaj motor se sastoji od rotora proizvedenog od nemagnetnog elika i
statora koji se sastoj od veeg broja polova. Motor se upravlja tako da
se na odreeni par polova dovodi napajanje koji privlai polarizovane
delove rotora.
Step motori mogu da rade u tri razliita reima: monofazni, dvofazni i
reim polukoraka.
Drajver
ULN2003
...
Unipolarni korani motor ima dva namotaja po fazi, po jedan za svaki
smer magnetnog polja. Imajte u vidu da re uni znai da je samo jedan
smer struje potreban za ovaj tip motora.
Kod tzv. polukoranog reima (half stepping)
motora, naizmenino se vri smenjivanje broja
faza pod naponom od dve na jednu dok se ne
zavri ceo ciklus. Ovime se poveava ugaona
rezolucija, ali motor ima manji obrtni momenat
(70%) na poziciji pola koraka (kada je samo
jedna faza pod naponom). Ovo se moe prevazii poveanjem struje u aktivnom namotaju.
Polukoranim reimom poveava se tanost
izlaza.
Tokovi
Uloga toka je da prenese mehaniku snagu motora na podlogu.
Robotova funkcija, oekivano stanje podloge, kao i karakteristike
motora moraju se uzeti u obzir prilikom izbora najpogodnijeg toka.
Veina tokova se sastoji iz dva dela.
Prvi, gumeni deo (guma/pneumatik) kojim se
toak oslanja na povrinu.
Drugi je snano jezgro (felna) koje
prenosi snagu motora i odrava oblik toka
... gume
Vazduhom punjene gume imaju tenju da se prilagoavaju
povrinama, ime se obezbeuje maksimalan kontakt za vuu. Takoe,
sabijaju se prilikom kontakta sa malim objektima i esticama, za
razliku od punih guma koje odskau ili se izdiu kod prepreka tog tipa.
Vazduh deluje kao amortizer, ime redukuje habanje motora i leajeva.
Pune gume dobro nose teinu ali ne i stisak, niti upijaju udarce kao
pneumatske gume. Meutim, poto ne mogu da se stisnu, one dodaju
manje greke preciznom kretanju.
...
Oblik gume znaajno utie na vuu i otpornost kretanju.
Zaobljen popreni presek gume, slian obliku koji ima guma na biciklu,
ima malu dodirnu povrinu sa podlogom tokom kretanja. Zbog toga
postoji mali otpor kretanju i ove gume se lako okreu i imaju mali
otpor kotrljanja. Otpor kotrljanja je iznos trenja koji se generie
spram podloge i on odreuje koliko lako se guma kotrlja napred ili
nazad. Zbog ogranienog kontakta sa podlogom, gume sa zaobljenim
poprenim presekom su energetski efikasnije i zato su dobar izbor za
dugotrajnu eksploataciju.
Kod balon guma centralni deo malo tri u odnosu na obodne strane.
Dobro apsorbuju udarce i dobro podnose neravne povrine.
Preporuuju se za kretanje po grubim povrinama.
...
Postoje gume koje su oblika koji je izmeu prethodno navedenih, tj.
centralni deo je blago spljoten a prema krajevima zaobljen. Pruaju
kompromisne karakteristike, tj. nisu najbolje niti najgore u bilo kojoj
kategoriji.
Gume sa ravnom povrinom obezbeuju najbolju vuu na ravnim
povrinama. Dobar su izbor kada se eli dobro iskorienje motora na
putu, mada to ima svoju cenu. Ove gume imaju najvei otpor kotrljanja.
Biraju se za situacije kod kojih se eli maksimalno guranje, vua ili
ubrzavanje na glatkim povrinama.
ire gume obino obezbeuju veu stabilnost i vuu, bez obzira na
oblik poprenog preseka. Takoe, manje su anse da se ire gume
zaglave u paralelnim ljebovima na povrinama preko kojih se kreu.
Sa druge strane, ue gume imaju manji otpor kotrljanja i mogu mnogo
lake da se okreu. One su lake i zauzimaju manje prostora kod
konstrukcije robota.
...
...
Stil (tip) gazita na gumi treba izabrati tako da odgovara povrini i
vremenskim uslovima pod kojima se oekuje da e raditi.
Glatke gume obezbeuju maksimalan kontakt u suvim uslovima i na
ravnim povrinama. Iz tih razloga takve gume koriste automobili
formule-1. Meutim, u vlanim uslovima, na ljunkovitim i neravnim
podlogama, glatke gume tee da se izdiu iznad tih prepreka usled
ega se smanjuje trenje a time i vua. Zato vozai formule-1 menjaju
gume kada pone da pada kia.
Olebljene gume su sline glatkim, ali sa trakama i arama koje su
utisnute u gazite. One obezbeuju pristojno trenje (vuu) na ravnim
povrinama. Na zapraenim i vlanim povrinama, lebovi usmeravaju
estice tako da ne budu u kontaktnim takama i oni su ti koji
omoguavaju gumama da budu neto fleksibilnije. Zbog te
izbalansirane performanse u suvim i vlanim vremenskim uslovima,
olebljene gume ili gume sa arama se nalaze na skoro svim
automobilima.
...
Knobby gume imaju neravnine koje izbijaju iz povrine pneumatika.
Ove gume su izvrsne u off road ili vlanim terenima. Prave veu buku i
imaju grublju vonju (klaenje), ali isplati se jer su stabilne na teim
terenima i u blatu. Nisu pogodne za precizna kretanja, kretanja koja se
izraunavaju ili guranje na ravnim povrinama.
...
Verovali ili ne, prenik ("visina") pneumatika (gume) je verovatno
najvaniji parametar robotove gume. Oigledan efekat je uticaj na
visinu robota. Meutim, postoji mnogo znaajniji efekat.
Prenik pneumatika radikalno utie na obrtni momenat i brzinu. to je
vei prenik, to je vea dobijena brzina. to je manji prenik, vea je
sila uvijanja (guranje, vuenje).
Ako se va robot kree suvie brzo, zamenite postojee gume gumama
manjeg prenika.
Ako robot ne moe da se kree zbog velike mase ili slabog motora,
opet zamenite postojee gume gumama manjeg prenika. Nasuprot
tome,
ako se robot kree suvie sporo ili tei da proklizava kada poinje da
se kree, zamenite postojee gume gumama veeg prenika.
...
Slika ilustruje odnose izmeu poluprenika, prenika i obima toka.
d=2*r
O=2*r*
Runo
Automatski
...
Talasna duina IR signala je malo iznad opsega koje ljudsko oko moe
da registruje.
IR je skraenica za infracrvenu svetlost to znai da je izvan vidljivog
dela spektra. IR sistemi za prenos podataka koriste veoma visoke
frekvencije, neto vie od vidljivog dela spektra. Kao i vidljiva svetlost,
infracrvena svetlost ne prolazi kroz zidove i druge neprozirne
predmete pa u sluaju IR prenosa mora da postoji optika vidljivost
izmeu predajnika i prijemnika i oni moraju biti u dometu prijemnikapredajnika.
Talasna duina svetlosti koja se koristi za prenos je izmeu 800 i
1000nm, najee oko 940nm. IR prijemnici su najosetljivi na talasne
duine oko 940nm.
Prijemnik e registrovati signal samo
ako je modulisan frekvencijom na koju je podeen i
ako je talasna duina tog modulisanog signala odgovarajua.
Da bi se realizovao IR prenos, moramo imati
prijemnik,
predajnik i
protokol.
Predajnik alje impulse IR diodom. Ovi impulsi moduliu nosilac po
definisanom protokolu. IR signal se emituje i IR prijemnik ga detektuje.
Da bi se omoguio neometan prenos potrebno ga je zatititi od
neeljenih izvora. Kao to je poznato, jedan od izvora infracrvenog
zraenja je sunce, zato se filtrira signal koji dolazi na IR prijemnik.
Filtar koji je integrisan sa prijemnikom proputa samo signale
odgovarajue talasne duine (oko 940nm). Poto je sunce prirodan
izvor emisije nemodulisanih IR zraka (emituje nemodulisanu IR
svetlost) koristi se modulacija.
Modulacija nam omoguuje da korektno primamo signale.
Kada korisnik pritisne tipku/taster na daljinskom upravljau,
IR dioda emituje povorku IR impulsa.
IR prijemnik u ureaju prima te impulse i konvertuje ih u
odgovarajue naponske nivoe koji predstavljaju pritisnuti taster. Ti
impulsi se vode na mikrokontroler koji registruje kd i zatim izvrava
komandu.
Poto prijemnik radi sa inverznom logikom,
kada dioda emituje
izlaz prijemnika je na niskom logikom nivou,
a kada ne emituje onda je na visokom.
Da bismo utvrdili koja komanda je poslata moramo znati po kom
protokolu su kodirane komande.
Za razliku od klasinih foto-elija koje nemaju integrisan demodulator
i koje se u zavisnosti od koliine svetlosti koja pada na foto-eliju
ponaaju kao otpornik promenljive otpornosti, IR detektori imaju
digitalni izlaz.
Tanije, ukoliko je na mestu prijema detektovan modulisani signal, na
digitalnom izlazu je prisutan napon 0V to odgovara logikoj nuli.
Ukoliko modulisani signal nije prisutan, na izlazu je napon od 5V (3.3V
u naem sluaju), to odgovara logikoj jedinici.
TSOP34838 predstavlja prijemnik infracrvenih signala daljinskih
upravljaa iji se izlaz moe direktno povezati sa mikrokontrolerom.
Ovaj model IR detektora najeu primenu nalazi u okviru TV
prijemnika i kompatibilan je sa velikom veinom standarda kao to su
npr: RC5, RC6, NEC, Panasonic, Sharp, ...
Karakteristike IR prijemne diode TSOP34838
Izgled i blok dijagram TSOP34838
IR komunikacija
Infracrvena komunikacija je beina komunikacija koja zahteva
optiku vidljivost, odnosno prijemnik i predajnik moraju biti na
direktnoj liniji, i nijedan objekat se ne sme nalaziti izmeu njih. Ova
vrsta komunikacije slui za povezivanje ureaja na malim
razdaljinama, obino u istoj sobi.
Razliiti proizvoai kunih ureaja su razvili ili koriste razliite
protokole za infracrvenu komunikaciju i daljinsko upravljanje. Svi ovi
protokoli za daljinsko upravljanje koriste digitalno modulisan signal.
Nosea frekvencija signala moe biti razliita, ali se u 90% sluajeva
koristi frekvencija od 38kHz.
Za upravljanje audio i video opremom najiru primenu su nali
Philipsov RC-5 (u Evropi i SAD) i NEC protokol (u Japanu).
NEC protokol
NEC protokol definie noseu frekvenciju od 38 kHz,
duinu bita 1,125 ms (logika nula) ili
2,25 ms (logika jedinica).
Za kodovanje signala se koristi kodovanje duinom intervala izmeu
pulseva, gde je svaki bit predstavljen visokim stanjem u trajanju od
562,5 s, koje je praeno niskim stanjem u trajanju od 562,5 s za
logiku nulu, ili od 1,6875 ms za logiku jedinicu.
Po NEC standardu, poruka poinje uvodnim pulsem u trajanju od 9 ms,
praenim pauzom od 4,5 ms.
Sledeih 8 bita predstavljaju adresu ureaja, a zatim
slede 8 bita koji predstavljaju logiki invertovanu adresu ureaja, a
alju se radi provere ispravnosti poruke.
Nakon toga, alje se sama komanda od 8 bita, kao i logiki
invertovana komanda (8 bita) radi provere ispravnosti poruke.
Na kraju sledi puls duine 562,5 s, koji oznaava kraj prenosa
poruke.
Ukupno trajanje poruke je konstantno, jer se svaki bit alje dva puta,
po jednom u neinvertovanom i invertovanom obliku.
Poruka se alje samo jednom, ak iako taster na daljinskom
upravljau ostane aktiviran.
U tom sluaju se nakon poruke alje kd koji se ponavlja svakih 110
ms, a sastoji se od pulsa od 9 ms, pauze od 2,25 ms i pulsa od 562,5 s.
Biblioteka IRremote
IRremote je biblioteka autora Ken Shirriffa koja omoguava da
primate i prenosite/aljete infracrvene kontrolne kodove daljinskih
ureaja. Moete napraviti svoje ureaje koje e kontrolisati
komercijalni daljinski upravlja ili napraviti svoje ureaje koji e
upravljati TV-om, muzikim stubom ili klima ureajem.
Ponaa se kao dve biblioteke, jedna za slanje a druga za prijem
kodova. Obino je najlake detektovati kodove za slanje korienjem
prijemnika. Ova biblioteka koristi vremenski tajmer mikrokontrolera i
za emitovanje/slanje i za prijem.
Ako elite da koristite jo neku biblioteku koja zahteva korienje
tajmera, morate voditi rauna da definiete da ne koriste isti tajmer
poto e doi do blokiranja.
Naredba za kreiranje prijemnog objekta (koristite ime po svom
nahoenju).
IRrecv irrecv(receivePin)
Zapoinjanje procesa prijema. Omoguava se tajmerska prekidna
rutina (tzv. interapt) koja troi malu koliinu CPU resursa svakih 50
mikrosekundi.
irrecv.enableIRIn()
Naredba koja pokuava da primi IR kodove. Vraa rezultat true ako
je kd primljen, ili false ako jo nita nije primila. Kada je kd primljen,
smeta se u promenljivu (struktura podataka) "results".
irrecv.decode(&results)
Struktura podataka results ima sledeu formu:
results.decode_type - jedna od vrednosti: NEC, SONY, RC5, RC6 ili
UNKNOWN
results.value - aktuelni IR kod (0 ako je tip UNKNOWN)
results.bits - broj bita koji taj kd koristi
results.rawbuf - niz IR vremenskih pulseva
results.rawlen - broj stavki smetenih u niz
Naredba koja se po prijemu mora pozvati da bi resetovala
prijemnik da ga pripremi za prijem sledeeg koda.
irrecv.resume()
Naredba koja omoguava blinkovanje svetlee diode za vreme
prijema. Kako ne moemo da vidimo infracrveno svetlo, blinkovanje
svetlosne diode moe biti od pomoi ukoliko ima nekih problema i
ujedno daje vizuelnu povratnu informaciju.
irrecv.blink13(true);
Naredba za kreiranje objekta za emitovanje. Koristi se uvek fiksni
pin, u zavisnosti koji tajmer biblioteka koristi.
IRsend irsend;
Naredba za slanje koda u NEC formatu.
irsend.sendNEC(IRcode, numBits);
Naredba za slanje koda u Sony formatu.
irsend.sendSony(IRcode, numBits);
Naredba za slanje koda u RC5 formatu.
irsend.sendRC5(IRcode, numBits);
Naredba za slanje koda u RC6 formatu.
irsend.sendRC6(IRcode, numBits);
Naredba za slanje sirovog (raw) koda. Normalno, treba dobiti sadraj i
duinu bafera (rwabuf i rawlen) korienjem prijemnika vie puta i
usrednjavanjem rezultata. Moe da se desi da budu potrebna odreena
podeavanja da bi se dobile to bolje performanse. Oekivana nosea
frekvencija je 38.
irsend.sendRaw(rawbuf, rawlen, frequency);
Ukoliko treba da detektujete kodove daljinskog upravljaa moete
iskoristiti ske IRrecvDemo biblioteke IRremote.
Nakon preuzimanja (download) biblioteke IRremote,
preite u direktorijum Arduino projekata. Pronaite poddirektorijum
libraies/examples/IRrecvDemo i otvorite fajl IRrecvDemo.ino.
Po kompajliranju, otpremite binarni fajl u svoj Arduino. Ske e
automatski dekodirati tip protokola koji koristi daljinski upravlja i
dekodirati kontrolni kd dugmeta koje je pritisnuto na daljinskom
upravljau.
Otvorite prozor Serial Monitor Arduino okruenja, podesite brzinu
komunikacije sa aktivnim serijskim portom na 9600 a zatim
pritisnite dugme na daljinskom upravljau. Rezultat rada skea
videete u Serial Monitoru.
IRremote
/*
* IRremote: IRrecvDump - dump details of IR codes with IRrecv
* An IR detector/demodulator must be connected to the input RECV_PIN.
* Version 0.1 July, 2009
* Copyright 2009 Ken Shirriff
* http://arcfn.com
* JVC and Panasonic protocol added by Kristian Lauszus (Thanks to zenwheel
and other people at the original blog post)
* LG added by Darryl Smith (based on the JVC protocol)
*/
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}
// Dumps out the decode_results structure.
// Call this after IRrecv::decode()
// void * to work around compiler issue
//void dump(void *v) {
// decode_results *results = (decode_results *)v
void dump(decode_results *results) {
int count = results->rawlen;
if (results->decode_type == UNKNOWN) {
Serial.print("Unknown encoding: ");
}
else if (results->decode_type == NEC) {
Serial.print("Decoded NEC: ");
}
else if (results->decode_type == SONY) {
Serial.print("Decoded SONY: ");
}
else if (results->decode_type == RC5) {
Serial.print("Decoded RC5: ");
}
else if (results->decode_type == RC6) {
Serial.print("Decoded RC6: ");
}
else if (results->decode_type == PANASONIC) {
Serial.print("Decoded PANASONIC - Address: ");
Serial.print(results->panasonicAddress,HEX);
Serial.print(" Value: ");
}
else if (results->decode_type == LG) {
Serial.print("Decoded LG: ");
}
else if (results->decode_type == JVC) {
Serial.print("Decoded JVC: ");
}
Serial.print(results->value, HEX);
Serial.print(" (");
Serial.print(results->bits, DEC);
Serial.println(" bits)");
Serial.print("Raw (");
Serial.print(count, DEC);
Serial.print("): ");
for (int i = 0; i < count; i++) {
if ((i % 2) == 1) {
Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
}
else {
Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
}
Serial.print(" ");
}
Serial.println("");
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
dump(&results);
irrecv.resume(); // Receive the next value
}
}
TSOP 34838
11
GND
Vcc
dekodiranje komandi
IR prijemnik
Funkcije robota
Runi reim rada proizvoljno kretanje zadavanjem komandi
Napred
Nazad
Levo
Desno
Stop
Automatski reim rada kretanje po programski definisanoj
kvadratnoj putanji
Prebacivanje reima u izabranom reimu rada pritiskom na taster
za drugi reim rada
ema povezivanja
4 x 1.5 V
+
Odstojnik
Korani motori
...
TSOP 34838
Baterijsko
napajanje
ULN2003
Arduino
...
ULN2003
Baterijsko
Napajanje 4x1.5V
TSOP 34838
Breadboard
Pregibni
prekida
...
Pregibni
prekida
CASTER
65mm
28mm
3.7x5.3mm
13.8mm
Kako ovaj tip robota moe da rotira oko take (tokovi se rotiraju
istom brzinom ali u razliitim pravcima), on e pri tom manevru
napraviti krug poluprenika priblino polovini irine robota (tj.
meuosno rastojanje izmeu levog i desnog toka).
pun_krug = irina * 3.145 = 16.4 cm * 3.145 = 51.578 cm
CW
CCW
Biblioteka AccelStepper
AccelStepper je biblioteka za kontrolu razliitih drajvera koranih
motora kao to je POLOLU koji se obino nalazi u 3D printerima, zatim
EasyDriver, ULN2003 itd. Moe da upravlja sa vie koranih motora
istovremeno.
Naredba za definisanje i konfigurisanje motora kada se koristi drajver
ULN2003
AccelStepper mystepper(4, pinA1, pinA2, pinB1, pinB2);
Naredba za postavljanje maksimalne brzine
mystepper.setMaxSpeed(stepsPerSecond);
Postavlja maksimalnu brzinu. Podrazumevana brzina je vrlo mala, tako
da je poeljno konfigurisati ovu vrednost. Kada se korani motor
upravlja postavljanjem poloaja/pozicije, on e se ka odreditu
ubrzavati ka toj brzini a usporavati kako dostie odredite.
Naredba za postavljanje ubrzanja koje e se koristiti
mystepper.setAcceleration(stepsPerSecondSquared);
Naredbe koje se odnose na poloaj/poziciju
Pomeranje motora na novu apsolutnu poziciju. Odmah vraa retultat.
Stvarno kretanje realizuje funkcija run().
mystepper.moveTo(targetPosition);
Pomeranje motora na relativnu poziciju u odnosu na tekuu. Odmah
se izlazi iz funkcije. Stvarno kretanje realizuje naredba run().
mystepper.move(distance);
Naredba za oitavanje tekue apsolutne pozicije motora
mystepper.currentPosition();
Naredba za oitavanje rastojanja motora od svog odredita. Moe da
se koristi za proveru da li je motor dostigao svoje krajnje odredite.
mystepper.distanceToGo();
Naredba za stvarno aktiviranje motora (auriranje pozicije). Mora se
pozivati repetitivno da bi se ostvarilo kretanje motora.
mystepper.run();
Naredba za stvarno aktiviranje motora (auriranje pozicije) koja eka
da motor stigne do svog odredita. Ova funkcija se izvrava sve dok se
motor ne zaustavi, tako da je korisna samo ako nema drugih motora u
pokretu.
mystepper.runToPosition();
Naredba za postavljanje brzine motora (u koracima po sekundi).
Odmah se izlazi iz funkcije. Stvarno kretanje realizuje naredba
runSpeed().
mystepper.setSpeed(stepsPerSecond);
Naredba za stvarno aktiviranje motora (auriranje pozicije). Mora se
pozivati repetitivno da bi se ostvarilo kretanje motora.
mystepper.runSpeed();
int RECV_PIN = 12; //IR pin
IRrecv irrecv(RECV_PIN);
decode_results results;
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4); //
AccelStepper stepper2(HALFSTEP, motorPin5, motorPin7, motorPin6, motorPin8); //
int k = 6; // STOP moving
int kk = 0; // kk = 1 AUTOMATIC, kk = 2 MANUAL
int turnSteps = 2480; // number of steps for a 90 degree turn
int lineSteps = -6200; //number of steps to drive straight
//
int stepperSpeed = 1000; //speed of the stepper (steps per second)
int steps1 = 0; // keep track of the step count for motor 1
int steps2 = 0; // keep track of the step count for motor 2
boolean turn1 = false; //keep track if we are turning or going straight next
boolean turn2 = false; //keep track if we are turning or going straight next
...
void setup()
{
//delay(3000); //some time to put the robot down after swithing it on
irrecv.enableIRIn(); // Start the receiver
stepper1.setMaxSpeed(2000);
stepper2.setMaxSpeed(2000);
stepper1.move(-1);
stepper2.move(1);
stepper1.setSpeed(0);
stepper2.setSpeed(0);
}
/*********************/
void loop() {
//-------------------------------if (irrecv.decode(&results)) {
if (results.value == 0x20DF4EB1){
kk = 2; //MANUAL
}
//---------if (results.value == 0x20DF8E71){
kk = 1; // AUTOMATIC
}
//****
if ((results.value == 0x20DF02FD)&& (kk == 2))
{
k = 2; // FORWARD
}
if ((results.value == 0x20DF827D) && (kk == 2))
{
k = 3; //BACKWARD
}
if ((results.value == 0x20DFE01F)&& (kk == 2))
{
k = 4; // LEFT
}
if ((results.value == 0x20DF609F)&& (kk == 2))
{
k = 5; // RIGHT
}
if (results.value == 0x20DF22DD)//&& (kk == 0)
{
k=6; // STOP
}
irrecv.resume(); // Receive the next IR value
}
//----------- AUTOMATIC
if(kk==1){
stepper1.setSpeed(stepperSpeed);
stepper2.setSpeed(stepperSpeed);
if (steps1 == 0) {
int target = 0;
if (turn1 == true) {
target = turnSteps;
}
else {
target = lineSteps;
}
stepper1.move(target);
stepper1.setSpeed(stepperSpeed);
turn1 = !turn1;
} // end steps1
if (steps2 == 0) {
int target = 0;
if (turn2 == true) {
target = turnSteps;
}
else {
target = -lineSteps;
}
stepper2.move(target);
stepper2.setSpeed(stepperSpeed);
turn2 = !turn2;
} //end steps2
steps1 = stepper1.distanceToGo();
steps2 = stepper2.distanceToGo();
stepper1.runSpeedToPosition();
stepper2.runSpeedToPosition();
} // end kk==1
//---------------------- MANUAL
// STOP
if(k==6){
stepper1.setSpeed(0); //
stepper2.setSpeed(0);
}
// FORWARD
if(k==2){
stepper1.setSpeed(-stepperSpeed); // CCW, LEFT MOTOR
stepper2.setSpeed(stepperSpeed); //CW, RIGHT MOTOR
}
// BACKWARD
if(k==3){
stepper1.setSpeed(stepperSpeed); // CW
stepper2.setSpeed(-stepperSpeed); // CCW
}
// LEFT
if(k==4){
stepper1.setSpeed(150); // CW
stepper2.setSpeed(500); // CW
}
// RIGHT
if(k==5){
stepper1.setSpeed(-500); // CCW
stepper2.setSpeed(-150); // CCW
}
// MANUAL
if (kk==2){
stepper1.runSpeed();
stepper2.runSpeed();
}
}
...
Nedostaci i poboljanja!
Kalibracija?! Problem preciznog realizovanja programske putanje.
Mobile robot GUARDIAN
http://www.robotnik.eu/mobile-robots/guardian/
- Ukljuivanje optikih senzora koji omoguuju praenje linije.
- Ukljuivanje ultrazvunih senzora za detektovanje prepreka
- GPS moduli
- Kamere