Update 2021: 以前、ArduinoとProtoPieの使い方を説明した、初心者のためのソフトウェアとハードウェアを統合したプロトタイプに関する別の記事を書きました。まずはそちらをご確認ください。
最近では、ソフトウェアのインタラクションがハードウェアのインタラクションと一緒に有機的に行われることが多く、場合によっては両者の間に明確な境界線がないこともあります。しかし、私自身がデザイナーであるため、ソフトウェアとハードウェアの間には、伝統的に簡単には乗り越えられない大きな壁があることを知っています。ソフトウェア設計者は通常、ハードウェアをどのように扱えばいいのか、ハードウェアに入力される信号を使ってソフトウェアのインタラクションをどのように作ればいいのかわかりません。同様に、ハードウェア設計者は通常、ハードウェアに組み込まれたソフトウェアをテストするためにコーディングに頼る必要があります。
そこでArduinoとProtoPieの出番です。
ProtoPie Connect経由
ProtoPieはモバイル、ウェブ、ダッシュボード、デジタルスクリーンなどのためのハイファイなプロトタイピングツールです。その拡張機能であるProtoPie Connectは、これらのプロトタイプを実用化するのに役立ちます。スマートデバイス間のインタラクションを作成したり、IoTデバイスやArduinoのような物理コンピューティングツール間で通信したりすることができます。ProtoPie Connectを使って作成したいくつかのデモは、ProtoPie YouTubeチャンネルでご覧いただけます。
ProtoPie Connectは、socket.ioシグナルをサポートするハードウェアと直接通信できます。つまり、他のブリッジアプリを開発する必要はなく、ProtoPie ConnectとArduinoを接続するだけでOKです。この記事では、さらに簡単な方法を紹介します。それは USBで通信する方法です。この方法では、ブリッジアプリのコードを書く必要はありません。

この例では、Arduinoデバイスを使って、UNOボード上のLED、Pushボタン、ピエゾブザー、光センサーで自動車を模倣します。
スイッチを押すと車のエンジン音が鳴り、Android携帯の画面が運転席に変わる。
ホーンを叩くとピエゾブザーが鳴る。
画面上のボタンを押すとLEDが点灯する。
光センサーを覆う(または周囲を暗くする)と、車内の窓の景色が暗くなる。
下のビデオで、このプロトタイプの動きをご覧ください。
ProtoPieのセットアップ
ProtoPieでは、Receive TriggerとSend Responseを使って他のデバイスと通信することができます。Arduinoデバイスと通信するために必要なのは、チャンネルを "ProtoPie Studio "に設定し、メッセージを好きなものに設定することだけです。

参考までに、この例では以下のメッセージを使用します。

Arduinoのセットアップ
Arduinoをセットアップするには、フォト・レジスタ、LED、ピエゾ・ブザー、スイッチ、抵抗2本(LEDは330Ω、フォト・レジスタは10kΩ)が必要です。

上記で紹介したMessagesを使って、以下のコードをまとめてみた。Arduino Sketchの例です。
const int LED = 13;
const int PIEZO = 12;
const int SWITCH = 8;
const int LIGHT_VAL_CRITERIA = 600;
int lastSwVal = 0;
int lastBright = -1;
void setup() {
pinMode(PIEZO, OUTPUT);
pinMode(LED, OUTPUT);
pinMode(SWITCH, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
int swVal = digitalRead(SWITCH);
if (swVal != lastSwVal) {
if (swVal == 0) {
Serial.println("SWITCH");
}
lastSwVal = swVal;
}
int lightVal = analogRead(A4);
if (lastBright != 0 && lightVal < LIGHT_VAL_CRITERIA) {
lastBright = 0;
Serial.println("BRIGHT");
} else if (lastBright != 1 && lightVal >= LIGHT_VAL_CRITERIA) {
lastBright = 1;
Serial.println("DARK");
}
while (Serial.available() > 0) {
int b = Serial.read();
if (b == 'O') {
digitalWrite(LED, HIGH);
} else if (b == 'X') {
digitalWrite(LED, LOW);
} else if (b == 'B') {
tone(PIEZO, 1047, 100);
}
}
}
const int LED = 13;
const int PIEZO = 12;
const int SWITCH = 8;
const int LIGHT_VAL_CRITERIA = 600;
int lastSwVal = 0;
int lastBright = -1;
void setup() {
pinMode(PIEZO, OUTPUT);
pinMode(LED, OUTPUT);
pinMode(SWITCH, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
int swVal = digitalRead(SWITCH);
if (swVal != lastSwVal) {
if (swVal == 0) {
Serial.println("SWITCH");
}
lastSwVal = swVal;
}
int lightVal = analogRead(A4);
if (lastBright != 0 && lightVal < LIGHT_VAL_CRITERIA) {
lastBright = 0;
Serial.println("BRIGHT");
} else if (lastBright != 1 && lightVal >= LIGHT_VAL_CRITERIA) {
lastBright = 1;
Serial.println("DARK");
}
while (Serial.available() > 0) {
int b = Serial.read();
if (b == 'O') {
digitalWrite(LED, HIGH);
} else if (b == 'X') {
digitalWrite(LED, LOW);
} else if (b == 'B') {
tone(PIEZO, 1047, 100);
}
}
}
const int LED = 13;
const int PIEZO = 12;
const int SWITCH = 8;
const int LIGHT_VAL_CRITERIA = 600;
int lastSwVal = 0;
int lastBright = -1;
void setup() {
pinMode(PIEZO, OUTPUT);
pinMode(LED, OUTPUT);
pinMode(SWITCH, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
int swVal = digitalRead(SWITCH);
if (swVal != lastSwVal) {
if (swVal == 0) {
Serial.println("SWITCH");
}
lastSwVal = swVal;
}
int lightVal = analogRead(A4);
if (lastBright != 0 && lightVal < LIGHT_VAL_CRITERIA) {
lastBright = 0;
Serial.println("BRIGHT");
} else if (lastBright != 1 && lightVal >= LIGHT_VAL_CRITERIA) {
lastBright = 1;
Serial.println("DARK");
}
while (Serial.available() > 0) {
int b = Serial.read();
if (b == 'O') {
digitalWrite(LED, HIGH);
} else if (b == 'X') {
digitalWrite(LED, LOW);
} else if (b == 'B') {
tone(PIEZO, 1047, 100);
}
}
}
組み立て
ノートパソコンとArduino UnoをUSBケーブルで接続。
Arduino Sketch(Arduino IDE)で作成したArduinoコードをArduino Unoに送信。
ノートパソコンとモバイルを同じネットワーク環境で接続。
ProtoPie ConnectでArduinoを接続します。"... "をクリックし、USBポートを選択(ポート名は私のものと異なる可能性があります)、ボーレートに9600を入力。
💡 Arduino IDEでシリアルモニターがオンになっていると接続できないので、まずシリアルモニターをオフにしてください。

次に、NEWボタンをクリックしてパイファイルをProtoPie Connectにアップロード。
最後のステップは、モバイルでProtoPie Playerを開き、ProtoPie Connectに表示されたQRコードをスキャン。プロトタイプがConnectからPlayerに同期されたことが確認。
💡 PlayerとConnectをQRコードで接続するには、両者が同じネットワークで接続されていることを確認する必要があります。そうでない場合は、USBで接続することを紹介します。
Arduinoを利用する準備は万端です!
ProtoPie Connectを使えば、ArduinoはAndroidやiOSデバイスと通信できます。Arduinoの物理的なボタンを押すと、携帯電話に反応が起こり、携帯電話のタッチスクリーンをタップすると、Arduinoに反応が起こります。
ProtoPieはソフトウェア・プロトタイピング・ツールで、ソフトウェア・プロトタイプをハードウェア・デバイスと通信させることができます。上記の手順に従って、革命的なデザインの可能性を今日から取り入れてください。
ただし、最初にProtoPie Connectが必要ですので、ご注意を!