SSブログ

8MBのSDカード [Arduino]

いまはもう売っていないのですが、秋月電子通商にて1枚100円のSDカード 8MB CU-SD008 (Victor, 日本製)を購入してありました。
これをSDカードシールドで使ってみようと思いました。
sds8msd.jpg
前回紹介したSDカードシールドにカードを入れてみると、なんと、プッシュイジェクトタイプでした。

さて、早速スケッチのサンプルでも動かしてみようと思って、、
sd_sample.png
これらを開いてみます。

「chipSelect = 4;」 を 「chipSelect = 10;」 に変更します。

「CardInfo」 はそのまま動いたのですが、それ以降のスケッチではカードが認識されませんでした。

カードも壊れていないようだし、、スケッチはサンプルスケッチで、chipSelect の設定もちゃんとしたし、、壊れているのは、SDカードシールド??なんて思っちゃいましたが、いろいろ調べてみると、、どうやら 8MB SDカードはFAT12でフォーマットされており、ArduinoのSDカードの利用にはFAT16かFAT32でないとだめなようです。

Arduino - SD
http://www.arduino.cc/en/Reference/SD

そこで、SDカードをFAT16でフォーマットする方法を調べてみました。

WindowsのGUI上からではなく、コマンドプロンプトからフォーマットをします。
format_cmd.png

アロケーションユニットサイズを指定します。
8MBのSDカードの場合には、512 か 1024 にすると、FAT16 になりました。

「Datalogger」の挙動が若干怪しい以外はなんとか動いています。

タグ:SDカード

赤外線LEDいくつか [パーツ]

いままでに購入してきたLEDを比較しようと思いました。
赤外線LEDは目に見えないので、どれが強く発光しているのかわかりません。
また実際に使った印象というのも、データシートだけではわかりませんので、、。
ir_leds.jpg
ぼくのなかでのお気に入りは、TLN115A (東芝)、SID1003BQ (サンケン電気)で、これらがマイコンからの直接接続のなかでは、リモコンとしての用途として合っている感じがしていました。

ただ、TLN115A は残念ながら 生産終了予定 (EOL announced) となってしまっています。

TLN115A(F)|光センサ|東芝 セミコンダクター&ストレージ社
http://www.semicon.toshiba.co.jp/product_detail/opto/sensor/1263805_15031.html

今回は、先日のブレッドボードの回路でいくつかの赤外線LEDを付け替えて、
ir_led_test.jpg
こんな感じで照明の真下(①)、そこからスライド(②)、さらに角度を照明の方向に向けてどこまで離れられるか(③)をテストしてみようと思いました。
ただ、距離まで測るのは面倒になり、挫折したのでだいたいの印象で、、。

結果としてはTLN233 が弱かった他は、似たり寄ったりでした。
マイコンからの出力(20mAほど?)では本領を発揮できていなかったLEDあったということでした。

赤外線LEDをパルスで使うときには1000mAほど流してもいいようです。
前回は、トランジスタをスイッチとして使ったわけですが、FETを使ったらもっと流せるのかなぁと思って調べてみた普通にいろいろと出てきました。
また何かの注文の際に、ポチってみたいと思います。
タグ:赤外線LED

赤外線増幅してみた。 [Arduino]

ir_amp.jpg

前回のPanasonicの照明リモコンが、あまりにも届かず赤外線LEDを照明の下50cmまで持って行かないといけなかったのでちょっとパワーアップしてみました。
以前にも記事にしましたが、トランジスタ1石でAVRからの信号をスイッチとして使うようにしてみました。

トランジスタには、2SC1815 (GR) を使っています。
残念ながら、新規設計非推奨(NRND;Not Recommended for New Design) → 生産終了予定(EOL (End of Life) announced) といった運命のパーツです。

2SC1815|バイポーラトランジスタ|東芝 セミコンダクター&ストレージ社
http://www.semicon.toshiba.co.jp/product_detail/transistor/bipolar/1253610_13546.html

抵抗の値は、ベース側に3.3kΩ、赤外線LEDとの間に2.2Ω としました。何となくの値です、計算もしてません。トランジスタについて勉強していないので、データシートも読めず、詳しいことがわからないのですみません。

赤外線LEDを誤って直接電池につないだところすぐに熱くなり壊れてしまいました。
出力は上げても、電流制限抵抗を挟み、パルス出力を守らないと壊れてしまうのかな。

回路は次のような感じです。
ir_amp_bb.png
(久しぶりに Fritzing を使ってみました。)

Welcome - Fritzing
http://fritzing.org/

とりあえず、自分は座ってブレッドボードを机の上においたまま、照明の操作ができるようになりました。
(それまでは、立ってブレッドボードを照明の真下で持ち上げて、やっと反応する程度でした。)

近いうちに、赤外線リモコンに適した赤外線LEDを調査してみたいと思っています。


ATtiny13A で AEHA リモコン [Arduino]

NEC形式、SIRC(SONY)形式とやってきたので、家製協(AEHA)形式のリモコンもATtiny13Aでつくってみました。

ターゲットはPanasonicのシーリングライト「HHPFZ4380E6」です。
hhpfz4380e6.jpg

次のスケッチで照明をつけたり、消したりすることができるのですが、照明の真下で50cmほどの距離でないと反応してくれませんでした。
まともに使うには出力を増強しないといけません。

// PWMで38kHzをつくる赤外線リモコン(AEHA形式) (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);
  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() {
  uint8_t panaLight[5];                // Panasonicの照明リモコンのデータ格納用配列
  panaLightIrCode( 2, 4, panaLight );  // ch2, 4(全灯) のデータ作成
  sendIrAEHA1M2Hz( panaLight, 40 );    // 5byte(40bits)送信
  delayDeciseconds1M2Hz( 50 );         // 5秒のdelay
  panaLightIrCode( 2, 7, panaLight );  // ch2, 7(消灯) のデータ作成
  sendIrAEHA1M2Hz( panaLight, 40 );    // 5byte(40bits)送信
  delayDeciseconds1M2Hz( 50 );         // 5秒のdelay
}

void sendIrAEHA1M2Hz( uint8_t *d, uint16_t len ) {
    // AEHA形式の時間単位(T)は、425 (350-500) usec
    //    1 MHzだと 425 CPU cycles 必要
    //   1.2MHzだと 425 x 1.2 = 510 CPU cycles 必要
    // delay_basic.h の _delay_loop_2() では 1ループで 4 CPU cycles 消費できる
    //   425 x 1.2 / 4 = 127.5 ループすればいい
  sbi(TCCR0A, COM0B1);  _delay_loop_2( 1020 );  // リーダ ON  (8T)
  cbi(TCCR0A, COM0B1);  _delay_loop_2(  510 );  // リーダ OFF (4T)
  
  for(uint16_t i=0; i<len; i++) {
    sbi(TCCR0A, COM0B1);  _delay_loop_2( 127 );                                   // データ ON  (1T)
    cbi(TCCR0A, COM0B1);  _delay_loop_2( ( d[i/8] >> (i%8) ) % 2 ? 382 : 127 );   // データ OFF (0:1T/1:3T)
  }
  
  sbi(TCCR0A, COM0B1);  _delay_loop_2( 127 );                // トレーラ ON  (1T)
  cbi(TCCR0A, COM0B1);  _delay_loop_2( 37342 - 382 * len );  // トレーラ OFF (130ms-12T-1T-約3T*bits) (計 130ms)
}

void delayDeciseconds1M2Hz( uint16_t ds ) {    // 1.2MHz動作時 0.1sec単位のdelay
  while( ds-- )  _delay_loop_2( 30000 );           // 1MHzなら 25000
}

void panaLightIrCode( uint16_t ch, uint16_t cmd, uint8_t *d ) {
    // ch:1-3, cmd:2-7 (2明 3暗 4全灯 5お好み 6常夜灯 7消灯)
  d[0] = 0x2c;  d[1] = 0x52;  d[2] = 0x09;   // カスタムコード他固定部分
  d[3] = cmd + (ch << 3) + 0x20;             // データ部分
  d[4] = d[2] ^ d[3];                        // データチェック用XOR
}

SD Card Shield V2.1 [Arduino]

以前にSDカードで何かしようと思って購入しておいた SDカードシールドです。
sdshield_1.jpg
カードのソケットの他、信号レベルを 3.3V にするための分圧抵抗、チップ型のタンタルコンデンサ、IOポート(D9)からの電源供給に切り替えるスイッチ?などがのっているようです。

Arduino に載せてみるとこんな感じ。
sdshield_2.jpg

非常にすっきりしたシールドで気持ちがいいのですが、大きな問題がありました。

  「5V や GND がとれない!」

というものです。
そこで解決策を考えてみました。

<解決策>
その1:
  Arduino と、SDカードシールドとの間に、もう1枚、目的達成のためのシールドを挟む。
    ちょっと大げさになってしまうかな?
    もともと、このシールドは最後に Add on するのが目的なのかも。 
その2:
  足長のピンソケットに付け替える。
    ピンソケット1x6(6P): パーツ一般 秋月電子通商 電子部品 ネット通販:
    http://akizukidenshi.com/catalog/g/gC-04045/
    ハンダ吸い取り器の出番。ちょっと面倒。
その3:
  5V や GND を使わない。
    他のピン Digital 0-7, Analog 0-5 ピンの電位差で対応する。
    マトリックス LED などの使い方で、5×7ドットのものならピン数的には足りる。
その4:
  Arduino のICSP 端子をつかう。
    2番が 5V、6番が GND につながっているのでここからとれそう。
    オス、メスが逆なので オス-メスのジャンプワイヤーが必要。
その5:
  あきらめる。
    SD カードへの書き込みテストなどの用途に使う。
    寂しい。

こんなところでしょうか?

あとは Arduino Mega を使うというのも思いつきましたが、SPI通信で使用するピンが Duemilanove や Uno などの普通のArduino とは違っていて使えないようです。(Mega は MOSI - 51, MISO - 50, CLK - 52, CS - 53)
あ、、でも SD2Card.h を覗いてみると
/**
 * Define MEGA_SOFT_SPI non-zero to use software SPI on Mega Arduinos.
 * Pins used are SS 10, MOSI 11, MISO 12, and SCK 13.
 *
 * MEGA_SOFT_SPI allows an unmodified Adafruit GPS Shield to be used
 * on Mega Arduinos.  Software SPI works well with GPS Shield V1.1
 * but many SD cards will fail with GPS Shield V1.0.
 */
#define MEGA_SOFT_SPI 0

というような記載があるので、ここをいじれば使えるかも。

すでに、新しいのが出ているようです。

SD card shield [INT106D1P] - $13.90 : Seeed Studio Bazaar, Boost ideas, extend the reach
http://www.seeedstudio.com/depot/sd-card-shield-for-arduino-v21-p-492.html
sdshield_3.jpg
裏には、V3.0 と印刷してあります。

SD card shield for Arduino V2.1

SD card shield for Arduino V2.1

  • 出版社/メーカー: Seeedstudio
  • メディア:

電池ボックスで電池ボックス付きケース [パーツ]

電池ボックスの中に基板まで組み込んでしまうというアイデアをこちらからいただきました。

1.5V電池☆白色LED投光キット: 組み立てキット 秋月電子通商 電子部品 ネット通販
http://akizukidenshi.com/catalog/g/gK-00192/

単3電池1本ほどのスペースにマイコンまで入れる腕はないので、もう少しスペースをいただきたいと思います。
単4電池4本のケースを使って、2本分を電池ケースとして、残りの2本分を基板用のスペースとしたいと思います。

電池ボックス 単4×4本用(フタ付プラスチック・スイッチ付): パーツ一般 秋月電子通商 電子部品 ネット通販
http://akizukidenshi.com/catalog/g/gP-00735/

battcase_01.jpg

まずは、ケースの加工。
battcase_04.jpg
右側の電極を外していきます。
そして、仕切りを取り払いますが、基板の固定のために、部分的に残します。
battcase_05.jpg
battcase_06.jpg

続いて、基板の加工です。
基板は、ICB-88やICB-288やそれと同等品の、寸法 47×72mm のものを使います。

サンハヤト株式会社 | 製品情報-Detail
 小型ユニバーサル基板 ICB-88
 http://www.sunhayato.co.jp/products/details.php?u=66&id=07001
 小型ユニバーサル基板 ICB-288
 http://www.sunhayato.co.jp/products/details.php?u=170&id=07001

こんな感じで切れ込みをいれて
battcase_02.jpg
割ります。
battcase_03.jpg
電池ボックスに当てながら寸法を測り、切れ込みを入れたり、削ったりします。
battcase_07.jpg
切れ込みはペンタイプグラインダーで、切り欠きはヤスリで削りました。
battcase_08.jpg
怖いくらいにピッタリです。

battcase_09.jpg
以前につくった単3電池バージョン、、基板の有効利用を考えると、単4電池のボックスほうがスマートな感じです。

クラフトツール ハードコートヤスリPRO(半丸/7.5mm) 74073

クラフトツール ハードコートヤスリPRO(半丸/7.5mm) 74073

  • 出版社/メーカー: タミヤ
  • メディア: おもちゃ&ホビー

サンハヤト 基板 ICB-288 小型ユニバーサル基板 片面・紙フェノール1.6t・72×47mm

サンハヤト 基板 ICB-288 小型ユニバーサル基板 片面・紙フェノール1.6t・72×47mm

  • 出版社/メーカー: サンハヤト
  • メディア: エレクトロニクス


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。