Šiais mokslo metais buvau labai užimtas, tai nusprendžiau nerašyti blogo. Turiu pripažinti, kad sprendimas buvo nelabai geras, bet ką dabar bepadarysi..
Tai kuo gi buvau užsiėmęs? Ogi mokslais :) Be paskaitų ir laboratorinių, dar dirbau ties magistriniu projektu. Apie tai ir papasakosiu šiame įraše.
Taigi, projekto pavadinimas ir tema: biokuro gamyba nedideliu mastu. Šį projektą oficialiai pradėjome 2010-ųjų spalį ir prie jo dirbome keturiese - du mechanikos ir du elektronikos inžinieriai. Trumpai tariant, projekto tikslas buvo sukurti aparatą, kuris iš maistinių atliekų gamintų biokurą. Šis projektas buvo vystomas jau trečius metus ir dvi prieš mus dirbusios grupės davė neblogus pamatus mūsų darbui. Daugmaž žinojome kaip vyksta cheminiai procesai, ir ko reikia, kad pagamintumėm tą biokurą. Kita vertus, mūsų grupė nusprendė susikaupti ties paties aparato vystymu ir mažiau dėmesio skirti etanolio gamybai. Šis sprendimas buvo priimtas atsižvelgus į faktą, kad po dviejų metų darbo, vis dar nebuvo solidaus aparato, su kuriuo galima būtų dirbti ir vystyti biokuro gamybos procesą.
Aš buvau atsakingas už valdymo sistemos kūrimą, o mano kolegė dirbo su elektros sistema. Praeitų metų grupė turėjio šiokią tokią sistemą, bet vos perskaitęs jų raportą supratau, jog galiu padaryti daug geriau. Kaip pavyzdį, galiu paminėti nekokybišką konstrukciją, per brangius komponentus ir neįskaitomą assembly kodą.
Per daug neišsiplėsdamas pasakysiu, jog visą sistemą sudėjau į vieną spausdintą plokštę, kurią man pagamino PCB Cart. Žemiau pateikiu plokštės savybes.
Valdiklis: PIC18F66K22
Maitinimas: Iki 34V įėjimas, 5V ir 3.3V išėjimas
Temperatūros matavimas: 5 kanalai K tipo termoporoms
Vartotojo sąsaja: tekstinis LCD ekranas ir 4 mygtukai
Sąsaja su elektros sistema
Laikrodis (real time clock)
microSD kortelės lizdas
Ši plokštė jungiasi su elektros sistema per optoporas ir rėlių bei triodų pagalba valdo motorus, solenoidus bei kaitinimo elementus. Galutinis rezultatas atrodo štai taip:
Šį trimestrą univiere darėm du projektus: liniją sekantį robotą ir skaitmeninį termometrą. Robotas, nors ir keistai nuskambės, buvo programinės įrangos projektas. Mes nedarėme geležies dizaino, tiesiog susilitavome duotas dalis. Pagrindinė užduotis buvo parašyti programą, kuri tą robotą valdys.
Roboto smegenys - PIC18F4450 mikrokontroleris. Linijos aptikimui naudojami 5 IR diodai ir 5 IR fotodiodai. Kūnas kažkoks kinietiškas, du ratai varomi DC motoriukų. Motorai valdomi naudojant L298 draiverį.
Robotas programuojamas per usb. Mikrokontroleryje sukasi USB HID bootloader'is iš Microchip. Kompiliavom su C18 kompaileriu, o hex kodą į mikro kėlėm su programa iš to pačio Microchip.
Iš pradžių dar bandžiau susirasti Linux programas, bet nepavyko rasti hex uploaderio. Daėjau iki to, kad skaičiau libusb dokumentaciją, bootloaderio kodą ir snifinau paketus :D Šiaip sakyčiau gan neblogai pavyko (dar neveikia), ypač kai neturėjau jokios normalios specifikacijos. Jei atiduos robotus pabandysiu gal per vasarą pratęst.
Surininktas robotas atrodo maždaug taip:
Veiksmo univiero trasoje kažkaip nenufilmavau, bet šiame video matosi kaip robotas veikia.
So here is my application for the 5Kapp competition. It is basically a catalogue for keeping track of the contents of your electronics junk box (hence the name).
History
Recently I added quite a bit of electronics to my junk box. I started wondering how people know whether they've got a component they need in their box. The obvious way was to keep track of all the components one has. At first I thought that a spreadsheet might do the job, but as a programmer I could do better. So I decided to write a simple application that would do the job.
Features
This application is written in Python 3 and uses SQLite database. It has a command line interface, where user can perform various tasks. Here is the list of commands:
add - add a new component
clear - clear the screen
dir - list available commands
exit - exit the program
find - search for a component
get - get a component by id
ls - list all components
man - read command manual
rm - remove a component
Command history and tab-completion will help to save some keystrokes.
Perskaitęs Arvydo įrašą apie komentarų prenumeravimą, pamaniau, kad tai išties naudinga funkcija, juolab, jog ją esu ne kartą naudojęs kituose bloguose. Iš karto iškilo klausimas "o kuo gi aš blogesnis?", tad ėmiausi darbo (užvakar :D) ir štai šiandien jau turime rezultatą. Tie, kuriems trūksta "spamo" pašto dėžutėse, yra kviečiami testuoti, bei įvertinti mano darbą :)
DĖMESIO! Turiu atsiprašyti žmonių, atėjusių iš paieškos svetainių, norinčių sužinoti apie programavimą Java kalba. Čia tokios informacijos nėra. Esu įsitikinęs, kad daugiausiai atklystančių žmonių yra pradedantieji programuotojai, todėl galiu jums pasiūlyti įvadą į programavimą, kuris palengvins jūsų dalią su Java ir ne tik.
Turiu draugą, studijuojantį KTU. Kadangi pas juos yra tokia taktika - mokyti tai, kas nelabai į temą, tai jam prisireikė mano pagalbos. Žmogus studijuoja humanitarinius mokslus, gyvenime su programavimu nesusidūręs, o univieras verčia jį programinti su java. Nepasakyčiau, kad geras sprendimas, juolab, kad "pradmenys" pas juos yra oop ir susiję dalykai.
Užduotis: Duotas sakinys. Surasti simbolių skaičių, tarp pirmo ir antro kablelių. Dalį kodo jam padėjo parašyti kursiokė, bet jis iki galo neveikė. Pradinis sprendimas buvo verstis eilutę į char tipo masyvą ir einant pro kiekvieną simbolį tikrinti. Na pradžiai labai daug vargom, kadangi su java sintakse nebuvau pažįstamas visiškai, bet galiausiai priėjom paprastą sprendimą:
int pirmasKablelis()
{
for (int i=0; i<mas.length;i++)
{
if ( mas[i] == ',' )
return i+1;
}
return -1;
}
int antrasKablelis()
{
boolean pirmasKablelis=false;
for (int i=0; i<mas.length;i++)
{
if ( mas[i] == ',' )
{
if (pirmasKablelis==false)
{
pirmasKablelis=true;
}
else
return i+1;
}
}
return -1;
}
Tačiau tai dar nebuvo pabaiga. Bėda atsirado main() metode, kur vėlgi kažkas nesiderino su sintakse. Draugė peržiurėjo mano pasiūlytą variantą, ir privertė jį veikti. Turbūt būtų viskas gerai, jei ne mano programuotojo charakteris. Nusprendžiau patobulinti kodą iki galo. Nežinau ar reikėjo viską talpinti į atskirą klasę, bet mano sintaksės žinios neleido to padaryti, tai tiesiog sukišau viską į main metodą. Po šiokio tokio googlinimo, ir karo su Eclipse (taip, netgi IDE instaliavau šiam darbui :D) pavyko sukurti "šedevrą":
public class pirmasLab
{
public pirmasLab()
{
}
public static void main(String[] args)
{
String t = "Ba,ndymas";
int k = t.indexOf( ',' );
int l = t.indexOf(',', k+1);
if (k==-1)
System.out.println("Kableliu nera, eilutes ilgis: " + t.length());
else
{
System.out.println("Pirmas kablelis yra " +k+ " -as");
if (l==-1)
System.out.println("Antro kablelio nera. Nuo pirmo kablelio, iki galo yra " + (t.length()-k-1) + " simboliai/-iu");
else
System.out.println("Antras kablelis yra " +l+ " -as");
}
if (k!=-1 & l!=-1)
System.out.println("Tarp pirmo kablelio ir antro kablelio yra " + (l-k-1) + " simboliai/-iu");
}
}
Išvada: svarbiausia ne kalba/sintaksė, o bendros žinios ir mąstymas (ir mokėjimas naudotis Google :D).