ソニーのデジカメ NEX のリモート撮影 (ATtiny13A 版) [Arduino]
NEC形式のリモコンを ATtiny13A を使ってつくりましたが、今回はSONYのリモコン(SIRC形式)です。
対象はうちのデジカメ NEX-5N です。
まずはデータの解析です。専用のリモコンを購入すればいいのですが、もったいないので 「マルチリモコン iRemo2」 という iモードのアプリが作ったデータをもとにしています。
マルチリモコン iアプリ iRemo2 « FUTABA WEB
http://www.256byte.com/i-remo/
<解析結果>
コマンドのデータ 7 ビットに、機種の識別コード 13 ビットの計 20 ビットでした。
これを踏まえて、先日のスケッチを少しいじって完成です。
PB0 のピン はPWM出力以外なら使うことはできるみたいです。
リセットピンを除くと4本残り、これをインターバル撮影の間隔の指定に使えそうです。
対象はうちのデジカメ NEX-5N です。
まずはデータの解析です。専用のリモコンを購入すればいいのですが、もったいないので 「マルチリモコン iRemo2」 という iモードのアプリが作ったデータをもとにしています。
マルチリモコン iアプリ iRemo2 « FUTABA WEB
http://www.256byte.com/i-remo/
<解析結果>
■SHUTTER ||||_||_|_||_||_|_||_|_|_||_|_||_||_||_|_|_|_||_||_||_||_ Binary : (LSB) 1011010-0101110001111 (MSB) Data : 0x2D (7bit) Adr. : 0x1E3A (13bit) ■2SEC ||||_||_||_||_|_||_||_|_|_||_|_||_||_||_|_|_|_||_||_||_||_ Binary : (LSB) 1110110-0101110001111 (MSB) Data : 0x37 (7bit) Adr. : 0x1E3A (13bit) ■MOVIE ||||_|_|_|_||_|_|_||_|_||_|_||_||_||_|_|_|_||_||_||_||_ Binary : (LSB) 0001001-0101110001111 (MSB) Data : 0x48 (7bit) Adr. : 0x1E3A (13bit)
コマンドのデータ 7 ビットに、機種の識別コード 13 ビットの計 20 ビットでした。
これを踏まえて、先日のスケッチを少しいじって完成です。
// PWMで40kHzをつくる赤外線リモコン (ATtiny13A (1.2MHz), SIRC版)
#include <util/delay_basic.h>
#include "wiring_private.h"
void setup() { // OC0B (Arduino的には1番ピン(PB1)) を 40kHz PWM 出力にする。
DDRB |= B00000010;
TCCR0A = (0<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (1<<WGM01) | (1<<WGM00);
TCCR0B = (1<<WGM02) | (0<<CS02) | (0<<CS01) | (1<<CS00);
OCR0A = 29; // (( 1.2MHz / 40kHz ) / 1(分周) ) - 1 = 29
OCR0B = 10; // duty比を1/3にする ( 1.2MHz / 40kHz ) / 3 = 10
TIMSK0 = 0; // タイマー割り込みの不許可 (Arduinoの時間系関数と競合するのでつぶす)
}
void loop() {
sendIrSIRC1M2Hz( 0x2D | (uint32_t) 0x1E3A << 7, 20 ); // SONY alpha Shutter
sendIrSIRC1M2Hz( 0x2D | (uint32_t) 0x1E3A << 7, 20 ); // 2回送ってみる。
delayDeciseconds1M2Hz( 49 ); // 5秒のdelay
}
void sendIrSIRC1M2Hz( uint32_t d , uint8_t len ) { // T = 0.60msec = 180 loops @ 1.2MHz
// リーダ
sbi(TCCR0A, COM0B1); _delay_loop_2( 720 ); // リーダ ON (4T)
cbi(TCCR0A, COM0B1); _delay_loop_2( 180 ); // リーダ OFF (1T)
// データ (コマンド+アドレス)
for(uint8_t i = 0; i < len; i++) {
sbi(TCCR0A, COM0B1); _delay_loop_2( (d>>i) % 2 ? 360 : 180 ); // データ ON (0:1T/1:2T)
cbi(TCCR0A, COM0B1); _delay_loop_2( 180 ); // データ OFF (1T)
}
// トレーラ OFF 全長75T:( 75T - 5T(リーダ) - (2.5T(平均T) * ビット数) ) * 180 loops
_delay_loop_2( 12600 - 450 * len ); // トレーラ OFF (おおよその時間)
}
void delayDeciseconds1M2Hz( uint16_t ds ) { // 1.2MHz動作時 0.1sec単位のdelay
while( ds-- ) _delay_loop_2( 30000 ); // 1MHzなら 25000
}
PB0 のピン はPWM出力以外なら使うことはできるみたいです。
リセットピンを除くと4本残り、これをインターバル撮影の間隔の指定に使えそうです。
SONY デジタル一眼カメラ α NEX-5N ダブルレンズキット ホワイト NEX-5ND/W
- 出版社/メーカー: ソニー
- メディア: エレクトロニクス
PWMについて調べて、リモコン信号出力してみた。(ATtiny13A) [Arduino]
また赤外線リモコン関係です。
赤外線リモコンは、38kHz のキャリア波にのせてデータを送ります。
この、38kHz を PWM (pulse width modulation) で作成してみたいと思いました。
そこで PWM について勉強しました。
AVR.jp
http://www.avr.jp/
ここに、データシートの日本語訳があるので調べてみました。
いつもの ATtiny13A を使います。
OC0A, OC0B が PWM 出力に必要なピンです。
PWM にはいろいろモードがあるようですが、波形の調節がわかりやすいものということで、高速PWM動作を選びました。
PWM 出力周波数を 38kHz とするは、ATtiny13A を 1.2MHz で駆動すると、
・分周なしで、( (1.2MHz / 38kHz ) / 1(分周) ) - 1 = 30.6 CPU cycles が必要。
・duty比を1/3にする ( 1.2MHz / 38kHz ) / 3 = 10.5 CPU cycles となる。
タイマ/カウンタ制御レジスタA,B (TCCR0A, TCCR0B) の設定は、
・比較出力選択 COM0B1-0 : 10 で OC0B が、高速PWM時 BOTTOMでHIGH、比較一致でLOW
(COM0A1-0 は、10 に設定しても、TOP値を OCR0A にするので、常にHIGHしか出ない)
出力を OFF にするには、 COM0B1-0 : 00 でいいみたい。
・波形生成種別 WGM02-0 : 111 で 高速PWM動作
・クロック選択 CS02-0 : 001 分周なし (000 で停止、010で8分周 など)
タイマ/カウンタ0 比較Aレジスタ (OCR0A)
・TOP値を入れる。つまり38kHzの周期にかかるCPU cycle数
( ( 1.2MHz / 38kHz ) / 1(分周) ) - 1 = 30.6 → OCR0A = 31;
・TOP値なので、OC0A に出力しても、HIGH となるだけ
タイマ/カウンタ0 比較Bレジスタ (OCR0B)
・ COM0B1-0 : 10 としたので、HIGH → LOW までの CPU Cycle数
duty比を1/3にする ( 1.2MHz / 38kHz ) / 3 = 10.5 → OCR0B = 11;
そのほか、 、
・タイマー割り込みの許可に、TIMSK0 というのがあり、Arduino の時間系の関数がこれを使っています。
割り込まれると、PWM が狂いました。
TIMSK0 = 0; として タイマー割り込みを不許可としました。
・delay() などに代わる関数も作ってみました。
・sbi(), sbi() というのは、wiring_private.h にあり、レジスタに指定のビットをセット/クリアする。
<サンプルスケッチ>
東芝テレビ REGZA のチャンネルを5秒ごとに変えていくスケッチです。
Arduino の機能を潰してまでレジスタをいじっています。
もはや Arduino である必要がないなぁ、、、。
赤外線リモコンは、38kHz のキャリア波にのせてデータを送ります。
この、38kHz を PWM (pulse width modulation) で作成してみたいと思いました。
そこで PWM について勉強しました。
AVR.jp
http://www.avr.jp/
ここに、データシートの日本語訳があるので調べてみました。
いつもの ATtiny13A を使います。
OC0A, OC0B が PWM 出力に必要なピンです。
PWM にはいろいろモードがあるようですが、波形の調節がわかりやすいものということで、高速PWM動作を選びました。
PWM 出力周波数を 38kHz とするは、ATtiny13A を 1.2MHz で駆動すると、
・分周なしで、( (1.2MHz / 38kHz ) / 1(分周) ) - 1 = 30.6 CPU cycles が必要。
・duty比を1/3にする ( 1.2MHz / 38kHz ) / 3 = 10.5 CPU cycles となる。
タイマ/カウンタ制御レジスタA,B (TCCR0A, TCCR0B) の設定は、
・比較出力選択 COM0B1-0 : 10 で OC0B が、高速PWM時 BOTTOMでHIGH、比較一致でLOW
(COM0A1-0 は、10 に設定しても、TOP値を OCR0A にするので、常にHIGHしか出ない)
出力を OFF にするには、 COM0B1-0 : 00 でいいみたい。
・波形生成種別 WGM02-0 : 111 で 高速PWM動作
・クロック選択 CS02-0 : 001 分周なし (000 で停止、010で8分周 など)
タイマ/カウンタ0 比較Aレジスタ (OCR0A)
・TOP値を入れる。つまり38kHzの周期にかかるCPU cycle数
( ( 1.2MHz / 38kHz ) / 1(分周) ) - 1 = 30.6 → OCR0A = 31;
・TOP値なので、OC0A に出力しても、HIGH となるだけ
タイマ/カウンタ0 比較Bレジスタ (OCR0B)
・ COM0B1-0 : 10 としたので、HIGH → LOW までの CPU Cycle数
duty比を1/3にする ( 1.2MHz / 38kHz ) / 3 = 10.5 → OCR0B = 11;
そのほか、 、
・タイマー割り込みの許可に、TIMSK0 というのがあり、Arduino の時間系の関数がこれを使っています。
割り込まれると、PWM が狂いました。
TIMSK0 = 0; として タイマー割り込みを不許可としました。
・delay() などに代わる関数も作ってみました。
・sbi(), sbi() というのは、wiring_private.h にあり、レジスタに指定のビットをセット/クリアする。
<サンプルスケッチ>
東芝テレビ REGZA のチャンネルを5秒ごとに変えていくスケッチです。
// PWMで38kHzをつくる赤外線リモコン (ATtiny13A (1.2MHz)版)
#include <util/delay_basic.h> // _delay_loop_2() を使うため
#include "wiring_private.h" // sbi(), cbi() を使うため
void setup() { // OC0B (Arduino的には1番ピン(PB1)) を 38kHz PWM 出力にする。
DDRB |= B00000010; // 出力方向にする
TCCR0A = (0<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (1<<WGM01) | (1<<WGM00);
TCCR0B = (1<<WGM02) | (0<<CS02) | (0<<CS01) | (1<<CS00);
// 比較出力選択 COM0x1-0: 10 で OC0B が、高速PWM時 BOTTOMでHIGH、比較一致でLOW
// 波形生成種別 WGM02-0 : 111 で 高速PWM動作
// クロック選択 CS02-0 : 001 分周なし (000 で停止、010で8分周 など)
OCR0A = 31; // (( 1.2MHz / 38kHz ) / 1(分周) ) - 1 = 30.6
OCR0B = 11; // duty比を1/3にする ( 1.2MHz / 38kHz ) / 3 = 10.5
TIMSK0 = 0; // タイマー割り込みの不許可 (Arduinoの時間系関数と競合するのでつぶす)
}
void loop() {
sendIrNEC1M2Hz( 0xE41BBF40 ); // REGZA 0x40 0xBF, 0x1B (Ch.Up)
sendIrNEC1M2Hz( 0xE41BBF40 ); // 2回送ってみる。
delayDeciseconds1M2Hz( 50 ); // 5秒のdelay
}
void sendIrNEC1M2Hz( uint32_t d ) {
// NEC形式の時間単位(T)は、9/16 msec = 562.5usec
// 1 MHzだと 562.5 CPU cycles 必要
// 1.2MHzだと 562.5 x 1.2 = 675 CPU cycles 必要
// delay_basic.h の _delay_loop_2() では 1ループで 4 CPU cycles 消費できる
// 562.5 x 1.2 / 4 = 168.75 ループすればいい
sbi(TCCR0A, COM0B1); _delay_loop_2( 2700 ); // リーダ ON (16T)
cbi(TCCR0A, COM0B1); _delay_loop_2( 1350 ); // リーダ OFF (8T)
for(uint16_t i=0; i<32; i++) {
sbi(TCCR0A, COM0B1); _delay_loop_2( 168 ); // データ ON (1T)
cbi(TCCR0A, COM0B1); _delay_loop_2( (d>>i) % 2 ? 506 : 168 ); // データ OFF (0:1T/1:3T)
}
sbi(TCCR0A, COM0B1); _delay_loop_2( 168 ); // トレーラ ON (1T)
cbi(TCCR0A, COM0B1); _delay_loop_2( 11981 ); // トレーラ OFF (71T) (計192T)
}
void delayDeciseconds1M2Hz( uint16_t ds ) { // 1.2MHz動作時 0.1sec単位のdelay
while( ds-- ) _delay_loop_2( 30000 ); // 1MHzなら 25000
}
Arduino の機能を潰してまでレジスタをいじっています。
もはや Arduino である必要がないなぁ、、、。
リモコン信号機 (プロトタイプ tiny13) [Arduino]
先日のリモコン信号機 (プロトタイプ)を ATtiny13A に対応させてみました。
スケッチのサイズを1kバイト以内に収める工夫です。
1つめは、digitalWrite() などの関数です。
arduino-1.0.1/hardware/arduino/cores/arduino/wiring_digital.c を参考に新たに関数をつくりました。
・ATtiny13A にはポートBしかないので、ピン番号をそのままポートの番号として使う
・analogWriteを使用しないことにしてPWMのOFF処理をしない
・エラー処理はしない
2つめは、pulseIn() です。
arduino-1.0.1/hardware/arduino/cores/arduino/wiring_pulse.c を参考に新たに関数をつくりました。
・同様に、ポートB固定
・ピンがHIGHになるのを待つのを固定
・タイムアウトの時間を固定
・クロックサイクルの計算で結果を出しているけど、delayMicroseconds()を使う (精度は落ちる)
(クロックサイクルの計算のときの割り算がサイズを大きくしているみたい)
ということで、新たな関数を作って、コンパイルすると、、
「コンパイル後のスケッチのサイズ:912バイト(最大容量1,024バイト)」
ということで、なんとか収まりました。
いちおう動作もしました。
(でも、これらの関数が正しいのかどうかはわかりません。とりあえず動いたというだけです、、。)
ほんとは、もう1ピンあいているので、リモコン学習用にボタンをつけたり、Apple remoteなどにも対応させたりしたいので、結局 ATtiny45V を使うことになりそう、、。
スケッチのサイズを1kバイト以内に収める工夫です。
1つめは、digitalWrite() などの関数です。
arduino-1.0.1/hardware/arduino/cores/arduino/wiring_digital.c を参考に新たに関数をつくりました。
・ATtiny13A にはポートBしかないので、ピン番号をそのままポートの番号として使う
・analogWriteを使用しないことにしてPWMのOFF処理をしない
・エラー処理はしない
2つめは、pulseIn() です。
arduino-1.0.1/hardware/arduino/cores/arduino/wiring_pulse.c を参考に新たに関数をつくりました。
・同様に、ポートB固定
・ピンがHIGHになるのを待つのを固定
・タイムアウトの時間を固定
・クロックサイクルの計算で結果を出しているけど、delayMicroseconds()を使う (精度は落ちる)
(クロックサイクルの計算のときの割り算がサイズを大きくしているみたい)
ということで、新たな関数を作って、コンパイルすると、、
「コンパイル後のスケッチのサイズ:912バイト(最大容量1,024バイト)」
ということで、なんとか収まりました。
いちおう動作もしました。
(でも、これらの関数が正しいのかどうかはわかりません。とりあえず動いたというだけです、、。)
ほんとは、もう1ピンあいているので、リモコン学習用にボタンをつけたり、Apple remoteなどにも対応させたりしたいので、結局 ATtiny45V を使うことになりそう、、。
// plarail remote control
#define LED_B 0 // LED (Blue)
#define LED_R 1 // LED (Red)
#define SERVO 2 // サーボモーター
#define IR_IN 4 // IR Receiver
void setup() {
pinModeB( IR_IN , INPUT );
pinModeB( LED_B, OUTPUT );
pinModeB( LED_R, OUTPUT );
pinModeB( SERVO, OUTPUT );
setSignal(true);
}
void loop() {
unsigned long irData;
while( digitalReadB( IR_IN ) == HIGH ); // 赤外線を感知するまで待つ(信号としてはLOWになるまで待つ)
irData = getIrNec();
if( irData == 0x8C73BF40 ) setSignal(true); // 青信号でGO
if( irData == 0x8B74BF40 ) setSignal(false); // 赤信号でSTOP
}
void setSignal(boolean s) {
digitalWriteB( LED_B, s );
digitalWriteB( LED_R, !s );
for( unsigned int i=0; i<50; i++ ) {
digitalWriteB( SERVO, HIGH );
delayMicroseconds( s ? 1000 : 2000 );
digitalWriteB( SERVO, LOW );
delayMicroseconds( s ? 19000 : 18000 );
}
}
unsigned long getIrNec() {
unsigned long irData = 0x00000000, irOff;
while( digitalReadB( IR_IN ) == HIGH ); // 赤外線を感知するまで待つ(信号としてはLOWになるまで待つ)
while( digitalReadB( IR_IN ) == LOW ); // リーダ部をやりすごす
for( unsigned int dig = 0; dig < 32; dig++ ) { // データを32桁読み込む
irOff = pulseInCustum( IR_IN ); // 赤外線消灯時間(信号としてはHIGHの時間)
if( irOff == 0 ) return 0UL; // 信号途絶なら終了
if( irOff > 1000 ) irData |= 1UL << dig; // Data=1 とき
}
// ストップビットを確認しないかわりに、データビットの確認
if( (byte)((irData>>16)^(irData>>24)) != 0xff ) return 0UL;
return irData;
}
unsigned long pulseInCustum(uint8_t pin)
{
// pulseInのBポート固定、High固定、Timeout固定、精度100usecにした関数
uint8_t bit = 1 << pin;
unsigned long width = 0;
unsigned long numloops = 0;
unsigned long maxloops = 10000 / 100; // タイムアウトを10000usec, 1ループ100usecのdelay
while (PINB & bit) { // wait for any previous pulse to end
delayMicroseconds(100);
if (numloops++ == maxloops) return 0;
}
while (!(PINB & bit)) { // wait for the pulse to start
delayMicroseconds(100);
if (numloops++ == maxloops) return 0;
}
while (PINB & bit) { // wait for the pulse to stop
delayMicroseconds(100);
if (numloops++ == maxloops) return 0;
width += 100;
}
return width;
}
// ポートB のみの ATtiny13/45/85用 デジタル専用入出力
// PWMは使用しない。エラー未対応。など制限あるけどややコードが小さくなる
void pinModeB(uint8_t pin, uint8_t mode) {
uint8_t bit = 1 << pin;
uint8_t oldSREG = SREG;
cli();
if (mode == INPUT) { DDRB &= ~bit; PORTB &= ~bit; }
// else if (mode == INPUT_PULLUP) { DDRB &= ~bit; PORTB |= bit; }
else { DDRB |= bit; }
SREG = oldSREG;
}
void digitalWriteB(uint8_t pin, uint8_t val) {
uint8_t oldSREG = SREG;
cli();
if (val == LOW) PORTB &= ~(1 << pin);
else PORTB |= (1 << pin);
SREG = oldSREG;
}
int digitalReadB(uint8_t pin) {
return (PINB & (1 << pin)) ? HIGH : LOW;
}
リモコン信号機 (プロトタイプ) [Arduino]
リモートコントロールでプラレールを操作するというアイデアはすでに製品化されています。
リモレール
http://www.kuwatec.co.jp/remorail/index.html
リモポイント
http://www.kuwatec.co.jp/remopoint/index.html
ミスターモーターマン商品紹介
http://www.b-brave.co.jp/m_shoukai.html
いずれも、そこそこ高価。できれば自作したいということで考えてみました。
自分でもできそうなことは、サーボモータで、ストップレールを操作すること。
今回は東芝テレビのリモコンの青ボタンでGO、赤ボタンでSTOPをしてみたいと思います。
<使ったパーツ>
ATTINY45V-DIP8
http://www.microfan.jp/shop/8_20.html
GWSサーボ PICO/STD/F(フタバ)
http://akizukidenshi.com/catalog/g/gM-01905/
赤外線リモコン受信モジュール PL-IRM2161-C438 (2個入)
http://akizukidenshi.com/catalog/g/gI-03292/
超高輝度5mm赤色LED[7cd60度]OSHR5161A-QR(10個入)
http://akizukidenshi.com/catalog/g/gI-01318/
超高輝度5mm青色LED[5cd60度]OSUB5161A-PQ(10個入)
http://akizukidenshi.com/catalog/g/gI-01322/
スケッチが ATtiny 13A には収まらなかったので、ATtiny 45V (8MHz駆動) を使いました。
リモコン受信モジュールは2.4Vから使えるものです。
<動作の様子>
再生できない場合、ダウンロードは🎥こちら
これを、ストップレールと組み合わせれば、リモート信号機にできるかな?
リモレール
http://www.kuwatec.co.jp/remorail/index.html
リモポイント
http://www.kuwatec.co.jp/remopoint/index.html
ミスターモーターマン商品紹介
http://www.b-brave.co.jp/m_shoukai.html
いずれも、そこそこ高価。できれば自作したいということで考えてみました。
自分でもできそうなことは、サーボモータで、ストップレールを操作すること。
今回は東芝テレビのリモコンの青ボタンでGO、赤ボタンでSTOPをしてみたいと思います。
<使ったパーツ>
ATTINY45V-DIP8
http://www.microfan.jp/shop/8_20.html
GWSサーボ PICO/STD/F(フタバ)
http://akizukidenshi.com/catalog/g/gM-01905/
赤外線リモコン受信モジュール PL-IRM2161-C438 (2個入)
http://akizukidenshi.com/catalog/g/gI-03292/
超高輝度5mm赤色LED[7cd60度]OSHR5161A-QR(10個入)
http://akizukidenshi.com/catalog/g/gI-01318/
超高輝度5mm青色LED[5cd60度]OSUB5161A-PQ(10個入)
http://akizukidenshi.com/catalog/g/gI-01322/
スケッチが ATtiny 13A には収まらなかったので、ATtiny 45V (8MHz駆動) を使いました。
リモコン受信モジュールは2.4Vから使えるものです。
// プラレール リモコン操作計画
#define LED_B 0 // LED (Blue)
#define LED_R 1 // LED (Red)
#define SERVO 2 // サーボモーター
#define IR_IN 4 // IR Receiver
void setup() {
pinMode( IR_IN , INPUT );
pinMode( LED_B, OUTPUT );
pinMode( LED_R, OUTPUT );
pinMode( SERVO, OUTPUT );
setSignal(true);
}
void loop() {
unsigned long irData;
while( digitalRead( IR_IN ) == HIGH ); // 赤外線を感知するまで待つ(信号としてはLOWになるまで待つ)
irData = getIrNec();
if( irData == 0x8C73BF40 ) setSignal(true); // 青信号でGO
if( irData == 0x8B74BF40 ) setSignal(false); // 赤信号でSTOP
}
void setSignal(boolean s) {
digitalWrite( LED_B, s );
digitalWrite( LED_R, !s );
for( unsigned int i=0; i<50; i++ ) {
digitalWrite( SERVO, HIGH );
delayMicroseconds( s ? 1000 : 2000 );
digitalWrite( SERVO, LOW );
delayMicroseconds( s ? 19000 : 18000 );
}
}
unsigned long getIrNec() {
unsigned long irData = 0x00000000, irOff;
while( digitalRead( IR_IN ) == HIGH ); // 赤外線を感知するまで待つ(信号としてはLOWになるまで待つ)
while( digitalRead( IR_IN ) == LOW ); // リーダ部をやりすごす
for( unsigned int dig = 0; dig < 32; dig++ ) { // データを32桁読み込む
irOff = pulseIn( IR_IN, HIGH ); // 赤外線消灯時間(信号としてはHIGHの時間)
if( irOff > 10000 ) return 0UL; // 信号途絶なら終了
if( irOff > 1000 ) irData |= 1UL << dig; // Data=1 とき
}
// ストップビットを確認しないかわりに、データビットの確認
if( (byte)((irData>>16)^(irData>>24)) != 0xff ) return 0UL;
return irData;
}
<動作の様子>
再生できない場合、ダウンロードは🎥こちら
これを、ストップレールと組み合わせれば、リモート信号機にできるかな?
プラレール ストップレール(2本入・車止め2個付) R-08
- 出版社/メーカー: タカラトミー
- メディア: おもちゃ&ホビー
Apple Remote を調べる [周辺機器]
リモコン好きの私ですが、かっこいいリモコンがあったので紹介します。
Apple Remote という製品です。
Apple社の製品の購入はこれが初めてです。Mac も iPod も iPhone も持っていません。
どうやら最近のMac (Lion) は、この Apple Remote には対応しないようなので、消滅していく製品かもしれません。
以前に作成したリモコンコード解析スケッチ「IR解析の友」で解析してみました。
http://hello-world.blog.so-net.ne.jp/2011-05-19
(Arduino 1.0.1でもそのままうごきました。)
・基本的には、NECフォーマット
・カスタムコードは (0xEE, 0x87 で2バイト目が1バイト目の反転ではないが、これはOK)
・3バイト目がデータになるが、4バイト目がその反転ではなく、IDとなっている
・リピートコードあり
でした。
と、ここまで調べてみましたが、なんと Wikipedia にさらに詳しい解析結果が書いてありました。
Apple Remote - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Apple_Remote
さすが Wikipedia です。
Apple Remote という製品です。
Apple社の製品の購入はこれが初めてです。Mac も iPod も iPhone も持っていません。
どうやら最近のMac (Lion) は、この Apple Remote には対応しないようなので、消滅していく製品かもしれません。
以前に作成したリモコンコード解析スケッチ「IR解析の友」で解析してみました。
http://hello-world.blog.so-net.ne.jp/2011-05-19
(Arduino 1.0.1でもそのままうごきました。)
・基本的には、NECフォーマット
・カスタムコードは (0xEE, 0x87 で2バイト目が1バイト目の反転ではないが、これはOK)
・3バイト目がデータになるが、4バイト目がその反転ではなく、IDとなっている
・リピートコードあり
でした。
と、ここまで調べてみましたが、なんと Wikipedia にさらに詳しい解析結果が書いてありました。
Apple Remote - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Apple_Remote
さすが Wikipedia です。
アップル(Apple) Apple Remote [MC377J/A]
- 出版社/メーカー: Apple
- メディア: エレクトロニクス
マウスチャタリングの修理 (Logicool V200) [周辺機器]
またマウスの修理です。
以前につかっていたマウス Logicool V-200BK です。
このマウスも何かの拍子に、左クリックがチャタリングするようになっていました。
滑るところ(ソールというらしい)を半分めくり、ネジをはずします。
あけると OMRON D2FC-F-7N (中国製) というマイクロスイッチが入っていました。
基板を外そうとすると、引っかかります。
このように外すには、、
このフックを外します。
いつもの HAKKO 808 を使います。
もともとのハンダが少なく、うまく吸引できなかったので一旦ハンダを追加してあらためて吸引したところ何とか吸い取れました。
上が外したスイッチで、下が新しいスイッチです。
左右を入れ替えようかと思いましたが、疲れていたので新しいのを付け替えることにしました。
若干、D2F-01Fの方が肉厚です。
基板を元に戻して、
閉じました。
一部、剥がし損ねたところは、ツルツル面のみ残して厚めの両面テープでくっつけなおしました。
以前につかっていたマウス Logicool V-200BK です。
このマウスも何かの拍子に、左クリックがチャタリングするようになっていました。
滑るところ(ソールというらしい)を半分めくり、ネジをはずします。
あけると OMRON D2FC-F-7N (中国製) というマイクロスイッチが入っていました。
基板を外そうとすると、引っかかります。
このように外すには、、
このフックを外します。
いつもの HAKKO 808 を使います。
もともとのハンダが少なく、うまく吸引できなかったので一旦ハンダを追加してあらためて吸引したところ何とか吸い取れました。
上が外したスイッチで、下が新しいスイッチです。
左右を入れ替えようかと思いましたが、疲れていたので新しいのを付け替えることにしました。
若干、D2F-01Fの方が肉厚です。
基板を元に戻して、
閉じました。
一部、剥がし損ねたところは、ツルツル面のみ残して厚めの両面テープでくっつけなおしました。
マウスチャタリングの修理 (Logicool M555b) [周辺機器]
うちのマウスは、Logicool M555bというBluetoothマウスです。
こどもに投げられ、いじられ、電池ボックスのフックも折れてしまいました。。。
それでもなんとか使用できたのですが、左クリックがチャタリングを起こすようになり、ドラッグアンドドロップや、範囲選択ができなくなってしまいました。
そこでいろいろ調べてみると、マイクロスイッチを取り替えるといいみたい。
まったく同じというわけではないですが、OMRON の D2F-01F (日本製) で代用できるようです。
ということで、買いました。
ただ、よくよく考えてみると、買う必要はなかった、と。
・壊れているのは、左のボタン。だけど、シングルクリックはOK。
・右クリックで、シングルクリック以外の操作をすることはまずない。
→ ということで、左右のボタンを交換することにしました。
電池ケースの内側と、ツルツルの部分を剥がすと、ネジがでてきます。
トルクス(ヘクスローブ)ネジですが、細いマイナスドライバを強く押し当てながら回したらなんとか外せました。
全部分解したところ。
基板をとりはずす。
HAKKO 808 でハンダをバキューム。
マイクロスイッチをはずす。
左右のボタンを入れ替えハンダ付け。そして、もとに戻す。
左ボタンのチャタリングはなくなり快適。
こどもに投げられ、いじられ、電池ボックスのフックも折れてしまいました。。。
それでもなんとか使用できたのですが、左クリックがチャタリングを起こすようになり、ドラッグアンドドロップや、範囲選択ができなくなってしまいました。
そこでいろいろ調べてみると、マイクロスイッチを取り替えるといいみたい。
まったく同じというわけではないですが、OMRON の D2F-01F (日本製) で代用できるようです。
ということで、買いました。
ただ、よくよく考えてみると、買う必要はなかった、と。
・壊れているのは、左のボタン。だけど、シングルクリックはOK。
・右クリックで、シングルクリック以外の操作をすることはまずない。
→ ということで、左右のボタンを交換することにしました。
電池ケースの内側と、ツルツルの部分を剥がすと、ネジがでてきます。
トルクス(ヘクスローブ)ネジですが、細いマイナスドライバを強く押し当てながら回したらなんとか外せました。
全部分解したところ。
基板をとりはずす。
HAKKO 808 でハンダをバキューム。
マイクロスイッチをはずす。
左右のボタンを入れ替えハンダ付け。そして、もとに戻す。
左ボタンのチャタリングはなくなり快適。
LOGICOOL ワイヤレスレーザーマウス Bluetooth搭載 M555b
- 出版社/メーカー: ロジクール
- メディア: エレクトロニクス
ゼロプレッシャーICソケット [パーツ]
ZIFソケット(Zero Insertion Force socket) とも言うようです。
さて、なにが問題かというと、1番ピンとレバーは同じ側にあるべきか、あるいは反対側にあるべきか?
両端ともくぼみっぽい部分があるものもあれば、何のマークもないものもあります。
ソケットの仕様書を見ても明示されたものはなく、写真から示唆、推測するような感じです。
そこで、実際の使用例を見てみたいと思います。
<1番ピンとレバーが同じ側のタイプ>
【共立エレショップ】eleshop.jp 開発試作用プログラム・ライタPICSTART Plus: 【開発フロア】:電子部品,半導体,キットの通信販売
http://eleshop.jp/shop/g/g165131/
ギャング・ライタ『SU2000』+『PICモジュール』セット マイコン関連 秋月電子通商 電子部品 ネット通販
http://akizukidenshi.com/catalog/g/gM-00276/
スイッチサイエンス商品詳細 AVR ISPシールドキット
http://www.switch-science.com/products/detail.php?product_id=929
<1番ピンとレバーが反対側のタイプ>
【MPIC-DPPA】DIPパッケージ・PICマイコンプログラミング・アダプタキット - PICマイコン - マイコン - マルツエレック【マルツパーツ館WebShop】
http://www.marutsu.co.jp/shohin_137453/
AKI-PIC2プログラマボード(PICkit2互換) マイコン関連 秋月電子通商 電子部品 ネット通販
http://akizukidenshi.com/catalog/g/gM-02495/
R8CM12A・M11Aマイコン開発キット 組み立てキット 秋月電子通商 電子部品 ネット通販
http://akizukidenshi.com/catalog/g/gK-05964/
ハンディROMライター LEAPER-3C(USB接続) マイコン関連 秋月電子通商 電子部品 ネット通販
http://akizukidenshi.com/catalog/g/gM-00513/
というわけで、とくに決まった方向があるわけではなさそうです。
さて、なにが問題かというと、1番ピンとレバーは同じ側にあるべきか、あるいは反対側にあるべきか?
両端ともくぼみっぽい部分があるものもあれば、何のマークもないものもあります。
ソケットの仕様書を見ても明示されたものはなく、写真から示唆、推測するような感じです。
そこで、実際の使用例を見てみたいと思います。
<1番ピンとレバーが同じ側のタイプ>
【共立エレショップ】eleshop.jp 開発試作用プログラム・ライタPICSTART Plus: 【開発フロア】:電子部品,半導体,キットの通信販売
http://eleshop.jp/shop/g/g165131/
ギャング・ライタ『SU2000』+『PICモジュール』セット マイコン関連 秋月電子通商 電子部品 ネット通販
http://akizukidenshi.com/catalog/g/gM-00276/
スイッチサイエンス商品詳細 AVR ISPシールドキット
http://www.switch-science.com/products/detail.php?product_id=929
<1番ピンとレバーが反対側のタイプ>
【MPIC-DPPA】DIPパッケージ・PICマイコンプログラミング・アダプタキット - PICマイコン - マイコン - マルツエレック【マルツパーツ館WebShop】
http://www.marutsu.co.jp/shohin_137453/
AKI-PIC2プログラマボード(PICkit2互換) マイコン関連 秋月電子通商 電子部品 ネット通販
http://akizukidenshi.com/catalog/g/gM-02495/
R8CM12A・M11Aマイコン開発キット 組み立てキット 秋月電子通商 電子部品 ネット通販
http://akizukidenshi.com/catalog/g/gK-05964/
ハンディROMライター LEAPER-3C(USB接続) マイコン関連 秋月電子通商 電子部品 ネット通販
http://akizukidenshi.com/catalog/g/gM-00513/
というわけで、とくに決まった方向があるわけではなさそうです。