<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
   <title>workshop</title>
   <link rel="alternate" type="text/html" href="http://www.vector-scan.com/ws/" />
   <link rel="self" type="application/atom+xml" href="http://www.vector-scan.com/ws/atom.xml" />
   <id>tag:www.vector-scan.com,2012:/ws//3</id>
   <updated>2012-03-18T03:47:08Z</updated>
   
   <generator uri="http://www.sixapart.com/movabletype/">Movable Type 3.35</generator>

<entry>
   <title>A4A WS 2日目</title>
   <link rel="alternate" type="text/html" href="http://www.vector-scan.com/ws/2012/03/a4a_ws_2.php" />
   <id>tag:www.vector-scan.com,2012:/ws//3.78</id>
   
   <published>2012-03-18T03:34:39Z</published>
   <updated>2012-03-18T03:47:08Z</updated>
   
   <summary>今日のサンプルはこちらです → DL //////// サンプルの解説 ////...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="A4A_WS" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.vector-scan.com/ws/">
      <![CDATA[今日のサンプルはこちらです → <a href="http://www.vector-scan.com/ws/A4A_WS/A4A_WS_day2.zip">DL</a>

//////// サンプルの解説 ////////

Arduinoのスケッチ「A4A_WS_test4_monitor」
はProcessingのスケッチ「movieConverter」とペアで使います。
movieConverterを動作させる際は下記ライブラリが必要です。
sDrop → <a href="http://www.sojamo.de/modules/transfer.php?t=sDrop_0.1.4">DL</a>
GSVideo → <a href="http://sourceforge.net/projects/gsvideo/files/gsvideo/1.0/">使用マシンにあったものをDL</a>


A4A_WS_test5_playback
動画をプレイバックするサンプルです
サンプルでは高い音で横縞が、低い音で縦縞が動きます。
movieConverterで作成したdataA.hとdataB.hでこのサンプルを上書きしてみてください。


A4A_WS_test6_sendPC
マイク入力からの各周波数他意の音量をPCに送信します。
Processingのスケッチ「barGraph」で受信してグラフ表示します。
]]>
      
   </content>
</entry>
<entry>
   <title>A4A WS 1日目</title>
   <link rel="alternate" type="text/html" href="http://www.vector-scan.com/ws/2012/03/a4a_ws.php" />
   <id>tag:www.vector-scan.com,2012:/ws//3.77</id>
   
   <published>2012-03-17T01:53:42Z</published>
   <updated>2012-03-18T03:34:34Z</updated>
   
   <summary>アンビエント・ライト・シールド キットのパーツリスト → DL シールドの組み立...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="A4A_WS" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.vector-scan.com/ws/">
      <![CDATA[アンビエント・ライト・シールド

キットのパーツリスト → <a href="http://www.vector-scan.com/ws/A4A_WS/parts_list.numbers.pdf">DL</a>

シールドの組み立てが完了したら、こちらで動作チェックをしてください。
動作確認用Arduinoスケッチ → <a href="http://www.vector-scan.com/ws/A4A_WS/A4A_WS_day1.zip">DL</a>

TLC5940(LEDのドライバ）用のライブラリが必要です。 → <a href="http://tlc5940arduino.googlecode.com/files/Tlc5940_r014.zip">DL</a>
解凍後、Tlc5940フォルダをArduino/librariesフォルダに入れてArduinoを起動してください。

//////// サンプルの解説 ////////

A4A_WS_test0_output ... 16個のLEDが全灯→消灯を繰り返します。out[x]（xは0~15）に0~4095の値を書き込み、最後にoutput()を実行するとLEDの輝度がアップデートされます。

LEDの配置と番号はこのように対応しています。
＋ーー＋ーー＋ーー＋ーー＋
｜　０｜　１｜　２｜　３｜
＋ーー＋ーー＋ーー＋ーー＋
｜　４｜　５｜　６｜　７｜
＋ーー＋ーー＋ーー＋ーー＋
｜　８｜　９｜１０｜１１｜
＋ーー＋ーー＋ーー＋ーー＋
｜１２｜１３｜１４｜１５｜
＋ーー＋ーー＋ーー＋ーー＋

A4A_WS_test1_fade ... 16個のLEDがフェードイン／フェードアウトを繰り返します。

A4A_WS_test2_input ... マイク入力の値を16個のLEDの輝度に反映して表示しています。input()を実行する事でマイク入力が7つの周波数帯に分けてそれぞれの成分の大きさがin[x]（xは0~6）に入ります。値は0~1023の範囲です。
xとそれぞれの中心周波数は以下のように対応しています。このサンプルではin[3]の値を使用しています。

＋ーーーーー＋ーーーーー＋ーーーーー＋ーーーーー＋ーーーーー＋ーーーーー＋ーーーーー＋ーーーーー＋
｜　　ｘ　　｜　　０　　｜　　１　　｜　　２　　｜　　３　　｜　　４　　｜　　５　　｜　　６　　｜
＋ーーーーー＋ーーーーー＋ーーーーー＋ーーーーー＋ーーーーー＋ーーーーー＋ーーーーー＋ーーーーー＋
｜中心周波数｜　　６３　｜　１６０　｜　４００　｜　１０００｜　２５００｜　６２５０｜１６０００｜
＋ーーーーー＋ーーーーー＋ーーーーー＋ーーーーー＋ーーーーー＋ーーーーー＋ーーーーー＋ーーーーー＋

A4A_WS_test3_eq ... マイク入力のin[0], in[2], in[4], in[6]の値を棒グラフで表示してます。

]]>
      
   </content>
</entry>
<entry>
   <title>Arduinoで音の大きさを調べる</title>
   <link rel="alternate" type="text/html" href="http://www.vector-scan.com/ws/2011/06/arduino_2.php" />
   <id>tag:www.vector-scan.com,2011:/ws//3.76</id>
   
   <published>2011-06-16T07:17:49Z</published>
   <updated>2011-06-16T07:41:26Z</updated>
   
   <summary> 最も怠惰な方法。 秋月で売ってるアンプ内蔵マイク SP0103NC3-3 を使...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.vector-scan.com/ws/">
      <![CDATA[最も怠惰な方法。

秋月で売ってるアンプ内蔵マイク <a href="http://akizukidenshi.com/catalog/g/gI-00602/">SP0103NC3-3</a> を使ってみます。

<a href="http://www.vector-scan.com/ws/images/mic_t.JPG"><img alt="mic_t.JPG" src="http://www.vector-scan.com/ws/images/mic_t-thumb.JPG" width="400" height="300" /></a>

<a href="http://www.vector-scan.com/ws/images/mic_b.JPG"><img alt="mic_b.JPG" src="http://www.vector-scan.com/ws/images/mic_b-thumb.JPG" width="400" height="300" /></a>

こんなふうに配線。
0.1µFをこんなふうに付けてください。0.47µFを持ってたらそっちの方がいいです。

線の色は
赤 V+
白 信号
黒 GND
です。お願いします。

Arduinoの5V、GND、A0につなぐ

<a href="http://www.vector-scan.com/ws/images/mic_arduino.jpg"><img alt="mic_arduino.jpg" src="http://www.vector-scan.com/ws/images/mic_arduino-thumb.jpg" width="400" height="300" /></a>

Arduino側で電圧を読み込んでシリアルで出力
<code>
void setup() {
  Serial.begin(9600) ;
}

void loop() {
  int in = analogRead(0) ;
  Serial.println(in) ;
  delay(10) ;
}
</code>


Processingで受けて、グラフをプロット
<code>
import processing.serial.*;

Serial p ;
int x, y, yPrev ;

void setup() {
  size(400,300) ;
  p = new Serial(this, Serial.list()[0], 9600) ;
  p.bufferUntil(10) ;
}

void draw() {
  line(x-1, yPrev, x, y) ;
  if (++x >= width) {
    background(200) ;
    x = 0 ;
  }
}

void serialEvent(Serial p) {
  String str = p.readString() ;
  int val = int(trim(str)) ;
  yPrev = y ;
  y = int(map(val, 0, 1024, height, 0)) ;
}
</code>

センサの挙動の雰囲気を知るには、グラフにするといいと思います。
コンソールで数値をみただけでは分からない空気感が読めます。

あとは各自工夫されたし。おわり]]>
      
   </content>
</entry>
<entry>
   <title>EAGLEでプリント基板にゲバラを描く方法</title>
   <link rel="alternate" type="text/html" href="http://www.vector-scan.com/ws/2011/05/eagle.php" />
   <id>tag:www.vector-scan.com,2011:/ws//3.75</id>
   
   <published>2011-05-31T06:54:42Z</published>
   <updated>2011-06-16T07:17:43Z</updated>
   
   <summary> プリント基板CADのEAGLEは便利なんだけど、ちょっと凝った絵柄を入れようと...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="多摩美メディア・アートⅠ 2011" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.vector-scan.com/ws/">
      <![CDATA[<img src="http://www.vector-scan.com/ws/images/guevara_in_eagle.png" width="386" height="" />

プリント基板CADのEAGLEは便利なんだけど、ちょっと凝った絵柄を入れようとすると、相当苦労する。
あと、ライブラリとして部品を登録するときも、寸法を合わせて図を引くのが辛い。
自分的にはイラレが一番楽なので、イラレで図を描いて、EAGLEにインポートするツールをprocessingで作ってみた。
といってもこれ、２年以上前に作ったもので、あまり詳しくは憶えてないんだけど、とりあえず必要な人は使ってみてください。

<a href="http://www.vector-scan.com/ws/dl/SVG2SCR.zip">SVG2SCR.zipをダウンロード</a>

なんせ２年も前なのでprocessingの現行バージョンで走らせてみたけどうまく行かなかった。多分たいした問題じゃないので、時間のある人は解決お願いします。ドラァグ＆ドロップするために、<a href="http://www.sojamo.de/libraries/drop/">sDropっていうライブラリ</a>使ってます。
というわけで、ソース以外に実行形式もアップしておきました。解凍して、SVG2SCR.app（Mac）またはSVG2SCR.exe（Win、未確認）を見つけてください。

以下、使い方です

・Illustratorで図を描く。
・パスを全部直線にする。曲線などはその前にパスのアンカーポイントを追加して、直線にしても形が変わらないようにする。
・SVG形式で保存する（例：test.svg)
・SVG2SCRを起動して、出てくる小さいウィンドウにさっきのSVGファイルをドロップする
・そうするとtest.scrっていうファイルがSVGファイルと同じ場所に出来てるはず。
・今度はEAGLEを立ち上げ、基板エディタを起動。
・好きなレイヤを選択しておいて、scrボタンを押し、今出来たtest.scrを選択
・ホラ出来た。

作画の注意としては、入れ子のパスは不可。なので工夫して作画してください。
sampleフォルダにゲバラのファイルを入れとくよ。これ参考にして。

あと、EAGLE上での位置は勝手に左上に合わせてしまうみたい。なので、イラレでの作画の時に、トンボみたいのを左上に置くと良いと思う。それと左上に勝手に四角が描画されるんだけど、これはよく分からないので、手動で消してくださいw

ということで、いかしたロゴなり、変態基板なりいろいろ試してみてください。おわり]]>
      【追記】
ちゃんとやり方あるみたいです。こっちの方がいいですね。
http://todbot.com/blog/2011/06/06/from-illustrator-to-eagle-vector-graphics-in-circuits/
キムくんが教えてくれました。ありがとう。

   </content>
</entry>
<entry>
   <title>Arduinoのブートローダを書き込む方法 （補足）</title>
   <link rel="alternate" type="text/html" href="http://www.vector-scan.com/ws/2010/06/arduino.php" />
   <id>tag:www.vector-scan.com,2010:/ws//3.73</id>
   
   <published>2010-06-24T05:23:26Z</published>
   <updated>2010-06-24T05:24:05Z</updated>
   
   <summary>書き込もうとしているチップがATmega168Pの場合、下記の通りやってもうまく...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.vector-scan.com/ws/">
      <![CDATA[書き込もうとしているチップがATmega168<b>P</b>の場合、下記の通りやってもうまく行きません。
秋月で販売しているのはATmega168ではなくてATmega168Pのようです。基本は同じなんだけど低消費電力版みたいです。
avrdudeという書き込みプログラムは最初に接続したチップの型番がATmega168かどうかをチェックするため、指定以外の型番だと書き込みを中止します。

avrdudeのプロセッサ定義ファイルを追加して、Arduinoの使用プロセッサをATmega168Pにする定義を追加する事で書き込み可能になります。

kantaさんという方が詳しく<a href="http://kanta.but.jp/wordpress/?p=494">まとめてくれています</a>]]>
      
   </content>
</entry>
<entry>
   <title>Arduinoのブートローダを書き込む方法</title>
   <link rel="alternate" type="text/html" href="http://www.vector-scan.com/ws/2010/06/arduino_1.php" />
   <id>tag:www.vector-scan.com,2010:/ws//3.72</id>
   
   <published>2010-06-22T17:29:12Z</published>
   <updated>2010-06-24T05:23:23Z</updated>
   
   <summary> ミニマルなArduinoのように生のAVRを購入してArduinoのスケッチを...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.vector-scan.com/ws/">
      <![CDATA[<a href="http://www.vector-scan.com/ws/2009/07/atm.php">ミニマルなArduino</a>のように生のAVRを購入してArduinoのスケッチを書き込む場合、その前にブートローダを書き込む必要があります。

そこで<a href="http://arduino.cc/en/Tutorial/ArduinoISP">Using an Arduino as an AVR ISP (In-System Programmer)</a>を参照しながら実際にブートローダを書き込んでみたいと思います。この方法だとArduinoを持っていればブートローダを書き込む事が出来ます。
本記事では、書き込みの条件として、Arduinoのボードを1枚と、ブレッドボード＋ジャンパケーブル、そして生のAVR（ATmega168）が１つある物とします。

原文に書いてある手順は上記ページにある通り：
<quote>
<ol>
<li>Upload the ArduinoISP firmware (in Examples) to your Arduino board.</li>
<li>Wire your Arduino board to the target as shown in the diagram below.</li>
<li>Select the item in the Tools > Board menu that corresponds to the board on which you want to burn the bootloader (not the board that you're using as the programmer). See the board descriptions on the environment page for details.</li>
<li>Use the Burn Bootloader > Arduino as AVRISP command.</li>
<ol>
</quote>

今回の条件に当てはめて書き直すと：
<ol>
<li>ArduinoISPと呼ばれる書き込み用のスケッチをArduinoボードにアップロードする（スケッチはExampleの中にあります）。これによりArduinoがブートローダ書き込み機になるわけです。</li>
<li>Arduinoボード（書き込み機）と対象となるAVRをケーブルでつなぐ（つなぎ方は下図の通り）</li>
<li>メニューのTools > Boardから書き込みたいブートローダの種類を選びます。今回はLilypad Arduino with ATmega168を選びます。</li>
<li>メニューのBurn Bootloader > Arduino as AVRISPを選びます</li>
</ol>

<img src="http://arduino.cc/en/uploads/Tutorial/SimpleBreadboardAVR.png">

書き込みが完了したら<a href="http://www.vector-scan.com/ws/2009/07/atm.php">こちらのように</a>ブレッドボードなどで配線して使用できます]]>
      
   </content>
</entry>
<entry>
   <title>赤外線ビーコン</title>
   <link rel="alternate" type="text/html" href="http://www.vector-scan.com/ws/2010/06/post_6.php" />
   <id>tag:www.vector-scan.com,2010:/ws//3.71</id>
   
   <published>2010-06-16T07:23:23Z</published>
   <updated>2010-06-22T18:12:53Z</updated>
   
   <summary>定期的に特定の１バイト数値を1200bpsで送信します 赤外線LEDのつなぎ方は...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.vector-scan.com/ws/">
      <![CDATA[定期的に特定の１バイト数値を1200bpsで送信します<br>
<br>
赤外線LEDのつなぎ方はこう↓。<br>
D3---100Ω程度の抵抗---赤外線LED---D4<br>
ただしLEDの向きはD4にカソード（脚の短い方）<br>
<br>
それからD8をGNDにつなぐと送信を停止します<br>
<br>
IDとして設定した１バイトを４回送信し、その直後に10（LFのASCIIコード）を送っています。<br>
LFコードまでを受信したら、受信内容の確認に入ります。<br>
受信側は4つの数値が全部同じかどうか調べてエラーがない時のみ受信値を採用するといいと思います。<br>
<br>
<br>

<xmp>
#define  ID  'x'   // char to send. you can change it as you want.

#include <SoftwareSerial.h>

#define  rxPin  2  // dummy
#define  txPin  4  // serial sending pin
#define  modPin 3  // modulation pin
#define  ctrPin 8  // control pin. connect it to GND to disable sending

SoftwareSerial softSerial =  SoftwareSerial(rxPin, txPin);

void setup() {
  pinMode(txPin, OUTPUT) ;
  pinMode(modPin, OUTPUT) ;

  digitalWrite(ctrPin, HIGH) ;  // pull-up the pin
  
  OCR2A = 104 ;                 // making 38kHz
  TCCR2B = 0x09 ;               // set no prescaler for TIMER2, OCR2A as TOP
  analogWrite(modPin, 52) ;     // 50% duty

  softSerial.begin(1200) ;
}

void loop() { 
  if (digitalRead(ctrPin) == HIGH) {
    // send ID 4 times
    softSerial.print(ID, BYTE) ;
    softSerial.print(ID, BYTE) ;
    softSerial.print(ID, BYTE) ;
    softSerial.print(ID, BYTE) ;
    // send LF (terminator)
    softSerial.print(10, BYTE) ;
  }
  delay(100) ;
}  

</xmp>
]]>
      
   </content>
</entry>
<entry>
   <title>ミニマルなArduino</title>
   <link rel="alternate" type="text/html" href="http://www.vector-scan.com/ws/2009/07/atm.php" />
   <id>tag:www.vector-scan.com,2009:/ws//3.69</id>
   
   <published>2009-07-02T16:39:12Z</published>
   <updated>2009-07-02T19:11:58Z</updated>
   
   <summary>とうとう秋月でATmega168の取扱が始まりました。なんと１コ300円です。 ...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.vector-scan.com/ws/">
      <![CDATA[とうとう秋月でATmega168の取扱が始まりました。なんと１コ300円です。

という訳で、ブレッドボード上で安い安いArduinoを作ってみます。
http://hcgilje.wordpress.com/resources/arduino-standalone/
この辺りを参考にしつつ、Arduinoのミニマルな使い方をメモっておきます。

まずATmega168P-20を買い求め、そこにブートローダを書き込みます。AVRISPなど書き込み機を持っている人に頼んで書き込むといいと思います。
基本的に<a href="http://www.arduino.cc/playground/Learning/Burn168">Arduino playground - Burn168</a>にしたがって作業します。
フューズの設定は 0xf8, 0xdf, 0xe2
ロックビットの設定は 0xcf
です。
フューズの最後の値だけ解説とは違うので注意してください。この違いはレゾネータを使わなくて済むように内部発振を選択していることによります。
ブートローダはATmegaBOOT_168_pro_8MHz.hexを書き込みます。


<h3>回路図と配線方法</h3>

回路図です。D13につながっているのは動作確認用です。起動時に光ったりします。他にLEDを付けたりなど、動作確認のすべが他にある場合はこれはいらないかもしれない。

<a href="http://www.vector-scan.com/ws/images/MinimalArduinoSchematic.png"><img alt="MinimalArduinoSchematic.png" src="http://www.vector-scan.com/ws/images/MinimalArduinoSchematic-thumb.png" width="320" height="277" /></a>

ブレッドボードの配線例です。
pri/proのheader（USB-シリアル基板）をつなげてスケッチのアップロードをします。COという端子はDTRと同じです。FT232を使ったUSBシリアルアダプタで、電源・送受信の他にDTRが出てる物なら何でもいいかと思います。

<a href="http://www.vector-scan.com/ws/images/MinimalArduino.jpg"><img alt="MinimalArduino.jpg" src="http://www.vector-scan.com/ws/images/MinimalArduino-thumb.jpg" width="320" height="240" /></a>

スケッチを書き込む時は
Tools > Serial Port > /dev/tty.usbserial-####
Tools > Board > Arduino Pro or Pro Mini (3.3V, 8MHz) w/ ATmega168
を選択してください。
]]>
      
   </content>
</entry>
<entry>
   <title>秋月の加速度センサモジュール KXM52-1050</title>
   <link rel="alternate" type="text/html" href="http://www.vector-scan.com/ws/2009/06/_kxm521050.php" />
   <id>tag:www.vector-scan.com,2009:/ws//3.68</id>
   
   <published>2009-06-17T11:49:17Z</published>
   <updated>2009-06-17T12:03:48Z</updated>
   
   <summary>秋月の加速度センサモジュール、KXM52-1050の説明書には誤記（というか相反...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.vector-scan.com/ws/">
      秋月の加速度センサモジュール、KXM52-1050の説明書には誤記（というか相反する２つの記述）があっていつまでたっても修正される気配がありません。それを見て使うたびに混乱してしまうので正しいと思われる内容をメモしておきます。
ただしこの手の誤記は秋月らしくて僕は好きです。

1: Vdd (2.7~5.5Vを供給する）
2: PSD（パワーシャットダウン。Vddに接続で通常動作。GNDか無接続でシャットダウン）
3: GND（グラウンドへ接続）
4: Parity（内部EEPROMのパリティチェック用。通常は無接続）
5: SelfTest（通常はGNDに接続。Vddにつなぐと出力が1G増える&lt;-何の事だか分からない。1G分プラス側にシフトするという事だろうか？）
6: OutX（X軸のアナログ出力）
7: OutY（Y軸のアナログ出力）
8: OutZ（Z軸のアナログ出力）

以上


      
   </content>
</entry>
<entry>
   <title>pri/pro2009年版のprocessingライブラリ</title>
   <link rel="alternate" type="text/html" href="http://www.vector-scan.com/ws/2009/05/pripro2009processing.php" />
   <id>tag:www.vector-scan.com,2009:/ws//3.67</id>
   
   <published>2009-05-08T04:10:22Z</published>
   <updated>2009-05-08T04:13:10Z</updated>
   
   <summary>ファイルをダウンロード 解凍してできたpriproフォルダをprocessing...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.vector-scan.com/ws/">
      <![CDATA[<a href="http://www.vector-scan.com/ws/codes/pripro_processing_lib2009.zip">ファイルをダウンロード</a>
解凍してできたpriproフォルダをprocessingのライブラリフォルダに移動してください。

]]>
      
   </content>
</entry>
<entry>
   <title>network サンプル</title>
   <link rel="alternate" type="text/html" href="http://www.vector-scan.com/ws/2009/04/network.php" />
   <id>tag:www.vector-scan.com,2009:/ws//3.66</id>
   
   <published>2009-04-24T06:29:08Z</published>
   <updated>2009-04-24T06:30:29Z</updated>
   
   <summary> import processing.net.*;  Client myClie...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.vector-scan.com/ws/">
      <![CDATA[<pre>

import processing.net.*; 
Client myClient; 
int x, y ;

void setup() { 
  size(256,256); 
  strokeWeight(5) ;

  myClient = new Client(this, "127.0.0.1", 5204); 
} 

void draw() { 
  if (myClient.available() > 0) { 
    String rx = myClient.readStringUntil('\n'); 
    if (rx != null) {
      String[] loc = split(split(rx, '\n')[0], ',') ;
      x = int(loc[0]) ;
      y = int(loc[1]) ;
    } 
  }
  background(200) ;
  point(x, y) ;
}

</pre>

]]>
      
   </content>
</entry>
<entry>
   <title>１日目のprocessing</title>
   <link rel="alternate" type="text/html" href="http://www.vector-scan.com/ws/2009/04/processing_3.php" />
   <id>tag:www.vector-scan.com,2009:/ws//3.64</id>
   
   <published>2009-04-16T16:56:26Z</published>
   <updated>2009-04-23T18:40:25Z</updated>
   
   <summary>1. コードを書く→RUNしてみる 簡単な１行を入力してRUNボタン（▶）をクリ...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="多摩美 メディア芸術WS" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.vector-scan.com/ws/">
      <![CDATA[<h3>1. コードを書く→RUNしてみる</h3>
簡単な１行を入力してRUNボタン（▶）をクリックしてみよう

<pre>
point (50, 50) ;
</pre>

小さいウィンドウが現れて真ん中に（とても小さいけど）点が打ってあります。 
point()は画面上に点を打つ命令です。processingが、そう決めてます。 
エラーが出た人は、行の最後に ; をタイプしてるかチェックしてください。

終了するときは小さいウィンドウを閉じます。 
( )の中の数字をいじってRUNしてみよう。何が変化するか分かりますね？ 
一つ目の数字と二つ目の数字は何を表すかも確かめてください。 

<br><br>
<h3>2. ペンの太さを変える</h3>

点が見にくいので少し大きくします
<pre>
strokeWeight(5) ; 
point (50, 50) ; 
</pre>
strokeWeightは線の太さを指定します。 
ちなみに、命令は上の行から順に実行されます 
だから 
<pre>
point (50, 50) ; 
strokeWeight(5) ; 
</pre>
だと点の大きさは変わりません。 


<br><br>
<h3>3.色を変えてみる</h3>
色をつけてみましょう 
<pre>
stroke(color(255,255,0)) ; 
strokeWeight(5) ; 
point (50, 50) ; 
</pre>
strokeはペンの色、colorは色を表します。 
３つの数字はred成分, green成分, blue成分です。 
0 ~ 255の範囲で指定します。 
好きな色をどうぞ。 


<br><br>
<h3>4.ウィンドウを大きくしてみる</h3>
<pre>
size(256, 256) ; 
stroke(color(255,255,0)) ; 
strokeWeight(5) ; 
point (50, 50) ; 
</pre>
ところで、点が真ん中に来てないのをなんとかしたいです。しかも少し高度なや 
り方で。 
もうお分かりと思いますが、pointの( )の中の2つの数字は順にx座標、y座標 
を表しています。 
この値をウィンドウのサイズの半分の数値に変えてやればいいのですが、 
正直に数値を書かずともこんな便利な書き方ができます。 
<pre>
size(256, 256) ; 
stroke(color(255,255,0)) ; 
strokeWeight(5) ; 
point (width/2, height/2) ; 
</pre>
width, heightはprocessingが決めた特殊な変数で、ウィンドウの幅と高さが自 
動的に格納されています。 
だからサイズを200 x 600とかにしても、上記のpoint命令はそのままでちゃん 
と真ん中に点が打てます。 
リストの中で、オレンジで表示されているのはprocessingが決めた命令、ブルー 
で表示されているのはprocessingが決めた特殊な変数です。 
processingが決めている命令や変数はここを見れば知る事ができます。 
http://processing.org/reference/index.html 
日本語が好きならこちら： 
http://pripro.org/p5ref/ 

<br><br>
<h3>5. アニメーションを作る</h3>
いままでは上の行から下の行へ命令を実行して停止してました。 
アニメーションやゲームを作るにはどうすれば良いのだろう？ 
答え：draw() の中に書く 
<pre>
void draw() { 
 // size(256, 256) ; 
 stroke(color(255,255,0)) ; 
 strokeWeight(5) ; 
 point (mouseX, mouseY) ; 
} 
</pre>
ウィンドウ上でマウスを動かしてみよう。マウスの位置に軌跡が残りますね？ 
mouseX, mouseYがミソです。これらはprocessingが決めた特殊な変数で、現 
在のマウスの座標が入っています。 
「現在の」なので、マウスを動かしていればどんどん変化していきます。 
drawの中は繰り返し実行されます。したがって、その都度マウス位置に点が打た 
れるという訳です。 
{ }の中の行の字下げは見やすくするためで、コンピュータには影響ありません。 
processingはctrl + tを押すと自動的に字下げして見やすくしてくださいます。 
size()は訳あって実行したくないので //を先頭に打ってあります。//以降のその 
行の文字はprocessingが無視してくれます。 
これをコメントアウトなどといいます。//はコメントを書くときにも使います。 




<br><br>
<h3>6. 初期設定とフレームごとに処理に分ける</h3>

ところで、draw()のなかの4行のうち、ペンの色とペンの太さを指定していると 
ころは繰り返し実行する必要がありません。またsizeは繰り返し実行してはいけ 
ない命令です。（コメントアウトしたのはそういう訳でした） 
そこでこうします。 
<pre>
void setup() { 
 size(256, 256) ; 
 stroke(color(255,255,0)) ; 
 strokeWeight(5) ; 
} 

void draw() { 
 point (mouseX, mouseY) ; 
}
 </pre>
setup()内に書いた命令はこのプログラムがRUNされると最初に実行され、その 
後draw()の中が繰り返し実行されます。 
そういう風に作ってあります。 

<pre>
ｓｅｔｕｐ 
　　│
　　│←──┐ 
　　│　　　│ 
ｄｒａｗ　　│ 
　　│　　　│ 
　　└───┘　
</pre>
　こういう風に。 
プログラムの準備段階はsetupに、通常運転はdrawに書くといいでしょう。

<br><br>
<h3>7. 自動的に点が進むプログラムを作ってみます</h3>

<pre>
int x ;

void setup() {
	size(256, 256) ;
	stroke(color(255,255,0)) ;
	strokeWeight(5) ; 
	x = 0 ;
}

void draw() {
	background(100) ;
	point (x, height/2) ;
	x = x + 1 ;
	x = x % width ;
}
</pre>

drawの最初のbackgroundは背景を塗りつぶす命令です。これがないと軌跡が残ります。
今回はボールのように動いてほしかったので、軌跡を残さず、コマ毎に背景を塗りつぶし、点を描いています。

一行目のint x ;でxという変数を使う事に決めた旨宣言します。
widthやheightやmouseXやmouseYなどはprocessingが決めた特別な変数ですが、このように自分で好きな名前の変数を作る事ができます。

setup内のx = 0 ;でxに0を代入してます。
draw内のpoint(x, height/2)でxの横位置に点を打っています。
次の行でxに1を足しています。
さらに次の行で右端についたら左端に戻す、ということをやっています。（幅で割った余りを求めています）
]]>
      
   </content>
</entry>
<entry>
   <title>processingで4chオーディオ</title>
   <link rel="alternate" type="text/html" href="http://www.vector-scan.com/ws/2008/07/processing4ch.php" />
   <id>tag:www.vector-scan.com,2008:/ws//3.63</id>
   
   <published>2008-07-05T15:03:49Z</published>
   <updated>2008-07-06T01:35:39Z</updated>
   
   <summary> processingで4chのサウンド再生をしたいという質問があったので調べて...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="多摩美 メディア芸術WS" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.vector-scan.com/ws/">
      <![CDATA[processingで4chのサウンド再生をしたいという質問があったので調べてみましたが、processingのライブラリとしてはできる物はないようです。
そこで今回もMaxMSPにOSC経由でメッセージを送るやりかたで制御することにします。

<br>
<h3>processing側</h3>
<br>

動作チェックプログラムです。
<pre><?php echo htmlspecialchars(file_get_contents("http://www.vector-scan.com/ws/codes/soundplayer/SoundPlayerController.pde")); ?></pre>
<a href="http://www.vector-scan.com/ws/codes/soundplayer/SoundPlayerController.pde">ソースをダウンロード</a>

例によって<a href="http://www.sojamo.de/libraries/oscP5/">oscP5</a>と<a href="http://www.sojamo.de/libraries/controlP5/">controlP5</a>を使ってます。ソースから実行する場合はprocessingにそれぞれのライブラリをインストールして開いてください。
<a href="http://www.vector-scan.com/ws/codes/soundplayer/SoundPlayerController.zip">SoundPlayerControllerアプリケーション</a>こっちにはライブラリ含まれてるので即実行できるはずです。


起動するとこんな画面が出てきます。
ここのところ蒸し暑いので涼しげな色にしました（うちのエアコン代替フロンが抜けて故障中…）
<img alt="SoundPlayerController.png" src="http://www.vector-scan.com/ws/images/SoundPlayerController.png" width="220" height="242" />

<br>
<h3>MaxMSP側</h3>
<br>

こちらがMaxMSPのパッチ
<img alt="soundplayer.png" src="http://www.vector-scan.com/ws/images/soundplayer.png" width="496" height="289" />
<a href="http://www.vector-scan.com/ws/codes/soundplayer/soundplayer.maxpat.zip">movieplayerパッチ</a>
<a href="http://www.vector-scan.com/ws/codes/soundplayer/soundplayer.app.zip">アプリケーション化したもの（そのまま実行できる）
<a href="http://www.vector-scan.com/ws/codes/soundplayer/snd.zip">サンプルサウンドファイル</a>（解凍してsndフォルダの中身=snd1.wavなどをsoundplayerと同じ階層に置いてください）

</a>

<br>
<h3>動作チェック</h3>
<br>

サンプルサウンドファイルをsoundplayerと同じ階層におきます。
まずDACボタンをクリックしてDSPをONにします。
それから音を出したいチャネルのテキストフィールドにメッセージを打ち込みます。
<ul>
<li>open snd1.wav（snd1.wavを読み込む）</li>
<li>1（サウンド再生）</li>
<li>0（サウンド停止）</li>
<li>loop 1（ループ）</li>
<li>loop 0（ループ解除）</li>
</ul>
などが使えるメッセージです。詳しくはMaxMSPのリファレンスでsfplay~の項目を見てください。
出力を設定するにはMaxMSPのパッチのdac~をダブルクリックします。

<br>
<br>
<h3>自分のプログラムで使う</h3>
<br>
自分のプログラムで使う時はsetup() 内のinitUI() ;と//--------UI--------以降全てはいりません。これらは動作チェックのためのGUIを記述しています。
tellDacでDACのON/OFF、tellPlayerでチャネルを指定してsfpley~にメッセージを送ることができます。

DACをON
tellDac("start") ;

チャネル1にサウンド読み込み
tellPlayer(1, "open snd1.wav") ;

チャネル1のサウンド再生開始
tellPlayer(1, "1") ;

こういった感じで音を制御できます。音量を制御したいときはMaxMSPのパッチを改造してください。


今回ライブラリについて<a href="http://hysysk.blogspot.com/">hysyskくん</a>に質問してアドバイスいただきました。どうもありがとう！
彼のblogはいつもprocessingなどの面白い試みが書かれているのでおすすめです！


]]>
      
   </content>
</entry>
<entry>
   <title>赤外線LEDによるフォトインタラプタ</title>
   <link rel="alternate" type="text/html" href="http://www.vector-scan.com/ws/2008/06/post_4.php" />
   <id>tag:www.vector-scan.com,2008:/ws//3.61</id>
   
   <published>2008-06-22T18:37:36Z</published>
   <updated>2008-06-29T08:14:08Z</updated>
   
   <summary>赤外線LEDとリモコン用赤外線受光モジュールでフォトインタラプタを作ってみます。...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.vector-scan.com/ws/">
      <![CDATA[赤外線LEDとリモコン用赤外線受光モジュールでフォトインタラプタを作ってみます。
発光側と受光側のあいだに物が通過すると光が遮られるので物を検出することができます。
具体的には通路の両側に仕掛けておいて、人が通過した事を検出したりするのに使えます。沢山設置することで結果的に人の移動を検出するのにも使えます。NaPiOなどに比べると、人がいなくなった時の検出も素早い特徴があります。
部品代は安く、１セット500円程度で作れます。

<h3>回路とプログラム</h3>

まず、赤外線LEDを38kHzで点滅させます。点滅（というか変調）させる事で、外光の影響を防ぐことができます。受光モジュールはフィルタで38kHzの信号だけを拾います。本来リモコンなどでは、シリアル信号を38kHzで変調して送るのですが、今回はただ光が届いているか否かを知れればいいので、コードは送りません。
以下はそのためのPICのプログラムです。

<a href="http://www.vector-scan.com/ws/codes/IrSender.asm">ソースをダウンロード</a>
<a href="http://www.vector-scan.com/ws/codes/IrSender.HEX">hexファイルをダウンロード</a>

回路はこんな感じで

<img alt="IrSender_and_Receiver.jpg" src="http://www.vector-scan.com/ws/images/IrSender_and_Receiver.jpg" width="522" height="225" />

GPIO0,1,2,4,5が全部同じようにLEDの出力になってます。IrLEDに流す電流によってRの値を決めてください。GPIOは全て使う必要はなくて、20mA流すのであればGPIO0だけで十分です。もっと大電流を流したい時は何個かのポートを束ねて使ってください。
PIC12F683のスペックによると、１つのポートから流せる電流は25mAまで。ただし、全ポートの合計は90mAとなっています。それをオーバーしないように抵抗値を選択してください。もちろんLEDの定格を超えてもいけません。
LEDの抵抗の計算法は<a href="http://akizukidenshi.com/catalog/led/">LEDの抵抗値計算機（秋月電子）</a>などを見れば分かると思います。

受光モジュールはいろいろ種類がありますが、実験では秋月で入手できる<a href="http://akizukidenshi.com/catalog/items2.php?p=1&q=%22I-00621%22">PL-IRM0208-A538</a>を使いました。100円です。電源つなぐだけでOKです。outputをpri/proのADIOインプットなり、PICの入力ポートなりにつなげば読み取れます。

<h3>光学的な工夫</h3>
普通の砲弾型のLEDは一定の角度で拡散していく、点光源になっています。そのまま使うと届く範囲は広くなるけど、受光モジュールに届く光はその分弱くなります。それを防ぐためにレンズを使って平行光にします。やり方はLEDをレンズの焦点に置くだけです。

<img alt="collimation.jpg" src="http://www.vector-scan.com/ws/images/collimation.jpg" width="522" height="322" />

図のように平行光にした上で、受光モジュールと光軸を合わせればインタラプタの完成です。
外光の状況やLEDの出力にもよるけど、かなり離しても動作しそうです。

レンズは普通の球面レンズなら何でも構いません。可視光のLEDをレンズ越しに覗き込みながらLEDの距離を変えると、メラッとするポイントがあります。理科で日光を集めて火を点ける実験をしたことがあると思いますが、そのときのレンズと紙の距離が焦点距離です。
光学については僕にはまったく未知の世界です。興味のある方はここに光と光の記録に関する<a href="http://www.anfoworld.com/">神サイト</a>があります。凄すぎます。
]]>
      
   </content>
</entry>
<entry>
   <title>processingからムービーを制御</title>
   <link rel="alternate" type="text/html" href="http://www.vector-scan.com/ws/2008/06/processing_2.php" />
   <id>tag:www.vector-scan.com,2008:/ws//3.59</id>
   
   <published>2008-06-19T20:06:01Z</published>
   <updated>2008-06-27T19:50:17Z</updated>
   
   <summary>processingで直接ムービーを再生するのは速度の点でかなりつらいものがある...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="ja" xml:base="http://www.vector-scan.com/ws/">
      <![CDATA[processingで直接ムービーを再生するのは速度の点でかなりつらいものがあるので、どうにかならないか考えてみた。

<h3>条件</h3>

・processingから制御
・複数のムービーを選択してそれを普通に再生・停止できる
・フルスクリーン表示

<h3>いろいろ試してみました</h3>

・QuartzComposer
・mplayer
・Director
・MaxMSP
あたりが行けそうだったのでそれぞれ調査。

QuartzComposerはOS10.5に付属のバージョンはUDPのオブジェクトがあるらしく、processingからも叩けるなぁと思ったが、あいにく普段10.4を使ってるのでまた今度試す事にします。

mplayerはコマンドラインで制御できて、processingからFIFO経由でコマンドを渡して操作することはできた。再生もスムーズ。しかし、試したバージョンでは頻繁にloadfileするとクラッシュしたりして、これも一旦保留。（でもperlで操作したら落ちなかった）

そして祝!復活のDirector。DirectorはQuicktimeの再生はまあまあ。問題点はprocessingと通信する手段がない。いやたぶんあるのだろうけど、xtra買ってまでするもんでもないので断念。

最後にたどり着いたのが、ある意味最初に試すべきだったMaxMSP。すみませんでした。

<h3>結局MaxMSP</h3>

これだけでなんとかなりそう

<img alt="movieplayer_pat.png" src="http://www.vector-scan.com/ws/images/movieplayer_pat.png" width="292" height="218" />
<a href="http://www.vector-scan.com/ws/codes/movieplayer.maxpat.zip">movieplayerパッチ</a>
<a href="http://www.vector-scan.com/ws/codes/movieplayer.app.zip">アプリケーション化したもの（そのまま実行できる）</a>
＊注　Max5の版に差し替えました。追記参照。

processing側のサンプルです

<pre><?php echo htmlspecialchars(file_get_contents("http://www.vector-scan.com/ws/codes/MoviePlayerController.pde")); ?></pre>

<a href="http://www.vector-scan.com/ws/codes/MoviePlayerController.pde">ソースをダウンロード</a>
<a href="http://www.sojamo.de/libraries/oscP5/">oscP5</a>と<a href="http://www.sojamo.de/libraries/controlP5/">controlP5</a>を使ってます。ソースから実行する場合はprocessingにそれぞれのライブラリをインストールして開いてください。
<a href="http://www.vector-scan.com/ws/codes/MoviePlayerController.zip">MoviePlayerControllerアプリケーション</a>
こっちにはライブラリ含まれてるので即実行できるはずです。

テキストフィールドにメッセージを打ち込んで制御テストができます
<img alt="movieplayercontroller.png" src="http://www.vector-scan.com/ws/images/movieplayercontroller.png" width="400" height="150" />

<h3>実行方法</h3>

・movieplayer.appと同じ階層にムービーファイルを置く。
・movieplayer.appおよびMoviePlayerController.appを起動。
・あとはMaxMSPのmovieオブジェクトに送るメッセージを入力すれば動作します。
・例外として"hidemenubar"と"showmenubar"は;maxメッセージ（？）として実行されます。

<h3>使えるメッセージ（一部）</h3>

・read <i>hoge.mov</i>（ムービー読み込み）
・windowpos <i>0 0 640 480</i>（ウィンドウサイズ）
・autofit <i>1</i>（画面サイズにムービーサイズを合わせる／合わせない）
・start（再生開始）
・stop（停止）
・pause（一時停止）
・resume（一時停止解除）
・rate <i>1.5</i>（再生速度）
なんてメッセージでムービーが制御できます。

やってみると、どうもstartしたままムービーをreadすると落ちるみたいです。read前に一度stopをすると大丈夫でした。

その他詳しくは<a href="http://cycling74.com/download/maxmsp463doc.zip">MaxMSPのドキュメント</a>のmovieオブジェクトの解説を見てください。ムービーのスクラブも出来るよ。


（追記）
最初はMax/MSP 4.6で試したんだけど、どうも良く落ちるので使い物になりませんでした。
Max5.0.2はアプリケーション化したものを実行するとエラーがでてNG。
先日でたMax5.0.3でようやく満足に動くようになりました。Demo期限が切れる前にアプリケーションを焼いておくことにしましょう。

<img alt="movieplayercontroller_Max5.png" src="http://www.vector-scan.com/ws/images/movieplayercontroller_Max5.png" width="343" height="247" />
か、かわいくなてるよ画面っ。次期Maxはミナペルホネンみたいになってほしい。

]]>
      
   </content>
</entry>

</feed>

