Info Draft Processing suomeksi

Arduino

Arduino on avoin alusta elektroniikkaprototyyppien rakentamiseen. Se on mikrokontrolleri, jossa on sisään- ja ulostuloja, joihin voidaan kytkeä sensoreja ja aktuaattoreita (eli fyysiseen maailmaan vaikuttavia osia). Se sisältää myös ohjelmointiympäristön, joka perustuu Processingiin. Ohjelmointiympäristön avulla voit ohjelmoida elektronista mikrokontrolleria. Arduino on Processingin jatkokehittelyprojekti, se näyttää loogiselta seuraavalta askeleelta, kun tahdotaan kehittää fyysisessä maailmassa toimivaa interaktiivisuutta. Kun olet Processing-taituri, on Arduino sinulle jo tuttu. 

Arduino-mikrokontrolleri 

arduino_board

Arduino on elektroninen piiri, joka voidaan kytkeä USB:n avulla tietokoneeseen, jolloin mikrokontrolleriin voidaan ladata sitä ohjaava koodi. Mikrokontrolleri on pieni prosessori, jossa on analogisia sisään- ja ulostuloja. Elektroninen laite on vapaa (muttei ilmainen), aivan kuin Arduino-ohjelmistokin. Voimme tutkia sen piirroksia ja suunnitella sen pohjalta kehittyneempiä versioita. 

Arduino-ohjelmisto

arduino_fenetre_arduino

Mikrokontrolleriin lähettämämme koodi kostuu sarjasta komentoja, jotka käynnistetään, kun Arduinoon kytketään virta. Kun osaat ohjelmoida Arduinoa, voit kytkeä sen Processing-ohjelmaasi.

Virtuaalisen ja fyysisen vuoropuhelu

Sensoreita käytetään mittaamaan fyysistä maailmaa, aktuaattorit voivat tehdä toimenpiteitä fyysiselle maailmalle. Voimme käyttää sensoreita vaikuttamaan Processing-ohjelmaan. Vastaavasti Processing-ohjelma voi käyttää aktuaattoreita vaikuttamaan fyysiseen maailmaan. Ohjelma voisi esimerkiksi lukea meteorologisista sensoreista, liikesensoreista tai yksinkertaisista ohjausnapeista tulevan tiedon. Tämän pohjalta ohjalma voisi hallita fyysiseen maailmaan vaikuttavia valoja, moottoreita ja muita laitteita. Tämä voi rikastaa ihmisten interaktiivista kokemusta.

Viestintä

Tietokoneet kommunikoivat toistensa kanssa käyttäen sähköisiä impulsseja. Impulssit lähetetään yksi kerrallaan, bittien sarjana. Bitti voi olla tosi tai epätosi. Se on numero yksi tai numero nolla. Bitit ryhmitellään yleensä kahdeksan bitin paketeiksi. Me kutsumme näitä paketeiksi tai tavuiksi. ASCII-merkistöä käyttävä kirjain on esitetty kahdeksalla bitillä. Voimme helposti viestiä Arduinon kanssa käyttäen kirjaimia.

 

Esimerkki viestinnästä kirjaimien avulla

Tässä on yksinkertainen esimerkki kirjaimen lähettämisestä ja vastaanotosta Arduinolla. Välilyönnin painaminen kääntää päälle LED-valon Arduinon digitaalisessa ulostulossa 13. Arvot, jotka luetaan analogisesta sisääntulosta 0 muuttavat ohjelman näyttämän suorakulmion kokoa.

 

arduino_fenetre_processing_1

Processing-koodi

Lähettäminen ja vastaanottaminen Processingilla on helppoa, kun käytämme kirjastoa processing.serial. Oikea sarjaporttinumero täytyy määritellä ja samoin oikea lähetysnopeus. Tässä lähetysnopeutemme on 9600 bittiä sekunnissa.

/**
 * Yksinkertainen koodi Arduinon ja Processingin kommunikaatioon
 */
import processing.serial.*;

// Muuta tarvittaessa portin numero
int portin_numero = 0; 
Serial porttini; // Sarjaporttia hallinnoiva objekti
char viimeinen_ulos = ' ';  // Viimeinen lähetetty bitti
char viimeinen_sisaan = ' ';  // Viimeinen vastaanotettu bitti
void setup() {
  size(200, 150);
  println("Porttilista: \n" + Serial.list());
  String portin_nimi = Serial.list()[portin_numero];
  porttini = new Serial(this, portin_nimi, 9600);
}

void draw() {
  if (porttini.available() != 0) {
    // numero muutetaan kirjaimeksi
    viimeinen_sisaan = char(porttini.read());
  }
  background(231);
  fill(0);
  text("Viimeinen vastaanotettu tavu: " + viimeinen_sisaan, 10, 50);
  text("Viimeinen lähetetty tavu: " + viimeinen_ulos, 10, 70);
  int leveys = int(viimeinen_sisaan - 'a');
  int kerroin = 5;
  stroke(0);
  noFill();
  rect(10, 90, 26 * kerroin, 10);
  noStroke();
  fill(0);
  rect(10, 90, leveys * kerroin, 10);
}

void keyPressed() {
  if (key == ' ') {
    porttini.write('1');
    viimeinen_ulos = '1';
  }
}

void keyReleased() {
  if (key == ' ') {
    porttini.write('0');
    viimeinen_ulos = '0';
  }
}

Tieto lähetetään yhtenä kirjaimena. Arduinon analogisen sisääntulon 0 lukema muutetaan kirjaimeksi a-z. Menetät hieman tarkkuutta, mutta tämä näyttää hyvin, kuinka kirjaimet koodataan numeroilla.

Koodi Arduinolle

Arduinon puolella esitämme analogisen sisääntulon 0 mittaaman arvon kirjaimella a-z. Arduino sytyttää ulostuloon 13 liitetyn LEDin. Se tulee Arduinon mukana, joten ei ole tarvetta juottaa sitä tai kasata piiriä prototyyppilaudalle. Tämä esimerkki toimii Arduinossa ilman mitään piiriä. Voit kytkeä sisääntuloon 0 analogisen potentiometrin, jos tahdot näyttää jotain muuta kuin hälyä.

Ladataksesi seuraavan koodin Arduinoon joudut asentamaan Arduino-ohjelman ja opettelemaan sen toiminnan.

/**
 * Tämä koodi täytyy ladata Arduinoon
 *
 * Viestii tietokoneen kanssa lähettääkseen arvon
 * analogisesta sisääntulosta 0 ja käyttääkseen
 * ulostuloa numero 13, joka on pieni lamppu. 
 */
const int sisaan_analoginen = 0;
const int ulos_numero = 13;
int numero = 0;

void setup() {
  // Viestinopeus = 9600 baudsiaSerial.begin(9600);
  pinMode(ulos_numero, OUTPUT);
}

void loop() {
   char bitti_sisaan;
   if (Serial.available() > 0) {
    // Katsotaan saammeko signaalin
    bitti_sisaan = Serial.read();
    if (bitti_sisaan == '1') {
      digitalWrite(ulos_numero, HIGH);
    } else {
      digitalWrite(ulos_numero, LOW);
    }
   }
  // Lue analoginen sisääntulo 0:
  numero = analogRead(sisaan_analoginen);
  char laheta = 'a' + map(numero, 0, 1023, 0, 25);
  Serial.print(laheta);
  // Pieni hengähdystauko
  delay(10);
}

Kun Arduino on kytketty USB-porttiin ja koodi on lähetetty Arduinoon, käynnistä Processing-ohjelma. Kun painat välilyöntiä, ikkunassa näkyy jotain ja Arduino-laudan ulostulon 13 LEDi syttyy palamaan. 

arduino_led

Tämä koodi muistuttaa Processingin koodia, eikö totta? Tämä Arduinon koodi toimii mikrokontrollerissa, mutta on näin lyhyt! Itse asiassa se ei edes ole Javaa vaan C++ -ohjelmointikieltä. Koska Arduino on kehitetty samalla filosofialla kuin Processing, kehittäjät voivat tehdä kokeiluja elektroniikalla ja mikrokontrollereilla räjäyttämättä päätään. 

Tällä esimerkillä loimme hyvin yksinkertaisen tiedonsiirtoprotokollan. Kaikki tekemämme on helppo ymmärtää. Tämä ei kuitenkaan ole kovinkaan joustava tai toimiva ratkaisu. Jos tarvitset tehokkaamman protokollan, voit löytää joukon kirjastoja ja esimerkkejä Arduinon sivuilta. Viestiprotokolla Messenger (http://www.arduino.cc/playground/Code/Messenger) on aika yksinkertainen ja sopii luultavasti tarpeisiisi.