ぽきたに 〜ありきたりな非凡〜

現役F欄大学生が送るゴミ溜めと独り言

ARピタゴラスイッチのプログラム実装メモ(Arduino×Processing)

どうも、こんにちわ。たっきーです。

ちょっとけんきうの息抜きにARピタゴラスイッチを作ってみたのでメモ。

 

はじめに

1個下の学生さんが課題でARピタゴラスイッチなるものを作らなきゃいけないらしく面白そうやんけwって感じでプログラム周りを手伝ったのでそのメモ。

半日足らずで書いたので雑クオリティなの許してください。

 

ARピタゴラスイッチとは

こんなやつ。

www.youtube.com

拡張現実ピタゴラ装置って呼ばれたりもする(?)

動画見てめっちゃ面白そうやんけってなってモチベ爆上げ。

 

実行環境と使用機器

  • macOS Sierra 10.12.5
  • Arduino 1.8.3  
  • Arduino UNO
  • Processing 3.3.5
  • サーボモータ GWSサーボ MICRO/STD/F(フタバ)
  • タクトスイッチ
  • ミニブレッドボード
  • その他小物

 

【永久保証付き】Arduino Uno

【永久保証付き】Arduino Uno

 
Amazonベーシック USB2.0ケーブル 1.8m Aオス-Bオス 7HUA

Amazonベーシック USB2.0ケーブル 1.8m Aオス-Bオス 7HUA

 

Arduino - Software

Download \ Processing.org

 

 

参考にしたサイト・本

 

たのしくできるArduino電子制御

たのしくできるArduino電子制御

 

Processing.org

 

 

 ブレッドボード図

f:id:tacky0612:20170726173642p:plain

こういうの得意じゃないので間違ってるかも(?)

とりあえず、こんな感じ

f:id:tacky0612:20170726174342j:plain

スイッチ部分

f:id:tacky0612:20170726174431j:plain

全体像

f:id:tacky0612:20170726174558j:plain

 

Arduinoスケッチ

 

#include <Servo.h>
Servo myservo;

int pin7=7;

void setup()
{
Serial.begin(9600);
myservo.attach(9);
pinMode(pin7,INPUT);
}

void loop()
{
myservo.write(0);

if(digitalRead(7) == LOW)
{ Serial.write('a'); delay(2500); Serial.write('b'); myservo.write(180); delay(3000); } }

 こんな感じ。

スイッチが押されたらシリアルボードに'a'と書き込んで、指定時間遅らせてからサーボを回し、終わるタイミングで'b'を書き込むってだけのスケッチ。

 

Processingのプログラム

import processing.serial.*;
import cc.arduino.*;
import ddf.minim.*;
Serial port;

Arduino arduino;
Minim minim;

AudioSample oh;


float x,y;
float velx=10.0;
float vely=0.0;
float gravity=1;
float reaction=1;
float damp=0.9;
float height=758;
PFont myFont1;

void setup(){
  fullScreen();
  background(255,105,200);
  noStroke();
  fill(255,255,255,255); 
  x=y=0.0;
  myFont1=createFont("",100);
  port = new Serial(this, "COM3", 9600);
  port.clear();
  minim = new Minim(this);
  oh = minim.loadSample("oh.wav",2048);
}

int j = 0;
int i=0;
void draw(){
  j =  port.read();
  if (j == 'a') 
  {
    i = 1;
    oh.trigger();
  }
  if(j == 'b')
  {
    oh.trigger();
  }
  if(i == 1){

  fade(false);
  
  ellipse(x,y,100,100);
  
  vely+=gravity;
  
  x+=velx;
  y+=vely;

    if(x<0)velx=-velx;

  
  if(y>height){
    vely*=-reaction;
    velx*=damp;
    y=height;
  }  
  textFont(myFont1);
  fill(255,255,0);   
  textAlign(CENTER);   
  text("5000兆円欲しい!",663,378); 
}
  else
  {
    
  }
}

void fade(boolean _fadeFlag){
  if(_fadeFlag){
    fill(255,10);
    rect(0,0,1000,0);
    fill(0);
  }else{
    background(255,105,200);    
  }
}

こんな感じ。

↓を追加する必要あり。

Arduino Playground - Processing

Minim | Compartmental

Arduinoから受け取った信号に対応してアニメーション開始したり音出したりする。

 

commons.nicovideo.jp

↑からダウンロードして、oh.wavって名前で保存して、.pdeファイルと同じディレクトリ内に入れる。

 

実行動画

 声がウザいのは気にしない。

 

上手いこと行ってよかった()

 

最後に

ARピタゴラスイッチめちゃ面白い(語彙)

Arduinoの制御、Processingの使い方の初歩的な部分を学ぶことができるのでオヌヌメです。

もっと他のセンサーとか使ってギミックを追加してみたさ深い。

【永久保証付き】Arduino Uno

【永久保証付き】Arduino Uno

 
Arduinoをはじめようキット

Arduinoをはじめようキット

 

 

らぼの日常

 

 

 

 

 

広告を非表示にする
スポンサードリンク