電子工作92 – Arduinoに挑戦

Electronics Project 92 – How to Use Arduino Uno with Bluetooth Module

 

 

概要    Introduction

   最近、Arduinoというイタリア名のマイクロコンピュータが巷で良く見たり、聞いたりするようになってきた。何だろうと興味しんしん、5千円ほどの投資で挑戦してみることにした。ハードウエアやソフトウエアがパブリックドメイン(知的著作権が発生しない)とかパブリックリソースとか言って、原則無料で一般に公開させているようで、初心者にも敷居が比較的低い。

 

In this Electronics Project 92, two applications (Arduino Bluetooth LM35 and Arduino Bluetooth Slider) using an Arduino bluetooth module and smartphones which are available in Google Play Store are tested to examine how they work. Basically, they work all right though there are several points to which we have to pay attention. I thank the authors of these two applications for their efforts in preparing the systems.

 

目的

1.     Arduinoマイクロコンピュータとは何かを知ること。

2.     スマホのBluetoothでArduinoを近距離(<10m)で遠隔操作する(今回試す)。

3.     スマホとwifi moduleを使ってArduinoを超遠距離で遠隔操作する(次回に試す予定)。

 

実験資材:

<ハードウェア>

1.     Arduino Uno互換機 – SainSmart UNO R3 ATmega328P互換ボード+USBケーブル \1850、アマゾン

2.     HC-06 Wireless bluetooth module DIYMALL、4ピンポート for Arduino (動作電圧: 3.3V) \1099、アマゾン

3.     温度センサ LM35DZ (0−100C) ¥110、秋月

4.     参考書- 「Arduinoをはじめよう」中古 \1367(送料込み)、アマゾン

 

<ソフトウエア>

1. Arduino IDE v.1.6.12 Windows版: Arduino HPより無料でダウンロードした。

2. Arduino Bluetooth LM35 (Andy 182 Devstudio)というGoogle Play Storeに公開されているアプリ(含プログラム)の動作を試してみた。

3. Arduino Bluetooth Slider (Archer_R)というアプリの動作を後日(2016.10.17)試した。

 

実験の行程

 

1.     Arduino IDEのダウンロードと使い方: 

自分のPC(Windows10)に、ネット上にあるArduino HPからWindows Installerをクリックしてフォルダを作成し、その中のarduinoアプリを開いて下に示すようなArduino IDE (Integrated Development Environment)をダウンロードした。このIDEは一部日本語化されていて比較的シンプルな外見だがいろんな機能がいっぱい詰まっている。概略すると、この空白の部分にプログラムをC言語に似たArduino言語で作成する。次いで、作成したプログラム(sketchと呼ぶ)を上部バー上の左端の丸いボタンを押して検証(コンパイル)する。プログラムが正しく作成されていれば、コンパイルは完了しました、と表示が出、そうでなければエラーメッセージが出る。前者の場合、USBケーブルでArduinoボードにつなぎ、上部バー上の左から2番目の丸いボタン(マイコンボートに書込む)を押してプログラムを転送する。これで、そのプログラムがボード中で動作可能になる。

 

Fig. 1  Arduino IDE

 

2.     Arduino unoとBluetoothモジュール

 

Photo 1

これはAnduino unoという最もベーシックなモデルの互換機で、オリジナルとほぼ変わらないとされている。したがって、オリジナル用のハードやアプリがそのまま使える。 ATmega328という28ピンのAtmel 社製のマイコンが搭載されている。Flashメモリ32kB、SRAM 2kB、EEPROM 1kBを有し5Vで動作する。ボードにはUSB経由の電源のほかに、別の電源入力端子があり、7-12VのDC電源を受付ける。ボードには14本のデジタルI/Oピンがあり、その内の6本がPWM出力可能。更に、6本のアナログ入力ピンが備わっている。クロック周波数は16MHzで、内部から5Vのほかに3.3Vも取り出せる。各端子には綺麗に機能を示す文字や番号が付いていて分かり易い。上部左端の赤いものはリセットボタンである。

 

Photo 2

この写真は実際にArduinoボードにBluetooth モジュール (ボード上部に見える長方形のもの) と温度センサLM35 (ボードの下に見える) を組み込んで実験したものを示す。Bluetooth モジュールから4本の端子が出ていて、電源とGNDはボードの3.3VとGND端子にそれぞれ接続し、モジュールのTXとRXはボードのRX(ピン0)とTX(ピン1)とそれぞれ接続する。一方、温度センサLM35の電源、GNDと出力端子は、それぞれボードの5V、GNDそれにアナログ入力ピンA0に接続する。Arduino本体、 Bluetooth モジュール、 LM35センサのの電流消費を測定してみた; 1.Bluetoothモジュール、LM35センサとArduino本体をつないだ状態で96-57mA (BTモジュール上の2個の小さなLEDsが点滅するので消費電流が変動する)、2. BTモジュール (3.3V) なしでLM35のみがArduinoにつながった状態で56mA、3. BTモジュールもLM35も外し、Arduino本体だけの状態で55.6mAであった。

 

Photo 3

下の写真で、左から2枚はArduino Bluetooth モジュールの表と裏を示す。左端の波形状金色の部分はアンテナで、各端子には機能を示す文字が印刷されていて接続を間違えることはない。一番右の写真は3端子の温度センサLM35(測定範囲 0−100C)を示す。

 

Photo 4

Google Play StoreからArduino、bluetooth、temperatureなどといったキーワードを入れて検索するとArduino Bluetooth LM35」 Andy 182 Devstudioというアプリが見つかり、今回、これを実際に動作するかどうか試すために使わせて貰った。Android機にこのアプリをダウンロードして立ち上げると下の(A)のような画像が出る。上記で述べたようにハードウエアを組み込み、後述のプログラムをボードに導入し、Android機のBluetoothを設定した状態で、上記画像(A)のBluetoothのアイコン (Not Connected) をクリックすると、しばらくして(B)のような画像が現れる。今回使うモジュールはHC-06なので、これクリックすると、しばらくして温度を表示する画像(C)が現れる。

A)                (B)                (C)

 

プログラム

 Arduino Bluetooth LM35」(Andy 182 Devstudio) のアプリにはプログラム(sketch)も添付されているので、これをコピーしてArduino IDEの画面にペーストして検証(コンパイル)し、ボードに送って実行させた。下のFig..2 がそれである。Arduino言語で書かれている。プログラム中で、Serial.begin(9600) のカッコの中(baudrate)は元々38400だったが大き過ぎるので変えた。

 

Fig. 2

 

'**********************************************************

'Name of program: LM35Oct01

'Using Arduino IDE 1.6.12

'2016.10.5

'**********************************************************

//Program for Arduino Bluetooth LM35 (available in Google Play Store)

 

//Start of program

float temperature;

 

int tempPin = 0; // Pin OUT from LM35 is connected to Pin A0

 

void setup()

 

{

  Serial.begin(9600); //baudrate adjust to your bluetooth module

}

 

void loop()

{

  temperature = analogRead(tempPin);

 

  temperature = temperature * 0.48828125;

 

  Serial.print(temperature);

 

  delay(1000);

 

}

// End of program

'***********************************************

 

結果とコメント

1)    一応、スマホとArduinoボードを使って最大で10メートルほど離れたところの温度をスマホの画面で表示することに成功した。

2)    Android 4.0.4と 5.0.2 の端末(Sharp SH-02E と Freetel Priori2)で動作が確認された。

3)    Arduino言語で書かれているプログラムは小生の慣れ親しんだPicBasic Proのそれと大分違っていて、更なる勉強が必要だ。

4)    最初に端末のBluetoothに登録させる時、指示にしたがって12xxを入力した記憶がある。

5)    他に、スマホとBluetoothモジュールを使えるアプリとして、LEDの明暗を遠隔コントロール出来る Arduino Bluetooth Slider」とか、4個のリレーなどの遠隔ON/OFFが出来る「Arduino Bluetooth 4CH」などのアプリが面白そうだ。

6)    電源としてDC12V出力のACアダプタが良いようだ。8.4Vの充電式角形電池(GP 200mAh)でも動作したが2−3時間しか持たなかった。

7)    最終的目標としてスマホ用の制御プログラムを作成する必要があるが、難しそう。

 

 

Arduino Bluetooth Slider (スマホでLEDの輝度を遠隔変化させるアプリ)の紹介−2016.10.17追加

  上述したBluetoothモジュールを使い、スマホでArduinoボードに接続したLEDの明るさ(輝度)を遠隔(10m)変化させるものである。Photo 5 はGoogle Play Storeに公開されているこのアプリである。スマホ(Android機)にダウンロードして使用する。

 

Photo 5

 

Photo 6

Arduino ボードへのLEDの接続は330ohmの抵抗を介してデジタルピン11に接続する。Bluetooth モジュールの接続は上記と同じである。

 

 

Photo 7

Arduinoボードに後述のプログラムを導入し、上記のようにBluetoothモジュールとLEDを接続し、電源を入れた状態で(D)の右上の3枚バーマークをタッチすると(E)の画面が現れる。そして下のLISTを押すとスマホで確認されているBluetooth接続先が現れる。このなかでHC-06が今回使用するものである。他の使わないデバイスは消した方が良い。次いでCONNECTを押すと3秒ほどして(D)の状態になり、Bluetooth モジュールのLEDs点滅が止まったことで接続を確認(接続が上手く行かないときは何度か試みる)。真中のバーを上下することによってLEDの明るさが0から100%まで変わる。LEDが装着してある状態で実際にピン11とGNDの間の電圧を測ってみると、バーの位置0%で2.5mV、50%で2.33V、100%で4.54Vであった。LEDを除いてピン11とGNDの間の電圧を測定した場合、バーの位置0%で2.6mV、50%で2.45V、100%で4.76Vと少し高めだった。細い緑の横線はバーと一緒に上下動し、その位置が小さい数字(%)で横線上に表示される。スマホの設定時間(最大で30分など)が来て画像が消えるとBluetoothモジュールとの接続も切れるので、長時間使用する場合はスマホにUSBで電流を供給しながら、「消灯時間」などといったアプリを導入して常時点灯させて使うと良い。

 

D)                 E)

 

Photo 8

下のFig. 3の中の回路図に示すようにCdSアナログ・リニア・ホトカップラを組込んで抵抗値を測定しているところ。LEDの明るさの変化とともに抵抗値も変わる。

 

Photo 9

CdSアナログ・リニア・ホトカップラはコンデンサのようであるが、右側の2本線はLEDの端子、左側の2本線はCdSの端子である。

 

Fig. 3

下の図では、Photo 7D)Sliderのバーを0−100%上下動させた時のCdSアナログ・リニア・ホトカップラの抵抗値とピン11端子電圧の変化を表に示してある。抵抗値はLED輝度50%以上位から急激にフラットになるようだ。一方、電圧はほぼLED輝度に比例して変化するようだ(PWM制御による?)。

 

プログラム

Arduino Bluetooth Slider」(Archer_R)にはプログラムも添付されているので、それをコピペして使用した。

'*******************************************************************

'Name of program: ArduinoBTslider

'Using Arduino IDE 1.6.12

'2016.10.18

'*******************************************************************

//Program for Arduino Bluetooth Slider (written by Archer_R, a­vailable in Google Play Store)

 

 

// controls LED brightness

// Board -Arduino UNO

 

int incomingByte = 0;   // for incoming serial data

int LED = 11;            //LED pin

 

void setup() {

  // put your setup code here, to run once:

  pinMode(LED, OUTPUT);

  Serial.begin(9600);          //  setup serial

}

void loop() {

  if (Serial.available() > 0) {            //if the data came

  incomingByte = Serial.read();            // read bytes

  incomingByte = (incomingByte-35)*5;      // gives values 0 - 250

  analogWrite(LED,incomingByte);           // writes LED brightness

  }

}

'**********************************************************

 

結果とコメント

1)    このアプリの動作が確認された。

2)    Bluetoothモジュールを通じてArduinoボードとスマホを接続する時なかなか繋がらないことが時々起こる。解決法として、スマホのBluetoothの使用可能なデバイスをHC−06だけを残して他を切断する。Arduinoボードをリセットする、スマホのBluetoothをON/OFFする、スマホをリセットするなどを試みると良い、かも知れない。ピンの接続不良などの問題があるかも知れない。

3)    接続している状態でスマホの画面が消灯すると接続は切れる。長時間接続状態に保つには、画面の消灯を30分とかの長時間に設定する。常時点灯したい場合は「消灯時間」といったアプリを導入し、更に、消費電流を抑えるため画面を暗く設定する。

4)    Bluetoothモジュールの電源は3.6−5Vと記入されている。Arduinoボードには3.3Vと5Vの電源端子があり、どちらの電源でもモジュールは動いた。TxDやRxDがLevel 3.3Vとなっているので電源は3.3Vが良いのかも知れない。

5)    Android 4.0.4と 5.0.2 の端末(Sharp SH-02E と Freetel Priori2)で動作が確認された。

6)    最大10m離れたところからArduinoボードの端子電圧出力を0−5V位に連続して変えられので、工夫次第でいろんな目的に使えそう。例えば、電球、モーターなど。

 

 

Arduino Bluetooth Slider (スマホでLEDの輝度を遠隔変化させるアプリ)で調光器を遠隔操作する試み−2016.10.30追加

   上記のArduino Slider Bluetoothを何かに応用出来ないかと考えているうち、過去に数台組立て使ってきた秋月の調光器を制御してみることを思いついた。この調光器はボリュームを回してAC出力を変えるようになっている。そこで、このボリュームへ接続している2線を外して、代わりにCdSアナログ・リニア・ホトカップラのCdS側の2本の端子を接続した。実際に実験してみると、Sliderのバーを0−100%まで上下動させるとAC出力が0Vから94V位まで変化する。問題は、バーの位置が0から5%位で急にAC出力が60−70Vに上昇してしまい、低いAC出力を設定する場合、バー位置の調整が非常に難しいことである。そこで、次の2つの対策で多少状況を改善することが出来た(Table 1参照); 1) Fig. 4 に示すように560 ohmの抵抗をLED(Red)と並列に入れた、2)プログラムの中の1行incomingByte = (incomingByte-35)*5をincomingByte = (incomingByte-35)*1に変えた(*5−>*1)。両方ともに試行錯誤の結果見出した。このホトカップラの特性がそもそも機械式ボリュームと違うために上記のような現象が起きる。

 

Using this Arduino Bluetooth Slider, I tried to control a dimmer used for changing the brightness of incandescent lamps, speed of electric fans and so on. For the purpose, a CdS-analog-linear photocoupler was used. Due to the characteristics of this photocoupler, a large AC output change occurs in an extremely low and narrow range of Slider bar movement (0-5%), making it very difficult to set the AC output voltage at a required level. To improve this situation, I installed a 560 ohm resistor, parallel to LED (Red), to the circuit, and also changed one line of the original program, that is, incomingByte = (incomingByte-35)*5 to incomingByte = (incomingByte-35)*1. The result is shown in Table 1. It became slightly easier to adjust the AC output voltage with Slider bar though there is still a big room for improvement.

 

Fig. 4

 

Table 1

Sliderバーが0から10%に変化するだけでAC出力が一気に66Vにも上昇しているのが分かる。この範囲では、ほんの僅かのバーの動きでAC出力が大きく変化するので、バーの調整は非常にデリケート。Sliderバー位置とAC出力の間の関係がLinearであれば理想的なのだが残念ながらそうではない。

Slider バーの位置 %

Slider bar position %

調光器のAC出力 V

AC Output of Dimmer V

ランプのON/OFF

ON/OFF of Lamp 1)

         0        2)

4.3

OFF

2

4.7

OFF

5

5.1

OFF

6

35

ON

10

66

ON

20

79

ON

30

83

ON

50

87

ON

75

89

ON

       100      3)

91

ON

1)       Lamp is connected to AC100 OUT in the above Fig. 1

2)       Lowest position of Slider bar

3)       Highest position of Slider bar

 

Photo 10

実験中: 右上にArduinoボード、左上のアルミボックスが調光器、左側のテスターでは調光器のAC出力電圧を測定している。同時に接続してある小さい白熱電球が明るく暗く点灯する。右下の黒いものは7インチのタブレット(Asus ME572C)で、真中の長方形の横線バーを指で上下(0−100%)になぞってAC出力を変える。立ち上がりが急でデリケート。

 

 

結果とコメント

1)     Arduino Bluetooth Sliderで調光器の制御が一応出来た。 しかし、Sliderバーの立ち上がりで急激にAC出力が上昇する問題があることが分かった。

2)     ハードとソフトを実験的に少し変えて、上記の問題は多少改善された。オリジナルソフトの内容が理解出来ていないので、これ以上の改善は無理。

3)     Pin11の電圧変化(DC0−5V)をPICを使って、調光器のAC出力が穏やかに変化してAC0−100Vになるような仕組みを考える必要がある。

4)     調光器でもともと使われいる250Kのボリュームをモータードライブ化するなど、どうだろう。サーボモーターも使えるかも知れない。

5)     Arduinoプログラムは目下学習中、一部PicBasic Proと似ているところもある。

 

 

Menu Pageへ戻る   (Return to Menu Page)

Topへ戻る   (Return to Top of Page)