寄付窓口はこちら

Swift Hardware Hacking | try! Swift Tokyo 2019 2-4

このトークでは、Swiftを使ったハードウェアのハックの方法をお話します。猫の貯金箱(上にコインを置くと、猫がそれを貯金箱の中に引き込むもの)の機能を、マイクロコントローラーや様々なセンサーをつかって拡張する様子をお見せします。 内容は

・お金が預けられた際にカウントする。 ・預金総額/総合収支を音声でお知らせする。 ・Bluetooth LEで電話と接続し、デバイス間で情報を送る。

です。このトークの目的は、どのようにSwiftでハードウェアを扱うことを始めるか理解することです。自分のプロジェクトで試せるように、必要十分な土台を提供します。

f:id:niwatako:20190322113214j:plain

f:id:niwatako:20190322113304j:plain

f:id:niwatako:20190322113335j:plain

猫ちゃん銀行です。

f:id:niwatako:20190322113351j:plain

より便利に。

PINナンバーを入れると猫が出てきて、振り込まれる、新しい預金残高がアプリに表示される

f:id:niwatako:20190322113438j:plain

ラズベリーパイが便利、Swiftつかえていろいろ繋げられる

f:id:niwatako:20190322113448j:plain

ハードウェアデバッガーで様々なテスト、おかしくなったことを調べられる

f:id:niwatako:20190322113453j:plain

センサーをラズパイにつなげる

プリコンパイルされたSwiftを使う

f:id:niwatako:20190322113539j:plain

f:id:niwatako:20190322113546j:plain

f:id:niwatako:20190322113600j:plain

ラズパイ用のツール、Geanyでビルドコマンドをカスタマイズする

ハードウェアハックをはじめましょう

f:id:niwatako:20190322113630j:plain

f:id:niwatako:20190322113646j:plain

コインBankの電源をラズパイにつなげる

回路はループ

f:id:niwatako:20190322113715j:plain

スイッチがあって、閉ループにしたり開ループにしたりできる。閉じていると電流が流れる

こういうことがしたいわけです。

回路構築にあたってはボードを使う、プレイグラウンドのようなものです

f:id:niwatako:20190322113748j:plain

基本的に同じ形で動いていきます。緑に電流が流れる

コンポーネントと通信にあたってはGPIOPをラズパイでは使います。

f:id:niwatako:20190322113832j:plain

ピンが示されています。スマートな預金口座でも使われているものです。

SwiftyGPIOを入れる

f:id:niwatako:20190322113911j:plain

Swiftで通信できるように成る。CoinBankに電源供給するようにしましょう

f:id:niwatako:20190322113939j:plain

f:id:niwatako:20190322113953j:plain

リレー(スイッチ)コンポーネントを使う

Swiftコードを見ましょう

f:id:niwatako:20190322114015j:plain

設定を見ていきましょう

最終的にリレーをオンにしたい場合はswitchファンクションを使う

ラズベリーパイではデジタル信号のみを扱う

f:id:niwatako:20190322114049j:plain

信号は0か1でしかありません。

1を送ると3.3Vの電圧を送る、0は送らない

電力のONOFFが出来ました。

f:id:niwatako:20190322114121j:plain

ではどうやってコインが置かれたことが分かるのか

PhotoRegisterを使うことが出来ます。コインが置かれると、光量が落ちる

f:id:niwatako:20190322114143j:plain

でもアナログ信号です。ピンはデジタル信号しか取得できません。変換が必要です。

アナログ信号はどのような値でも良い

デジタル信号を受信するにはアナログ・デジタルコンバーターを使う

f:id:niwatako:20190322114240j:plain

f:id:niwatako:20190322114246j:plain

f:id:niwatako:20190322114249j:plain

若干データのやり取りが違うので別の依存性を入れます、MCP3008に対応しているもの

f:id:niwatako:20190322114259j:plain

そしてコードを入れる

貯金箱で光量を測って空いているかしまっているか検出する

f:id:niwatako:20190322114324j:plain

預金された硬化の重さでいくら投入されたか検出する。荷重センサー

f:id:niwatako:20190322114402j:plain

f:id:niwatako:20190322114405j:plain

f:id:niwatako:20190322114408j:plain

重くなって歪むと抵抗が変わる。

f:id:niwatako:20190322114414j:plain

コンバーターにはいってきてロードセルと連動する用に作られている。

もっと理解するにはデータシートを見ると良い

f:id:niwatako:20190322114433j:plain

回路や電子部品を扱う上で重要な部分、技術的説明のマニュアル

f:id:niwatako:20190322114501j:plain

Cのサンプルコードも

f:id:niwatako:20190322114504j:plain

ソフトウェアがダイレクトにステートに合わせて利用できるシグナルを送れるようにつながっていく

シグナルはリレーを使って、1に送られてくると3.3Vが流れる

f:id:niwatako:20190322114546j:plain

アナログは

f:id:niwatako:20190322114550j:plain

ではどう変換していけばいいか

f:id:niwatako:20190322114602j:plain

1と0ばかりの数字列にしていく

全部01で表されたものがバイナリに成る

f:id:niwatako:20190322114622j:plain

一回に送れるのは一つの1または0nomi

理解すべき情報の長さを決めておけば、供給される情報は12ビットとわかれば、

f:id:niwatako:20190322114647j:plain

全体が分かる

f:id:niwatako:20190322114715j:plain

24回ループしている

f:id:niwatako:20190322114720j:plain

そうすると24ビットの情報ができる

f:id:niwatako:20190322114756j:plain

2の補数の塊。

2の補数はバイナリの中でマイナスの数字を表すことができる。0なら正、1なら負を表す。この行でその調整を行っている。

f:id:niwatako:20190322114846j:plain

すべて揃いました。テストのときです。

f:id:niwatako:20190322114849j:plain

f:id:niwatako:20190322114902j:plain

投げ込まれた重さで残高が変わっていく

認証されたユーザーだけ預金を許すということをします。

CentralとPeriferalという概念があります。

CentralはスキャンしてPeriferalはサーバーの役割

iOSはCentral、ラズパイがPeriferal

f:id:niwatako:20190322115005j:plain

どのようなプラットフォームの上でも共通のBLEの挙動をするようにProfileがある

f:id:niwatako:20190322115032j:plain

f:id:niwatako:20190322115052j:plain

2つの依存性を加える必要があります。Bluetoothの話が長くなってしまうがOverViewだけ紹介します。

CoreBluetoothをつかってPeriferalが見つかると通信を開始する。

f:id:niwatako:20190322115137j:plain

f:id:niwatako:20190322115140j:plain

何を構築したか

f:id:niwatako:20190322115146j:plain

これが最終製品概要図

電源ON/Offの回路を作った。異なる2つのタイプのデータが有る。

これを全部つないでブルートゥースコミュニケーションしている。

新しい分野かと思うがエキサイティングな時が来ていると思う。質問があれば来てください。

f:id:niwatako:20190322115238j:plain