===== Ogledni Student: Studentski radovi na nov način =====
==== Dnevnik rada ====
=== 1. tjedan (21.10 - 27.10.2013.) ===
== Dosadašnji rad ==
Prvo sam proučio dokumentaciju Arduina. Preuzeo sam program potreban za programiranje Arduina. Saznao sam što je [[studenti:mate_pavelic:mp_nauceno|Arduino]], kako radi i kako se programira, njegovu sintaksu i o načinu na koji Arduino razmjenjuje podatke sa računalom i ostalim uređajima s kojima se može spojiti. Programirao sam ga da blinka ugrađenu LED-icu u intervalu od jedne sekunde i u intervalima Fibonaccijevog niza, te da se blinkanje može upravljati računalom. Kako bi Arduinom upravljao elektromotor, proučio sam što je tranzistor, koja je razlika između [[studenti:mate_pavelic:mp_nauceno|unipolarnih (FET)]] i [[studenti:mate_pavelic:mp_nauceno|bipolarnih (BJT)]], koja je razlika između podskupine bipolarnih tranzistora - [[studenti:mate_pavelic:mp_nauceno|PNP]] i [[studenti:mate_pavelic:mp_nauceno|NPN]] tranzistori. Saznao sam što je [[studenti:mate_pavelic:mp_nauceno|H-bridge]], kako se koristi za kontrolu elektromotora i kako se navedeni tranzistori koriste u izradi takvog sklopa. Registrirao sam se na Zoteri i postavio do sada korištene stranice. Saznao sam što je [[studenti:mate_pavelic:mp_nauceno|poskakivanje (bouncing)]] signala kod tipki (push buttons) i kako riješiti taj problem. Izmjerio sam struju koja prolazi kroz motor kada je priključen na 1, 2 i 3 volta, te struju na istim naponima kada se motor namjerno fizički zaustavi. Napravio sam H-bridge od četiri NPN tranzistora i upravljao sam elektromotorom pomoću Arduina i mijenjao smjer vrtnje preko programa. Dodao sam pushbutton i njime i Arduinom mijenjao smjer vrtnje.
Paljenje ledice po Fibonaccijevom nizu:
int LED = 13;
int wait = 200;
int f[3] = {0, 1, 1};
int n = 2;
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
f[n] = f[n - 1] + f[n - 2];
f[n - 2] = f[n - 1];
f[n - 1] = f[n];
for (int i = 0; i < f[n]; i++) {
digitalWrite(LED, HIGH);
delay(wait*2);
digitalWrite(LED, LOW);
delay(wait*2);
}
delay(wait*8);
}
Paljenje i gašenje ugrađene LEDice pomoću PC-a (tipke s brojkama 1 i 2):
int led = 13;
void setup() {
pinMode(led, OUTPUT);
Serial.begin(9600);
}
void loop() {
while (Serial.available() == 0);
int val = Serial.read() - 48;
Serial.println(val);
if (val == 1) {
digitalWrite(led, HIGH);
Serial.println("Ledica je upaljena");
}
else if (val == 2) {
digitalWrite(led, LOW);
Serial.println("Ledica je ugasena");
}
else {
Serial.println("Krivi broj");
}
}
-----
=== 2. tjedan (28.10 - 3.11.2013.) ===
== Dosadašnji rad ==
Proučio sam i saznao kako rade stepper (koračni) motori. Pronašao sam koje su dvije glavne skupine stepper motora - [[studenti:mate_pavelic:mp_nauceno|UNIPOLARNI]] i [[studenti:mate_pavelic:mp_nauceno|BIPOLARNI]] stepper motori. Saznao sam po čemu se razlikuju i iz starog floppy disk drivea sam izvadio bipolarni stepper motor. Saznao sam da je za upravljanje bipolarnim stepper motorom potrebno imati dva H-bridgea zbog njegove konstrukcije (po jedan H-bridge za svaku zavojnicu). Pogledao sam što je to [[studenti:mate_pavelic:mp_nauceno|Arduino bootloader]] i napravio sam [[studenti:mate_pavelic:mp_nauceno|Arduino parallel programmer]] prema uputama na službenim Arduino stranicama. On se može koristiti za postavljanje (upload) Arduino bootloadera na zamjenski mikrokontroler.
== Daljnji koraci ==
Pomoću integriranog čipa L293NE (http://datasheet.octopart.com/L293NE-Texas-Instruments-datasheet-8627554.pdf) kontrolirati bipolarni stepper motor iz floppy disk drivea i staviti Arduino bootloader na zamjenski mikrokontroler.
-----
=== 3. tjedan (4.11 - 10.11.2013.) ===
== Dosadašnji rad ==
Pomoću IC-a L293NE (http://datasheet.octopart.com/L293NE-Texas-Instruments-datasheet-8627554.pdf) upravljao sam DC elektromotorom. S istim čipom sam upravljao i bipolarnim stepper motorm iz floppy diska, ali priključnice na motoru su međusobno dosta blizu jedna drugoj pa nisam uspio najbolje ih zalemiti za žice kojima bi sam motor lakše spojio na protoboard i nakon što sam ih par puta spojio i odspojio na protoboard, priključne žice su otpale s motora.
Schema:
{{ :studenti:mate_pavelic: upravljanje.jpg |}}
Na schemi je korišten SN754410 (http://www.alldatasheet.com/datasheet-pdf/pdf/177345/TI/SN754410.html) jer je on jedini ponuđen u Fritzingu, ali način spajanja je isti kao da je korišten L293NE
Program za upravljanje (mijenjenje smjera) motorima:
const int LIJEVIGORE = 3;
const int LIJEVIDOLJE = 5;
const int DESNIGORE = 6;
const int DESNIDOLJE = 9;
int i;
void setup () {
pinMode (LIJEVIGORE, OUTPUT);
pinMode (LIJEVIDOLJE, OUTPUT);
pinMode (DESNIGORE, OUTPUT);
pinMode (DESNIDOLJE, OUTPUT);
}
void loop () {
analogWrite (LIJEVIGORE, 255);
analogWrite (LIJEVIDOLJE, 0);
analogWrite (DESNIGORE, 0);
analogWrite (DESNIDOLJE, 255);
delay (5000);
analogWrite (LIJEVIGORE, 0);
analogWrite (LIJEVIDOLJE, 255);
analogWrite (DESNIGORE, 255);
analogWrite (DESNIDOLJE, 0);
delay (5000);
}
== Daljnji koraci ==
Pronaći bipolarni stepper motor s bolje izvedenim priključnim žicama i ponovo upravljati motorom s Arduinom i L293NE.
-----
=== 4. tjedan (11.11 - 17.11.2013.) ===
== Dosadašnji rad ==
Pronašao sam bipolarni stepper motor iz floppy diska s dovoljnim razmakom između priključnih pinova na koje sam zalemio žice i uspio sam upravljati stepper motorom pomoću Arduina i s L293NE-om (http://datasheet.octopart.com/L293NE-Texas-Instruments-datasheet-8627554.pdf). Uplodao sam [[studenti:mate_pavelic:mp_nauceno|Arduino bootloader]] na zamjenski IC ATMEGA8-16PU (http://pdf1.alldatasheet.com/datasheet-pdf/view/171443/ATMEL/ATMEGA8-16PU.html) pomoću [[studenti:mate_pavelic:mp_nauceno|parallel port programmera]] kojeg sam napravio.
~~NOTOC~~
-----
=== 5. tjedan (18.11 - 24.11.2013.) ===
== Dosadašnji rad ==
Napravio sam prvu verziju Bee-bota kojom se upravlja računalom preko USB kabela i može se kretati u smjeru naprijed-nazad. Rastavio sam DVD drive i na donji pravokutni dio limenog kučišta sam pričvrstio tri DC motora. Po jedan sa stražnje lijeve i desne strane i jedan naprijed u sredini. Zadnja dva sam spojio na Arduino, protoboard, IC s H-bridegom i njima pokretao autić, dok je prednji motor služio samo za održavanje ravnoteže.
Program:
const int lijevigore = 10;
const int lijevidolje = 9;
const int desnigore = 6;
const int desnidolje = 5;
int val = 0;
#define BRZINA 255
void setup () {
pinMode (lijevigore, OUTPUT);
pinMode (lijevidolje, OUTPUT);
pinMode (desnigore, OUTPUT);
pinMode (desnidolje, OUTPUT);
Serial.begin (9600);
}
void loop () {
if (Serial.available() > 0) {
val = Serial.read();
if (val == 'a') {
analogWrite (desnigore, 0);
analogWrite (desnidolje, BRZINA);
analogWrite (lijevigore, 0);
analogWrite (lijevidolje, BRZINA);
}
if (val == 's') {
analogWrite (desnigore, BRZINA);
analogWrite (desnidolje, 0);
analogWrite (lijevigore, BRZINA);
analogWrite (lijevidolje, 0);
}
if (val == 'd') {
analogWrite (desnigore, 0);
analogWrite (desnidolje, 0);
analogWrite (lijevigore, 0);
analogWrite (lijevidolje, 0);
}
if (val == 'w') {
analogWrite (desnigore, 0);
analogWrite (desnidolje, BRZINA);
analogWrite (lijevigore, BRZINA);
analogWrite (lijevidolje, 0);
}
if (val == 'q') {
analogWrite (desnigore, BRZINA);
analogWrite (desnidolje, 0);
analogWrite (lijevigore, 0);
analogWrite (lijevidolje, BRZINA);
}
}
}
== Daljnji koraci ==
Napraviti cjelokupni program za rad Bee-bota, uplodati programe direktno na zamjenski čip bez prethodnog uplodanja bootloadera.
~~NOTOC~~
-----
=== 6. tjedan (25.11 - 1.12.2013.) ===
== Dosadašnji rad ==
Umjesto prednjeg DC motora stavio sam kotač koji se može rotirati za 360 stupnjeva i tada bi autić mogao mijenjati smjer na način da se nakratko ugasi motor suprotan od strane u koju se želi dovesti autić tj. da se ostavi upaljen onaj u koju se stranu želi skrenuti. Tako ako se ostavi ugašen desni motor i lijevi upaljen motor će skrenuti u lijevo. Autić se nije pomicao, iako su motori radili kako treba. Pretpostavljam da su preslabi.
~~NOTOC~~
-----
=== 7. tjedan (2.12 - 8.12.2013.) ===
== Dosadašnji rad ==
Proučio sam kako i na koji način radi laserski miš za računalo i njeogv IC ću kasnije, ukoliko bude vremena, iskoristiti za određivanje brzine Bee-bota.
== Daljnji koraci ==
Napraviti dijagram stanja koji će grafički prikazati što će Bee-bot izvršavati i u kojem će se stanju naći u ovisnosti o unešenoj naredbi.
~~NOTOC~~
-----
=== 8. tjedan (9.12 - 15.12.2013.) ===
== Dosadašnji rad ==
Napravio sam dijagram stanja koji pokazuje kako bi Bee-bot trebao raditi. Proučio sam i uspio uplodati program (sketch) na Arduino direktno, bez prethodnog uplodanja bootloadera, kako bi se uštedilo na količini memorije.
== Daljnji koraci ==
Probati pomoću zupčanika iz CD/DVD drivea dobiti da se Bee-bot može pomicati, jer DC motori imaju preslabi okretni momenat da bi uopće pokrenuli cijelu konstrukciju.
~~NOTOC~~
-----
=== 10. tjedan (16.12 - 22.12.2013.) ===
== Dosadašnji rad ==
Zupčanici iz CD/DVD drivea neće biti dobri jer nema niti jedan par međusobno istih zupčanika i niti jedan se ne može staviti na već izvađene motore. Izvadio sam iz dva CD/DVD drivea dio kučišta na kojem se nalazi DC motor zajedno sa zupčanicima koji izbacuju "ladicu" drivea.
== Daljnji koraci ==
Staviti DC motore sa zupčanicima koji se nalaze na komadu plastike iz kučišta CD/DVD drivea na šasiju autića.
~~NOTOC~~
-----
=== 11. tjedan (23.12 - 29.12.2013.) ===
== Dosadašnji rad ==
Motore sam zajedno sa zupčanicima na plastici iz kučišta drivea pričvrstio na šasiju i sada se konstrukcija bez problema pomiče u bilo kojem smjeru. Zamijenio sam podlogu od CD/DVD drivea na kojoj se nalazio sklop i na kojoj su bili pričvršćeni motori s poklopcem (gornjom stranom) HDD-a koja je čvršća i lakša. Autićem za sada upravljam preko laptopa koji je USB kabelom spojen na Arduino i šaljem mu naredbe, preko serial porta, u kojem smjeru da okreče motore.
== Daljnji koraci ==
Proučiti librarye napravljenje za Arduino za upravljanje IC-em iz laserskog miša. Saznati kako programirati Arduino da upravlja konstrukcijom bez da je prikopčan na laptop putem USB-a i da mu kao izvor energije služi baterija.
~~NOTOC~~
----
=== 12. tjedan (30.12.2013. - 5.1.2014.) ===
== Dosadašnji rad ==
Napravio sam novi dijagram stanja i dijagram toka programa. Napravio sam pojednostavljeni sklop autića s tri push-buttona i dvije ledice. Pritiskanje prva dva gumba određuje koja će LEDica blinkati, a treći gumb, kada se pritisne, u programu predstavlja kraj unosa naredbi preko prva dva gumba. Još nisam uspio dobiti program da ispravno radi, mada se program uploada bez javljanja grešaka.
Dijagram stanja (gornja slika) i dijagram toka programa (donja slika):
{{:studenti:mate_pavelic:dijagram.jpg|Dijagram stanja}}
{{:studenti:mate_pavelic:dijagram1.jpg|Dijagram toka programa}}
== Daljnji koraci ==
Poraviti program da radi kako treba i onda proširiti funkcionalnost na autić.
~~NOTOC~~
----
=== 13. tjedan (6.1.2014. - 12.1.2014.) ===
== Dosadašnji rad ==
Dodao sam još tri LEDice i sada ih ima sveukupno četiri i one predstavljaju smjer gibanja autića. Spojio sam i šest push-buttona od kojih prva četiri određuju koja će se LEDica blinkati. Peti button određuje kada je gotov unos naredbi i kada će početi blinkanje, a ako se pritisne dok LEDice blinkaju, označava kraj tj. LEDice prestaju blinkati. Šesti button će služiti za brisanje unešenih naredbi
Na schemi, LEDica koje je skroz desno je prva, od desna na lijevo redni brojevi im rastu do 4. Isto je i kod gumbova. Onaj skroz desno je prvi i od desna na lijevo redni brojevi im rastu do 6. Otpornici korišteni s LEDicama iznose 220 oma. Otpornici korišteni s gumbima iznose 2200 oma. [[studenti:mate_pavelic:mp_nauceno|Ovdje]] se nalazi objašnjenje kako se jedan analogan pin na Arduinu može iskoristiti za očitavanje više push-buttona.
Schema:
{{ :studenti:mate_pavelic:ledice.jpg }}
== Daljnji koraci ==
Postići da, kada se stisne peti gumb dok LEDice još blinkaju, blinkanje prestane.
~~NOTOC~~
----
=== 14. tjedan (13.1.2014. - 19.1.2014.) ===
== Dosadašnji rad ==
Dodao sam mogučnost programu da, kada je pritisnut peti gumb, blinkanje prestane i program ponovo čeka pritisak nekih od prva četiri gumba koji označuju koja će LEDica blinkati. Program sada unešene naredbe (pritiske gumbiju) sprema u EEPROM.
== Daljnji koraci ==
~~NOTOC~~
----
=== 15. tjedan (20.1.2014. - 26.1.2014.) ===
== Dosadašnji rad ==
Napravio sam program gdje se u "glavnom dijelu" (void loop) očitavaju pritisnute tipke, određuje u kojem se stanju program trenutno nalazi i onda koje LEDice upaliti ili ugasiti. Dodan je i interrupt koji se dešava 5 puta u sekundi i on provjerava koje je trenutno stanje i da li je pritisnut peti gumb. Ukoliko je program u stanju blinkanja LEDica i peti gumb nije pritisnut, blinkanje se nastavlja. Ukoliko je program u stanju blinkanja LEDica i peti gumb je pritisnut, blinkanje prestaje i program prelazi u stanje "programiranja" i čeka nove pritiske buttona koji određuju kako blinkati LEDice.
== Daljnji koraci ==
Primjeniti program na autiću.
~~NOTOC~~
----
=== 16. tjedan (27.1.2014. - 2.2.2014.) ===
== Dosadašnji rad ==
Prebacio sam breadboard i Arduino na šasiju autića, priključio bateriju i pokrenuo ga. Autić se bez problema giba naprijed/nazad, ali skretanje je problem zbog središnjeg kotača koji se ne okreče dovoljno brzo.
== Daljnji koraci ==
Naći drugo rješenje za središnji kotač.
~~NOTOC~~
----
=== 17. tjedan (3.2.2014. - 9.2.2014.) ===
== Dosadašnji rad ==
Probao sam umjesto središnjeg kotača staviti kuglicu. Nije pomoglo jer je fiksirana, pa autić samo struže njome po podu.
== Daljnji koraci ==
Napraviti program gdje će se očitavanje tipki i određivanje stanja dešavati u interruptu, a u glavnom dijelu programa će se samo izvoditi naredbe vezane za pojedinu tipku. Napraviti središnji kotač na principu starog računalnog miša s kuglicom, gdje je kuglica u potpunosti slobodna i može se okretati u bilo kojem smjeru.
~~NOTOC~~
----
=== 18. tjedan (10.2.2014. - 16.2.2014.) ===
== Dosadašnji rad ==
Na mjesto središnjeg kotača stavio sam završetak dezodoransa. Onaj dio kojim se nanosi tj. loptica u "čašici" koja se laganim pokretom okreće u bilo kojem smjeru. Autić se može pomicati naprijed-nazad, ali još uvijek se ne pomiče lijevo-desno. Mislim da je to zbog toga što nema svaki motor isti prijenos, jednom se prijenos sastoji od tri zupčanika, a drugom od dva zupčanika. Tako da se kotači ne okreču u potpunosti jednako. Probati ću naći još jedan prijednos koji bi odgovarao jednom od sadašnjih koje imam. Krenuo sam sa izradom završnog programa.
== Daljnji koraci ==
Završiti program i pronaći prijenos za motore koji je isti kao jedan od sadašnja dva ili pokušati napraviti jedan.
~~NOTOC~~
----
=== 19. tjedan (17.2.2014. - 23.2.2014.) ===
== Dosadašnji rad ==
Napravio sam završni program i radi kako treba. Očitavanje tipki se dešava tokom interrupta (svakih 0.16 milisekindi) i svaka tipka se sprema u buffer. Buffer je polje od 50 elemenata. Kada se dođe do kraja polja, spremanje tipki kreće od početka polja. U glavnom dijelu programa, ukoliko je program u stanju "PROGRAMIRANJE", iz buffera se čitaju tipke i ukoliko su to tipke: "NAPRIJED", "NAZAD", "LIJEVO" ili "DESNO", onda se one spremaju u polje za naredbe. Ukoliko je u bufferu tipka "CLEAR", onda se trenutno zapisane naredbe "brišu". Te ako je u bufferu tipka "GO", kreće se s izvođenjem naredbi koje su zapisane u polju naredbe i stanje postaje "VOZI". Ako je stanje "VOZI" i pritisne se tipka "GO", autić se zaustavlja, stanje postaje "PROGRAMIRAJ" i ponovo se čekaju nove naredbe.
== Daljnji koraci ==
Prokomentirati program s profesorom i vidjeti što napraviti s motorima.
~~NOTOC~~
----
=== 20. tjedan (24.2.2014. - 2.3.2014.) ===
== Dosadašnji rad ==
Program je imao problem da je jedan pritisak neke tipke očitavao kao više njih ([[studenti:mate_pavelic:mp_nauceno|bouncing]]) i to sam popravio i sada je program završen i radi bez problema.
== Daljnji koraci ==
Naći rješenje za motore.
~~NOTOC~~
----
=== 21. tjedan (3.3.2014. - 9.3.2014.) ===
== Dosadašnji rad ==
== Daljnji koraci ==
Naći rješenje za motore.
~~NOTOC~~