arduinoで遊ぼう #1processingと連携する

29
#1 ArduinoとProcessingを連携する Arduinoで遊ぼう 2014.10.09 Created by Sannomiy Yasunori

Upload: yasunori-sannomiya

Post on 29-Jun-2015

1.376 views

Category:

Technology


0 download

DESCRIPTION

ArduinoとProcessingの連携について勉強します。

TRANSCRIPT

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

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

2014.10.09Created by Sannomiy Yasunori

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

今回やること

センサ値 表現センサ値

Arduino Processing

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

今回やること

ArduinoとProcessingの連携を行います

センサ値 表現センサ値

Arduino Processing

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

今回はシリアル通信を使った同期を行います

データデータ

シリアル通信

作戦

Arduino Processing

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

USBケーブル上でデータを送受信してるような イメージで良いと思います

シリアル通信とは?

データUSBケーブルArduino Processing

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

同時にデータを送るとデータが衝突します

注意!

USBケーブルArduino Processingデータ データ

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

データは一歩通行。交互に送るようにしましょう。

シリアル通信とは?

データArduino Processing

Arduino Processingデータ

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

ASTEP1.

P通信開始の合図

A P

A P

A P

STEP2.

STEP3.

STEP4.

USBデータを空にする

センサの値

USBデータを空にする

ProcessingがArduino送信するように合図を送ります

合図を受信したら、シリアルポート上 のデータを空にします

その後、センサ値を送信します

センサ値を受信したら、データを空にします

アルゴリズムの解説

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

ASTEP1.

P通信開始の合図

A P

A P

A P

STEP2.

STEP3.

STEP4.

USBデータを空にする

センサの値

USBデータを空にする

ProcessingがArduinoにセンサ値を 送信するように合図を送ります

合図を受信したら、シリアルポート上 のデータを空にします

その後、センサ値を送信します

センサ値を受信したら、データを空にします

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

ASTEP1.

P通信開始の合図

A P

A P

A P

STEP2.

STEP3.

STEP4.

USBデータを空にする

センサの値

USBデータを空にする

ProcessingがArduino送信するように合図を送ります

合図を受信したら、シリアルポート上 のデータを空にします

その後、センサ値を送信します

センサ値を受信したら、データを空にします

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

ASTEP1.

P通信開始の合図

A P

A P

A P

STEP2.

STEP3.

STEP4.

USBデータを空にする

センサの値

USBデータを空にする

ProcessingがArduino送信するように合図を送ります

合図を受信したら、シリアルポート上 のデータを空にします

その後、センサ値を送信します

センサ値を受信したら、データを空にします

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

ASTEP1.

P通信開始の合図

A P

A P

A P

STEP2.

STEP3.

STEP4.

USBデータを空にする

センサの値

USBケーブル上の データを空にする

ProcessingがArduino送信するように合図を送ります

合図を受信したら、シリアルポート上 のデータを空にします

その後、センサ値を送信します

センサ値を受信したら、データを 空にします

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

ASTEP1.

P通信開始の合図

A P

A P

A P

STEP2.

STEP3.

STEP4.

USBデータを空にする

センサの値

USBデータを空にする

ProcessingがArduinoにセンサ値を 送信するように合図を送ります

合図を受信したら、シリアルポート上 のデータを空にします

その後、センサ値を送信します

センサ値を受信したら、データを空にします

以下繰り返し。これを超高速にやって同期通信をするよ。

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

ソースコード解説あまり長くないから頑張れ!

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

int val = 0; // 送信したい値 !void setup(){ Serial.begin(9600); // シリアル通信を開始する } !void loop(){ if(Serial.available() > 0){ // データが到着していれば Serial.read(); // シリアルポート上のデータを空にする Serial.write(val++); // シリアルポートにデータを送信 } delay(100); }

②③④

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

覚えてほしい4つのメソッド

Serial.begin(9600); シリアル通信を開始するよっていう命令。 9600は通信速度。基本いじらなくてよい。 void setup()に記述しよう。

その1

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

覚えてほしい4つのメソッド

Serial.available() シリアルポート上に何バイトのデータが到着して いるかを調べる命令。 if(Serial.available()>0) で1バイト以上のデータが 到着したかを判断できる。 合図がきたかどうかを判断するために使う。

その2

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

覚えてほしい4つのメソッド

Serial.read(); シリアルポート上にあるデータを取得して 空にする命令。 シリアルポート上のデータを空にするために使う。

その3

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

覚えてほしい4つのメソッド

Serial.write(値) 引数の値をシリアルポート上に送信する命令。 数値を送信するときは1バイトづつ送信する。 データを送信するために使う。

0~255までの数って意味だぜ

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

int val = 0; // 送信したい値 !void setup(){ Serial.begin(9600); // シリアル通信を開始する } !void loop(){ if(Serial.available() > 0){ // データが到着していれば Serial.read(); // シリアルポート上のデータを空にする Serial.write(val++); // シリアルポートにデータを送信 } delay(100); }

②③④

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

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); } }

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

Processingでのポイント

import processing.serial.*; Serial myPort;

シリアル通信をするライブラリがあるので インポートする。 シリアル通信系の命令を使えるようにする ために必要な記述。コピペでいいよ。

インスタンス名は 何でも良いよ

その1

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

Processingでのポイント

myPort = new Serial(this, "/dev/tty.usbmodem1411", 9600);

シリアル通信をするための設定。 ポートの名前が人によって違うため、 各自で名前を確認する必要があります。

Macの例

myPort = new Serial(this, "COM4", 9600);Windowsの例

その2

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

Processingでのポイント

if(keyPressed) if(key=='s') myPort.write(255);

書き方は任せる。最初の合図を送る必要があります。

1バイトのデータならなんでもいいよ

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

Processingでのポイント

void serialEvent(Serial p){ }

シリアルイベントを管理する関数。 シリアル通信のための命令はこの関数の 中に記述する。

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

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); } }

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

A P通信開始の合図

A P

A P

A P

USBケーブル上の データを空にする

センサの値

USBケーブル上の データを空にする

Serial.write(255);

if(Serial.available()>0){ !

Serial.Read();!

Serial.Write(センサ値); }

int val = Serial.Read();

まとめ

1.Processingから何かデータを送信

2.Arduino側に1バイト以上のデータがきたら

4.シリアルポート上のデータを空にして

5.データを送信する

6.受信したデータを変数に保存し、  シリアルポートを空にする

if(Serial.available()>0){

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

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

終わり

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

#2 Arduinoでフォトリフレクタを使おうArduinoで遊ぼう

次回予告?

#3 リクエスト受付中