回路図 |
ソースコード
// iPhoneアラーム検知&サーボ制御(AVR ATTiny13A) #include <avr/io.h> int main(void) { unsigned long i; unsigned char cnt; // IO設定 DDRB = 0B00000001; // PWM設定 TCCR0A = 0B10000011; // 8bit高速pwm TCCR0B = 0B00000011; // φ/64 = 1.2MHz/64 = 18.75kHz -> 0.053ms // 0.053ms * 255 = 13.6ms // A/D変換設定 ADMUX = 0B00100010; // 基準電圧Vcc,左揃え(8bit),ADC2 ADCSRA = 0B10100010; // A/D許可,自動起動許可,φ/4 ADCSRA |= 1<<ADSC; // AD start OCR0A = 27; // スイッチOFF cnt = 0; for(i=0;i<100000;i++); // 接続時の誤動作対策 while(cnt < 10){ if(ADCH > 25){cnt ++;} } OCR0A = 37; // スイッチON while(1); }↑SyntaxHighlighter使ってみました。いい感じ!
マイコンはAVRのATTiny13Aを使用。開発環境はAtmel Studio(旧AVR Studio)です。Visual Studioベースとなって,
Dockコネクタのピンアサインは下記のサイトを参考にしました。
今回,iPhoneのDockコネクタから3.3 Vの電源を取りましたが,この3.3 Vは常に供給されているわけではないようです。確認できた範囲では,iPhoneの画面が表示されている間(スリープモードでもまれに数秒間供給される場合あり。タイミング不明)と,コネクタを繋いでから数秒間は3.3 Vが供給されていました。
Dockコネクタの11番ピン(Audio Switch)をGNDに繋ぐと,3番・4番ピンから音がでるようになり,iPhoneの内蔵スピーカからはでなくなります。しかし,アラーム音だけは別で,3番・4番ピンと内臓スピーカの両方から音がでるようになっています。はじめはこの仕様を知らず,マイコンで音を検知したら11番ピンをオープンにするような回路にしないとダメかなと思っていたのですが,なんとも都合のいい仕様になってるもんです。
なお,使用したiPhoneはiPhone 4SでiOSは5.1.1です。
明かりが自動でつくのはいいのですが,毎回コネクタを繋ぐのがだんだん面倒になってきました…。しかも充電できないし。iPhoneアプリの自作はハードルが高そうなので,それ以外で,なんとかうまく無線でつなぐ方法ないかなあ。