Arduino勉強会

2015/04/05からのアクセス回数 5104

lbeDuino開発の思い

鈴木哲哉さんの著書 作って遊べるArduino互換機 に紹介されているArduino変換基板というアイディアを元にUnCompatino 3.3V(Arduino Pro3.3相当)と LPC1114FN28でプログラム(スケッチ)やライブラリ、上に載せるシールドを共有し、 EclipseベースのLpcExpressoを使ったソースレベルのデバッグ機能を使ってmbedやArduinoの両方で使える 環境を提供することが、lbeDuino開発の願いです。

変換基板の改造

ArduinoのSoftI2CMasterを使って何とかソフトウェアレベルでlbeDuinoとUnCompatino 3.3Vでライブラリを 共有できないかと頑張ってみたのですが、I2CベースのLCDがどうしても動作しないため、 Arduino勉強会/0H-アイロンプリントのすすめ で作成した、lbeDuino用Arduino変換シールドに以下のようなジャンパー線を追加することにしました。

exchange_jumper.png exchange_arduino.png

UnCompatino 3.3Vで試すlbeDuinoサンプル

Arduino勉強会/0F-lbeDuino誕生 で紹介した例題を使ってArduinoでmbed(lbeDuino)風のプログラミングを味わって頂きます。

最初に使用するArduinoをIDEに知らせるため、ツール→マイコンボード→Arduino Pro or Pro Mini(3.3V,8MHz) w/ ATmega328を選択します。 次に、シリアルポートセットしてください。*1

BlinkLED(LEDの点滅)

最初は、DigitalOut(デジタル出力クラス)を使ったLEDの点滅スケッチ*2 からはじめましょう。

まず、BlinkLEDスケッチを読み込みます。 ファイル→スケッチの例→lbeDuino→BlinkLEDを選択すると、以下のスケッチが表示されます。

/*
  BlinkLED(LEDの点滅)
  1秒間隔でLEDを点滅します。
 */
#include "lbed.h"
 
// D13番ピンに接続されたLEDを使用
DigitalOut led(D13);

// リセット時に呼び出されるsetupでは、特に処理は必要ありません。
void setup() {               
}

// 毎回呼び出されるloopで、ledを切り替えて1秒待ちます。
void loop() {
  led = !led;        // LEDを切り替える(点灯→消灯、消灯→点灯)
  wait_ms(1000);     // 1秒待つ(1000ミリ秒=1秒)
}

DigitalOutクラスのledには、0と1のいずれかの値を持ちます。値のセットは、=による代入を使い、値の読み出しはledをそのまま書きます。 とても直感的な表現がmbedのクラスの特徴です。

次にファイル→マイコンボードに書き込むを選択して、スケッチをArduinoに書き込みます。

BlinkLED.png

ButtonSwitch(ボタンスイッチの例)

次に、ボタンスイッチを押したときにArduinoのLEDを点灯させる例です。

以下の図のようにブレッドボードに回路を組みます。 抵抗は、10kΩを使います。今回は、Arduino3.3V版を使用しますので、 ブレッドボードの電源ライン(赤の線)には、Arduinoの3.3Vをつなぎます。

ButtonSwitch_Brd.png

ファイル→スケッチの例→lbeDuino→ButtonSwitchを選択してスケッチを読み込みます。

/*
  ButtonSwitch(ボタンスイッチの例)
  ボタンを押すとLEDが点灯します。
*/
#include "lbed.h"
 
// D13番ピンに接続されたLEDを使用
DigitalOut     led(D13);
// D7番ピンに接続されたタクトスイッチを使用
DigitalIn     sw(D7);


// リセット時に呼び出されるsetupでは、特に処理は必要ありません。
void setup() {               
}


// 毎回呼び出されるloopで、タクトスイッチの値を読んで、LEDを点灯します。
void loop() {
  led = !sw;      // タクトスイッチは押すと0になるので、!で反転した値をledにセットします
  wait_ms(200);   // 200ミリ秒待つ
}

スケッチをArduinoに書き込んで、タクトスイッチを押してみて下さい。LEDが点灯すれば成功です。

ButtonSwitch.png

Buzzer(ブザーの例)

ボタンスイッチの応用として、LEDの代わりに圧電ブザーを鳴らしてみます。

ボタンスイッチの回路に以下のようにブザーを追加します。ブザーの1方をGNDに、他方をD3番につなぎます。

Buzzer_brd.png

ファイル→スケッチの例→lbeDuino→Buzzerを選択してスケッチを読み込みます。

単なるブザーだと芸がないので、ド、レ、ミの音階を出してみます。

/*
  Buzzer(ブザーの例)
  ボタンを押すと圧電ブザーがド、レ、ミと鳴ります。
 */
#include "lbed.h"

int duration = 500;

// D7番ピンに接続されたタクトスイッチを使用
DigitalIn     sw(D7);
// D3番ピンに接続された圧電ブザーを使用
Tone          buzzer(D3);          // #A

// リセット時に呼び出されるsetupでは、特に処理は必要ありません。
void setup() {                
}

// 毎回呼び出されるloopで、タクトスイッチの値を読んで、ブザーを鳴らします。
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
  }
}

  • #A: LEDの代わりに、Toneのbuzzerをピン番号D3に作成します
  • #B: swが押された(値が0なので、!を付けて真にしています)時にbuzzerのtoneでブザーを鳴らします。

スケッチをArduinoに書き込んで、タクトスイッチを押してみて下さい。ちょっと無理があるけど、何となくド、レ、ミの音階がでているでしょう。

Buzzer.png

電圧の読込(可変抵抗を使った例)

AnalogInを使って、可変抵抗(potentiometer)の電圧を読み込んでみましょう。

以下の様に可変抵抗の真ん中の線をArduinoのA0につなぎ、両端はGNDと3.3Vにつなぎます。

potentiometer.png

ファイル→スケッチの例→lbeDuino→PotentioMeterを選択してスケッチを読み込みます。

/*
  PotentioMeter(電圧測定の例)
  電圧が規定電圧(3.3V)の0.1倍になったらLEDを消します。
 */
#include "lbed.h"

// D13番ピンに接続されたLEDを使用
DigitalOut   led(D13);
// A0番をアナログ入力に使用
AnalogIn     sensor(A0);    // #A

// リセット時に呼び出されるsetupでは、特に処理は必要ありません。
void setup() {
}

// 毎回呼び出されるloopで、potentiometerの値を読んで、0.33V以下ならLEDを消します。
void loop() {
  float value = sensor;
  if (value > 0.1)           // #B
    led = 1;
  else
    led = 0;
  wait_ms(200);              // 200ミリ秒待つ
}

UnCompatino 3.3VとArduino変換シールドで試すlbeDuinoサンプル

次に変換シールドと連結してlbeDuinoのシールドを使ってみましょう。

シールドの作り方は、Arduino勉強会/0G-lbeDuinoシールドを作るで紹介しています。

I2cLCDシールド

以下の様にArduino変換シールドとI2cLCDシールドをセットします。

I2cLCDSheild.png

ファイル→スケッチの例→lbeDuino→I2cLCDSheildを選択してスケッチを読み込みます。

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


// D13番ピンにLEDを接続
DigitalOut     led(D13);
// D8番ピンSDA, D9番ピンSCL. ArduinoではハードI2Cを使用しているため、ピン番号は使用されていない。
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);
}

lbeDuinoの例題と同じスケッチでArduinoでもI2cLCDSheildが動きます。

非接触温度計TMP006シールド

最後に、バッテリーシールドと非接触温度計TMP006シールドを付けて、単独で測定できる温度計を作ってみます。

TMP006Sheild.png

ファイル→スケッチの例→lbeDuino→I2cLCDSheildを選択してスケッチを読み込みます。

#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);
}

手を近づけるとObjTempが高くなります。DieTempは、センサーの温度を示しているので、室温と同じになります。

lbeDuinoForArduinoのインストール方法

以下のZIPファイルをダウンロードして、解凍して作成されたlbeDuinoForArduinoフォルダーのlbeDuinoとlbeDuinoUserをArduinoのユーザ用 ディレクトリ(Macの場合には、Document(文書)/Arduino/libraries/に入れて下さい。

最新のソースは、Githubからダウンロードすることができます。

以下のURLでGithubのlbedのページを表示して、Download ZIPボタンからzipファイルをダウンロードしてください。

解凍したフォルダーのArduino/lbeDuinoとArduino/lbeDuinoUserをArduinoのユーザ用 ディレクトリにコピーして下さい。

コメント

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

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

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


(Input image string)


*1 ArduinoをUSBケーブルに接続したときに追加されたポートを選択してください
*2 プログラムのことをArduinoではスケッチと呼びます

添付ファイル: fileexchange_arduino.png 1122件 [詳細] fileexchange_jumper.png 1127件 [詳細] fileBlinkLED.png 1152件 [詳細] fileButtonSwitch_Brd.png 1201件 [詳細] fileButtonSwitch.png 1191件 [詳細] fileBuzzer_brd.png 1306件 [詳細] fileBuzzer.png 1236件 [詳細] filepotentiometer.png 1142件 [詳細] fileI2cLCDSheild.png 1118件 [詳細] fileTMP006Sheild.png 1240件 [詳細] filelbeDuinoForArduino.zip 968件 [詳細]

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