Tietokonegrafiikan ohjaus

Arduino voi toimia käyttöliittymänä, jolla ohjataan tietokonegrafiikkaa. Tässä projektissa grafiikka on toteutetaan toisella avoimen lähdekoodin ohjelmointiympäristöllä, Processingilla.

Arduinoon kytketyn etäisyyssensorin tuottamat arvot lähetetään Processing-ympäristöön Serial-liikenteen välityksellä. Samalla tavalla on aikaisemmissa harjoituksissa tulostettu dataa serial monitoriin.

Lataa Processing täältä: https://processing.org/download/

Virtapiiri

  • Etäisyysanturi on virtapiirin tärkein osa, ja piezo-kaiutin on mukana lähinnä lisämausteena.
  • Voit liittää etäisyyssensorin tilalle haluamasi anturin. Katso vinkkejä harjoituksesta Tunnista anturit ja muualta neljännestä luvusta.

Ohjelmointi: Arduino

Tehtävä
Syötä tämä ohjelma Arduinolle ja tarkista, että Serial monitoriin tulostuu järkeviä arvoja.
void setup(){
  //käynnistetään sarjaliikenne nopeudella 9600:
  Serial.begin(9600);
}

void loop()
{
  // luetaan ja skaalataan portista 0 luettava arvo:
  int distance = analogRead(0);
  int buzzer = map(distance, 0, 2013, 100, 2000);
  tone(8, buzzer);
  // Tulostetaan arvo serial monitoriin
  Serial.println(distance);
  delay(100);
}

Ohjelmointi 1/2: Processing

Kun avaat Processing IDE:n, se näyttää tältä:

Ulkonäöltään Processing IDE muistuttaa Arduinoa, ja myös ohjelmoitaessa paljastuu yhtäläisyyksiä.

Tehtävä
Kopioi alla oleva koodi Processing IDEen ja klikkaa vasemman ylänurkan Run-nappia. Kokeile sitten, mitä tapahtuu kun klikkailet hiirtäsi avautuneen ikkunan päällä. Pystytkö ymmärtämään ohjelmaa ja muokkaamaan sitä?
/*
 * Mehackit introduction to creative programming
 * 01_Start - Demo
 * Mehackit, 2015
 
 * Draw with mouse
 * Press 'c' to erase screen.
 */
// The statements in the setup() function 
// execute once when the program begins
void setup() {
  size(600, 600);  // Set size
  background(100); //paint background with gray
  stroke(0); // set stroke color to black
  fill(255); // set fill color to white
}
// The statements in draw() are executed until the 
// program is stopped. Each statement is executed in 
// sequence and after the last line is read, the first 
// line is executed again.
void draw() { 
  
  if (mousePressed) { // if mouse is pressed, execute the following code
    float radius = random(50, 80); // create a random number between 50 and 80 and save it to a variable called 'radius'
    ellipse(mouseX, mouseY, radius, radius); // draw an ellipse to the mouse location, using the random 'radius' variable as radius
  }
  // if a key is pressed and the key is 'c' draw background again
  // drawing the background again clears the picture
  if (keyPressed == true && key == 'c') {
    background(100); //paint background with gray
  }
}

Ohjelmointi 2/3: Processing

Pääset kohta käsittelemään web-kamerasi kuvaa Processingilla. Ennen kuin voit tuoda Processing-ohjelmaan web-kameran kuvaa tai muuta videota, sinun täytyy asentaa Processing IDEen Video-kirjasto.

Tehtävä
Asenna Video-kirjasto klikkaamalla Sketch > Import library > Add Library ja etsimällä Video-kirjasto.

Ohjelmointi 3/3: Processing

Tehtävä
Sulje Arduino IDE ennen kuin käynnistät Processing-ohjelman! Muutoin saatat saada ilmoituksen, että serial port on varattu, eikä Processing-ohjelma pyöri. Käynnistä Processing-ohjelma ja testaa, kuinka etäisyysanturin avulla voi muutella ruudulla näkyvää kuvaa.

Haasteita?

Processing lukee Arduinon USB-johtoa pitkin lähettämää dataa Serial portin kautta. Processing saattaa yrittää lukea dataa väärästä Serial portista. Sinun täytyy tällöin muuttaa numeroa tämän käskyn hakasulkeiden sisällä.

String portName = Serial.list()[3]; 

Tarkista Processingin alalaidan consolesta sulkuihin tuleva numero - se tulostuu ensimmäiseksi riville, jolla näkyy Arduino-porttisi nimi. Jos et muista Arduino-portin nimeä, tieto löytyy Arduino IDE:n valikosta Tools > Port.

Jatkokehittelyä

Tutustu Mehackitin Processing-kurssimateriaaleihin Kuvataide ja ohjelmointi Processingilla. Ideoi samalla, mitä muuta voisit Arduinolla tietokoneesi ruudulla ohjata. Tutustu myös englanninkieliseen kurssimateriaaliin Art Programming Basics.

Tässä muutamia ideoita.

  • Pelin ohjelmointi Processingilla, peliohjaimen tekeminen Arduinolla.
  • Samplejen soittaminen Processingin kautta. Lisää äänitiedostoja Processing-ohjelmasi kansioon valitsemalla Processing IDE:stä Sketch > Add File. Soita niitä soundFile-komennon avulla esim. silloin, kun etäisyyssensori havaitsee jonkun tulevan liian lähelle tietokonetta!
  • Tilateideteos: Tee Processing-työstäsi koko ruudun kokoinen fullScreen-komennolla ja heijasta se seinän kokoiseksi projektorilla. Aseta työn värit vaihtumaan sen mukaan, lähestyykö ihminen seinää.