Arduino勉強会

2015/01/25からのアクセス回数 1854

ここは、 Arduino勉強会/0F-lbeDuino誕生で紹介した LPC1114FN28を使ったmbedライクなクラスライブラリLBEDとArduinoのようなピン配置をもつ lbeDuino用のシールド作成ページです。

バッテリーシールドを作る

作って遊べるArduino互換機 でも最初に紹介されているのがバッテリー(移動用電源)シールドです。

これまであまり必要性を感じていなかったのですが、作ってみると「あると便利だなぁ」 と感じました。

battery_shield_I2cLCD.png

バッテリーシールドの回路を 作って遊べるArduino互換機 図5−4から引用します。

battery_shield_sch.png

必要な部品

lbeDuinoは、3.3Vで動くので、HT7750Aの代わりにHT7733Aを使用しました。 データシートの回路はHT7750Aと同じでした。

品名秋月コード数量備考
DC/DCコンバータ HT7733AI-0279914個入り
整流用ショットキーダイオード 1S4I-001271
電解コンデンサー47μFP-031201
電解コンデンサー22μFP-031771今回は10μFを2個で代用
積層セラミックコンデンサー0.1μFP-04064110個入り
小型スライドスイッチP-0273614個入り
インダクター(47μH1.2A)P-0404714個入り
電池ボックス 単4x2本用P-022451
ピンソケット 1x6C-040452
ピンソケット 1x8C-040462
両面スルホール・ガラス・ユニバーサル基板 CタイプP-001891

テクノペンで配線

lbeDuinoをユニバーサル基板のCタイプと同じサイズにしたのには、 テクノペン を使って配線したいと考えていました。 *1

秋月から両面スルホール・ガラス・ユニバーサル基板の画像をダウンロードし、プリンターで印刷した紙に回路を 描いて、テクノペンで同じようになぞって、ドライヤーで乾燥(稼働中のファンヒーターで代用)すると基板の完成です。

technopen.png

部品を付けたバッテリーシールド

基板に部品をハンダ付けして、完成したバッテリーシールドです。

battery_shield.png

電池1本でも大丈夫

データシートに0.7Vから変換するとあったので、電池1本で試してみました。

当たり前ですが、ちゃんと3.3Vがでています。これなら電池付きの試作に使えます。

one_battery.png

I2C LCDとボタンの入出力シールド

lbeDuinoの基板では、通常のLCDは載らないので、 ストロベリーリナックスのI2C LCD を使って入出力シールドを作ります。 *2

必要な部品は以下の通りです。 *3

品名秋月コード数量備考
I2C低電圧キャラクタ液晶モジュール(16x2行)1ストロベリーリナックス
タクトスイッチ(白)P-036481
タクトスイッチ(黒)P-036471
抵抗4.7KΩR-254722100本入り

ピン配置

最初に部品の配置と接続するピンを決め、ジャンパーする線を探します。 以下のスケッチの青線がジャンパー線です。

I2cLCDShield_sketch.png

ブレッドボードで動作を確認

回路が正しく動くかブレッドボードで確認します。

I2cLCDShield_brd.png

テストに使うプログラムI2cLCDShield.cppは、以下の通りです。

#include "lbed.h"
#include "AQCM0802.h"

// D13番ピンにLEDを接続
DigitalOut     led(D13);
// D8番ピンSDA, D9番ピンSCL
AQCM0802     lcd(D8, D9);
// タクトスイッチ
DigitalIn     sw1(D2);
DigitalIn     sw2(D3);

void setup() {
     sw1.mode(PullUp);
     sw2.mode(PullUp);
     lcd.setup();
     lcd.print("I2C LCD");
}

void loop() {
     led = !led;
     lcd.locate(0, 1);
     if (!sw1) {
          lcd.print("SW1 On ");
     }
     else if (!sw2) {
          lcd.print("SW2 On ");
     }
     else {
          lcd.print("All Off");
     }
     wait_ms(1000);
}

ユニバーサル基板の配線パターン

次に秋月の両面ユニバーサル基板の画像に配線図を書き込みます。

I2cLCDShield_pattern.png

部品を載せて完成

テクノペンで描いた配線の上から部品の載せます。 タクトスイッチを押すと下の行にSW1 Onと表示します。

I2cLCDShield_Test.png

Arduino-lbeDuino変換シールド

Arduino勉強会/0H-アイロンプリントのすすめで作成したArduino-lbeDuino変換シールドは、とても重宝しています。

特にlbeDuino用に作ったシールドがそのまま3.3VのUncompatinoでも使えます。以下の図は3.3V Uncompatinoの上に、 Arduino-lbeDuino変換シールを載せ、その上にバッテリーシールドを載せている場面です。

change_battery.png

SDカードシールド

作って遊べるArduino互換機 に倣って、秋月電子で販売されているマイクロSDカードスロットAE-MIXCRO-SD-DIPを使って、 lbeDuino用のSDカードシールドを作ってみました。*4

SD_Card_shield.png

テクノペンを使った配線は、以下の通りです。

SD_Card_shield_brd.png

Arduinoで動作確認

最初は、Arduinoのスケッチを使って、動作確認をしました。

Arduino IDEでファイル→スケッチの例→SD→Dataloggerを選択します。 スケッチをすべてコピー&ペーストで、新規のスケッチに複製します。

29行目のchipSelectを4にします。

const int chipSelect = 4;

Arduinoにスケッチをアップロードすると、 SDカードにアナログピンの数値をどんどん書き込んでいきますので、途中でSDカードを抜いてやります。

SD_logger_output.png

SDカードをPCに入れると、DATALOG.TXTというファイルができており、内容が上記のような値になっています。

これで、SDカードシールドが正しく動作することが確認できました。

SDライブラリの移植

別途紹介する予定ですが、ArduinoのSDライブラリをlbeDuino用に移植しました。 *5

lbeDuino_SDCard.png

以下のSDCard_Info.cppを作成して、SDカードの情報をシリアルモニターに表示します。

#include "lbed.h"
#include "SD.h"

const int chipSelect = D4;

void setup() {
     /*
      SD.begin(chipSelect);

      File dataFile = SD.open("test.txt", FILE_WRITE);

      // if the file is available, write to it:
      if (dataFile) {
      dataFile.println("test");
      dataFile.close();
      }
      */
     Serial pc(D0, D1);
     pc.baud(9600);
     pc.print("\nInitializing SD card...");

     Sd2Card card;
     SdVolume volume;
     SdFile root;
     if (!card.init(SPI_HALF_SPEED, chipSelect)) {
          pc.println("initialization failed. Things to check:");
          pc.println("* is a card is inserted?");
          pc.println("* Is your wiring correct?");
          pc.println(
                    "* did you change the chipSelect pin to match your shield or module?");
          return;
     } else {
          pc.println("Wiring is correct and a card is present.");
     }
     // print the type of card
     pc.print("\nCard type: ");
     switch (card.type()) {
     case SD_CARD_TYPE_SD1:
          pc.println("SD1");
          break;
     case SD_CARD_TYPE_SD2:
          pc.println("SD2");
          break;
     case SD_CARD_TYPE_SDHC:
          pc.println("SDHC");
          break;
     default:
          pc.println("Unknown");
     }

     // Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32
     if (!volume.init(card)) {
          pc.println(
                    "Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
          return;
     }

     // print the type and size of the first FAT-type volume
     uint32_t volumesize;
     pc.print("\nVolume type is FAT");
     pc.print(volume.fatType(), DEC);
     pc.println();

     volumesize = volume.blocksPerCluster(); // clusters are collections of blocks
     volumesize *= volume.clusterCount();       // we'll have a lot of clusters
     volumesize *= 512;                    // SD card blocks are always 512 bytes
     pc.print("Volume size (bytes): ");
     pc.print(volumesize);pc.println();
     pc.print("Volume size (Kbytes): ");
     volumesize /= 1024;
     pc.print(volumesize);pc.println();
     pc.print("Volume size (Mbytes): ");
     volumesize /= 1024;
     pc.print(volumesize);pc.println();

     pc.println("\nFiles found on the card (name, date and size in bytes): ");
     root.openRoot(volume);

     // list all files in the card with date and size
     root.ls(LS_R | LS_DATE | LS_SIZE);

}

void loop() {
}

Mac OSXの場合、SDカードにゴミ箱やスポットライトの情報が隠れファイルとして作成されているため、 以下の様に出力されました。

SD_Info_monitor.png

 非接触温度計TMP006シールド

作って遊べるArduino互換機 で紹介されているTMP006シールドをlbeDuino用に作成しました。

th_TMP006_shield.jpg

いつものようにテクノペンで基板のパターンをかきました。

TMP006_shield_brd.png TMP006.png

テストに使用するライブラリは、mbedの [Sam Kirsch氏のTMP006_lib>http://developer.mbed.org/users/sammacjunkie/code/TMP006_lib/]] をlbeDuinoに移植して使いました。 *6

最初、値が正しく求まりませんでした。この原因はLBEDのI2C.readのバグでした。

温度を表示するスケッチは、以下の通りです。

#include "lbed.h"
#include "TMP006.h"
#include "AQCM0802.h"

#define Address (0x40<<1)

// D8番ピンSDA, D9番ピンSCL
TMP006           sensor(D8, D9, Address);
AQCM0802     lcd(D8, D9);

void setup() {
     lcd.setup();
     sensor.config(Address, 8);
}

void loop() {
     lcd.locate(0, 0);
     lcd.print("DieTemp: ");
     lcd.print(sensor.readDieTempC(Address), 2);
     lcd.locate(0, 1);
     lcd.print("ObjTemp: ");
     lcd.print(sensor.readObjTempC(Address), 2);
     wait_ms(1000);
}

コメント

選択肢 投票
おもしろかった 4  
そうでもない 0  
わかりずらい 0  

皆様のご意見、ご希望をお待ちしております。勉強会で分からなかったこと等、お気軽に問い合わせて下さい。

スパム防止に画像の文字列も入力してください。

  • Arduino-lbeDuino変換シールドとマイクロSDカードシールドを追加しました。 -- 竹本 浩? 2015-02-14 (土) 11:31:25
  • I2C.readに大きなバグがありました。lbeDuinoのI2C, LM73は修正済みですが、他の版は未対応です。ご注意ください。 -- 竹本 浩? 2015-02-22 (日) 11:36:26
  • LM73の再テストを行い動作を確認しました -- 竹本 浩? 2015-02-23 (月) 20:47:02

(Input image string)


*1 テクノペンは、冷蔵庫で保管して下さい
*2 変換基板でユニバーサル基板で使えるようになっているのがありがたい
*3 抵抗は、470Ω、1KΩ、4.7KΩ、10KΩを買っておくと便利です
*4 ここでもArduino-lbeDuino変換シールドが活躍しています。
*5 最初のバージョンは、chipSelectをD4に固定しております。
*6 インクルードファイルをmbed.hからlbed.hに変えるだけです

添付ファイル: fileth_TMP006_shield.jpg 260件 [詳細] fileTMP006_shield_brd.png 241件 [詳細] fileTMP006.png 240件 [詳細] fileSD_Info_monitor.png 253件 [詳細] filelbeDuino_SDCard.png 228件 [詳細] fileSD_logger_output.png 248件 [詳細] fileSD_Card_shield_brd.png 261件 [詳細] fileSD_Card_shield.png 269件 [詳細] filechange_battery.png 251件 [詳細] fileI2cLCDShield_Test.png 230件 [詳細] fileI2cLCDShield_sketch.png 222件 [詳細] fileI2cLCDShield_pattern.png 253件 [詳細] fileI2cLCDShield_brd.png 231件 [詳細] fileone_battery.png 254件 [詳細] filetechnopen.png 276件 [詳細] filebattery_shield.png 271件 [詳細] filebattery_shield_sch.png 275件 [詳細] filebattery_shield_I2cLCD.png 279件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-07-14 (木) 21:32:17 (287d)
SmartDoc