[[Arduino勉強会]] #contents 2015/01/17からのアクセス回数 &counter; ** lbeDuino誕生の理由 [#f5d8ba4a] 安く、ソースデバッガーが使えて、豊富なライブラリーが使える開発環境を作ろうと少しずつ開発を進めてきました [[lbed]] ですが、Arduinoのシールドを意識しながら、lbeDuinoと言う形で整理してみたいと思います。 この記事は、鈴木哲哉さんの著書 [[作って遊べるArduino互換機 >http://www.amazon.co.jp/dp/4883378802/]] に強く影響を受けています。 Arduinoのシールドとの変換シールドを作れば、安くて簡単な万能基板が使えることは、 気軽に電子工作を楽しむ第一歩になると考えたからです。 lbeDuinoでは、プログラムの開発はLpcExpresso Ver.6以降を使っています。 デバッガには、トラ技のARMデバッガを使用しましたが、LPC-LINK, LPC-LINK2も使えます。 *** lbeDuinoの作成方針 [#ae716563] Arduino勉強会では、ProtoSnap Pro Mini を使っているので、シリアル通信とUSBからの電源供給は、 FTDI USBシリアル変換アダプターを使います。 シリアル変換アダプターを購入されるのなら、 スイッチサイエンスの [[FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)>https://www.switch-science.com/catalog/1032/]] が便利かと思います。 &ref(FTDI_USB_Serial.png); ピンの使い方は、mbed LPC1114FN28を参考にしました。 &ref(pinout_dip28-20131006-.png); *** lbeDuinoの回路図 [#ze4e30fb] 手書きで申し訳ありませんが、lbeDuinoの回路を以下に示します。 回路のミスについて - AREFをAnalogInに接続 - 3.3VとGNDにパスコンを追加 - TA48M033Fの1, 3, 2ピンに5V, GND, 3.3Vであり、セラミックコンデンサーは5V, 電解コンデンサーは3.3Vに接続 - D13とD10を入れ替えました(2015/02/08) &ref(lbeDuino_hand_sch.png); *** lbeDuinoの組み立て [#f2a5d3c5] 出来上がったlbeDuinoは、以下の様になりました。((かっこ悪くてハンダ面をおみせできなくてすみません。)) &ref(lbeDuino_brd.png); *** lbeDuinoの動作確認 [#y9510da1] Arduinoの動作確認と言えばblinkなので、lbeDuinoでも以下の様なBlink.cpp作って動作を確認しました。 今回Arduino版のlbedと同じスケッチが使えるようにサンプルプログラムをArduino風に書きました。 lbedのArduino版については、[[Arduino/Arduinoでmbedユーザライブラリーを動かす]]を参照してください。 ledをDigitalOutのインスタンスとして作成し、LEDのオン・オフをled = !ledのように書けるところがmbed風 のプログラミングの分かりやすいところです。 #pre{{ #include"lbed.h" DigitalOut led(D13); void setup() {} void loop() { led = !led; wait_ms(1000); } }} ** lbedユーザライブラリの動作確認 [#f653abcf] これまで作ったlbed用のユーザライブラリをlbeDuinoで動かしてみます。 *** テキストLCD(TextLCD) [#dfc4313d] mbedのTextLCDをlbedで動かしてみます。 3.3Vで動作するLCDは、オレンジボードに載せたものだけなので、以下の様にオレンジボードと接続して 動作を確認しました。 | オレンジボード | lbeDuino |h | p24(rs) | D0 | | p26(e) | D1 | | p27(d4) | D2 | | p28(d5) | D3 | | p29(d6) | D4 | | p30(d7) | D5 | 動作確認をしたときの画像は、以下の通りです。 &ref(TextLCD.png); *** TextLCDの動作確認 [#uc3ea540] TextLCDの場合も、mbedのTextLCDの例題がそのまま使えます。 Arduino風に書いたTextLCD.cppは、以下の通りです。リセットするとHello Worldが上手く表示できないので、 少し調整が必要ですが、なんとか動きそうです。 #pre{{ #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); } }} *** シリアル通信 [#h71f9024] パソコンとのシリアル通信(Serial)をArduinoのシリアルモニタを使ってテストしてみます。 シリアルを使う時には、FTDI USBシリアル変換アダプターを接続し、Rx, Txのジャンパーを結線します。 &ref(Serial.png); *** シリアルの動作確認 [#d253f617] シリアルの動作確認にSerial.cppを作成し、予めArduinoのシリアルモニターを起動し、 ボーレイトを9600にセットして下さい。 #pre{{ #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と返してきます。 &ref(Serial_Monitor.png); *** DigitalIn [#b5d48648] LBEDのLPC1114版ではDigitalIn, AnalogInを実装していなかったので、LPC1343版から移植し、動作を確認しました。 DigitalInでは、以下のようにタクトスイッチに10KΩの抵抗でプルアップした回路を組み、スイッチを押したときに LEDを点灯するプログラムを作成して、動作を確認しました。 &ref(ButtonSwitch_brd.png); *** DigitalInの動作確認 [#ta879561] 以下のプログラムButtonSwtich.cppを作成し、動作を確認しました。 #pre{{ #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 [#ke7ea3db] AnalogInは、可変抵抗(potensiometer)を使って電圧を変えて動作を確認しました。 &ref(PotensioMeter_brd.png); *** AnalogInの動作確認 [#c57385b4] AnalogInの動作確認には、電圧が参照電圧ARefの0.1倍になったらLEDを消すプログラムPotensioMeter.cpp を作って確認しました。 #pre{{ /* 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 [#g5c3fa78] Toneは、PWMを使用しているため、LPC1114で使えるピンが限られます。 D3, D6, A0がToneとして使用できます。 以下の様にタクトスイッチを押すと圧電ブザーがなるようにブレッドボードで回路を組みます。 &ref(Buzzer_brd.png); *** Toneの動作確認 [#a4b8aa26] 以下の様なBuzzer.cppを作成し、タクトスイッチを押すとド、レ、ミとなるように します。((何となくドレミに聞こえる感じです)) #pre{{ /* 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) [#se87aeaa] 秋月でも販売しているI2C接続のLCD ((今回はマルツのI2Cセンサーキットに搭載されているものを使っています)) とmbedの [[AQCM0802のライブラリ>http://developer.mbed.org/users/yasuyuki/notebook/AQM0802/]] をlbedに移植したものを使用しました。 lbedとの接続は、以下の通りです。 | lbeDuino | AQCM0802ボード | | 3.3V | 1番(VCC)、2(nRESET) | | GND | 5番 GND | | D8(SDA) | 4番(SDA) | | D9(SCL) | 3番(SCL) | &ref(I2CLCD_brd.png); *** I2C接続のLCD(AQCM0802)の動作確認 [#s9833d0b] 以下のI2cLCD.cppを使ってAQCM0802での動作を確認しました。 #pre{{ #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のソースの取得 [#c64c5f2d] ここで紹介しましたlbeDuinoのソースは、以下のGitHubから取得できます。 - https://github.com/take-pwave/lbed lbeDuinoに必要なフォルダーは以下の通りです。 - CMSISv2p00_LPC11xx - LBED_lbeDuino - LBED_lbeDuino_USERLIB - LBED_lbeDuino_MAIN テストプログラムは、LBED_lbeDuino_MAIN/src に置いて下さい。 サンプルプログラムは、Examplesにあります。 ** lbeDuino2号機 [#k93f8e73] lbeDuinoは思った以上に使えるので、テクノペンとジャンパー線で2号機を作ってみました。 &ref(lbeDuino_v2.png); 1号機に対して以下の改良をしました。 - シリアルコネクターをL字型に変更 - LPC-LINKとの接続コネクターを一番端に1つずらした。((シールドを載せた状態でもデバッグが可能)) テクノペンのパターンとジャンパー線は、以下の通りです。 &ref(lbeDuino_v2_brd.png); 今回は勇気を出してジャンパー線も公開します。((写真をとるために、部品を付ける前にジャンパー線をハンダしたのが、失敗でした。部品を付けてからハンダすると楽ですよ)) &ref(lbeDuino_v2_btm.png); ** この後 [#ze5fc4c0] lbeDuinoのシールドについては、 - [[Arduino勉強会/0G-lbeDuinoシールドを作る]] lbeDuinoの開発環境構築手順については、 - [[Arduino勉強会/0I-lbeDuinoの開発環境構築]] をご覧下さい。 *** おまけ [#p3ef7d31] 最初は、LPC1114FN28でArduinoシールドを使えるボードを探したところ、 ITショップ「えとせとら」で[[NeXtPino>http://itcorp24.cart.fc2.com/ca0/21/]] を見つけました。 ((NeXtPinoにLPC-LINKでBlinkプログラムを動かしているところ)) 早速購入して、lbedを移植して試してみました。 &ref(NeXtPino.png); しかし、lbedのライブラリで動作確認を進めていくと、いくつか問題点がでてきました。 - D13にSWCLKを割り当てているため、LPC-LINKでデバッグできない。((LPC-LINKの接続でエラーになる)) - D0にRESETを割り当てているため、DigitalOutに使えない ** コメント [#bc6b8ae8] #vote(おもしろかった[4],そうでもない[0],わかりずらい[0]) #vote(おもしろかった[5],そうでもない[0],わかりずらい[0]) 皆様のご意見、ご希望をお待ちしております。勉強会で分からなかったこと等、お気軽に問い合わせて下さい。 スパム防止に画像の文字列も入力してください。 - SPIのSCLKがD13になるように、D13とD10を入れ替えました。 -- [[竹本 浩]] &new{2015-02-08 (日) 13:18:29}; - 2号機を作りました。 -- [[竹本 浩]] &new{2015-02-12 (木) 20:25:14}; - lbeDuino_のプレフィックスを削除しました。 -- [[竹本 浩]] &new{2015-02-15 (日) 10:17:11}; - NeXtPinoの説明を最後の「おまけ」に移動しました。 -- [[竹本 浩]] &new{2015-04-04 (土) 19:49:14}; #comment_kcaptcha