![]() |
| 回路図 |
ソースコード
// 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アプリの自作はハードルが高そうなので,それ以外で,なんとかうまく無線でつなぐ方法ないかなあ。
