Arduino勉強会

2015/01/17からのアクセス回数 1911

lbeDuino誕生の理由

安く、ソースデバッガーが使えて、豊富なライブラリーが使える開発環境を作ろうと少しずつ開発を進めてきました lbed ですが、Arduinoのシールドを意識しながら、lbeDuinoと言う形で整理してみたいと思います。

この記事は、鈴木哲哉さんの著書 作って遊べるArduino互換機 に強く影響を受けています。 Arduinoのシールドとの変換シールドを作れば、安くて簡単な万能基板が使えることは、 気軽に電子工作を楽しむ第一歩になると考えたからです。

lbeDuinoでは、プログラムの開発はLpcExpresso Ver.6以降を使っています。 デバッガには、トラ技のARMデバッガを使用しましたが、LPC-LINK, LPC-LINK2も使えます。

lbeDuinoの作成方針

Arduino勉強会では、ProtoSnap Pro Mini を使っているので、シリアル通信とUSBからの電源供給は、 FTDI USBシリアル変換アダプターを使います。 シリアル変換アダプターを購入されるのなら、 スイッチサイエンスの FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き) が便利かと思います。

FTDI_USB_Serial.png

ピンの使い方は、mbed LPC1114FN28を参考にしました。

pinout_dip28-20131006-.png

lbeDuinoの回路図

手書きで申し訳ありませんが、lbeDuinoの回路を以下に示します。

回路のミスについて

  • AREFをAnalogInに接続
  • 3.3VとGNDにパスコンを追加
  • TA48M033Fの1, 3, 2ピンに5V, GND, 3.3Vであり、セラミックコンデンサーは5V, 電解コンデンサーは3.3Vに接続
  • D13とD10を入れ替えました(2015/02/08)

lbeDuino_hand_sch.png

lbeDuinoの組み立て

出来上がったlbeDuinoは、以下の様になりました。*1

lbeDuino_brd.png

lbeDuinoの動作確認

Arduinoの動作確認と言えばblinkなので、lbeDuinoでも以下の様なBlink.cpp作って動作を確認しました。

今回Arduino版のlbedと同じスケッチが使えるようにサンプルプログラムをArduino風に書きました。

lbedのArduino版については、Arduino/Arduinoでmbedユーザライブラリーを動かすを参照してください。

ledをDigitalOutのインスタンスとして作成し、LEDのオン・オフをled = !ledのように書けるところがmbed風 のプログラミングの分かりやすいところです。

#include"lbed.h"

DigitalOut led(D13);

void setup() {}

void loop() {
    led = !led;
    wait_ms(1000);
}

lbedユーザライブラリの動作確認

これまで作ったlbed用のユーザライブラリをlbeDuinoで動かしてみます。

テキストLCD(TextLCD)

mbedのTextLCDをlbedで動かしてみます。

3.3Vで動作するLCDは、オレンジボードに載せたものだけなので、以下の様にオレンジボードと接続して 動作を確認しました。

オレンジボードlbeDuino
p24(rs)D0
p26(e)D1
p27(d4)D2
p28(d5)D3
p29(d6)D4
p30(d7)D5

動作確認をしたときの画像は、以下の通りです。

TextLCD.png

TextLCDの動作確認

TextLCDの場合も、mbedのTextLCDの例題がそのまま使えます。

Arduino風に書いたTextLCD.cppは、以下の通りです。リセットするとHello Worldが上手く表示できないので、 少し調整が必要ですが、なんとか動きそうです。

#include "lbed.h"
#include "TextLCD.h"

DigitalOut led(D13);
TextLCD lcd(D0, D1, D2, D3, D4, D5);     // rs, e, d4-7
int     count = 0;

void setup() {
     lcd.print("Hello World!");
}

void loop() {
     lcd.locate(0, 1);
     lcd.print("Count=");
     lcd.print(count++);
     led = !led;
    wait_ms(1000);
}

シリアル通信

パソコンとのシリアル通信(Serial)をArduinoのシリアルモニタを使ってテストしてみます。

シリアルを使う時には、FTDI USBシリアル変換アダプターを接続し、Rx, Txのジャンパーを結線します。

Serial.png

シリアルの動作確認

シリアルの動作確認にSerial.cppを作成し、予めArduinoのシリアルモニターを起動し、 ボーレイトを9600にセットして下さい。

#include "lbed.h"

DigitalOut myled(D13);
Serial pc(D0, D1);

void setup() {
     pc.baud(9600);
     pc.println("Hello World!");
}

void loop() {
     char c = pc.read();
     pc.write(c + 1);
     myled = !myled;
}

最初にHello Worldを出力し、次に入力した文字の次の文字を返します。abcefgと入力するとbcdfghと返してきます。

Serial_Monitor.png

DigitalIn

LBEDのLPC1114版ではDigitalIn, AnalogInを実装していなかったので、LPC1343版から移植し、動作を確認しました。

DigitalInでは、以下のようにタクトスイッチに10KΩの抵抗でプルアップした回路を組み、スイッチを押したときに LEDを点灯するプログラムを作成して、動作を確認しました。

ButtonSwitch_brd.png

DigitalInの動作確認

以下のプログラムButtonSwtich.cppを作成し、動作を確認しました。

#include "lbed.h"
// Pin 13 has an LED connected on most lbeDuino boards.
DigitalOut led(D13);
// Pin 7 has an tact switch on bread board.
DigitalIn  sw(D7);          // #A

// the setup routine runs once when you press reset:
void setup() {
}

// the loop routine runs over and over again forever:
void loop() {
  led = !sw;                // #B
  wait_ms(200);             // wait for 200 mili seconds.
}

AnalogIn

AnalogInは、可変抵抗(potensiometer)を使って電圧を変えて動作を確認しました。

PotensioMeter_brd.png

AnalogInの動作確認

AnalogInの動作確認には、電圧が参照電圧ARefの0.1倍になったらLEDを消すプログラムPotensioMeter.cpp を作って確認しました。

/*
  PotentioMeter
  Turns on an LED on when potentiometer > 0.33V(0.1).

  This example code is in the public domain.
 */
#include "lbed.h"

// Pin 13 has an LED connected on lbeDuino.
DigitalOut   led(D13);
// Pin A0 has a analog input.
AnalogIn     sensor(A0);  // #A

// the setup routine runs once when you press reset:
void setup() {
}

// the loop routine runs over and over again forever:
void loop() {
  float value = sensor;
  if (value > 0.1)             // #B
    led = 1;
  else
    led = 0;
  wait_ms(200);              // wait for 200 mili seconds.
}

Tone

Toneは、PWMを使用しているため、LPC1114で使えるピンが限られます。 D3, D6, A0がToneとして使用できます。

以下の様にタクトスイッチを押すと圧電ブザーがなるようにブレッドボードで回路を組みます。

Buzzer_brd.png

Toneの動作確認

以下の様なBuzzer.cppを作成し、タクトスイッチを押すとド、レ、ミとなるように します。*2

/*
  Buzzer
  Sound on an buzzer on when button pressed.

  This example code is in the public domain.
 */
#include "lbed.h"
#include "Tone.h"

int duration = 500;

// Pin 7 has an tact switch on lbeDuino.
DigitalIn     sw(D7);
// Pin 2 has a buzzer on lbeDuino.
Tone          buzzer(D3);     // #A

// the setup routine runs once when you press reset:
void setup() {
}

// the loop routine runs over and over again forever:
void loop() {
  if (!sw) {                         // #B
    buzzer.tone(262, duration);     // ド, 500 msec
    wait_ms(500);
    buzzer.tone(294, duration);     // レ, 500 msec
    wait_ms(500);
    buzzer.tone(330, duration);     // ミ, 500 msec
  }
}

I2C接続のLCD(AQCM0802)

秋月でも販売しているI2C接続のLCD *3 とmbedの AQCM0802のライブラリ をlbedに移植したものを使用しました。

lbedとの接続は、以下の通りです。

lbeDuinoAQCM0802ボード
3.3V1番(VCC)、2(nRESET)
GND5番 GND
D8(SDA)4番(SDA)
D9(SCL)3番(SCL)

I2CLCD_brd.png

I2C接続のLCD(AQCM0802)の動作確認

以下のI2cLCD.cppを使ってAQCM0802での動作を確認しました。

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

// D13番ピンにLEDを接続
DigitalOut     led(D13);
// D8番ピンSDA, D9番ピンSCL
AQCM0802     lcd(D8, D9);
// カウンター
int     counter = 0;

void setup() {
     lcd.setup();
     lcd.print("Hello");
}

void loop() {
     led = !led;
     lcd.locate(0, 1);
     lcd.print("cnt=");
     lcd.print(counter++);
     wait_ms(1000);
}

lbeDuinoのソースの取得

ここで紹介しましたlbeDuinoのソースは、以下のGitHubから取得できます。

lbeDuinoに必要なフォルダーは以下の通りです。

  • CMSISv2p00_LPC11xx
  • LBED_lbeDuino
  • LBED_lbeDuino_USERLIB
  • LBED_lbeDuino_MAIN

テストプログラムは、LBED_lbeDuino_MAIN/src に置いて下さい。

サンプルプログラムは、Examplesにあります。

lbeDuino2号機

lbeDuinoは思った以上に使えるので、テクノペンとジャンパー線で2号機を作ってみました。

lbeDuino_v2.png

1号機に対して以下の改良をしました。

  • シリアルコネクターをL字型に変更
  • LPC-LINKとの接続コネクターを一番端に1つずらした。*4

テクノペンのパターンとジャンパー線は、以下の通りです。

lbeDuino_v2_brd.png

今回は勇気を出してジャンパー線も公開します。*5

lbeDuino_v2_btm.png

この後

lbeDuinoのシールドについては、

lbeDuinoの開発環境構築手順については、

をご覧下さい。

おまけ

最初は、LPC1114FN28でArduinoシールドを使えるボードを探したところ、 ITショップ「えとせとら」でNeXtPino を見つけました。 *6

早速購入して、lbedを移植して試してみました。

NeXtPino.png

しかし、lbedのライブラリで動作確認を進めていくと、いくつか問題点がでてきました。

  • D13にSWCLKを割り当てているため、LPC-LINKでデバッグできない。*7
  • D0にRESETを割り当てているため、DigitalOutに使えない

コメント

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

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

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

  • SPIのSCLKがD13になるように、D13とD10を入れ替えました。 -- 竹本 浩? 2015-02-08 (日) 13:18:29
  • 2号機を作りました。 -- 竹本 浩? 2015-02-12 (木) 20:25:14
  • lbeDuino_のプレフィックスを削除しました。 -- 竹本 浩? 2015-02-15 (日) 10:17:11
  • NeXtPinoの説明を最後の「おまけ」に移動しました。 -- 竹本 浩? 2015-04-04 (土) 19:49:14

(Input image string)


*1 かっこ悪くてハンダ面をおみせできなくてすみません。
*2 何となくドレミに聞こえる感じです
*3 今回はマルツのI2Cセンサーキットに搭載されているものを使っています
*4 シールドを載せた状態でもデバッグが可能
*5 写真をとるために、部品を付ける前にジャンパー線をハンダしたのが、失敗でした。部品を付けてからハンダすると楽ですよ
*6 NeXtPinoにLPC-LINKでBlinkプログラムを動かしているところ
*7 LPC-LINKの接続でエラーになる

添付ファイル: filelbeDuino_v2_brd.png 346件 [詳細] filelbeDuino_v2_btm.png 303件 [詳細] filelbeDuino_v2.png 310件 [詳細] fileI2CLCD_brd.png 373件 [詳細] fileBuzzer_brd.png 405件 [詳細] filePotensioMeter_brd.png 324件 [詳細] fileButtonSwitch_brd.png 344件 [詳細] fileTextLCD.png 325件 [詳細] fileSerial.png 367件 [詳細] fileSerial_Monitor.png 368件 [詳細] filepinout_dip28-20131006-.png 353件 [詳細] fileNeXtPino.png 360件 [詳細] filelbeDuino_hand_sch.png 363件 [詳細] filelbeDuino_brd.png 340件 [詳細] fileFTDI_USB_Serial.png 395件 [詳細]

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