[[Arduino勉強会]]

#contents

2015/12/24からのアクセス回数 &counter;

** ちょっと軽めのmbedライクなライブラリlbed [#ff2eb462]
ATtiny85 ArduinoをlbedGemmaと命名したのには、現在よく使われいる
電子工作プラットフォームのmbedのライブラリをArduinoでも使えるように
lbedというmbedライクなライブラリの紹介をするためです。

以下ではlbedライブラリを使ってlbedGemmaで遊んでみます。

** デジタル入力 [#k1dcf1a1]
*** プルダウン抵抗を使ったスイッチ回路 [#x73f484b]
デジタル入力はスイッチのオン・オフのように0と1だけを入力値とします。
以下の様なスイッチをもちいた回路をlbedGemmaで作ってみましょう。

&ref(SwitchButton_sch.png);

VCCは、電池のプラスを表しlbedGemmaではUSBからの5Vに相当します。その下にタクトスイッチSWが接続され、
10KΩの抵抗を通り、GND(電池のマイナス)につながっています。途中Switchというピンがタクトスイッチと抵抗の間につながれています。


この抵抗のあることで、スイッチが押されたときに電源のプラスとマイナスが直結し、ショートすることを防いでくれます。
この抵抗はスイッチがオフの時に、Switchピンの電圧をマイナス付近に落としてくれるので、プルダウン抵抗と呼ばれています。


この回路をlbedGemmaのブレッドボードに追加してみます。


&ref(SwitchButton-pullDown_brd.png);







*** Arduinoでスケッチを書く [#lad963aa]
「8pinoではじめるミニマム電子工作」のスイッチ・ボタンのスケッチでは、
以下の様に書いています。

#pre{{
int led_pin = 1;  // GPIO # LED on board
int sw_pin = 2;  // GPIO #2

void setup() {
  pinMode(led_pin, OUTPUT);
  pinMode(sw_pin, INPUT);
}

void loop() {
  if (digitalRead(sw_pin) == HIGH) {
    digitalWrite(led_pin, HIGH);
    delay(250);
    digitalWrite(led_pin, LOW);
    delay(250);
  }
}
}}

*** lbedを使ってスケッチを書く [#y7fd645a]
上記のスケッチをlbedを使ったスケッチは以下の様に入力します。
最初の#includeはこれから、TinyWireMとlbedGemmaというライブラリを使うことを
表します。((今回はTinyWireMは直接使うことはありませんが、この2つをセットで宣言するようにしてください))

DigitalOutは、デジタル出力のクラス名で、led(1)は1番ピンをデジタル出力するledという変数を宣言しています。
DigitalInは、デジタル入力のクラス名で、sw(2)は2番ピンをデジタル入力するswという変数を宣言しています。

setup関数では特に処理を行いません。

loop関数では、swがHIGHの時にledにHIGHをセットし、250ミリ秒待ち、
ledにLOWをセットし、250ミリ秒待つように処理します。
これで、スイッチが押されている間、LEDが250ミリ秒間隔で点灯と消灯を繰り返します。


mbed風の変数を参照するとピンから値が読まれ、変数に代入するとピンに値が書き込まれる
書き方の方が直感的で分かりやすいと思うのです。

#pre{{
#include "TinyWireM.h"
#include "lbedGemma.h"
 
DigitalOut  led(1);  // GPIO #1 LED on board.
DigitalIn   sw(2);   // GPIO #2

void setup() {                
}

void loop() {
  if (sw == HIGH) {
    led = HIGH;
    wait_ms(250);
    led = LOW;
    wait_ms(250);
  }
}
}}

実際にブレッドボードでこのスケッチを動かしてみましょう。

スイッチを押すと電源のプラスとSwitchピン2番が接続され、swの値がHIGHになるので、
if文の中の処理が実行され、LEDが点滅します。

&ref(SwitchButton.png);





*** プルアップ抵抗を使ったスイッチ回路 [#p7d71b6e]
次に、以下の様な抵抗を電池のプラス側につないだスイッチ回路を作ってみましょう。

&ref(SwitchButton-pullUp_sch.png);




ブレッドボードでは、マイナスにつながっていた抵抗をプラス(赤い線)につなぎ、
スイッチのプラスにつながっていた線をマイナスにつなぎます。

&ref(SwitchButton-pullUp_brd.png);





スケッチは、スイッチが押されたときにGND(電池のマイナス)につながるので、
if文のHIGHからLOWに変更します。
これで、先ほどと同じ動作をします。

#pre{{
#include "TinyWireM.h"
#include "lbedGemma.h"
 
DigitalOut  led(1);  // GPIO #1 LED on board.
DigitalIn   sw(2);   // GPIO #2

void setup() {                
}

void loop() {
  if (sw == LOW) {
    led = HIGH;
    wait_ms(250);
    led = LOW;
    wait_ms(250);
  }
}
}}

*** 抵抗を使わないスイッチ回路 [#lc6c078e]
スイッチを追加するたびに抵抗をつなぐと部品点数が増えるので、
Arduinoなどの最近のマイコンにはデジタル入力端子にプルアップ抵抗を内部で付けてくれる
機能があります。

この機能を使うと回路は以下の様にとても簡単になります。

&ref(SwitchButton_sch.png);

ブレッドボードも抵抗を外します。

&ref(SwitchButton_brd.png);



デジタル入力ピンにプルアップ抵抗をセットするには、
setup関数内で、swのmodeをINPUT_PULLUPにセットします。

#pre{{
#include "TinyWireM.h"
#include "lbedGemma.h"
 
DigitalOut  led(1);  // GPIO #1 LED on board.
DigitalIn   sw(2);   // GPIO #2

void setup() {
  sw.mode(INPUT_PULLUP);
}

void loop() {
  if (sw == LOW) {
    led = HIGH;
    wait_ms(250);
    led = LOW;
    wait_ms(250);
  }
}
}}

実際に動かしてみましょう。

&ref(SwitchButton.png);



もし、modeでPULL_UPの設定をしなかったらどうなるのでしょう。
setupのmodeの設定部分を//でコメントアウトして動かしてみてください。
スイッチを押さなくても点滅しますね。


これはスイッチ端子の電圧が不定となりスイッチを押していなくてもLOWに近い値になっているからです。

** まだ途中ですが公開します。 [#u9a5afa2]


** コメント [#lf637d77]
#vote(おもしろかった[0],そうでもない[0],わかりずらい[0])


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

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

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
SmartDoc