【書評】Prototyping Lab 第2版 ―「作りながら考える」ためのArduino実践レシピ
著者の小林 茂 先生、およびオライリー・ジャパン社より『Prototyping Lab 第2版 ―「作りながら考える」ためのArduino実践レシピ』をご恵贈いただきました。
Arduinoを使ったチュートリアル・レシピをまとめたクックブックで、約7年前に刊行された同名の書籍の大幅改訂版です。2017年1月に刊行されたばかりで、Amazonで購入できます。
オライリージャパン
売り上げランキング: 32,308
Kindle版はないようですが、オライリーの公式サイトにて電子版を購入することもできます。
書籍の概要 / 目次
本書はタイトルに「プロトタイピング」とある通り、ハードウェアで何かつくりたいものが浮かんだときに、Arduino & Processing でサクッとつくってみようという考え方の実践手法を紹介する本です。
なので、◯◯(プロダクト名)みたいなものをつくってみよう、みたいな話ではなくて、互いに組み合わせて再利用しやすいレシピをメインに構成されています。
- 入力
- レシピ 1:自然光の明るさを測りたい
- レシピ 2:距離を測りたい(赤外線センサ)
- レシピ 3:距離を測りたい(超音波センサ)
- レシピ 4:振動を測りたい
- レシピ 5:直線上の位置を測りたい
- レシピ 6:圧力を測りたい
- レシピ 7:曲がり具合を測りたい
- レシピ 8:温度を測りたい
- レシピ 9:傾きを測りたい
- レシピ 10:動きを検出したい
- レシピ 11:方位角を測りたい
- レシピ 12:人が動いたことを検知したい
- レシピ 13:何かがタッチしたことを検出したい
- レシピ 14:タッチパネルを使いたい
- 出力
- レシピ 15:光をコントロールしたい
- レシピ 16:モノを叩いて音を出したい
- レシピ 17:モノを振動させたい
- レシピ 18:モノを動かしたい(角度を変える)
- レシピ 19:DCモータをコントロールしたい
- レシピ 20:DCモータをコントロールしたい(センサによるコントロール付き)
- レシピ 21:小型のディスプレイで情報を提示したい
- レシピ 22:AC100V機器のオンオフをコントロールしたい
- レシピ 23:サウンドを再生したい
- データ処理
- レシピ 24:入力から不要な変動を取り除きたい
- レシピ 25:アナログ入力をデジタル的にいくつかの範囲に分割したい
- レシピ 26:ある状態になった後、一定時間が経過してから処理を行いたい
- レシピ 27:環境ごとにセンサの値をキャリブレーションしたい
- レシピ 28:ある状態になった瞬間に処理を行い、その後一定時間の変化を無視したい
- レシピ 29:複数の入力がある状態にマッチしたかどうか判断したい
- レシピ 30:時間変化を伴う入力があるパターンにマッチしたかどうかを判断したい
- レシピ 31:状態遷移をわかりやすく記述したい
- ネットワーク接続
- レシピ 32:スマートフォンと無線で接続したい
- レシピ 33:ローカルなトリガによりネットワーク上でアクションを起こしたい
- レシピ 34:ネットワーク上のトリガによりローカルでアクションを起こしたい
そんなわけで、ひとつひとつのレシピを順番にやっていくという読み方よりも(それもいいと思いますが)、何かつくりたいものを頭に思い浮かべつつ、その要素技術となるレシピをピックアップして読んでいく、という読み方ができるようになっています。
もちろん、レシピを紹介するクックブックパートの前には、ArduinoやProcessingの開発環境のセットアップから、
- Arduino IDEのセットアップ
- Arduinoについて
- ドライバのインストール
- Arduino IDEの起動と動作確認
- Processing IDEのセットアップ
- Processingについて
- ProcessingでArduinoボードと通信するための準備
(2章:開発環境を整える)
電子回路の基礎(それこそオームの法則から)、揃えておくと便利な電子部品や工具の紹介、
- 電子回路の基礎知識
- 電圧〜電流〜抵抗
- オームの法則
- 実際に回路を組んでみよう
- ブレッドボードとジャンパワイヤ
- 主な電子部品について
- 実際に回路を組んでみよう
- オームの法則、ふたたび
- スイッチで LEDをオン/オフする
- 自分のツールボックスを整備しよう
- そろえておくと便利な電子部品
- そろえておくと便利な工具
- ブレッドボード以外で利用できるモジュールについて
- センサ用ケーブルの作り方
(3章:電子回路の基礎と最初の一歩)
そしてArduinoの基本的なチュートリアルがあります。
- Arduinoの基礎知識
- スケッチの基本的な構造とデジタル出力
- PWMによるアナログ出力
- デジタル入力
- アナログ入力
- Arduinoボードに LCDを接続する
- LCDを自分でシールド化する
- Arduino+PCで使う
- Processingの場合
- Arduino IDEを拡張する
- ライブラリを追加する
- ボードを追加する
(4章:Arduinoチュートリアル)
また本書の冒頭にArduinoでプロトタイピングを行うことでどのような実際のプロダクトがつくられたか、という作品紹介パートがあり、実際に各作品においてArduinoや3Dプリンタを利用したプロトタイピングの過程が紹介されていて、こんなものがつくれてしまうのか、と読んでいるだけでワクワクさせてくれます。
- Orphe(株式会社 no new folk studio)
- BOCCO(ユカイ工学株式会社)
- MESH(ソニー株式会社 MESHプロジェクト)
- 光枡(光枡プロジェクト)
- 形骸化する言語(菅野創、やんツー)
- METCALFシリーズ(きゅんくん)
- NO SALT RESTAURANT(NO SALT RESTAURANT制作委員会、 aircord)
- IRKit(大塚雅和)
- HACKberry(イクシー株式会社)
- ベゼリー(チームベゼリー)
(Sonyの「MESH」もArduinoから始まった)
そして、本書全体的に言えることですが、二色刷り(一部カラー)で、きれいな図が多用されていて、わかりやすく、読みやすいです。
(本として美しいので、(電子も便利だけど)個人的には紙でずっと持っていたい)
第1版との違い
初版が出版された2010年5月から執筆時点で6年経過していたそうなので、状況は何もかもが変わっています。
個人的に所有している第1版と比べてみると、まず冒頭の「作品紹介」パートは全面的に刷新されています。第1版はメディアアート的な「作品」が100%を占めていたのに対し、第2版では「製品」(量産品)が数多く紹介されています。この6年の歳月が、「Arduinoを用いたプロトタイピング」という手法を確実に浸透させ、製品を世の中に送り出すようにまでなったんだなぁと思うと感慨深いものがあります。
また2010年5月というと、iOSはまだiPhone OS 3(iOSですらない)。Core Bluetoothが最初に入ったのがiOS 5なので、BLE(Bluetooth Low Energy)はまだ浸透するどころか規格がどうのこうのというフェーズだったかと思います。そんなわけで第2版では「BLEを利用してスマートフォンと無線通信」するサンプル(レシピ32)が今回追加されています。
またWi-Fiで無線通信してウェブサービス(myThings/IFTTT/Beebotte)と連携するサンプル(レシピ33と34)や、Raspberry PiやNode-RED、3Dプリンタを使用するプロトタイピングの実例を紹介する章(第9章)も、今回新たに追加されたものです。
その他にももちろんArduino/Processingのサンプルも現行バージョンに全面更新されていますし、Arduino IDEに追加された新機能の説明も追加されています。
個人的にやりたいこと
レシピの総まとめとして、『自律型 2輪ロボットをつくる』という実践の章があります。実際にアイデアをどうやってハードウェアのプロトタイプに昇華するかという具体例を示してくれる章です。
最近友人のiOSエンジニアが「強化学習」の勉強のためにそういうものをラズパイでつくっていて、
歩いた! #RaspberryPi pic.twitter.com/LeeiXYTBYl
— シン・キョンホン (@keonheon) 2017年3月28日
めっちゃ楽しそう、って思ってたので、これは是非やってみたいなぁと。
おわりに
Arduinoのチュートリアル・レシピをまとめたクックブック『Prototyping Lab 第2版 ―「作りながら考える」ためのArduino実践レシピ』をご紹介させていただきました。
パラパラと眺めていると「つくりたい」モチベーションがムクムクと湧いてくる本です。初心者にもわかりやすく書かれていますので、ハードウェアを絡めたものづくりに興味のある方はぜひ一度手にとってみてはいかがでしょうか。
オライリージャパン
売り上げランキング: 32,308
Eagleを使った回路設計/基板作成のワークショップに参加してきました
FabLab鎌倉にて開催された『Rapid Prototyping Lesson03 : Circuit Design』という回路設計/基板切削のワークショップに参加してきました。
Eagle という CAD ソフトを使って回路図データをつくり、「MODELA」という切削加工マシンで基板を作成、はんだ付けしてプログラムを書き込むところまでを体験できるワークショップです。
きっかけ
最近 WHILL や Moff といったハードウェアスタートアップをお手伝いしてるのですが、iOSエンジニアとしての立ち位置 ではあるので、なかなか回路設計まで自分でやる機会はありません。
とはいえ「回路設計ってどんなもんなのか」というのを一度体験してみたいとは思っていたので、こんなレアなワークショップはなかなかないかも、と参加した次第です。
以下、ワークショップでやった内容です。(+Eagleの使い方のメモなど)
Eagleを使って回路設計
パーツを置いていって(add, copy)、名前をつけて (label, name)、結線して (net) こういう回路図をつくりました。
回路部品のライブラリや、回路図はあらかじめ用意されたもの。
で、実際の基板を設計します。
route っていうコマンドで配線していくのですが、当然のことながら線同士が重なってはいけないので、部品を move コマンドで動かしたり回したりしつつ試行錯誤するのですが、これがコツをつかんでくるとなかなか楽しい作業でした。
「堤」って大きく書いてあるように、text コマンドで文字列も入れられます。
プログラミング
Arduino UNO を書き込み器にしてプログラムを書き込みます。
とりあえずLチカの定番、Blink を書き込みました。
以上で出来上がり!
シンプルな基板ですが、マイコンがついてるので、余ってるピンに他のセンサやらアクチュエータやらつなげてプログラム書き込めばいろんなことができます。
Eagleの使い方メモ
以下作業しながらメモったもの。
※人に伝えるように書いたものではなく、内容の精査もしてないのでそのあたり差し引いてご参照ください。
新規回路図作成
- 新規プロジェクト作成
- 新規設計図(schemetic)生成
部品配置
- コントロールパネル の [Libraries] > [use none] 選択(既存ライブラリの部品を使わないので)
- useコマンドでライブラリを読み込む
- addで部品を追加する(さっき読み込んだライブラリの部品も出てくる)
- CAPA(キャパシティ)を置く
- 置いたらesc
- CR2032(電池ボックス)
- Tiny138p3
- 回転は2本指タップ
- deleteで部品を消せる
- move
- copy
- 全部いっぺんにうごかしたいときは group で選択して move 、右クリックで move group
結線
- 線に名前をふる
- label
- name
- 同じ名前をつけると、接続するかのダイアログがでる
- 抵抗値をふる
- value
- 単位も入れる
- 1uF
- オームは opt + z で出てくる
- (デフォルトがオームなので、入れなくてもよい)
- ERC(Electric Rule Check)
- エラーあるとダイアログが出る
- うまくいくとダイアログでない(下部にNo errors/warningsって出る)
基板設計
- 左上のほうにある [Switch to Board] ボタンをおす
- ワークサイズを決める
- gridコマンド
- display onにする
- size10mmにする
- moveコマンド
- 50x50の正方形にする(5マスx5マス)
- gridコマンドでdefaultに戻す
- 0.5inchごとのグリッドに戻る
- この枠の中にあるものをイメージデータとして出力して切削することになる
- gridコマンド
- moveでパーツを枠内に移す
- mirrorで緑のパーツは反転させる
- 実際は2列になってるの以外は変わらない
- ratsnest
- route
- ripupで消す
- moveで回転させつつ線がかぶらないようにする
- 電池ボックスの白い線のとこはまたがってもよい
- DRC(Design Rule Check)
- Clearance
- ドリルが通るかのチェック
- 8milを0.4mmに変える
- エラーがあればダイアログが出る
- なければ下部にNo errors
- Clearance
- 文字を入れる
- textコマンド
- polygon
- 48 Document レイヤーを選択(使わないのでいつもこれを使ってる)
エクスポート
- export(top)
- displayでいったんnone選択 -> top, padsを選択
- image
- 800dpi
- monochromeにチェック
- displayでpads, dimentionを選択してまたエクスポート(holes)
- displayでdocumentを選択してエクスポート(outline)
top, holes, outlineの3つのpngファイルができる
Arduinoからのプログラム書き込みのメモ
- Arduinoで追加ハードウェアを認識させる
- スケッチブックのフォルダ配下にhardwareフォルダをつくり、attinyフォルダごと置く
- これでArduinoがattinyを認識できるようになる
- attiny13が今回のボード
- 配線
- Arduinoを書き込み器にする
- Arduinoの [File] -> [Example] > [ArduinoISP]
- [Tool] -> [Board] -> [Arduino UNO]選択
- [Tool] -> [Serial Port] USBポートを選択
- 書き込むと、ArduinoUNOが書き込み器に変わる
- 書き込む
- [Tool] -> [Board] -> [ATTINY13] 選択
- [Tool] -> [Programmer] -> [Arduino ISP]
- [Tool] -> [Burn Bootloader]
- エラーが出なければ書き込み準備完了
その他メモ
- Eagleのライセンス
- フリー版では10cm x 10cmまでの基盤をつくれる
- Eagleの独自ライブラリを作成する
- 既存ライブラリを開くと編集画面になる
- ライブラリは パッケージ デバイス シンボルの3つにわかれている
- デバイス 外装やレイアウトを定義するもの
- シンボル 回路図用のファイル
- パッケージ デバイスとシンボルを関連づける
- 基板設計ソフト、KiCad ていうのを使う人も多い 有料
所感
my基板は我が子のようにかわいいです。プログラムや電子回路の知識は一切必要なかったので、ハードをつくる予定がなくてもとりあえず体験してみるのおすすめです。
次回 Lessone04 も同様に「Eagleで回路設計 〜 基板切削」とのことなので、興味のある方はぜひ参加してみると良いかと思います!
Rapid Prototyping Lesson04 : Circuit Design [Actuator] | Peatix
コネクタを挿すだけで電子工作!GROVEシステムのセンサ・アクチュエータのまとめ
konashi + GROVE拡張ボード、あるいは Arduino + ベースシールド を使うと、 コネクタを挿すだけ でセンサやアクチュエータを使用した回路を作成できるようになります。
ハンダ付けやブレッドボード上で回路を組む必要がないので、本格的なハードの開発はハード屋さんに任せる想定で、iOSアプリ側に専念したい僕のような人間には超ありがたいシステムです。
※詳細は下記連載記事をご参照ください
いろいろセンサ類を揃えておくとプロトタイピングの際に便利なので、本家GROVEサイト(海外)ではなく、Amazon.co.jpでさくっと買えるモジュールを調べてみました *1。
センサ(I2C)
I2C デジタル光センサ
GROVEシステムのI2C接続デジタル光センサです。TSL2561を搭載し、光強度をデジタル信号に変換します。
検出する光のスペクトラムを、赤外線,フルスペクトラム,人間の可視光の3つのモードから選択できます。
- 検出モード選択可能
- 高分解能16bitデジタル出力 400KHz I2Cファストモード
- ダイナミックレンジ 0.1~40,000LUX
- プログラム可能な割り込み機能(ユーザー設定可能な上下閾値)
I2C カラーセンサ
GROVEシステムのI2C接続カラーセンサです。 TCS3414CSを搭載。2行8列のフィルターされたフォトダイオードと16bitのADコンバータを内蔵しています。 環境光の色度や、物体の色を検出できます。
- 16bitデジタル出力 I2C 400KHz
- SYNC拡張ピンによる外部光源とのシンクロ可能
- プログラム可能な割り込み機能(ユーザー設定可能な上下閾値)
I2C 気圧センサ
GROVEシステムの気圧センサーです(気温も測れます)。通信方式はI2Cです。
高分解能なBMP085を搭載し、300hPa ~ 1100hPaあるいは海抜+9000m ~ -500m を0.03hPa(0.25m)単位で計測できます。特徴
- 広範囲な圧力レンジ(300hPa ~ 1100hPa)
- I2Cインターフェース
- 完全に構成済み
- 低消費電力:5μA (秒間1サンプリング時)
- 低ノイズ: 1. 0.06hPa(0.5m) ウルトラローパワーモード時
2. 0.03hPa(0.25m) ウルトラ高分解能モード時
3. 0.1m以下も可能(rms noise)
I2C 3軸ジャイロセンサ
I2C タッチセンサ
I2C 三軸加速度センサ
GROVEシステムの三軸加速度センサです。通信方式はI2Cです。
MMA7660FC 搭載。資料ページにArduino用ライブラリがあります。
I2C 三軸加速度センサ ADXL345搭載
売り上げランキング: 353,776
GROVEシステムの三軸加速度センサです。ADXL345搭載。通信方式はI2Cです。
特徴
- 電源電圧:3V~5V DC
- 高感度三軸加速度センサ
- スタンバイモード時消費電力:0.1μA
センサ(アナログ)
水分センサ
GROVEシステムの水分センサです。水分量による土中の抵抗値変化に応じてアナログ電圧を出力します。
※増幅回路やケーブルコネクタ部などがむき出しになっています。使用される際は、センサ部分以外が濡れないようにご注意下さい。特徴
- 電源電圧:3.3V~5V
光センサ
温度センサ
音センサ
GROVEシステムの音センサーです。マイクで拾った音声をオペアンプで増幅して出力します。
特徴
- 電源電圧:4V~12V(標準5V)
- 低自己消費電流:4mA(電源5V時)
- ゲイン調整可能
センサ(デジタル)
PIRモーションセンサ
GROVEシステムのPIRモーションセンサです。
検出範囲内で動きがあると、SIGピンがHIGHになります。
- 電源電圧:3~5V
- 検出角度:120度
- 検出距離:最大6m
- 検出距離、ホールド時間調整可能
デジタル温度- 湿度センサPro
売り上げランキング: 395,876
GROVEシステムのデジタル温度- 湿度センサです。
独自の1wire通信方式です。資料ページにサンプルスケッチとライブラリがあります。特徴
- 電源電圧:3.3V~6V
- 測定時電流:1~1.5mA
- スタンバイ時電流:40~50μA
- 測定レンジ:湿度5%~99% 温度-40~80℃
水センサ
GROVEシステムの水センサです。
出力ピンは1MΩ抵抗でプルアップされており、センサ端子に水滴が付くとGNDとショートして出力の電圧が下がる仕組みです。
アルコールセンサ
GROVEシステムのアルコールセンサです。高感度な半導体アルコールセンサを搭載。
特徴
- 電源:5V DC 最大電流 140mA(ヒーターON時)
- 検出濃度:20~1000ppm のアルコール
- デジタル入力1本(SEL),デジタル出力1本(DAT)
- 高感度
- 速い反応速度と使用後の復帰
- 超寿命
ラインファインダ(近接センサ)
GROVEシステムのラインファインダ(近接センサ)です。
特徴
- Groveコネクタ(2mmピッチ4ピン)
- 電源電圧:5V DC
- インジケータLED付き
- 2値出力
- 反応距離調整可能
センサ(シリアル通信)
GPS
GROVEシステムのGPSです。
E-1612-UB GPSモジュールを搭載しu-center software(GPSモジュールの製造元による評価用ソフト)を使用できます。もしくはシリアルポートからGPSパケットを直接読み取ってください。モジュールは、高性能の u-blox 5測位エンジンを備えたスタンドアロン GPSレシーバーのファミリです。
特徴
- 超高感度: -160dBm
- 低消費電力:最大 40mA(3.0V時)
- ボーレート設定可能:4800~57600 Baud
- NMEAおよびU-Blox 6プロトコルをサポート
赤外線受信機
アクチュエータ
I2C OLEDディスプレイ128×64
売り上げランキング: 505,015
GROVEシステムのOLEDディスプレイです。通信方式はI2Cです。
I2C モータードライバ
GROVEシステムのモータードライバです。L298搭載。通信方式はI2Cです。
2個のDCモーターまたは1個のステッピングモーターを制御できます。
ATmega8Lを搭載してI2C通信により簡単に制御できるボードになっています。特徴
- 外部電源電圧:6V~15V
- 1チャンネル当り最大出力電流:0.7A
- I2Cバス電圧:5V
ジョイスティック
GROVE用のジョイスティックです。
X軸、Y軸がそれぞれの位置に応じたアナログ電圧で出力されます。
ステックを押し込んだ(ボタンが押された)場合、X軸に電源電圧が出力されます。その間、X軸の位置は不明になります。●回路図(商品写真2枚目)とピン配置
1:X軸出力
2:Y軸出力
3:VCC
4:GND
LEDバー
GROVEシステムのLEDバーです。赤x1、黄x1、緑x8の全10セグメントをそれぞれ最大256段階(16bit)で輝度指定可能。通信方式は2線式シリアル。
複数個連結可能。
リレー
GROVEシステムのリレーです。リレー駆動用のトランジスタも乗っているので、簡単に使えます。
赤外線発信器
GROVEシステムの赤外線発信器です。
TXから入力された信号がトランジスタで増幅されて赤外線LEDから発信されます。
他の多くのGROVEのパーツと違って、1番ピンは未接続(NC)、2番目のピンがTXになっています。
7セグメント4桁ディスプレイ
GROVEシステムの7セグメント4桁表示のLEDディスプレイです。
TM1637を搭載し、たった2本のデジタルピンで7セグメントLED4桁を制御できます。
シリアル接続LCD
GROVEシステムのシリアル接続LCDです。
GROVE - スターターバンドル(http://www.amazon.co.jp/dp/B00CDFQHXY)付属品と同等のものですが、スターターバンドル付属品のみPower Up Resest機能があります。※バックライトだけでなくLCDの電源もシリアルからのコマンドでON/OFFされるので、電源を繋いだだけでは何も表示されません。
テープLEDドライバー
GROVEシステムのテープLEDドライバです。
特徴
- カスケード接続可能
- テープLEDは5m以下を推奨
- PWM出力
- 256段階の輝度レベル
RGB LED
GROVEシステムのチェーン接続可能なRGB LEDモジュールです。
*1:2月ぐらいに書きかけでそのまま忘れてた記事なので、売り切れてる可能性もあります
家電を自由に操作するiOSアプリがつくれる『IRKit』
カヤック時代の恩師 maaash 氏 *1 が、IRKitという新デバイスを個人で開発(!)して、本日よりAmazonで販売を開始しました。
このIRKitをつかうと、家電を操作するiOSアプリを好きなようにつくることができます。つまり、自分好みのリモコンアプリをつくれます。
対応している家電は・・・という制約はとくになくて、普通のリモコン(赤外線リモコン)で操作できるものなら何でもOKです。
しくみ
IRKit(デバイス)が赤外線信号を送る機能を持っていて、IRKit SDK(を組み込んだアプリ)から「どういう信号を送るか」を制御する、という感じです。ざっくり。
学習リモコンやPlutoやiRemoconとどう違うの?
学習リモコンは、もともとあるリモコンの赤外線信号のパターンを学習して、覚えさせることのできるもの。PlutoやiRemoconはそれらを公式アプリ上で好きなように組み合わせたりできるもの。
IRKitの最大の特徴は、iOS SDKが用意されているので、iOSアプリを自分で好きなようにつくれるというところにあるのではないでしょうか。
すなわち、
- 好きなようにUIをカスタマイズできる
- GPSや加速度センサや等のiOSデバイスが持っているセンサ類とも組み合わせて使える
- TwitterやFacebook等の外部APIの機能とも組み合わせて使える
- 他のiOSと連携させて使えるデバイスとも組み合わせて使える
と可能性は無限大です。
さらにいえば、IRKitはArduino互換なので、公開されているファームのソースをカスタマイズして書き込むことも簡単*2ですし、空いてるピンにセンサを追加したり、何なら公開されているハード仕様に沿って自分でIRKit互換機をつくったりと、ほとんど何でもありなデバイスです。
IRKit iOS SDKをプロジェクトに導入する
CocoaPodsから入れるのが簡単です。
プロジェクトのPodfile に
platform :ios, '7.0' pod 'IRKit', :git => 'https://github.com/irkit/ios-sdk.git'
と書き足して、あとはターミナルから
pod install
するだけ。
API Key を取得する
API KeyはコマンドラインからcurlでAPIをたたいて取得できます。
$ curl -d "email={your email}" "http://api.getirkit.com/1/apps"
確認メールが届くので、リンクを踏むと、
Congratulations!
Here's your apikey: "XXXXXXXXXXXXXXXXXXXXXXX"
Paste this code in in your AppDelegate's application:didFinishLaunchingWithOptions:
[IRKit startWithAPIKey:@"XXXXXXXXXXXXXXXXXXXXXXXXX"];
と API Key がサンプルコード付きで得られます。
初期化
AppDelegateでヘッダをインポートし、
#import <IRKit/IRKit.h>
application:didFinishLaunchingWithOptions: で初期化メソッド(先ほどAPIKey取得時に表示されたコードのコピペでOK)を呼びます。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [IRKit startWithAPIKey:@"#{ fill in your apikey }"]; return YES; }
この時点でビルドしてアプリを動かしてみると、ログに、
[IRKit]successfully registered!
と出力されます。
IRKitを見つける
公式アプリでも使われている、IRKitを見つける(セットアップも込み)ためのビューコントローラ "IRNewPeripheralViewController" を表示します。
ヘッダインポートして、
#import <IRKit/IRKit.h>
IRNewPeripheralViewControllerDelegateへの準拠を宣言しておいて、
<IRNewPeripheralViewControllerDelegate>
IRKitが見つかったときに呼ばれるデリゲートメソッド(required)を実装しておきます。
- (void)newPeripheralViewController:(IRNewPeripheralViewController *)viewController didFinishWithPeripheral:(IRPeripheral *)peripheral { NSLog( @"peripheral: %@", peripheral ); [self dismissViewControllerAnimated:YES completion:^{ NSLog(@"dismissed"); }]; }
で、起動時とか、ボタンタップ時とか何らかのタイミングで IRNewPeripheralViewController を表示するようにします。
- (IBAction)findTapped:(id)sender { if ([IRKit sharedInstance].countOfReadyPeripherals == 0) { IRNewPeripheralViewController *vc = [[IRNewPeripheralViewController alloc] init]; vc.delegate = self; [self presentViewController:vc animated:YES completion:^{ NSLog(@"presented"); }]; } }
これで、接続済みの IRKit が 0 の場合に、こういう画面が表示されます。
赤外線信号を学習する
IRNewSignalViewControllerDelegateへの準拠を宣言します。
<IRNewPeripheralViewControllerDelegate, IRNewSignalViewControllerDelegate>
信号学習が完了したときに呼ばれるデリゲートメソッド(required)を実装します。
- (void)newSignalViewController:(IRNewSignalViewController *)viewController didFinishWithSignal:(IRSignal *)signal { if (signal) { NSLog( @"learnd signal:%@", signal ); } [self dismissViewControllerAnimated:YES completion:^{ NSLog(@"dismissed"); }]; }
IRNewSignalViewController を表示するようにします。
- (IBAction)learnTapped:(id)sender { IRNewSignalViewController *vc = [[IRNewSignalViewController alloc] init]; vc.delegate = self; [self presentViewController:vc animated:YES completion:^{ NSLog(@"presented"); }]; }
こんな画面が表示されるようになります。
学習した信号を送信する
長くなってしまったので、簡単に書きます。
信号を送る場合は IRSignal の sendWithCompletion: メソッドを呼ぶだけ。
まとめて複数の信号を送る場合は、IRSignals オブジェクトに学習した IRSignal オブジェクトを追加し、それを sendSequentiallyWithCompletion: メソッドで送信します。
_signals = [[IRSignals alloc] init]; // and add a signal to the collection [_signals addSignalsObject:_signal]; // send multiple IRSignal-s sequentially [_signals sendSequentiallyWithCompletion:^(NSError *error) { NSLog( @"sent with error: %@", error ); }];
iBeacon+IRKitで家に着いたら自動でXXXXをOn
iBeaconの実装は『iOS7 Sampler』を参考にしてください。
家電のOn/Off信号を学習させておいて、ビーコン端末を家の入り口辺りに置いておいて、
- didEnterでOn
- didExitでOff
するように実装しておけば、「家に着いたらエアコンやテレビや明かりを自動でon」「家を出るとき自動でoff」みたいなことができます。・・・と思ってますがまだそこまで実装できておりません
IRKit関連ページ
オフィシャル
ニュース系
- iPhoneで家電を操作できるリモコンデバイス IRKit が発売、Arduino互換で電気回路の追加も可能 - Engadget 日本版
- http://japan.internet.com/webtech/20140115/7.html
- http://www.yomiuri.co.jp/adv/job/release/detail/00008031.htm
- スマホで家電を操作する「IRKit」、対応アプリ用SDKも公開 - ケータイ Watch
- オープンソースの赤外線リモコンデバイス「IRKit」、iOSアプリを作れるSDKも公開:CodeZine(コードジン)
- http://www.excite.co.jp/News/it_g/20140115/Engadget_iphone-irkit-arduino.html
- http://news.ameba.jp/20140115-403/
開発情報etc...
- http://toybox.cubejam.jp/makers/?p=698
- http://naonya3.me/blog/2014/01/05/irkit/
- go-dnssd で irkit を探す - soh335 memo
- golang と multicast udp で irkit を探す - soh335 memo
- IRKit iOS SDKで赤外線キャプチャしてみる – kwLog
- http://mobiletou.ch/2014/01/iphone%E3%82%92%E5%AE%B6%E9%9B%BB%E3%83%AA%E3%83%A2%E3%82%B3%E3%83%B3%E3%81%AB%E3%81%97%E3%81%A6%E3%81%97%E3%81%BE%E3%81%86irkit%E3%82%92%E8%A9%A6%E3%81%99%EF%BC%81
- IRKit iOS SDK - iOSを家電リモコンにしてしまう魅力的なデバイス MOONGIFT
*1:このブログを始めるようアドバイスをくれた人。
*2:USBでPCとつないでArduino IDEから書き込むだけ。
TwilioハッカソンとArduinoワークショップに参加してきました
週末は予定を入れないとKindleで延々とマンガを買っては読み続けてしまうので、手を動かせるハッカソンとか興味ある分野のワークショップにはなるべく参加するようにしてます。
で、先週末参加したのがタイトルにある2つ。
それぞれ振り返り、所感など。
Twilioハッカソン
もともとTwilioについては「確かSMS送れるAPIだよね」(電話は知らなかった)ぐらいの認識しかなく、週末ダラダラするよりは、ぐらいの感覚で参加したのですが、結果的に参加してすごくよかったです。
何が良かったって、僕はiOSしかできない不完全なプログラマーで、サーバーサイドやObjective-C以外の別言語はずっと避け続けてきたのですが、TwilioはiOS向けSDKに同梱されているサンプルアプリを動かすだけでもサーバーサイドの実装が不可欠で、強制的にその辺りを勉強せざるを得なくなったことです。
最初はどこかのレンタルサーバーを借りて、チュートリアルに書いてある PHP のコードをアップしてみようと思ったのですが、今後しばらくは iOS 及びクライアントサイドに軸足を置き続けることを考えると、Parse でサクッとサーバーサイドを書けるようになっといた方がいいんじゃないか と思い、Twilio のサーバーサイドを Parse でやる方法を模索することにしました。
で、ハッカソン中に書いたのがこちらの2記事。
自分は JavaScript も node.js もわからないので、問題解決の見通しを立てにくく、大変苦労しました。JS および node.js ぐらいはかじっとこうと強く思いました。
Arduino ワークショップ
日曜に参加した Arduino ワークショップは、音声合成LSI + スピーカーを使い、Arduino から AquesTalk というライブラリを使ってしゃべらせる、というものでした。
自分の Arduino 経験は、2週間前に一度「Lチカ」させてみた程度です。
(2013年9月22日の記念すべき初Lチカ)
収穫としては、なんとなくぼんやり興味のあった電子工作/フィジカルコンピューティングの分野について、自分はこういうことには興味ある/ない、といった方向性が見えてきたこと。
このへんも引き続き勉強していこうと思います。
寿司
アメリカに行く前に鎌倉のアパートは退去してしまったので、今は一時的に妻の実家(福島)に滞在しており、都内に出るたびに違うところに泊まるようにしてます。
今回は築地。
今朝、AM5:30に築地市場に行き、
寿司をいただいてきました。
うまかったです。