Liniją senkantis robotas

Įrašyta 2009-05-28, 21:57 | 3 Komentarai

Šį 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:

Liniją sekantis robotas


Veiksmo univiero trasoje kažkaip nenufilmavau, bet šiame video matosi kaip robotas veikia.

Trasa robotams
O tokią vat trasą turėjo įveikti robotai.

Trasoje
Pasivažinėjimas.

Jei kam smalsu galite pažiūrėti ir kodą.

Gairės: Elektronika, PIC, Programavimas, Robotas, Univieras, Video

5Kapp: Electronix JunkBox

Įrašyta 2009-02-21, 13:16 | 0 Komentarų

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.

Download:

Executable (bzipped)
Source (uncompressed)

Screenshots

I didn't do a screencast, but the screenshots are pretty informative.

Program started

dir command

manual for find command

search

adding a component
Note that autocompletion doesn't work perfectly :>

listing components

Gairės: 5Kapp, Python, Programavimas

Feature: komentarų stebėjimas

Įrašyta 2007-12-14, 23:10 | 16 Komentarų

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ą :)

I'm in! :D

UPDATE: Jau galite peržiūrėti kodą.

Gairės: Blog, Programavimas

Išmokau programuoti Java

Įrašyta 2007-10-15, 00:33 | 18 Komentarų

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).

Gairės: Java, Programavimas

Baugus programavimas | sutapimas

Įrašyta 2007-08-08, 22:49 | 3 Komentarai

Šiandien programuojant nutiko toks dalykas (beje, jau ne pirmą kartą). Esmę suprasit iš citatos:

[19:51:29] Armandas-san: ar jum būna, kad kai ką nors painiai programuojat, tiesiog rašot kodą, per daug negalvodami (nors nesat įsitikinę kad jis veiks) ir kai patikrinat - veikia?
[19:51:42] XXX: daznai
[19:52:00] Armandas-san: čia kaži gerai taip?
[19:52:06] XXX: svarbu veik

Na, jei kam tai aktualu, tai atsakymas slypi Nick Halstead blog'e. Nors mano atveju būna gal tik ~20 eilučių, bet vis tiek po to negaliu ramiai tęsti darbo, neperžiūrėjęs tos kodo dalies iš naujo.

Gairės: Pastebėjimai, Programavimas

Senesni įrašai »