Novi sam u mbot pomoc


#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…


#31

pa ovo je manje vezano za mBot a više za algoritme - logika bi radila sa bilo kojim sustavom jer se ne temelji na specifičnostima sustava.

Zamislite si učionicu. U učionici je učitelj i 6 učenika. Učitelj stoji a učenici su sjeli u dva reda na način da je u lijevom redu samo jedan učenik a u desnom redu je 5 učenika smještenih jedan iza drugoga. Recimo da je lijevi učenik broj 1 a ostali su brojevi od 2 do 6.
Učitelj proziva prvo lijevog pa onda desnog učenika i to samo one u prvom redu. Prozivanje ide naizmjenice prvo lijevi pa desni pa ponovo lijevi itd. Svaki učenik zna raditi samo jednu stvar. kada radi on ustane a kada je gotov, sjedne :slight_smile:

Svi oni gledaju na ekran autić i dvije štoperice. Auto sluša glasovne naredbe. Prva štoperica je za prvog učenika a drugu štopericu gledaju svi ostali učenici.

Prvi se učenik razlikuje od ostalih jer njega stalno prozivaju i on je zadužen za lampice.
Prije svega učitelj stavi auto na pod, kaže mu “kreni naprijed” i resetira obje štoperice pa krene prozivati.

Kada god je prvi učenik prozvan, on pogleda na štopericu i ako je prošlo duže od pola sekunde tada ponovo zamijeni lampice, resetira svoju štopericu i sjedne, u suprotnom samo sjedne.
Sada je red na učenika broj 2. On pogleda da li je prošlo 2 sekunde jer toliko autić treba da bi sa tom brzinom došao do točke skretanja i ako nije onda samo sjedne i čeka da ga netko ponovo prozove a u suprotnom izda naredbu autu “stani” i “započni sa skretanjem”, resetira drugi kronometar, uzme svoju stolicu i ode iz učionice a svi iza njega se presele jedno mjesto naprijed.

Učitelj sada prozove ponovo prvog učenika koji obavi svoje sa lampicama ako treba a nakon toga proziva učenika broj 3 (jer je drugi odradio svoje i otišao). Treći gleda na kronometar i ako je prošlo sekundu (jer toliko treba vremena da se auto okrene za 90 stupnjeva) tada vikne “stani” i “kreni naprijed”, resetira kronometar i ode iz učionice. U suprotnom samo sjedne.

itd.
Lijevi red se ne mijenja i učitelj tog jadnička proziva u svakom krugu a u drugom redu je svaki put sve kraći kada netko od učenika obavi svoj posao.
Kada učenik 6 utvrdi da je auto završio sa putovanjem tada vikne “stoj”, zgrabi učenika broj 1 za ruku i zajedno odu iz učionice. Učitelj na kraju ostaje sam, auto je zaustavljen i priča je time gotova.

Da li je ovako jasnije? :smile:


#32

Lakse je integral rijesit nego ovu pricu zamijenit kodovima!


#33

Jos puno vremena necu uspjeti na ovaj nacin rijesiti zadatak ali mi se svidja logika razmisljanja, a i prica je dobra :slight_smile: Hvala LMazzi na volji i trudu za pomoci drugima.


#34

LMazzi je ekspert za kodove!
Hvala mu na pomoci i strpljenju!


#35

Pozdrav! Da li postoji bilo kakav nacin da proverim tacnost programa bez robota? Unapred hvala!


#36

Jednostavno i bez okolisanja… Ne! Previse parametara utjece na voznju robota: zategnutost kotaca, jacina baterije, kapacitet baterije, podloga po kojoj vozi… Bez isprobavanja nista…


#37

Pretpostavljao sam. Hvala u svakom slucaju! I imam jos jedno pitanje :smiley: ako moze mala pomoc. Da li bi se mbot pomocu ovakvog koda okrenuo u nastavio da vozi po liniji u suprotnom smeru? Unapred Vam hvala! :slight_smile:


#38

naredba set servo služi za kontrolu servo motora koji ne dolazi u osnovnom paketu. Primjer kako to izgleda imate u animiranim GIF-ovima:

Dakle to nije isto kao i DC motori koje koristite za pokretanje kotača.
Prva i treća naredba će u kombinaciji natjerati robota da se počne okretati jer ste jednom motoru rekli da miruje a drugom da se pokrene no da bi se robot okrenuo treba mu vremena o ono ovisi o brzini okretanja koja pak ovisi o tome koliko ste rekli da se brzo vrti pojedini motor i kolika je snaga vaše baterije.
Znači da bi vam se robot mogao okrenuti za željeni kut - morate isprobavati koliko mu vremena treba sa željenim parametrima brzine i umetati pauzu pred zadnju naredbu.
Inače, želite li da se robot okreće na mjestu tada stavite da jedan motor vrti unazad a drugi prema naprijed istom brzinom jer ako jedan stoji a drugi se okreće tada se robot okreće oko točke koja se nalazi na rubu kotača koji miruje a ne po sredini svojeg kućišta.


#39

Pozdrav! Imam problem pri prebacivanju programa na mbot. Evo kako to izgleda:


Ako moze pomoc… Unapred hvala!!! :slight_smile:


#40

Probajte ovu verziju mBlocka napravljenu specifično da podrži Windows XP.