Arduinoで遊ぼう 
#1 ArduinoとProcessingを連携する 
2014.10.09 
Created by Sannomiy Yasunori
今回やること 
センサ値 
Arduino Processing 
センサ値表現
今回やること 
センサ値 
Arduino Processing 
センサ値表現 
ArduinoとProcessingの連携を行います
データ 
Arduino Processing 
データ 
シリアル通信 
作戦 
今回はシリアル通信を使った同期を行います
シリアル通信とは? 
Arduino USBケーブルProcessing 
データ 
USBケーブル上でデータを送受信してるような 
イメージで良いと思います
注意! 
Arduino USBケーブルProcessing 
データデータ 
同時にデータを送るとデータが衝突します
シリアル通信とは? 
Arduino Processing 
データ 
Arduino Processing 
データ 
データは一歩通行。交互に送るようにしましょう。
A STEP1. P 
通信開始の合図 
A P 
A P 
A P 
STEP2. 
STEP3. 
STEP4. 
USB 
データを空にする 
センサの値 
USB 
データを空にする 
ProcessingがArduino 
送信するように合図を送ります 
合図を受信したら、シリアルポート上 
のデータを空にします 
その後、センサ値を送信します 
センサ値を受信したら、データを 
空にします 
アルゴリズムの解説
A STEP1. P 
通信開始の合図 
A P 
A P 
A P 
STEP2. 
STEP3. 
STEP4. 
USB 
データを空にする 
センサの値 
USB 
データを空にする 
ProcessingがArduinoにセンサ値を 
送信するように合図を送ります 
合図を受信したら、シリアルポート上 
のデータを空にします 
その後、センサ値を送信します 
センサ値を受信したら、データを 
空にします
A STEP1. P 
通信開始の合図 
A P 
A P 
A P 
STEP2. 
STEP3. 
STEP4. 
USB 
データを空にする 
センサの値 
USB 
データを空にする 
ProcessingがArduino 
送信するように合図を送ります 
合図を受信したら、シリアルポート上 
のデータを空にします 
その後、センサ値を送信します 
センサ値を受信したら、データを 
空にします
A STEP1. P 
通信開始の合図 
A P 
A P 
A P 
STEP2. 
STEP3. 
STEP4. 
USB 
データを空にする 
センサの値 
USB 
データを空にする 
ProcessingがArduino 
送信するように合図を送ります 
合図を受信したら、シリアルポート上 
のデータを空にします 
その後、センサ値を送信します 
センサ値を受信したら、データを 
空にします
A STEP1. P 
通信開始の合図 
A P 
A P 
A P 
STEP2. 
STEP3. 
STEP4. 
USB 
データを空にする 
センサの値 
USBケーブル上の 
データを空にする 
ProcessingがArduino 
送信するように合図を送ります 
合図を受信したら、シリアルポート上 
のデータを空にします 
その後、センサ値を送信します 
センサ値を受信したら、データを 
空にします
A STEP1. P 
通信開始の合図 
以下繰り返し。これを超高速にやって同期通信をするよ。 
A P 
A P 
A P 
STEP2. 
STEP3. 
STEP4. 
USB 
データを空にする 
センサの値 
USB 
データを空にする 
ProcessingがArduinoにセンサ値を 
送信するように合図を送ります 
合図を受信したら、シリアルポート上 
のデータを空にします 
その後、センサ値を送信します 
センサ値を受信したら、データを 
空にします
ソースコード解説 
あまり長くないから頑張れ!
int val = 0; // 送信したい値 
!void setup(){ 
Serial.begin(9600); // シリアル通信を開始する 
} 
!void loop(){ 
if(Serial.available() > 0){ // データが到着していれば 
Serial.read(); // シリアルポート上のデータを空にする 
Serial.write(val++); // シリアルポートにデータを送信 
} 
delay(100); 
} 
① 
②③④
覚えてほしい4つのメソッド 
Serial.begin(9600); シリアル通信を開始するよっていう命令。 
9600は通信速度。基本いじらなくてよい。 
void setup()に記述しよう。 
その1
覚えてほしい4つのメソッド 
Serial.available() シリアルポート上に何バイトのデータが到着して 
いるかを調べる命令。 
if(Serial.available()>0) で1バイト以上のデータが 
到着したかを判断できる。 
合図がきたかどうかを判断するために使う。 
その2
覚えてほしい4つのメソッド 
Serial.read(); シリアルポート上にあるデータを取得して 
空にする命令。 
シリアルポート上のデータを空にするために使う。 
その3
覚えてほしい4つのメソッド 
Serial.write(値) 引数の値をシリアルポート上に送信する命令。 
数値を送信するときは1バイトづつ送信する。 
データを送信するために使う。 
0~255までの数って意味だぜ
int val = 0; // 送信したい値 
!void setup(){ 
Serial.begin(9600); // シリアル通信を開始する 
} 
!void loop(){ 
if(Serial.available() > 0){ // データが到着していれば 
Serial.read(); // シリアルポート上のデータを空にする 
Serial.write(val++); // シリアルポートにデータを送信 
} 
delay(100); 
} 
① 
②③④
import processing.serial.*; // ライブラリのインポート 
Serial myPort; 
int val=0; 
!void setup(){ 
size(300,400); 
myPort = new Serial(this, "/dev/tty.usbmodem1411", 9600); 
} 
void draw(){ 
if(keyPressed) if(key=='s') myPort.write(255); 
background(255); 
fill(0); 
text(val, 10,20); 
} 
void serialEvent(Serial p){ 
if(myPort.available()>0){ 
val = myPort.read(); 
myPort.write(255); 
} 
} 
① 
② 
③ 
④
Processingでのポイント 
import processing.serial.*; 
Serial myPort; 
シリアル通信をするライブラリがあるので 
インポートする。 
シリアル通信系の命令を使えるようにする 
ために必要な記述。コピペでいいよ。 
インスタンス名は 
何でも良いよ 
その1
Processingでのポイント 
その2 
Windowsの例 
myPort = new Serial(this, "COM4", 9600); 
Macの例 
myPort = new Serial(this, "/dev/tty.usbmodem1411", 9600); 
シリアル通信をするための設定。 
ポートの名前が人によって違うため、 
各自で名前を確認する必要があります。
Processingでのポイント 
if(keyPressed) if(key=='s') myPort.write(255); 
書き方は任せる。最初の合図を送る必要があります。 
1バイトのデータならなんでもいいよ
Processingでのポイント 
void serialEvent(Serial p){ 
} 
シリアルイベントを管理する関数。 
シリアル通信のための命令はこの関数の 
中に記述する。
import processing.serial.*; // ライブラリのインポート 
Serial myPort; 
int val=0; 
!void setup(){ 
size(300,400); 
myPort = new Serial(this, "/dev/tty.usbmodem1411", 9600); 
} 
void draw(){ 
if(keyPressed) if(key=='s') myPort.write(255); 
background(255); 
fill(0); 
text(val, 10,20); 
} 
void serialEvent(Serial p){ 
if(myPort.available()>0){ 
val = myPort.read(); 
myPort.write(255); 
} 
} 
① 
② 
③ 
④
A P 
通信開始の合図 
A P 
USBケーブル上の 
データを空にする 
A P 
センサの値 
A P 
USBケーブル上の 
データを空にする 
まとめ 
Serial.write(255); 
1.Processingから何かデータを送信 
if(Serial.available()>0){ 
2.Arduino側に1バイト以上のデータがきたら 
! 
Serial.Read(); 
4.シリアルポート上のデータを空にして 
! 
Serial.Write(センサ値); 
} 
5.データを送信する 
int val = Serial.Read(); 
if(Serial.available()>0){ 
6.受信したデータを変数に保存し、 
 シリアルポートを空にする
Arduinoで遊ぼう 
#1 ArduinoとProcessingを連携する 
終わり
次回予告? 
Arduinoで遊ぼう 
#2 Arduinoでフォトリフレクタを使おう 
#3 リクエスト受付中

Arduinoで遊ぼう #1Processingと連携する

  • 1.
    Arduinoで遊ぼう #1 ArduinoとProcessingを連携する 2014.10.09 Created by Sannomiy Yasunori
  • 2.
    今回やること センサ値 ArduinoProcessing センサ値表現
  • 3.
    今回やること センサ値 ArduinoProcessing センサ値表現 ArduinoとProcessingの連携を行います
  • 4.
    データ Arduino Processing データ シリアル通信 作戦 今回はシリアル通信を使った同期を行います
  • 5.
    シリアル通信とは? Arduino USBケーブルProcessing データ USBケーブル上でデータを送受信してるような イメージで良いと思います
  • 6.
    注意! Arduino USBケーブルProcessing データデータ 同時にデータを送るとデータが衝突します
  • 7.
    シリアル通信とは? Arduino Processing データ Arduino Processing データ データは一歩通行。交互に送るようにしましょう。
  • 8.
    A STEP1. P 通信開始の合図 A P A P A P STEP2. STEP3. STEP4. USB データを空にする センサの値 USB データを空にする ProcessingがArduino 送信するように合図を送ります 合図を受信したら、シリアルポート上 のデータを空にします その後、センサ値を送信します センサ値を受信したら、データを 空にします アルゴリズムの解説
  • 9.
    A STEP1. P 通信開始の合図 A P A P A P STEP2. STEP3. STEP4. USB データを空にする センサの値 USB データを空にする ProcessingがArduinoにセンサ値を 送信するように合図を送ります 合図を受信したら、シリアルポート上 のデータを空にします その後、センサ値を送信します センサ値を受信したら、データを 空にします
  • 10.
    A STEP1. P 通信開始の合図 A P A P A P STEP2. STEP3. STEP4. USB データを空にする センサの値 USB データを空にする ProcessingがArduino 送信するように合図を送ります 合図を受信したら、シリアルポート上 のデータを空にします その後、センサ値を送信します センサ値を受信したら、データを 空にします
  • 11.
    A STEP1. P 通信開始の合図 A P A P A P STEP2. STEP3. STEP4. USB データを空にする センサの値 USB データを空にする ProcessingがArduino 送信するように合図を送ります 合図を受信したら、シリアルポート上 のデータを空にします その後、センサ値を送信します センサ値を受信したら、データを 空にします
  • 12.
    A STEP1. P 通信開始の合図 A P A P A P STEP2. STEP3. STEP4. USB データを空にする センサの値 USBケーブル上の データを空にする ProcessingがArduino 送信するように合図を送ります 合図を受信したら、シリアルポート上 のデータを空にします その後、センサ値を送信します センサ値を受信したら、データを 空にします
  • 13.
    A STEP1. P 通信開始の合図 以下繰り返し。これを超高速にやって同期通信をするよ。 A P A P A P STEP2. STEP3. STEP4. USB データを空にする センサの値 USB データを空にする ProcessingがArduinoにセンサ値を 送信するように合図を送ります 合図を受信したら、シリアルポート上 のデータを空にします その後、センサ値を送信します センサ値を受信したら、データを 空にします
  • 14.
  • 15.
    int val =0; // 送信したい値 !void setup(){ Serial.begin(9600); // シリアル通信を開始する } !void loop(){ if(Serial.available() > 0){ // データが到着していれば Serial.read(); // シリアルポート上のデータを空にする Serial.write(val++); // シリアルポートにデータを送信 } delay(100); } ① ②③④
  • 16.
    覚えてほしい4つのメソッド Serial.begin(9600); シリアル通信を開始するよっていう命令。 9600は通信速度。基本いじらなくてよい。 void setup()に記述しよう。 その1
  • 17.
    覚えてほしい4つのメソッド Serial.available() シリアルポート上に何バイトのデータが到着して いるかを調べる命令。 if(Serial.available()>0) で1バイト以上のデータが 到着したかを判断できる。 合図がきたかどうかを判断するために使う。 その2
  • 18.
    覚えてほしい4つのメソッド Serial.read(); シリアルポート上にあるデータを取得して 空にする命令。 シリアルポート上のデータを空にするために使う。 その3
  • 19.
    覚えてほしい4つのメソッド Serial.write(値) 引数の値をシリアルポート上に送信する命令。 数値を送信するときは1バイトづつ送信する。 データを送信するために使う。 0~255までの数って意味だぜ
  • 20.
    int val =0; // 送信したい値 !void setup(){ Serial.begin(9600); // シリアル通信を開始する } !void loop(){ if(Serial.available() > 0){ // データが到着していれば Serial.read(); // シリアルポート上のデータを空にする Serial.write(val++); // シリアルポートにデータを送信 } delay(100); } ① ②③④
  • 21.
    import processing.serial.*; //ライブラリのインポート Serial myPort; int val=0; !void setup(){ size(300,400); myPort = new Serial(this, "/dev/tty.usbmodem1411", 9600); } void draw(){ if(keyPressed) if(key=='s') myPort.write(255); background(255); fill(0); text(val, 10,20); } void serialEvent(Serial p){ if(myPort.available()>0){ val = myPort.read(); myPort.write(255); } } ① ② ③ ④
  • 22.
    Processingでのポイント import processing.serial.*; Serial myPort; シリアル通信をするライブラリがあるので インポートする。 シリアル通信系の命令を使えるようにする ために必要な記述。コピペでいいよ。 インスタンス名は 何でも良いよ その1
  • 23.
    Processingでのポイント その2 Windowsの例 myPort = new Serial(this, "COM4", 9600); Macの例 myPort = new Serial(this, "/dev/tty.usbmodem1411", 9600); シリアル通信をするための設定。 ポートの名前が人によって違うため、 各自で名前を確認する必要があります。
  • 24.
    Processingでのポイント if(keyPressed) if(key=='s')myPort.write(255); 書き方は任せる。最初の合図を送る必要があります。 1バイトのデータならなんでもいいよ
  • 25.
    Processingでのポイント void serialEvent(Serialp){ } シリアルイベントを管理する関数。 シリアル通信のための命令はこの関数の 中に記述する。
  • 26.
    import processing.serial.*; //ライブラリのインポート Serial myPort; int val=0; !void setup(){ size(300,400); myPort = new Serial(this, "/dev/tty.usbmodem1411", 9600); } void draw(){ if(keyPressed) if(key=='s') myPort.write(255); background(255); fill(0); text(val, 10,20); } void serialEvent(Serial p){ if(myPort.available()>0){ val = myPort.read(); myPort.write(255); } } ① ② ③ ④
  • 27.
    A P 通信開始の合図 A P USBケーブル上の データを空にする A P センサの値 A P USBケーブル上の データを空にする まとめ Serial.write(255); 1.Processingから何かデータを送信 if(Serial.available()>0){ 2.Arduino側に1バイト以上のデータがきたら ! Serial.Read(); 4.シリアルポート上のデータを空にして ! Serial.Write(センサ値); } 5.データを送信する int val = Serial.Read(); if(Serial.available()>0){ 6.受信したデータを変数に保存し、  シリアルポートを空にする
  • 28.
  • 29.
    次回予告? Arduinoで遊ぼう #2Arduinoでフォトリフレクタを使おう #3 リクエスト受付中