Browse Category: Android

Upoznavanje sa IOIO

Ako niste sigurni o kakvom IOIO-u se radi, pogledajte ovde 😉

ioio-logo

Stigao je. IOIO koji sam toliko čekao – stigao je! Zapravo stigao je on još davno, samo od svih obaveza nisam uspeo da mu posvetim dovoljno pažnje i da se poigram sa njim. Nego, da ne bih prevodio uputstvo koje možete naći ovde, u ovom blogu ću opisati problematične situacije u kojima sam se ja našao kada sam hteo po prvi put da pokrenem aplikaciju HeloIOIO i kako sam ih rešio.

Konektori

Prva stvar koju sam primetio kada sam otvorio paket, jeste da na pločici nisu zalemljene lestvice za povezivanje uređaja sa žicama, već su ostavljeni samo kontakti na koje se nešto može zalemiti. “Shit, sada još moram tražiti te lestvice po gradu!”. A tada još nisam ni znao kako se to zove, pa sam prodavcima na razne načine objašnjavao šta mi treba, pokazivao im slike na telefonu, poredio sa protoboard-om, dok konačno u Sprintu nisam našao to što mi treba. Tamo su mi objasnili da se to zove ženska lestvica (vi zakjučite zašto baš ženska :P).

Zaštita od pogrešnog povezivanja napajanja

Kada su lestvice konačno bile zalemljene na pločicu, bilo je vreme da testiram uređaj. Pročitao sam zvanično uputstvo, a zatim pločicu nakačio na stari adapter od fiksnog telefona (9V, 1000mA). Ideja je bila da stavim i jednu diodu, kako bi pločicu zaštitio od pogrešnog povezivanja napajanja, ali u tom trenutku nije bilo vremena za nešto to, što se kasnije ispostavilo kao velika greška. Elem, evo kako diodom da zaštitite IOIO (ili neki drugi neki uređaj) od pogrešnog povezivanja napajanja:

Zaštita od pogrešnog povezivanja napajanja
Zaštita pomoću diode

Takođe možete koristiti i grecov ispravljač:

Zaštita od pogrešnog povezivanja napajanja
Zaštita pomoću grecovog ispravljača

U provm slučaju uređaj neće raditi ako naopačke povežete napajanje (na B priključak dovedete minus), dok u drugom slučaju sa grecovim ispravljačom, uređaj će raditi za bilo koju polarizaciju plusa i minusa na priključcima A i B. Ove zaštite je poželjno skinuti kada uređaj kačite na bateriju, jer svaka dioda stvara pad napona od 0,7V.

Projekat HelloIOIO

Da bi IOIO nešto radio, potrebno je da isprogramirate aplikaciju za Android telefon koja će da mu kaže šta da radi. Zbog toga je potrebno da na računaru imate podešeno Eclipse okruženje sa Android SDK. Kako to uraditi ako do sada niste, potražite ovde.

Kada preuzmete najnovije biblioteke za rad sa IOIOom, sa njima će te dobiti i primer HelloIOIO. U mom slučaju, pokretanje tog primera nije išlo tako glatko kako je opisano na IOIO wikiju. Evo šta sam ja sve morao da uradim da bi mi svi primeri proradili:

1) Update Eclipse okruženja. Help Check for Updates, pa dalje sve prihvatiti…

2) Android SDK Manager  Update Android Tools

Nakon ubacivanja projekata u Eclipse okruženje koje je opisano na IOIO wikiju, za svaki projekat uraditi sledeće:

1) Desni klik na projekat  u Package Explorer prozoru  Properties (otvoriće se novi prozor)

2) Odabrati stavku Android u desnom meniju, a zatim u panelu levo obeležiti verziju Androida za koji želite da kompajlirate vaš projekat (verzija Androida koji je na telefonu sa kojim povezujete IOIO)

3) U meniju sa desne strane sada odabrati Java Compiler stavku. Levo obeležiti stavku Enable project specific settings, a zatim pod JDK Compliance tamo gde piše Compiler compliance level odabrati verziju 1.6. Kockica Use default compliance level treba da bude obeležena.

4) Zatvorite prozor Properties for …

5) Desni klik na projekat u Package Explorer prozoru Android tools Fix project properties

Nakon ovoga, kod mene se svaki ubačeni projekat ponaša normalno. Crveni iksići koji su se ranije pojavljivali pored projekata u Package Explorer prozoru su nestali.

Prvi pokušaj

Nakon spuštanja aplikacije HelloIOIO na telefon i povezivanja telefona sa IOIOom, aplikacija je radila baš to što je u njenom opisu: menja stanje statusne diode na uključeno/isključeno u zavisnosti od stanja ToggleButton-a koji se nalazi na displeju telefona.

helloioio

U nekom od narednih blogova slede malo ozbiljniji primeri 😉

Bežični okidač za DSLR fotoaparate (Android)

Ako ste pročitali blog o okidanju Canon DSLR fotoaparata putem Android telefona, možda ste se zapitali da li to može i bez kabla? Da, može!

Za fotoaparate koji imaju ugrađen infracrveni senzor, postoje daljinski kojim je moguće bežično kontrolisati okidanje fotoaparata. Cena ovih uređaja nije preterano velika, ali ako imate Android telefon, ili neki drugi Android uređaj koji uvek nosite sa sobom, sve ovo može i mnogo jeftinije.

Da bi Vaš Android uređaj pretvorili u daljinski za okidanje fotoaparata, potrebno Vam je parče hardvera i aplikacija kojom ćete kontrolisati okidanje fotoaparata. Neophodan hardver namerno nazivam parčetom hardvera, jer su to zapravo dve IR diode i jedan stereo konektro. Evo i šeme:

Šema povezivanja IR dioda na stereo konektor
Šema povezivanja IR dioda

Obratite pažnju kako su diode povezane: plus prve diode i minus druge su povezane na desni kanal, dok su minus prve i plus druge diode povezani na levi kanal stereo priključka.

Aplikaciju kojom možete kontrolisati Vaš DSLR koristeći ovo parče hardvera, možete naći ovde. Takođe niste ograničeni samo na Canon fotoaparate (kao u prethodnom blogu), već je moguće kontrolisati i fotoaparate proizvođača Nikon, Olympus, Snoy, Fuji, Minotla i Pentax 😉

Dok čekam moj IOIO

Dok nestrpljivo čekam da novo “mezimče” stigne u moje ruke, pokušaću da objasnim šta je to IOIO i zbog čega ta nestrpljivost. IOIO (izgovara se kao yo-yo, jo-jo) je interfejs koji omogućuje da neko električno kolo povežete sa Vašim Android uređajem, putem kojeg to električno kolo, na vrlo jednostavan način, možete da kontrolišete. Jednostavnije, programiranjem aplikacije za telefon/tablet, možete da palite i gasite lampice, kontrolišete brizinu okretanja elektro motora ili da očitavate vrednosti senzora koje nakačite na IOIO. Da, sve to, a može i više od toga!

Umesto kabla, povezivanje telefonom je omogućeno i putem bluetooth-a, što znači da sve ove operacine nabrojane iznad, možete da obavljate bežično! 😉 Evo i primera, čisto da Vas još malo zainteresujem:

[youtube http://www.youtube.com/watch?v=XSAzSw3QTOY]

Elem, naručio sam ovo čudo i sada isčekujem dan kada ću ga prvi put povezati sa telefonom. Pošto se kod nas IOIO ne može nabaviti (barem ja nisam uspeo nigde da izguglam, ako neko slučajno zna gde ima, obavezno neka ostavi u komentarima), bio sam prinuđen da iscimam koleginicu sa faxa, koja je na Work&Travel programu u Americi, da mi donese jedan primerak.

Dok ne dođe čas da se i sam oprobam u majstorisanju sa novom igračkom, a eventualno i da podelim iskustva na blogu, više o IOIO uređaju, možete pročitati ovde:

https://github.com/ytai/ioio/wiki

http://ytai-mer.blogspot.com/2011/04/meet-ioio-io-for-android.html

Ako je neko pak zainteresovan da kupi koji primerak:

https://www.sparkfun.com/products/10748?

😉

Android summer school 2012

Prošle nedelje sam pohađao Android summer school koju je organizovao odsek RT-RK fakulteta tehničkih nauka u Novom Sadu. Škola je trajala 5 dana, a šta smo za to kratko vreme, opisaću ukratko.

Android summer school
Android summer school – plakata

Prvog dana samo se upoznali sa Androidom i njegovom arhitekturom. Android framework, načini čuvanja podataka, Android SDK, emulator, adb, kao i pisanje prvih aplikacija u Eclipse-u su samo neke od tema koje su obrađene. Takođe održano je i predavanje o Android GUI-u i elemntima GUI-a, a nakon toga su usledili zadaci koje smo rešavali uz pomoć profesora.

Predavnja drugog dana su malo detaljnije objasnila Androidovu bazu podataka ali i baze uopšte (SQL upiti, primarni ključevi…). Takođe je bilo reči i o  komunikaciju preko interneta na Androidu, socket-ima, prenosu teksta, DOM parseru… Na kraju je održano predavanje o multimediji, gde su obrađeni razni adapteri i čemu oni služe kao i dodavanje multimedijalnog sadržaja u MediaLibrary.

Trećeg dana smo učili kako se prave igrice na Androidu! Ali, koliko god ova uvodna rečenica fensi zvuči, moje oduševljenje predavanjima nije. Smatram da je prvi deo predavanja bio zaista koristan, jer smo saznali dosta informacija o GameLoop-u (petlji koja se izvršava tokom igranja neke igrice i načinima da se ta petlja uvek izvršava isto na raznim procesorima). Drugi deo predavanja je meni lično bio malo dosadan, iz razloga što nam je bilo prikazano gomila izsečaka koda nekih igrica, a pošto su to izsečci, često se moglo čuti od strane predavača: “Ovo zanemarite, to je realizovano u toj-i-toj klasi”. No, u svakom slučaju, vredelo je odslušati i to predavanje, jer su tu data rešenja za neke konkretne probleme.

Četvrti i peti dan je poslužio da zavirimo ispod haube Androida. Linux Kernel, izvorne biblioteke, runtime, framework… Stvari za koje smatram da dosta onih koji “programiraju” na Androidu nisu ni čuli za njih, a oni koji jesu, nisu se preterano udubljivali da ih izuče. Uglavnom, na predavanjima je sve to obrađeno u onoj meri koliko je to bilo moguće za 2x4h. Meni je bilo zanimljivo, jer sam se zbog toga u principu i prijavio na školu. Takve stvari, em što se malo teže nalaze na internetu, malo ih je teže i skontati od razumevanja kako napisati “HelloWorld!” aplikaciju.

Sve u svemu, svakome ko sledeće (a nadam se i dosta narednih godina) primeti plakatu o Android školi, preporučujem da se prijavi. Možda je vreme održavanja škole nakon završetka fakulteta, budu vrućine i verovatno bi ste se radije negde brčkali na Štrandu nego sedeli za računarom i usput učili, ali prilika za sticanje ovakvog znanja nema mnogo.

 

 

 

Canon DSLR – daljinski (Android) okidač – Praksa

U prethodnim blogovima sam opisao kako treba da funkcioniše ovaj uređaj, kako hardverski deo, tako i deo koji se izvršava na telefonu tj. aplikacija. Ali kako ovo zapravo funkcioniše u stvarnosti?

Interfejs

Onima koji žele ovo sami da prave, a nisu baš vešti sa elektronikom, preporučujem da koriste kalaj za lemljenje sa kalafonijumom. Ja sam izgubio dva dana, pokušavajući da komponente nalemim na pločicu sa nekom starom lemilicom i još starijim kalajom. Na kraju sam kupio novi kalaj i sastavio pločicu za 10min 🙂
Kao podlogu za komponente, koristio sam protobord pločicu. Kako sam saznao od prodavca, postoje protobord ploče sa poljima od bakra na koje se leme komponente ili kao u mom slučaju, ploče sa linijama bakra na kojima se nalaze rupice kroz koje se povezuju komponente. Meni se lično više dopala ova varijanta sa rupicama, jer su tako  lemovi sa jedne, a komponente sa druge, pa sve izgleda urednije i kulturnije. Evo kako to sada izgleda:

Sastavljen interfejs

Na ovom interfejsu se nalaze još i dva tastera, tako da i kada mi telefon nije pri ruci, mogu da koristim interfejs kao što je opisano ovde. Što se tiče komponenti, mislim da ni jedna komponenta nije iste oznake kao što sam naveo u blogu o interfejsu, već su sve neke približne vrednosti. Jednostavno na mestu gde sam kupovao komponente nisu imali komponente sa traženim oznakama, a i ovako sve radi kako treba, pa to nije problem.

Aplikacija

Oko pisanja aplikacije sam se zadržao malo duže, jer sam potpuni početnik što se tiče Android programiranja, a ni sa Javom nisam neki ekspert. Mic po mic i napisao sam ono što mi treba, ono zbog čega sam uopšte i započeo pisanje ovog bloga. Ili barem deo toga 😛
Ukoliko niste upoznati sa programiranjem Android aplikacija, pročitajte ovo uputstvo.

Aplikacija

Za sada aplikacija može da funkcioniše na dva načina. Automatski, kada se unapred definiše ekspozicija ili ručni kada ekspozicija traje onoliko vreme koliko se prst drži na dugmetu “Shoot”. Takođe je moguće i prekinuti ekspoziciju klikom na dugme “Stop” ukoliko je greškom definisana predugačka ekspozicija.

Aplikacija je pisana za HTC Wildfire sa Androidom 2.2.1. Za preuzimanje sours koda kliknite ovde, a zatim pritisnite Ctrl+S.

Navigacija: Ideja Planiranje / Interfejs Aplikacija / [ Praksa ]

Canon DSLR – daljinski (Android) okidač – Aplikacija

Kao što objasnih u ovom blogu, na izlaz stereo priključka je potrebno emitovati ton, a to će, ukoliko je fotoaparat povezan na telefon preko interfejsa, uzrokovati fokusiranje odnosno okidanje, u zavisnosti na koji kanal smo emitovali ton. Za generisanje tona, modifikovao sam i koristio klasu sa ove stranice: stackoverflow.com/ques…bud-left-or-right. Pomoću nje se može lako generisati pravougaoni signal određene frekvencije i dužine trajanja. Modifikovana verzija klase je ispod.
<.blockquote>

import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;

public class ToneGen {

    AudioTrack aTrack;
    byte[] buffer;
    int fps = 16000;
    int samplesPerFrame = 4;

    /**
    *@param frequency The frequency of the tone
    */    
    public ToneGen(int frequency)  {
        buffer = new byte[fps];
        int T = (int) fps / frequency ;
        int To2 = (int) T / 2;
        for ( int i=0; i<buffer.length; i+=T ) {
            for (int j = 0; j < To2; j++)
            {
                buffer[i+j] = (byte) 127;
                buffer[i+j+To2] = (byte) -127;
            }
        }
    }

    /*
    * @param duration Duration of sound in seconds
    * @param leftVolume Left volume 0.0f - silent, 1.0f full volume
    * @param rightVolume Right volume 0.0f - silent, 1.0f full volume
    */
    public void Play(float duration, float leftVolume, float rightVolume) throws Exception {
        int u = 1;
        if (duration < 1) {
            u = Math.round(1 / duration);
            if (u != 2 && u != 4 && u != 8 && u != 16 && u != 32 && u != 64 && u != 128) throw new Exception("Invalid exposure");
        }
        aTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
             fps/samplesPerFrame, AudioFormat.CHANNEL_OUT_STEREO,
             AudioFormat.ENCODING_PCM_16BIT,
             buffer.length/u, AudioTrack.MODE_STATIC);
        if (duration > 1) 
            aTrack.setLoopPoints(0, fps/samplesPerFrame, Math.round(duration)-1);

            aTrack.write(buffer, 0, buffer.length);
            aTrack.setStereoVolume(leftVolume, rightVolume);
            aTrack.play();                
    }

    public void Stop(){
        aTrack.stop();
    }

}

.
Klasu koristite tako što konstruktoru prosledite željen frekvenciju tona koji želite da generišete. Ja sam koristio frekvenciju od 500Hz i sa tim parametrima je interfejs opisan u prethodnom blogu radio kako treba. Kada želite da emitujete ton, potrebno je da pozovete metodu Play(). Njoj prosleđujete dužinu trajanja tona u sekundama i jačinu zvuka za levi odnosno desni kanal. Primer:
.

ToneGen tg = new ToneGen(500);
try { tg.Play(5.0f, 0.0f, 1.0f); } catch (Exception e) {}

.
Ovako pzvana metoda Play() će emitovati zvuk od 500Hz, trajanja pet sekundi, samo na desni kanal stereo priključka. To će prouzrokovati da, kada je aparat preko interfejsa povezan na telefon, aparat fokusira 🙂

Ukoliko želite da ekspozicija traje manje od jedne sekunde, potrebno je da emitujete ton kraći od jedne sekunde. Takav ton možete da generišete na sledeći način:

.

ToneGen tg = new ToneGen(500);
try { tg.Play(0.125f, 0.0f, 1.0f); } catch (Exception e) {}

.

Važno je da dužina trajanja tona koji želite da emitujete (dužina ekspozicije) bude jedna od sledećih vrednosti: 1/2, 1/4, 1/8, 1/16, 1/32, 1/64 ili 1/128 u decimalnom zapisu.

NAPOMENA: Canon fotoaparati, kada se fotografiše u BULB modu, u EXIF podacima dužine ekspozicije koje su manje od jedne sekunde zaokružuju na jednu sekundu!

Navigacija: Ideja Planiranje / Interfejs / [ Aplikacija ] / Praksa

Canon DSLR – daljinski (Android) okidač – Planiranje

Potrebno je napraviti interfejs preko kojeg će telefon i fotoaparat biti povezani. Na određenu komandu telefona, interfejs će odreagovati tako što će fotoaparatu poslati komandu za fokusiranje odnostno okidanje. Pošto je korišćenje USB porta na telefonu suviše komplikovano (a pritom nam nisu potrebne mogućnosti koje pruža), odlučio sam da iskoristim stereo izlaz za slušalice.

Male napomene:

  • Priključak na telefonu za slušalice je obično stereo priključak odnosno TRS koenktor dimenzija 3.5mm;
  • Priključak na Canon dSLR fotoaparatima (350D,400D, 40D…) je takođe TRS konektor, ali manjih dimenzija – 2.5mm;
  • Kako ručno kontrolisati fotoaparat preko TRS konektora, možete videti ovde.

Evo jedno šturo objašnjenje kako ovo treba da funkcioniše:

Kada se na telefonu pusti neki ton, na izlazu stereo priključka se javlja određeni signal. Nama treba elektronsko kolo, koje će za neki signal na svom ulazu, napraviti kratak spoj na svom izlazu. Tako postižemo da se kolo ponaša kao prekidač koji kontrolišemo pobudnim signalom. Ako prekidače A i B (iz prethodnog bloga) zamenimo takvim kolima (nazovimo ih sada kA i kB), aparat će kontrolisati signali koje dovedemo ulaz ta dva kola. Pošto imamo levi i desni kanal na stereo priključku, svakom dodelimo po jedno kolo: desni kanal ->kolo kA (fokusiranje), levi kanal -> kolo kB (okidanje). Na taj način, ukoliko na telefonu pustimo ton koji se emituje samo na desnom kanalu, fotoaparat će fokusirati 🙂

Pored interfejsa, potrebno je napisati i aplikaciju za Android, koja će emitovati ton određene frekvencije na levi odnosno desni kanal stereo izlaza. Aplikacija treba da podržava više načina funkcionisanja, za rasličite potrebe: HDR fotografija (tri ili više različitih ekspozicija), Time-Lapse (više istih ekspozicija, sa određenim vremenskim razmakom), Shoot OnTime (okidanje u datom trenutku), a takođe se može napraviti da aplikacija reaguje na spoljnje događaje, koji se mogu meriti sa nekim od ugrađenih senzora u telefonu (promena intenziteta zvuka/svetla u okolini, promena položaja telefona, osetljivost na vibracije itd.).

Navigacija: Ideja / [ Planiranje ] / Interfejs Aplikacija Praksa