Novi sam u mbot pomoc


#11

Ovdje isto postoji opcija privatnih poruka tako da slobodno pitaj preko toga ako imas pitanja. :slight_smile:


#12

Pozdrav, da li mi neko moze pomoći oko ovog zadatka:

  1. Na početku postavite svog mBot robota na list 1 tako da njegov prednji dio stoji unutar označenog pravokutnika na listu 1. Neka prije početka kretanja RGB diode na robotu budu ugašene.
  2. Pritiskom na tipku mBot robota potrebno je izvršiti njegovo pokretanje i paljenje RGB dioda na način da tijekom kretanja do kraja staze diode na robotu svjetle rotacijskim svjetlima. To ćete postići na način da će svakih 0.5 sekundi lijeva/desna RGB dioda svjetliti crvenom/plavom bojom. Dakle ukoliko u prvih 0.5 sekundi lijeva RGB dioda svjetli crvenom a desna RGB dioda plavom bojom, tijekom sljedećih 0.5 sekundi lijeva RGB dioda svjetliti će plavom a desna RGB dioda crvenom bojom itd.
  3. Nakon što ste pokrenuli Vašeg robota potrebno je da on bez izlijetanja sa staze dođe do lista broj 5 tj. dijela lista koji je prefarban crnom bojom.
  4. Kada je došao do crnog dijela lista broj 5 potrebno je da Vaš robot upotrebom senzora za praćenje linije detektira crno područje na papiru i stane. Nakon toga je potrebno da Vaš robot okretanjem unazad pređe na list papira broj 6 a zatim se kreće unatrag do zadnjeg lista papira tj. do kraja staze.
  5. Nakon što je kretanjem unatrag došao do kraja staze tj. zadnjeg lista Vaš mBot mora se parkirati na dijelu lista s ucrtanim dijagonalnim linijama i slovom P. Jednom kada robot završi svoje kretanje i parkira se, njegove RGB diode moraju se ugasiti.

#13

Ajde posalji i sliku poligona, jako je tesko odrediti sto i kako ako nemamo neku predodjbu.


#14

Pozdrav, Ovo je taj poligon u pitanju je list papira format A4.


#15

Gdje je zapelo? Do kojeg si djela dosao?


#16

Problem je u rotacijskim svjetlima?


#17

Mislim da je tehnicki neizvedivo napraviti rotacijska svjetla uz ostala kretanja. Mozes staviti da jedno svjetlo svjetli nesto kratko pa drugo i da to svjetli uz voznju, odnosno vremena svjetljenja bit ce i vremena voznje. Onaj tko je radio zadatak vam je poprilicno zapaprio. :smiley:


#18

Baš tako…:slight_smile: Ipak hvala na pomoci…


#19

Zadatak nije neizvediv, ali je zeznut. Ako zapnes, tu smo.


#20

Već sam zapeo,kojom komandom povezati da rotacija i kretanje rade istovremeno. Pojedinačno radi kretanje i rotacija u dva nezavisna programa, a kad se sastave komande neće.


#21

kreni naprijed
upali plavu
cekaj pola sekunde
ugasi plavu
cekaj pola sekunde
upali crvenu
cekaj pola sekunde
ugasi crvenu
cekaj pola sekunde
okreni desno

sad ti svjetla i voznja traju 2 sekunde sto je mislim dosta da prodje 2 A4 papira pri brzini od 255, mozes recimo skratiti svjetla na 0.2 sekunde pa ces dobiti vise paljenja i gasenja unutra 2 sekunde, a voznja ce isto trajati…


#22

Mislim da ce to biti teško ukladiti sa ostatkom staze… Pokušam pa ti javim…


#23

edii da taj zadatak nije sa Sparkreators lige za pretkolo ?


#24

Ovako, Arduino kao takav nema multitasking i multithreading a mBot u pozadini jest Arduino pa to nije tako lako kao kod micro:bit-a za napraviti … no može se. Važno je prisjetiti se kako se to radilo u davna vremena jednog procesora a ključna riječ je “time sharing” i atomiziranje poslova. Generalno rečeno treba postojati jedna petlja koja će funkcionirati kao dijeljitelj posla a koji će pozivati pojedine poslove koji će se brinuti svaki za svoj dio no SVAKI od tih manjih dijelova mora se izvršiti čim prije i mora vratiti izvršavanje na glavni program.
Konkretno ovdje imamo zadatak kretanja po određenoj shemi i paljenja i gašenja LED diodica u određenom intervalu. Evo u nastavku prvo slika osnovnog kostura programa gdje se može vidjeti ideja realizacije a kasnije dam još par napomena vezanih za sliku. Ovdje neću dati cijelo rješenje no dovršavanje programa ne bi trebao biti problem jednom kada se shvati koncept.


#25


#26

Ideja je da se cijeli posao podijeli na što jednostavnije cjeline koje se bave samo rješavanjem najjednostavnijih zadataka. Ovdje vidim da bi rješavanje kretanja po stazi bilo moguće u 5 koraka. U glavnom bloku nisam stavio svih 5 if-ova zbog prostora no naravno da svih 5 moraju biti.
Program se pokrene, resetira motor i LED i par varijabli, čeka na pritisak i otpuštanje tipke, inicijalizira tajmer, zapamti prvo vrijeme te odradi prvo uključivanje LED-ica i pokrene motor kao predradnju potrebnu za izvršavanje prvog koraka - sve to prije petlje.
U petlji kod svakog kruga pozove pojedine blokove. LED blok je prvi jer bi trebao biti najbrži.
Kako radi? U svakom izvršavanju LED bloka pogleda se da li je od zadnje promjene prošlo više od 500 ms pa ako jest tada se odradi promjena i označi koja varijanta svjetla se odradila - i naravno zapamti se kada se to napravilo da se može to vrijeme koristiti za utvrđivanje trenutka sljedeće promjene. I to je sve što taj blok radi.
Dalje se izvršava logika za pojedine korake a koji se korak izvršava to je određeno varijablom “korak” (inicijalno je to korak broj 1).
Svaki korak je odgovoran za utvrđivanje kada je njegov kraj, za promjenu varijable “korak” na sljedeći korak i za izvršavanje svih operacija potrebnih da bi sljedeći korak uspješno radio.
Primjera radi evo kako bi radio prvi korak:

  • ja bi u program dodao još jednu varijablu koja se zove vrijeme_koraka i nju bi isto tako postavio na timer kao i vrijeme_LED nakon otpuštanja tipke.
  • u bloku “rad-01” provjeravao bih da li je za brzinu robota prošlo dovoljno vrijeme da se prođe dva papira. Ako nije prošlo tada bih izašao iz bloka i čekao da me se ponovo pozove a u suprotnom bih postavio korak na 2, zaustavio motor i započeo sa okretanjem te postavio vrijeme_koraka ponovo na timer. - u sljedećem krugu glavne petlje pokrenuo bi se rad-02
  • u bloku “rad-02” treba se samo ispitivati da li je prošlo dovoljno vremena za okretanje pod pravim kutem i ako nije tada izaći a u suprotnom zaustaviti okretanje, krenuti naprijed, postaviti novi timer i postaviti korak na 3
    itd… uvijek za kovi korak kreneš u prethodnom koraku…
  • u zadnjem koraku dovoljno je na kraju svega reći da je radi_program=0 i izići iz bloka jer će tada glavni program izići iz petlje i ponovo ugasiti ledice i motor.

mBot paralelne radnje (vožnja i svjetlo)
#27

nadam se da je rješenje jasno - ako ima još kakvih pitanja - tu sam :slight_smile: javi da li radi - jer ovo sam sve iz glave napisao - nemam sada mBota uz sebe da provjerim - no … bude valjda :stuck_out_tongue:


#28

genijalno odradjeno :blush::+1:


#29

Jedna mala ispravka no vjerujem da je to već uočeno …
Timer vraća vrijeme u sekundama pa je pola sekunde tamo 0.5 a ne 500.

Sada sam to vidio gledajući C kod u Arduino modu (a iskreno, zaboravio sam to jer smo se u zadnje vrijeme igrali sa micro_bit-om :smiley: :

double getLastTime(){
return currentTime = millis()/1000.0 - lastTime;
}


#30

I ja sam novi u mBot al ne kontam ovo sto ste Vi uradili na slici dole…