Arduino~Basis of Design

Arduino~Basis of Design

急ぎ足でArduinoの使い方を学んできましたが、この辺で入出力について整理してみましょう。

Arduinoの基盤には以下のようなピンがあります。

  • アナログ入力ピン
  • アナログ出力(PWM)ピン
  • デジタル入力ピン
  • デジタル出力ピン

アナログ入力ピン

アナログ入力は、組込関数analogRead()を利用すると、センサなどからの読み取りが可能です。Arduino基盤の右下の0〜5番ピンを使用します。注意しなければならないことはArduinoのアナログ入力は10ビットのA/Dコンバータを使っているので、扱える数は2^10 = 1024に制限されることです。詰まり、0V〜5Vを1024段階に分けて読み込んでいますので、入力値の1024分の1しか精度が無いことになります。使い方はanalogRead(ピン番号)となります。また、初期設定でpinMode()の入出力を設定せずに直接使うことが出来ます。

アナログ出力(PWM)ピン

analogWrite()はピン番号3,5,6,9,10,11番の6箇所に接続できます。注意しなければいけないことは、出力値が0〜255迄の256段階の出力なので、入力値(読み取り値)を4で割った値を出力値に入れないといけません。使い方は、analogWrite(ピン番号,出力値)となります。“ピン番号”は出力したいピンの番号を入れますので、基盤の0〜13番ピンのうちの3、5、6、9、10、11の6つのピン(ピン番号下にPWMと書かれている番号)のどれかになります。“出力値”は、0〜255(0V〜5Vに対応)の値をいれます。
尚、analogRead()同様、analogWrite()も初期設定でpinMode()の入出力を設定せずに直接使うことが出来ます。

Arduino Referenceにならって、外部からの入力(可変抵抗器)によってLEDの明るさを変える簡単なプログラミングをやってみましょう。analogWrite()で0〜255の256段階でLEDの明るさが調節できます。

/*
  Arduino Trials - Basic of Design - July 2014 sketched by Mercedes Pagoda
*/  
//可変抵抗器から読み取った値に応じて,LEDへの出力を設定する。
int ledPin = 13;   // デジタルピン13番にLEDを接続
int analogPin = 3; // アナログピン3番に可変抵抗器を接続
int val = 0; // 読み取った値を格納する変数
void setup() {
pinMode(ledPin, OUTPUT); // ピンを出力(OUTPUT)に設定
}
void loop() {
val = analogRead(analogPin); // 入力ピンを読み取る
analogWrite(ledPin, val / 4);// analogRead()の戻り値は0から1024,analogWrite()に与える値は0から255なので,4で割って変換します。
}

例えば、analogWrite(ledPin,0)とすればledPin ピンを0(v)で返すのでLEDであれば消灯します。一方、analogWrite(ledPin,255)であれば一番明るい状態となります。analogWrite(ledPin,127)では約半分の明るさとなります。

半固定抵抗10kΩを使った為か、明るさの調節は上手くいきませんでした。

IMG_2980

IMG_2984

お次はデジタル入出力です。

基盤上方にあるDIGITAL 0〜13番ピンが用いられます。入力用か、出力用か区別するためにプログラムで pinMode() で設定する必要があります。
ピンからの出力電圧は5v固定ですから、デジタル入力・出力とは、電気が流れている状態(5v)と、流れていない状態(0v)の二種類ということになります。二進法ではLowが0、Highが1、またboolean型変数におけるfalse/trueに対応します。(接続したセンサなどを通して、オンになっているのかオフになっているのかを読み取るときに使います)。

デジタル入力ピン

digitalRead()では、HighかLowの二段階の入力方法しかありません。使い方はdigitalRead(ピン番号)となります。

デジタル出力ピン

同様にLow/Highの二段階の出力です。使い方はdigitalWrite(ピン番号,出力値)となります。

デジタル入出力でLEDをオンオフするプログラムをArduino Referenceのサンプルから引用します。

/*
  Arduino Trials - Basic of Design - July 2014 sketched by Mercedes Pagoda
*/  
// 7番ピンの入力値を13番ピンに返す。
int ledPin = 13; // デジタルピン13番にLEDを接続
int inPin  = 7;  // デジタルピン7番に押しボタンを接続
int val = 0;     // 読み取った値を格納する変数

void setup() {
  pinMode(ledPin, OUTPUT); // デジタルピン13番を出力に設定
  pinMode(inPin, INPUT);   // デジタルピン7番を入力に設定
}
void loop() {
  val = digitalRead(inPin);   // 入力ピンの読み込み
  digitalWrite(ledPin, val);  // LEDに押しボタンの値を返す
}

スイッチを離すと点灯します。

IMG_2993

デジタルピン7番にスイッチを適当な感じで接続して他端を半固定抵抗10kΩへ、半固定抵抗の両端には5v電源とGndを接続しています。

IMG_2997

以前、回転数パルスをanalogReadで読み込むと云いましたが、信号はパルスなのでdigitalReadの方が適しているでしょうか。一方、負圧はanalogReadで支障はなかろうと思います。

分圧抵抗

ここで大きく話題を変えて、分圧抵抗についておさらいしておきましょう。前回3v3降圧の際利用しましたが、オペアンプ回路にもよく使われる重要な法則です。覚えておきましょう。

分圧抵抗オームの法則から、E = E1 + E2 = IR1 + IR2が成立するので、E2 = R2 / (R1 + R2) * Eとなります。

E=5v、E2=3v3が成り立つ抵抗R1、R2は其々R1=360Ω、R2=680Ωで与えられます。これが理論的な背景です。

Arduinoの使い方も分かってきたので、次回からは、負圧、回転数の計測にチャレンジ開始です。

On the move.

 

Comments are closed.