1Click飲みRomoCartTempescope色色[:iroiro]Other Projects

2015年1月4日日曜日

Hardware Protoyping Speed Test: Phidgets vs Arduino

I recently had a chance to play around with Phidgets, which is yet another hardware prototyping kit.
I've always considered Arduino as sufficient, so why would I ever want to take on a new prototyping kit?


The standard Phidgets I/O board
The website claims a "quick" and "easy to use" set of sensors and controllers to "get projects finished on time".
If Phigets can provide a faster development iteration loop, which I believe is the single most important thing in hardware development, that may be enough of a reason to switch over.

In this article, I will implement 3 standard hardware prototypes, and compare their implementation speeds using Phidgets and Arduino.


What is Phidgets?

The biggest different between Phidgets and other prototyping kits is that the Phidgets controller itself isn't programmable.
Instead, you connect Phidgets (proprietary) sensors to the I/O board (pictured above), which connects to a PC.  You can use high-level programming languages (Java/C++/etc) to directly control the sensors/actuators.

Some characteristics of Phidgets include:
Simplicity+Speed →No need to mess around with resistors and current calculations, just plug-in the components and you're ready to go.
Connectivity →You're working on your PC from the start, so I've found that connecting your newly made hardware to other programs/network is very simple.
(Really) expensive →You have to use the components provided by Phidgets to take advantage of the two points stated above.  The components are modularized (to enable the plug-in capability), making them very expensive.


Speed Tests!

I compared Arduino and Phidgets by implementing 3 very simple prototypes:
#1 Blink →Just blinking an LED
#2 Servos →Using a potentiometer to control a servo
#3 Pedometer →Using an accelerometer to count steps, and display it on an LED array

Here's a video showing the implementation, side-by-side:



#1 Blink

The LEDs are made to blink with 500ms period.

■Implementation details

Arduino source
Phidgets source

■Time to implement

Arduino: 1m 44s
Phidgets: 1m 11s

Not a complete landslide, but implementation with Phidgets was 30 seconds faster.
Arduino had the handicap of needing resistors on the LED, which Phidgets doesn't need.
However, the output pin on Phidgets needed a screw driver to fix, which was more work than I'd expect from a rapid prototyping kit...

■Cost

Arduino: $24(Arduino Uno
Phidgets: $80(Phidgets Interface Kit 8/8/8)

Even the standard Phidgets board is very expensive.



#2 Servos

Here, we let users change the position of the servo by rotating the potentiometer.

■Implementation details

Arduino source
Phidgets source
On both of the implementations, we are receiving the potentiometer readings as analog input, converting it to angles, and sending it to the servo.

■Time to implement

Arduino: 6m 07s
Phidgets: 3m 20s

Phidgets took about half the time of Arduino.
Most of this is because Arduino couldn't power the servo, so I needed to add an external power supply.

In terms of software, the Phidgets Java SDK lets you write in an event-driven fashion which I personally like.

■Cost

Arduino: $37(Arduino Uno, Servo S03T, Potentiometer)
Phidgets: $139(Phidgets Interface Kit 8/8/8, Servo Controller, Servo, Rotary Encoder)

Adding sensors and switches really ups the cost of Phidgets prototyping.



#3 Pedometer

Here, we use an accelerometer to detect walking, and count the footsteps which we display on an LED array.

■Implementation details

Arduino source
Phidgets source
I implemented a very simple high-pass filter.  I calculate the power: sqrt(x^2+y^2+z^2), determine its moving average, subtract it from the power, and detect zero-crossings of the high-passed power.

■Time to implement

Arduino: 13m 45s
Phidgets: 10m 15s

Implementing the walking detection was considerably faster on Phidgets, but adding the LED array took very long, resulting in a very dull result.
(Without the LED array, it only took 4 minutes to implement a pedometer on Phidgets.)
While I only needed to plug the accelerometer into the USB port in Phidgets, I had to Google the pin layouts of the accelerometer module for Arduino.

On the software side, the strength of being able to program using a high-level programming language on Phidgets really showed.
I was able to use various (self-made) utility libraries to speed up the implementation:
a moving average calculator class which makes calculating moving averages a one-liner,
a graph drawing toolkit that let me visualize and debug the accelerometer output
The time spent programming was a clear win for Phidgets: (Phidgets: 3 mins Arduino: 6 mins)

■Cost

Arduino: $31(Arduino Uno, Accelerometer
Phidgets: $150(Phidgets Interface Kit 8/8/8PhidgetSpatial 3/3/3 Sensor)

Just to press home the point, Phidgets is expensive.



Results

Just looking at the implementation speed, Phidgets was faster on all 3 tests.
There were some (good and bad) characteristics of Phidgets that were made apparent in the tests:


■Good things about Phidgets


1. Very fast hardware construction
As long as we stay in the realm of what Phidgets provide as modular components, prototyping hardware in Phidgets is very fast.

2. Lets you use various software resources

In the third test, I was struck by how enabling it is to be able to use the various Java utility libraries that I'd accumulated over time, in a hardware prototyping setting.
Phidgets makes hardware prototyping as easy as writing quick and dirty scripts on your PC.

3. No knowledge of electronics needed

As far as I've played around with (which isn't much), Phidgets seems to let you prototype hardware with very limited knowledge of electronics.  This may be very beneficial for programmers who have no experience in hardware.


■Bad things about Phidgets


1. Difficult to build stand-alone gadgets
Phidgets needs to be controlled by a PC, which means that its difficult to build portable/wearable devices.

2. Not simple enough

Why do I need a screw driver on a prototyping board?
I don't think the designers really thought what it means to do rapid prototyping.
The fact that I need to use a breadboard for a simple task as making an LED array (in task #3) is disappointing.
People should be able to prototype with their bare hands. (no screw drivers, no breadboards, no jumpers)

3. Doesn't scale

The good thing about Arduino is that the more you improve your prototype, the closer you get to a product.
With Phidgets, at some point you will need to redesign your hardware, and convert everything you made into "proper" electronics (which won't be a problem if you're happy with only having one copy of your hardware.)

4. Expensive

In the tests above, the prototypes using Phidgets was 3~5 times as expensive as Arduino.
This means that people can't really buy a new Phidgets board for each project, so you need to take everything apart before you start a new project.
The use cases for which this is OK is fairly limited (discussed below).


Summary

There are several situations where I thought using Phidgets would be perfect.

Have a set in your meeting room/brainstorming room

Why not have a Phidgets set lying around in your meeting room?
The speed at which Phidgets lets you create prototypes means that you can probably make prototypes in the middle of a brainstorming session.
This would be a fantastic alternative to drawing pictures or building mocks with LEGOs,
and the downsides of Phidgets portrayed above aren't so critical if the prototypes only need to last for 20 minutes.
(I would like point (2) above to be fixed before I buy a set for my meeting room though...)

When every second counts
There are times when you need to build a working prototype as fast as is conceivably possible, like in a hackathon, or if you need to show your boss that the idea he's about to present to the board in an hour just doesn't work. (it's happenned.)
It may be good to have these things lying around as part of your arsenal.

If you're a programmer who's intent on not learning electronics

I think it's great as a communication tool for programmers who have no skill (or intent on learning) electronics to show their ideas to hardware developers in the team, who may happily implement it on a more robust platform.


I would say that for someone who just wants to start learning electronics now (including children), I'd suggest something else (e.g Arduino).  However, the various characteristics of Phidgets do make them fabulous for certain situations.

If you want to play around with Phidgets, try buying the two kits below:
Phidgets Interface Kit 8/8/8 →standard I/O board for connecting the sensors to your PC
Phidgets Starter Kit #1 →kit containing various Phidgets compliant sensors.

ハード開発スピードテスト:ArduinoとPhidgetsを比較してみた三本勝負

こんにちは。河本です。
ハードウェアのプロトタイピングというとArduinoが有名ですが、最近Phidgetsという開発環境を入手しました。
Phidgetsの標準I/Oボード
「プロト開発なんてArduinoで充分じゃん!」と思っていたのですが、公式ページでは「とにかく早く簡単に」開発が行えることに自信を持っている様子です。
試行錯誤を高速に行うためにも、開発スピードは最重要。もしArduinoより早く開発できるのなら確かに魅力的です。

そこで今回は、ArduinoとPhidgetsの両方で電子工作の定番課題3種を実装して、実装の早さ、簡単さ、その他特性を比較してみました。



そもそもPhidgetsってなに?

電子回路の知識がほぼ0でセンサ/アクチュエーターを使った開発ができるプラットフォームです。
↑みたいなI/Oボードにセンサ他を刺すと、PCからJava/C++等の高級言語で制御できます。
特徴としては:
簡単 →抵抗だの電圧/電流だの気にせずとも、モジュールを刺せば動きます。
早い →最初からPC上で高級言語で制御するので、ハードとPC/ネットを連携させるシステムがすぐ書けます。
高い →各パーツがモジュール化されているため、スイッチ一つとっても目が飛びでるブルジョア設定です。


比べてみた

以下の3つの定番課題をArduinoとPhidgetsの両方で実装してみました:
#1 Blink →ただのLチカ
#2 Servos →ロータリーエンコーダーでサーボの角度を制御できる回路
#3 Pedometer →加速度センサを使って簡単な歩数計を作る

やってみた:




#1 Blink

LEDを500ms周期でチカチカさせます。

■実装の説明

Arduinoのソース
Phidgetsのソース
説明は特に要らないですよね。

■実装時間

Arduino: 1分44秒
Phidgets: 1分11秒

圧勝というわけではありませんが、Phidgetsのほうが早く実装できました。

ArduinoではLEDのために抵抗が必要なぶん少し時間がかかりました。
ただPhidgetsは出力ピンがネジ止めが必要なため、予想以上に手間取りました。

ソフト面では特に大きな違いはないと思います。


■値段

Arduino: $24(Arduino Uno
Phidgets: $80(Phidgets Interface Kit 8/8/8)

Phidgets高ぇ。。。



#2 Servos

ユーザがロータリーエンコーダーを回すと、入力に応じてサーボの角度を変えます。

■実装の説明

Arduinoのソース
Phidgetsのソース
ロータリーエンコーダーの値をアナログ入力で受け取り、この値を角度に変換してサーボに送るだけです。

■実装時間

Arduino: 6分07秒
Phidgets: 3分20秒

Phidgetsは半分ぐらいの時間で実装できました。

Phidgetsでのハード製作は3箇所ケーブルを刺すだけ。
それに対してArduinoは一度サーボを動かそうとして失敗し(電流不足のため)、別電源を持ってきたりしてます。

ソフト面では、Phidgetsはイベントドリブンで書けるため、個人的には好みです。


■値段

Arduino: $37(Arduino Uno, Servo S03T, ロータリーエンコーダー)
Phidgets: $139(Phidgets Interface Kit 8/8/8, Servo Controller, Servo, Rotary Encoder)

スイッチやセンサが入ってくると、Phidgetsの値段が跳ね上がります。



#3 Pedometer

加速度センサで歩行を検知し、歩数に応じてLED配列を点灯させます。

■実装の説明

Arduinoのソース
Phidgetsのソース
歩行の検知のためには、非常に簡単なハイパスフィルタを作ります。加速度のパワー値(sqrt(x^2+y^2+z^2))の移動平均を計算し、パワー値から移動平均を引いたものをハイパス加速度として使い、これのゼロクロスを検知して歩数を数えます。

■実装時間

Arduino: 13分45秒
Phidgets: 10分15秒

歩数の検知まではPhidgetsが圧倒的に早かったのですが、LEDの配列を用意するところで手間取り、あまり差がない結果となりました。

LED配置を除くと、Phidgetsでは4分程度で歩数計が作れてしまいました。
Phidgetsでは加速度センサはUSBポートに刺すだけなのに対し、Arduinoはネットでピン配列を調べたり配線したりする作業に時間が取られたのが印象的です。

ソフト面では、歩行検知でPhidgetsの強みがフルに出ました

移動平均の計算のために(自作の)移動平均計算用クラスを使いまわしたり、
加速度データをグラフ描画ライブラリで画面上に表示することでテスト+デバッグが迅速に行えたため、プログラム開発が素早く行えました。
プログラミングの時間だけを見るとPhidgetsは圧勝です。(Phidgets:3分半 Arduino:6分半)

■値段

Arduino: $31(Arduino Uno, 3軸加速度センサ
Phidgets: $150(Phidgets Interface Kit 8/8/8PhidgetSpatial 3/3/3 Sensor)

やはりPhidgetsのコストは桁が違いますね。



結果

実装スピードだけで見ると、Phidgetsは3つのテスト全てで勝ちました。
とはいいつつ、色々な得手不得手が見えてきました。

■Phidgetsの長所


1. ハード製作が早い
最初に書いたように、Phidgetsではモジュールをプチプチ繋げるだけなので、その範囲で工作できるうちは非常に気軽に早く製作が行えます。

2. PCのリソースがフルに使える
#3のテストでは、僕が自作した便利クラス(移動平均、グラフ描画等)を使うことで、ハードの開発・テスト・デバッグがただのソフト開発と同じ簡便さで行えました。
また制御プログラムをPCの他のプログラムや、ネットワークと連携させることも非常に容易くなります。

3. 電子工作の知識が要らない
軽く遊んだ限りでは、電子工作を何も知らないソフトウェア開発者がハードのプロト開発を行うことが簡単にできそうです。これまで画面の世界に留まっていたプログラマーがリアルワールドをプログラミングできるようになるのは非常に価値の高いことだと思います。

■Phidgetsの弱点


1. スタンドアローンのガジェットが作れない
あくまでPCに接続して動かすものなので、持ち回りのよさが必要なガジェット(ウェアラブルとか)は少し厳しいです。

2. 「簡単さ」の詰めが甘い
個人的に致命的だと思いました。
Digital Outピン(↑の作例でLEDを刺してたところ)に配線するために何故ドライバーが必要なのでしょうか。本当に早いプロト開発を行うには、工具要らずで手でパチパチ接続できるようにしたいものです。

3. スケールしない
Arduinoの良さは、プロトの完成度を高める過程で製品に近づくという点だと思います。
Phidgetsはあくまでプロト開発しか出来ないため、いくらプロトを改良したところで製品には近づきません。
いつかちゃんと電子回路化しないといけないのだとすると、二度手間に感じる場合もあるかもしれません。

4. 高い
やはりArduinoと比べて試作が3~5倍ほど高くなります。
Phidgetsボードを何枚も持つわけにはいかないので、作っては壊しを繰り返すことになります。
この物作りが成り立つのは、結構ユースケースが限られそうです。


まとめ

以上を踏まえてPhidgetsを使ったらいい場面を考えてみたいと思います。

会議室とかに置いておく
 会議室にPhidgetsを1セットを置いておき、絵コンテを書いたりレゴでモックを作る感覚で、ワイワイ喋りながらガジェットを作る、といったユースケースには最適だと感じました。
 アイディアをすぐに遊べる状態にすることで、アイディア出しの活性化効果は抜群だと思います。
 「挿すだけで動く」というメリットが活かせて、「高い」というデメリットが気にならないユースケースです。
 (ただしその場合は、工具が必要な部分を直してもらいたいですが・・・)

開発スピードが命の場面
 ハッカソンで「とりあえず動くものをすぐに作らないといけない」、上司が無茶言うんで「それじゃうまく行かないよ」ってすぐに見せたい場合など、一分一秒の実装スピードが効く場面では非常に強いと思います。

俺は電子工作なんて絶対覚えないぜ、っていうプログラマー
 プログラマーがアイディアを形にして、チームのハードウェア開発者に伝えるための手段として使えると思います。

全部少し特殊な状況です。
「これから電子工作を始めたい」という人は、素直にArduinoを選んだほうが良いです。

色々難ありですが、場面によっては非常に力を発揮するプラットフォームだと思いました。
遊んでみたい、という人は以下の2つを買っておけばとりあえず大丈夫です:
Phidgets Interface Kit 8/8/8 →I/Oボード。ここにセンサを繋げる。
Phidgets Starter Kit #1 →Phidgets対応センサのセット。RFIDリーダー/ライタとか付いてて面白い。

こういったものを使って、少しでも沢山のプログラマーがハードの世界に飛び出てくれることを願います。