iPhone、iPadなどのiOSにはアクセシビリティという設定があって、その中のスイッチコントロールという機能を使うとスイッチでiOS機器を操作できるようになっています。
これの外部スイッチ用のスイッチボックスの作成メモです。
iOSの外部スイッチ
とりあえずここではUSBで接続するもの
USBで接続する場合にはiPhoneやiPadにLightning - USBカメラアダプタ(ipad proなどのようにUSB-Cのものに関してはUSB-C - USBアダプタ)というものを接続します (スイッチボックスの電源はiphoneからもらいますので、電源が接続できるLightning - USB 3カメラアダプタのほうがよいかと思います)。 そこに以下で作成するスイッチボックスをつなぎます。
基本的なこと
iOS機器に対して半角スペースとかを入力してあげれば良いようです。つまりスイッチボックスはキーボードとしてふるまえば良いみたい。 試しにLightning - USB 3カメラアダプタにキーボードをつないであげると外部スイッチとして登録できます。 なのでサポートする人が自分のiPhoneとかでいろいろ試してみたいときにはLightning - USB3カメラアダプタにキーボードをつないであげれば色々試してみることができます。
たぶんdegisparkをHIDキーボードにしちゃうのが一番安いですが「USBキーボード 自作」とかで検索すればいろいろ出てきます。
必要なもの
- DigiSpark
- もう販売終了してしまっているみたいですが、同等品(?)がamazonとかでも買えます。本来のDigiSparkは直刺しのUSB TypeAですが、これだと抜けやすかったりしてちょっと使いにくいです。同等品でmicroUSBのものがありますので、そちらを使った方が幸せになれるかもしれません。ただ何度も抜き差ししているとmicroUSBのものはUSBをつなぐところがとれちゃうことがあるようです。
- スイッチ接続用の3.5mmモノラルジャック
- スイッチをつなぐためのもの
- Arduinoとか
- ArduinoでDigiSparkボードを使えるようにしておく。「digispark 開発環境」とかで検索すると色々でてきます
配線
工作的にはボードとモノラルジャック(コミュニケーション支援用のスイッチやセンサ類は3.5mmモノラルプラグに出力される)をつなぐだけなので簡単ですかね。
プログラム
#include "DigiKeyboard.h"
#define KeyPort 0
bool outputState = true;
void setup() {
pinMode(KeyPort,INPUT_PULLUP);
}
void loop() {
usbPoll();
if (digitalRead(KeyPort) == LOW) {
if(!outputState) {
outputState=true;
DigiKeyboard.sendKeyStroke(KEY_SPACE);
}
} else {
outputState = false;
}
DigiKeyboard.delay(50);
}
注意
iPhoneにつなぐと「このデバイスは使えません」とか「外部スイッチが見つかりません」とか出ることがあります。でもそのあと外部スイッチとして使えるようになります。
これはDigiSparkボードに書き込み用のファームウェアが入っていて、USB接続したときにまず書き込み用のファームウェアが働いてそのあとに先ほど書き込んだキーボードのファームウェアが働くためです
私は試してないけどDigispark ATtiny85 起動までの5秒を取り除くを使うと幸せになれるらしい
参考
ICT救助隊のiPadとスイッチコントロール(pdf)
https://www.rescue-ict.com/souko/iPad_and_SwitchControl_S.pdf