シリアル通信で、ワイヤレスなLED制御 (Lチカ) をしてみました。
Android端末とペアリングして制御することもできます。
とりあえずはそれだけですが、かなり簡単です。(ありがたいことにドキュメントも沢山あります。)
今回用いたモノ:
- "Arduino Leonardo"
- "Bluetoothモジュール RBT-001"
技適取得済みのBluetooth2.0(SPP/GAP/SDAP)モジュールです。 - "RBT-001用シリアルレベルコンバータ Rev.3"
Arduinoは3.3/5V、RBT-001は3V駆動なので変換が必要です。
今回は手軽なこの変換基板を用いました。
これと同様の基板はRBT-001を取り扱っている各社から出ています。 - "高輝度5mm青色LED OSUB5111A"
手持ちのLEDです。 - "カーボン抵抗 1kΩ"
以下、手順を簡単に説明しておきます。
- 電源: Arduinoに接続したmicroUSB経由 (PC由来)
- ArduinoのI/Oピンによる出力: (参照)
- 電流: 40mA
- 電圧: 5V
- 今回用いる Bluetooth モジュールの電流:
- リンク未確率: 約9mA
- リンク確立時: 約17mA
- リンクデータ送受信時: 約27mA
- 今回用いる LED:
LEDは流れる電流(順方向電流)によって順方向電圧が決まる。 - 順方向電流(IF):
20mA(明るすぎるので 5mA あたりに) - 順方向電圧(VF): 3.1V (5mAのとき)
LEDの抵抗(R)は、R = V / I
即ち、抵抗値(Ω) = ( 電源電圧(V) − 順方向電圧(V) ) / 順方向電流(A) です。
従って、R = (5V - 3.1V) / 5mA = 1.9V / 0.005A = 380
ということで、380Ωの抵抗を...ということなんですが・・・
とりあえず、手元にあった 1kΩの抵抗を使うことにしました (適当w
まずは、BluetoothモジュールをArduinoに接続します。
先述のとおり、今回使用するBluetoothモジュール(RBT-001)は 3.0V駆動ですから、
Arduinoとの直結ができません。(RBT-001 ユーザーズガイド)
従って、今回はこの変換基板("RBT-001用シリアルレベルコンバータ Rev.3")を利用しました。
これが、さすが気の効いたモノで...
下の写真では、変換基板のみをブレッドボードに載せていますが、
RBT-001と合体させた状態でも、変換基板上のピン表記が読みやすいという、優しい仕様ですw
下の写真では、変換基板のみをブレッドボードに載せていますが、
RBT-001と合体させた状態でも、変換基板上のピン表記が読みやすいという、優しい仕様ですw
この変換基板のピン表記に従って接続していきます。
今回は以下のようにしました: (TX, RXは後述の設定さえすれば、どこのデジタルピンでもOK。)
- GND: GNDピン
- CTS: 使用しない
- 5Vin: 5Vピン
- RX: 10番ピン
- TX: 11番ピン
- RTS: 使用しない
あとは、この変換基板の上(ピンヘッダ)に、RBT-001のコネクタをつなぐだけです。
(この変換基板の場合、RBT-001のチップが載っている面が下になります。)
次は、LEDをArduinoに接続します。
もちろん、ふつうにLEDを繋ぐだけです。
- アノード(プラス (長い足)): 13番ピン
- カソード(マイナス (短い足)): GNDピン
※ Arduinoボードの13番ピンは、LED用に内蔵抵抗がある...とよく書かれていますが、当てはまらないボードもあるようです。 (13番が内蔵LEDに接続されているのはその通り。)
13番を使うにしても、テスターで確かめるか、抵抗を挟むほうが良いと思います。
13番を使うにしても、テスターで確かめるか、抵抗を挟むほうが良いと思います。
![]() |
LEDのアノード側はそのまま13ピンへ。 カソード側は1kΩの抵抗を接続して、GNDピンへ |
以上で、準備完了です。
あとはコードを適当に書いて...。
末尾のURLを参考にさせていただきました。
Arduinoでは"SoftwareSerial"ライブラリを使うことで、I/Oピンを用いたシリアル通信が楽にできます。
SoftwareSerial Hoge(RX, TX) という感じで、RXが、BluetoothモジュールのTXと接続したピン番号になります。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <SoftwareSerial.h> | |
#define LED_PORT 13 | |
#define BT_RX 11 | |
#define BT_TX 10 | |
// TX(RBT-001) <-> 11(Arduino) | |
#define PWM_WIDTH 500 | |
// roop = 2ms | |
SoftwareSerial btSerial(BT_RX, BT_TX); | |
int mode = 0; | |
int flag1 = 0; | |
int flag2 = 100; | |
void setup() | |
{ | |
// Initialize LED port | |
pinMode(LED_PORT, OUTPUT); | |
digitalWrite(LED_PORT, LOW); | |
// Initialize internal serial port (with PC) | |
Serial.begin(9600); | |
// Initialize software serial port (with Bluetooth) | |
btSerial.begin(9600); | |
} | |
void loop() | |
{ | |
char c; | |
// Read from software serial port (with Bluetooth) | |
if (btSerial.available()){ | |
c = btSerial.read(); | |
Serial.write( c ); | |
} | |
// Read from internal serial port (with PC) | |
if (Serial.available()){ | |
c = Serial.read(); | |
btSerial.write(c); | |
} | |
switch(c){ | |
case '0': | |
Serial.write("Led = disabled\n"); | |
mode = 0; | |
break; | |
case '1': | |
Serial.write("Led = enabled\n"); | |
mode = 1; | |
break; | |
case '2': | |
Serial.write("Led = enabled (2)\n"); | |
mode = 2; | |
} | |
switch(mode){ | |
case 0: | |
digitalWrite(LED_PORT, LOW); | |
break; | |
case 1: | |
digitalWrite(LED_PORT, HIGH); | |
break; | |
case 2: | |
/* Omake (PWM-like) */ | |
if( flag1 < flag2 ){ | |
digitalWrite(LED_PORT, LOW); | |
} else if (PWM_WIDTH < flag1){ | |
flag1 = 0; | |
flag2 += 10; | |
if(PWM_WIDTH < flag2){ | |
flag2 = 0; | |
} | |
} else { | |
digitalWrite(LED_PORT, HIGH); | |
} | |
flag1++; | |
break; | |
} | |
} |
PCにArduinoを接続して、Arduino IDEからプログラムを書き込みます。
書き込みが終わったら、PCと切断してUSB-ACアダプタ等から電源を供給するだけでも構いません。
その後、Bluetooth接続できる端末(PCやAndroid端末)で、ペアリングを行います。
シリアルデバイスとして認識されたら、ターミナルソフトウェアで接続します。
今回は、手持ちのAndroidスマートフォン(L-04C)から、
"S2 Terminal for Bluetooth Free"というAndroidアプリを利用して接続しました。
"S2 Terminal for Bluetooth Free"というAndroidアプリを利用して接続しました。
'1'を送信すると、LEDが点灯。'0'で消灯。'2'でおまけのPWM制御もどきとなりますw
※ ちなみに、LEDは13番ピンを制御しているため、LEDを接続せずとも、多くのArduinoにおいて内蔵LEDが点灯すると思います。
双方向通信なので、もっともっと使い道を広げていけそうですね!w
p.s.
参考になるページもありますし、手順としては結構簡単なはずなのですが・・・ちょっと手間取ってしまいました(^^;) 慣れでしょうか...。
また、写真を撮って記事を書くほうに時間を費やしてしまった気がしますw
もっとササっと書けるようになりたいですね (><;
それと、Fritzingで回路図を書いてみたりしていたのですが、私の環境では頻繁に落ちるので断念しました。何とかしてみよう...。
今回参考にさせていただいたページ (ありがとうございます m(_ _)m♪):
0 件のコメント:
コメントを投稿
お気軽にコメントをお寄せください m(_ _)m♪
"コメントの記入者"欄から[名前/URL]を選ぶと、登録なしでコメント投稿していただけます。