Concept Prototype


First Things First - AEIOU!

So as scheduled, one of the first things we have done, was AEIOU. Even before that, I noticed, that somehow this technique is strongly related to, well, ethograms. And considering the weather situation at the Zoo on the given day, I decided to do a workaround and create a 360 timelapse of one of the species that was present at the zoo itself.

Which species may you ask? Well. Good you asked. Cause there were a few at the Zoo and one that I figured would be cool looking into, was, well, were Pandas. But not the big black white asian superheroes, that love to cuddle, love bamboo and are just supercool and destroy racism, cause they're pandas. These pandas were tree pandas, pandas that hop between trees, are smaller, much thinner, just as lazy or even lazier and they are red. But that's not the name of it now, is it? It's called - red panda! And it's an amazingly stunning panda, so cute that your eyeballs fly out of the orbit and you'd just love to cuddle one (but I don't think it would like to be cuddled though).

So, the question is, if I did not do an ethogram due to the bad weather conditions, so how could I do AEIOU? Well, I have some jokers up my sleeve and so I recorded this beauty of an animal with a timelapse for a duration of over 30 minutes. I have taken also pictures and a few video shots just in case. These had to be post-processed and then I rewatched them all and came up with what the pandas were doing - and they were not doing much. One was walking, the other was sleeping. There were some minor variations that occured as a result of this process but, the endgame was this: I had an ethogram, in fact observations, based on which I devised ethograms, based on which I could complete AEIOU.

Lengthy process but it did bear fruit.

As it was a group project, only one of us created a documentation for this project. My primary objective was to work on the arduino-based prototype with the addition of a few materials.

Please, adhere to this blog post created by Fuxin Liu: http://fuxinliu.com/safaris/2019-03-13-catchme/
In case it doesn't work, adhere to: Fuxin Liu

You may take a look at selected materials below.




You can adjust the zoom with ctrl + mouse scroll

You can adjust the zoom with ctrl + mouse scroll

RC

Arduino Code


const int s2 = 2;
const int s3 = 3;
const int s4 = 4;
const int s5 = 5;
const int s6 = 6;
const int s7 = 7;
const int s8 = 8;
const int s9 = 9;
const int s10 = 10;
const int s11 = 11;
const int s12 = 12;
const int s13 = 13;
byte incoming;

void setup()
{

  pinMode(s2, OUTPUT);
  pinMode(s3, OUTPUT);
  pinMode(s4, OUTPUT);
//Front Right
  
  pinMode(s5, OUTPUT);
    pinMode(s6, OUTPUT);
  pinMode(s7, OUTPUT);
//Rear Right
  
  pinMode(s8, OUTPUT);
  pinMode(s9, OUTPUT);
    pinMode(s10, OUTPUT);
//Rear Left
    
  pinMode(s11, OUTPUT);
  pinMode(s12, OUTPUT);
  pinMode(s13, OUTPUT);
  //Front Left
  
  Serial.begin(115200);
}


void loop()
{

  incoming = Serial.read();

  if (incoming == 255) {}

  else {

    if (incoming == 1) {
      digitalWrite(s2, HIGH);
            digitalWrite(s3, HIGH);
      digitalWrite(s4, HIGH);
            digitalWrite(s5, HIGH);
      digitalWrite(s6, HIGH);
            digitalWrite(s7, HIGH);
      digitalWrite(s8, HIGH);
            digitalWrite(s9, HIGH);
      digitalWrite(s10, HIGH);
            digitalWrite(s11, HIGH);
      digitalWrite(s12, HIGH);
            digitalWrite(s13, HIGH);
      Serial.println(incoming, DEC);
    }

    //I don't know if we can get the mouse to move backwards, tho

    else if (incoming == 2) {
      digitalWrite(s2, HIGH);
            digitalWrite(s3, HIGH);
      digitalWrite(s4, HIGH);
            digitalWrite(s5, LOW);
      digitalWrite(s6, LOW);
            digitalWrite(s7, LOW);
      digitalWrite(s8, HIGH);
            digitalWrite(s9, HIGH);
      digitalWrite(s10, HIGH);
            digitalWrite(s11, HIGH);
      digitalWrite(s12, HIGH);
            digitalWrite(s13, HIGH);
    }


    else if (incoming == 3) {
      digitalWrite(s2, HIGH);
            digitalWrite(s3, HIGH);
      digitalWrite(s4, HIGH);
            digitalWrite(s5, HIGH);
      digitalWrite(s6, HIGH);
            digitalWrite(s7, HIGH);
      digitalWrite(s8, LOW);
            digitalWrite(s9, LOW);
      digitalWrite(s10, LOW);
            digitalWrite(s11, HIGH);
      digitalWrite(s12, HIGH);
            digitalWrite(s13, HIGH);
    }

    else if (incoming == 4) {
            digitalWrite(s2, LOW);
            digitalWrite(s3, LOW);
      digitalWrite(s4, LOW);
            digitalWrite(s5, LOW);
      digitalWrite(s6, LOW);
            digitalWrite(s7, LOW);
      digitalWrite(s8, LOW);
            digitalWrite(s9, LOW);
      digitalWrite(s10, LOW);
            digitalWrite(s11, LOW);
      digitalWrite(s12, LOW);
            digitalWrite(s13, LOW);
      Serial.println(incoming, DEC);
    }
  }
}
  

Processing Code


import android.content.Intent;
import android.os.Bundle;
import ketai.net.bluetooth.*;
import ketai.ui.*;
import ketai.net.*;
import android.os.Environment;

import java.util.*;

byte checkmate;
float lastX;
int var;

void setup() {
  background(0);
  frameRate(30);
  fullScreen(P2D);
  strokeWeight(4);
  orientation(PORTRAIT);


  //start listening for BT connections
  bt.start();
  //at app start select deviceā€¦
  isConfiguring = true;
  //font size
  fontMy = createFont("SansSerif", 40);
  textFont(fontMy);
  //selectionUpdate(1);
}

void draw() {
  
    if (isConfiguring)
  {
    ArrayList names;
    background(78, 93, 75);
    klist = new KetaiList(this, bt.getPairedDeviceNames());
    isConfiguring = false;
  } else
  {
    //lastX = mouseX;

    float na = var;
    byte naa = (byte)na;
    if (checkmate != naa) {
      checkmate=naa;
      bReleased = true;
      byte[] data = {naa};
      bt.broadcast(data);
      //first tap off to send next message
      bReleased = false;
      println(naa);
      delay(50);
    }

  background(200);
  up();
  down();
  left();
  right();

  fill(#7ED321);
  textAlign(CENTER);
  textSize(width/20);
  text("Red Panda", width/2, height/16);
}
}

//Bluetooth Module

PFont fontMy;

boolean bReleased = true; //no permament sending when finger is tapped
KetaiBluetooth bt;
boolean isConfiguring = true;
String info = "";
KetaiList klist;
ArrayList devicesDiscovered = new ArrayList();

//Following void appropriated from Prof. Takaya's Blog: http://prof-takaya.blogspot.com.au/2013/02/connecting-android-and-arduino-by.html
void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  bt = new KetaiBluetooth(this);
}

//Following void appropriated from Prof. Takaya's Blog: http://prof-takaya.blogspot.com.au/2013/02/connecting-android-and-arduino-by.html
void onActivityResult(int requestCode, int resultCode, Intent data) {
  bt.onActivityResult(requestCode, resultCode, data);
}

//Following void appropriated from Prof. Takaya's Blog: http://prof-takaya.blogspot.com.au/2013/02/connecting-android-and-arduino-by.html

void onKetaiListSelection(KetaiList klist) {
  String selection = klist.getSelection();
  bt.connectToDeviceByName(selection);
  //dispose of list for now
  klist = null;
}

//Following void appropriated from Prof. Takaya's Blog: http://prof-takaya.blogspot.com.au/2013/02/connecting-android-and-arduino-by.html
//Call back method to manage data received
void onBluetoothDataEvent(String who, byte[] data) {
  if (isConfiguring)
    return;
  //received
  info += new String(data);
  //clean if string to long
  if (info.length() > 16)
    info = "";
}

//Buttons module

//going up

void up(){
      if ((mousePressed && mouseX > width/2 && mouseX < width/2+height*1/10 && mouseY > height/10 && mouseY < height/10+height*1/10) || (var == 1)){
      fill(255); //broadcasting going forward
}
else{
  fill(30);
}
  rect(width/2, height/10, height*1/10, height*1/10);
  stroke(#262626);
  strokeWeight(width/100);
  imageMode(CENTER);
  tint(255);
  
    if (mousePressed && mouseX > width/2 && mouseX < width/2+height*1/10 && mouseY > height/10 && mouseY < height/10+height*1/10){
      var = 1; //broadcasting going forward
}
  //else{
  //  var = 0;
  //}
}

void down(){

    if ((mousePressed && mouseX > width/2 && mouseX < width/2+height*1/10 && mouseY > height*7/10 && mouseY < height*7/10+height*1/10)  || (var == 2)){
      fill(255);
    }
    else{
        fill(30);
    }
  rect(width/2, height*7/10, height*1/10, height*1/10);
  stroke(#262626);
  strokeWeight(width/100);
  imageMode(CENTER);
  tint(255);
  
  if (mousePressed && mouseX > width/2 && mouseX < width/2+height*1/10 && mouseY > height*7/10 && mouseY < height*7/10+height*1/10){
      var = 2; //broadcasting going backwards
}
  //else{
  //  var = 0;
  //}
}

void left(){
      if ((mousePressed && mouseX > width*2/10 && mouseX < width*2/10+height*1/10 && mouseY > height/2 && mouseY < height/2+height*1/10)  || (var == 3)){
        fill(255);
}
else{
  fill(30);
}
  rect(width*2/10, height/2, height*1/10, height*1/10);
  stroke(#262626);
  strokeWeight(width/100);
  imageMode(CENTER);
  tint(255);
  
    if (mousePressed && mouseX > width*2/10 && mouseX < width*2/10+height*1/10 && mouseY > height/2 && mouseY < height/2+height*1/10){
      var = 3; //broadcasting going left
}
  //else{
  //  var = 0;
  //}
}

void right(){
        if ((mousePressed && mouseX > width*7/10 && mouseX < width*7/10+height*1/10 && mouseY > height/2 && mouseY < height/2+height*1/10) || (var == 4)){
          fill(255);
        }
        else{
  fill(30);
        }
  rect(width*7/10, height/2, height*1/10, height*1/10);
  stroke(#262626);
  strokeWeight(width/100);
  imageMode(CENTER);
  tint(255);
  
      if (mousePressed && mouseX > width*7/10 && mouseX < width*7/10+height*1/10 && mouseY > height/2 && mouseY < height/2+height*1/10){
      var = 4; //broadcasting going right
}
  //else{
  //  var = 0;
  //}
}