Mobiilituotekehitys: Hello Android & Hello Cordova

Tästä alkaa Tero Karvisen Mobiilituotekehitys-kurssin postausketju, jossa käydään läpi luonnollisesti mobiilituotekehitystä. Teoria puolta käytiin läpi ensimmäiset 8 viikkoa ja viime viikolla siirryimme vihdoin androidin ihmeelliseen maailmaan. Käyttiksenä toimii luonnollisesti xubuntu 12.04.  Ensimmäisellä kerralla kävimme läpi eclipsen-plugari asennukset, jotka kertaan tämän postauksen yhteydessä. Liika jaarittelu, jo tehdystä asiasta on mielestäni turhaa, joten lyhykäisyydessään asia hoitui näin:

Image

Eclipsen ja kirjaston asennus

Eclipse auki -> Help välilehti -> Install New Software

Kun url https://dl-ssl.google.com/android/eclipse/ on lisätty work kenttään valitaan molemmat lisäosat ja jatketaan painamalla next -> next -> i accept -> finish

Asennuksen jälkeen Eclipse käynnistetään uudestaan ja tulee taas uusi ikkuna. Asenna Android 2.2 -> Next. Älä lähetä tietojasi googlelle -> No -> Finish. Choose packages to install, hyväksy kaikki -> asenna.

Seuraavaksi käydään läpi Hello Arduino.

Valitaan New -> Project -> Android -> Android -> Android Application Project -> Next. Laita ohjelmalle nimi: Hello Android -> Next -> Next -> Next -> Finish. Oletusasetukset kelpaavat tässä harjoituksessa. Asenna -> Hyväksy -> Asenna… Ei ole käyttäjäystävällisin asennus, mutta onneksi Windowsista on kokemusta. Melko suoraviivainen homma joka tapauksessa. Kun kaikki hässäkät on saatu vihdoin lisättyä on aika suorittaa ”Hello Android”.

Hello android löytyy mukavasti valmiina asennuksen jälkeen, mutta asentelu ei ole vielä ohi.

Painetaan yläreunasta vihreää ”play” nappia -> Run as Android Appication -> OK. ..Do you wish to add a new Android VIrtual Device? -> Yes. Launch a new Android Virtual Device -> Manager -> New -> nimeä api8 -> Create AVD -> Start -> Launch. Tässä tehtiin siis selvennykseksi Androidin virtuaali laite, jolla pystyy emuloimaan kätevästi luomiaan sovelluksia virtuaalisella puhelimella. Ei siis tarvitse käyttää omaa puhelinta testaukseen.

Ja Hello Android on valmis!

Viimeiseksi Hello Cordova.

Eli New -> Project -> Android -> Android -> Android Application Project -> Next. Laita ohjelmalle nimi: OskuCordova -> Next -> Next -> Next -> Finish.

Seuraavaksi seikkailtuani workspace kansiooni terminalin kautta. Syötin seuraavat toiminnot:

$ mkdir assets/www/
$ wget https://github.com/phonegap/phonegap/zipball/2.1.0
$ unzip 2.1.0
$ rm 2.1.0
$ cp -i phonegap*/lib/android/cordova*.jar libs/
$ cp -i phonegap*/lib/android/cordova*.js assets/www/
$ cp -ri phonegap*/lib/android/xml/ res/
$ rm -r phonegap-phonegap*/

Näin haettiin tarvittavat komponentit koodin suoritukseen. F5 painamalla kansiot päivittyivät cordova-ystävälliseen muotoon. Teron ohjeen mukaisesti aloin tämän jälkeen työstämään koodia.

Alleviivatut kohdat muutettiin. Bundlen importtausta en tajunnut ensimmäiseksi, sillä sitä en löytänyt ohjeesta.

Tämän jälkeen loin www-kansioon index.html tiedoston, sillä sitä kutsutaan MainActivityssa.

Index.html koodi

Seuraavaksi piti vielä muokata AndroidManifest.xml-tiedostoa

Kehyksissä lisätty osio.

Lähteet koodeihin: index.html, AndroidManifest.xml

Ja lopputulos:

Jätä kommentti

Kategoria(t): Uncategorized

Arduino project – Controlling relays

Introduction

(We = Mikko and Oskari)

We were given an assignment to do arduino project, present demo in class and publish documentation in the web.

So, if you are reading this post and wonder what we are talking about, arduino is open-source single-board microcontroller. Basically, you can program pretty much anything on arduino and make cool robots and gadgets.

Our idea for this project was to make remote controlled relay switch which could be operated by internet browser. For example, you could switch your external hard-disk on and off from your phone or any other location.

Originally, we were interested in controlling mains current by using relays. To have some coffee brewed at morning, for example. We quickly realized that working with mains current would be pretty tricky, not to mention risky at the same time. After a little brainstorming, we decided to stick with  lower-voltage devices such as computer fans and small lights (5-24 volts). For this we happened to have transformer with input of 220-230V 50Hz and output of 12V, making it ideal for dealing with low-voltage electronic devices. As we didn’t have much experience in working with electronics and were lacking power meter, getting relay controller circuit working properly took some time first. Luckily, we were able to borrow one for this project. First we worked out from which terminals voltage was running and from there it got easier.

We had problems getting mobile application working. Arduino rebooting itself when trying to switch relays through android phone. We couldn’t solve this problem and thus abandoned idea of mobile operation. Second big problem was figuring out relays terminals output of power. At first, we assumed that arduino would supply power to the device connected to it, which was not the case. We tried to find datasheet or other information about this matter, but only ended up with some electrical schematics which we didn’t understand at all. Luckily, we were able to borrow power meter from our friend and figured out which pins gave out voltage. This made it much easier to complete proper circuit between the devices. One relay terminal consist of 3 pins, one being normally open, one common connection and the last one normally closed. The device had to be hooked onto common connection pin from its positive output and the power supplier to normally closed one. Then relay would switch this circuit on and off.

The setup

We found an old project of Mikko’s which consists of speaker, pre-programmed micro chip, button and some soldered wires. It was operating with 1,5V batteries so a bit less than what our transformer outputs. Being curious to hear some sounds and demo this relay with both computer fan and speaker connected to it, we decided to give it a try. It worked nicely and it still does!

Fritzing made circuit diagram

List of parts

Quantity           Part number             Description                                                Price

1                           DEV-00666            Arduino Main Board(Duemilanove)      €22.90

1                           DEV-09026            Arduino Ethernet Shield(v2)                   €31.00

1                           EA-040402             Opto-Isolated 8 Channel Relay Board   $19.50

6                           –                                            Wires                                                  –

1                           –                                            12v output transformer                   –

1                           –                                            5v output transformer                     –

+ multi-tool, power meter, low-voltage devices

Code

#include <SPI.h> // for device communication

#include <Dhcp.h> // configuration for ethernet shield

#include <Dns.h> // deals with dns traffic and gets hosts IP

#include <Ethernet.h>

#include <EthernetClient.h>

#include <EthernetServer.h>

#include <EthernetUdp.h>

#include <util.h>

#include <WebServer.h>

WebServer server(””, 80);

boolean state[4];

byte mac[] = { // change this to your own unique value

0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };

void ui(WebServer &server, WebServer::ConnectionType type, char *tail, bool tail_complete) {  // codiqa was used to do the framework, http://jquerymobile.com/

server.httpSuccess();

P(html1) = // store the HTML in program memory using the P macro

”<!DOCTYPE html>\n”

”<html>”

”    <head>\n”

”        <meta charset=’utf-8′ />\n”

”        <meta name=’viewport’ content=’width=device-width, initial-scale=1′ />\n”

”        <title>\n”

”        </title>\n”

”        <link rel=’stylesheet’ href=’http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css&#8217; />\n”

”        <style>\n”

”          .ui-slider-switch { width: 100%!important }”

”        </style>\n”

”        <script src=’http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js’&gt;\n”

”        </script>\n”

”        <script src=’http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js’&gt;\n”

”        </script>\n”

”    </head>\n”

”    <body>\n”

”        <div data-role=’page’ id=’page1′>\n”

”            <div data-role=’content’>\n”

”<form action=’form’ method = ’post’>\n”

”     <select name=’rele1′ data-role=’slider’>”;

server.printP(html1);

// defines and shows all relay buttons

if (state[0]){

server.print(”        <option value=’0′>Relay 1 Off</option>\n”);

server.print(”        <option selected=’selected’ value=’1′>Relay 1 On</option>\n”);

}

else{

server.print(”        <option selected=’selected’ value=’0′>Relay 1 Off</option>\n”);

server.print(”        <option value=’1′>Relay 1 On</option>\n”);

}

P(html2) =  ”      </select>\n”

”      <br />\n”

”     <select name=’rele2′ data-role=’slider’>”;

server.printP(html2);

if (state[1]){

server.print(”        <option value=’0′>Relay 2 Off</option>\n”);

server.print(”        <option selected=’selected’ value=’1′>Relay 2 On</option>\n”);

}

else{

server.print(”        <option selected=’selected’ value=’0′>Relay 2 Off</option>\n”);

server.print(”        <option value=’1′>Relay 2 On</option>\n”);

}

P(html3) =  ”      </select>\n”

”      <br />\n”

”     <select name=’rele3′ data-role=’slider’>”;

server.printP(html3);

if (state[2]){

server.print(”        <option value=’0′>Relay 3 Off</option>\n”);

server.print(”        <option selected=’selected’ value=’1′>Relay 3 On</option>\n”);

}

else{

server.print(”        <option selected=’selected’ value=’0′>Relay 3 Off</option>\n”);

server.print(”        <option value=’1′>Relay 3 On</option>\n”);

}

P(html4) =  ”      </select>\n”

”      <br />\n”

”     <select name=’rele4′ data-role=’slider’>”;

server.printP(html4);

if (state[3]){

server.print(”        <option value=’0′>Relay 4 Off</option>\n”);

server.print(”        <option selected=’selected’ value=’1′>Relay 4 On</option>\n”);

}

else{

server.print(”        <option selected=’selected’ value=’0′>Relay 4 Off</option>\n”);

server.print(”        <option value=’1′>Relay 4 On</option>\n”);

}

P(html5) =

”      </select>\n”

”<input type=’submit’ value=’Set’ />”

”</form>\n”

”            </div>\n”

”        </div>\n”

”    </body>\n”

”</html>”;

server.printP(html5);

}

// this code defines using our ”set” key to control relays on and off

void form(WebServer &server, WebServer::ConnectionType type, char *tail, bool tail_complete) {

char name[32];

char value[32];

if (type == WebServer::POST) {

while (server.readPOSTparam(name, 32, value, 32))

{

if  (strcmp (name,”rele1″) == 0){

state[0] = atoi(value);

if(!state[0]){

closeRelay(1);

}

else{

openRelay(1);

}

}

if  (strcmp (name,”rele2″)== 0){

state[1] = atoi(value);

if(!state[1]){

closeRelay(2);

}

else{

openRelay(2);

}

}

if  (strcmp (name,”rele3″)== 0){

state[2] = atoi(value);

if(!state[2]){

closeRelay(3);

}

else{

openRelay(3);

}

}

if  (strcmp (name,”rele4″)== 0){

state[3] = atoi(value);

if(!state[3]){

closeRelay(4);

}

else{

openRelay(4);

}

}

}

}

server.httpSeeOther(”index.html”);

}

void setup() {

//trick which prevents relay terminals from going on when starting up

digitalWrite(14, HIGH);

digitalWrite(15, HIGH);

digitalWrite(16, HIGH);

digitalWrite(17, HIGH);

//set pins 14-17 as output

pinMode(14, OUTPUT);

pinMode(15, OUTPUT);

pinMode(16, OUTPUT);

pinMode(17, OUTPUT);

state[0] = false;

state[1] = false;

state[2] = false;

state[3] = false;

Serial.begin(9600); //adding serial port

Serial.print(”Starting ”);

Ethernet.begin(mac); // ethernet shield recieves IP-address automatically

String ip;

Serial.print(” My IP address: ”);

for (byte thisByte = 0; thisByte < 4; thisByte++) {

// print the value of each byte of the IP address:

ip += Ethernet.localIP()[thisByte];

ip += ”.”;

Serial.print(Ethernet.localIP()[thisByte], DEC);

Serial.print(”.”);

}

Serial.println();

server.begin();

server.setDefaultCommand(&ui);

server.addCommand(”index.html”, &ui);

server.addCommand(”form”, &form);

}

void loop() {

server.processConnection();

}

void openRelay(byte channel) {  //method which opens relays

switch (channel) {  //choosing switch-case

case 1:   //case 1 means byte channel=1

digitalWrite(14, LOW);   // connects digital output 14 to ground

state[channel-1] = true;   // sets value for relay’s cell

break;

case 2:

digitalWrite(15, LOW);

state[channel-1] = true;

break;

case 3:

digitalWrite(16, LOW);

state[channel-1] = true;

break;

case 4:

digitalWrite(17, LOW);

state[channel-1] = true;

break;

}

}

void closeRelay(byte channel) { // closes relays

switch (channel) {

case 1:

digitalWrite(14, HIGH);

state[channel-1] = false;

break;

case 2:

digitalWrite(15, HIGH);

state[channel-1] = false;

break;

case 3:

digitalWrite(16, HIGH);

state[channel-1] = false;

break;

case 4:

digitalWrite(17, HIGH);

state[channel-1] = false;

break;

}

}

 

 

 

 

Jätä kommentti

Kategoria(t): Uncategorized

Sensori suurennuslasin alla

Mielenkiintoinen sensori, joka sopii hieman villimpiin kotiprojekteihin on Piezo Film Vibra Tab Mass. Tämä sensori on vibrasensori, jolla pystyy mittaamaan mm. maanjäristyksiä. Tämä sopii projekteihin, jotka haluavat mitata jotakin värähtelevää tai käyttämään värähdyksen tunnistusta jotenkin hyväkseen.

Täältä pääsee Maanjäristyksen tunnistajan ohjeisiin.

Ohjeen mukaan sensori muokataan vastaanottamaan maan eri taajuksia 1-20Hz väliltä. Tämä sensori taipuu varmasti monenlaiseen ja olen yrittänyt miettiä, jos saisin sen sopimaan omaan projektiin jotenkin. Kyseessä olisi ainakin erilainen sensori. Piezo sensoreita saa muutamaan dollariin ja vaikeustasoa ainakin riittää, sillä koodia en löytänyt.

Jätä kommentti

Kategoria(t): Uncategorized

Sensorina infrapunatunnistin

Huhtikuun toisen viikon tehtävänä oli tutustua johonkin Arduinolle soveltuvaan sensoriin ja saada sensori toimimaan. Poimin pakasta itselleni infrapunatunnistimen.

Tätä sensoria käytetään esim. kaikissa televisiossa tai dvd-soittimissa, että ne toimisivat kaukosäätimellä. Infrapunatunnistinta käytetäänkin aina, jos on tarkoituksena käyttää kaukosäädintä.

Testauksen ideana oli laittaa sensori toimimaan niin, että painaessa kaukosäädintä lediin syttyy valo.

Kytkentä näytti suurinpiirtein tältä:

Kuvassa näkyy asetelma, jonka kopioin melko säälimättömästi täältä. Ainoana erona en käyttänyt resistoria vaan viivat demonstroivat hyppylankoja. Testi todella toimi, kuten alla olevasta videosta voi todeta.

Infrapunatunnistin toimi ja valo säihkyi siis täysin ilman Arduino koodia. Koodin pätkät mitä löysin eivät sulautuneet kaukosäätimelleni. Pahimmat ongelmat olivat kytkennöissä jota en saanut millään toimimaan ensin ja en tiennyt mikä kaukosäädintoimisi. Esim. koulun projektorisäädin ei toiminut sensorin kanssa. Kytkennöissäkin saattoi olla tuossa vaiheessa häikkää, mutta luulen että perinteisimillä kaukosäätimillä saa sensorin toimimaan paremmin.

Jätä kommentti

Kategoria(t): Uncategorized

Arduino – Hello World

Tein Arduino Diecimilalla kotiläksyksi blink-testin. Onnistuin jo luokassa tekemään homman yhdellä ledillä, mutta nyt kokeillaan kolmella.

void setup() {

pinMode(13, OUTPUT);

pinMode(11, OUTPUT);

pinMode(10, OUTPUT);

}

void loop() {

digitalWrite(10, HIGH);

delay(1000);

digitalWrite(10, LOW);

delay(1000);

digitalWrite(13, HIGH);

delay(500);

digitalWrite(13, LOW);

delay(5500);

digitalWrite(11, HIGH);

delay(100);

digitalWrite(11, LOW);

delay(100);

}

Ei mitään erityisen jännittävää koodissa. Lähinnä testailua eri delay luvuilla.

Kuva kytkennöistä

 

Ongelmista sen verran, että en saanut Arduinoa toimimaan Vista Home Basicilla. Arduino-ohjelmisto käynnistyi, mutta ohjelman suorittaminen ei onnistunut.  En löytänyt nopealla googlauksella järkeviä tuloksia, ja virherivike unohtui laittaa muistiin.  Homma pelittää kuitenkin mainiosti Windows 7:lla. Vistan ongelmat ovat muutenkin tiedossa, joten tämän ongelman voi käytännössä unohtaa ja käyttää pätevämpiä käyttöjärjestelmiä.

Haastavampia tehtäviä odotellessa!

 

Jätä kommentti

Kategoria(t): Uncategorized

Koneesta kuvaa

Tässä vielä viimeisin tehtävä, eli koneen sisuksia ja niiden nimeämistä. Kovalevy, Prosessori ja Muistikammat näkyvät hieman huonosti. Pahoitteluni.

Jätä kommentti

Kategoria(t): Uncategorized

Heippa Maailmaa

Python

Tarkistutin löytyykö koneestani pyhtonia komennolla:

python

Komento toi esiin tietoa pythonin versiosta ja toi myös esiin uuden komentorivin, jossa koodirivejä pystyy testailemaan. Python on siis asennettu, joten koodia vain kirjoittelemaan.

nano hello.py

                   print(“Hello World!”)

                   print(2+2)

suoritus komento:

python hello.py

ja sain tulosteen

Hello World!

4

Nelosella testataan tiedonprosessointia ja hyvin sekin toimi

Java

Tiesin, että koneellani ei ollut vielä javaa, joten sellainen piti asentaa. Komento:

sudo apt-get install openjdk-6-jdk

Hello World:

$nano HelloWorld.java

  public class HelloWorld

  {   public static void main(String[] args)   {   System.out.println(“Hello World!”);   } }

javac helloworld.java

Java on käännetty ja valmis suoritettavaksi.

java HelloWorld

Näyttää tekstin:

Hello World!

Jätä kommentti

Kategoria(t): Uncategorized