アナログ入力、シリアル出力
こちらのサンプルは、アナログ入力ピンの値を読み取り、入力値を0~255の範囲に変換した後、その結果を用いて出力ピンのPWM(パルス幅変調)を設定してLEDの明暗を制御します。
必要なハードウェア
・Arduino基盤
・可変抵抗器
・LED
・220Ωの抵抗器
Fritzingを用いた展開イメージ。回路例の詳細については、下記リンクページをご覧ください。
5Vピン、中央の端子をアナログ0番ピン、残りの1本の端子をGNDピンから可変抵抗器に接続します。
次に、LEDに直列に、220Ωの電流制限抵抗をデジタル9番ピンに接続します。
LEDの足の長いアノード(陽極)側は抵抗器の出力側、LEDの足の短いカソード(陰極)側はGNDに接続する必要があります。
回路図
プログラム
後述するプログラムでは、2本のピン(ポットのアナログ0番ピンとLEDのデジタル9番ピン)の割り当て、および2つの変数(sensorValueとoutputValue)を宣言した後は、Setup関数を実行してシリアル通信を開始するだけです。
/*
アナログ入力, アナログ出力, シリアル出力
アナログ入力ピンを読み取り、0〜255の範囲に変換した後、その結果を用いて出力ピンのPWMを設定します。
また、結果をシリアルモニターに出力します。
回路:
* アナログ0番ピンから接続されている可変抵抗器
中央の端子をアナログピンから可変抵抗器に接続する
両端の端子は、それぞれ5Vピン、GNDピンから可変抵抗器に接続する
* デジタル9番ピンからGNDピンまで接続されたLED
2008年12月29日作成
2012年4月9日加筆修正
by Tom Igoe
本サンプルコードはパブリックドメイン内にあります。
*/
// これらの定数は変わりません。 使用されるピンの名称を付けるために使用します。
//
const int analogInPin = A0; // 可変抵抗器が接続されているアナログ入力ピン
const int analogOutPin = 9; // LEDが接続されているアナログ出力ピン
int sensorValue = 0; // 可変抵抗器から読み取った値
int outputValue = 0; // PWMに出力した値 (アナログ出力)
void setup() {
// シリアル通信をデフォルトの9600bpsに初期化する
Serial.begin(9600);
}
void loop() {
// アナログ出力の値を読み取る
sensorValue = analogRead(analogInPin);
// アナログ出力の範囲まで値をマップする
outputValue = map(sensorValue, 0, 1023, 0, 255);
// アナログ出力の値を変更する
analogWrite(analogOutPin, outputValue);
// シリアルモニターに結果を出力する
Serial.print("sensor = " );
Serial.print(sensorValue);
Serial.print("¥t output = ");
Serial.println(outputValue);
// 最終読み取り後、A/D変換器の値が落ち着くまで2ms待ってから次のループを行う
//
//
delay(2);
}
/*
アナログ入力, アナログ出力, シリアル出力
アナログ入力ピンを読み取り、0〜255の範囲に変換した後、その結果を用いて出力ピンのPWMを設定します。
また、結果をシリアルモニターに出力します。
回路:
* アナログ0番ピンから接続されている可変抵抗器
中央の端子をアナログピンから可変抵抗器に接続する
両端の端子は、それぞれ5Vピン、GNDピンから可変抵抗器に接続する
* デジタル9番ピンからGNDピンまで接続されたLED
2008年12月29日作成
2012年4月9日加筆修正
by Tom Igoe
本サンプルコードはパブリックドメイン内にあります。
*/
// これらの定数は変わりません。 使用されるピンの名称を付けるために使用します。
//
const int analogInPin = A0; // 可変抵抗器が接続されているアナログ入力ピン
const int analogOutPin = 9; // LEDが接続されているアナログ出力ピン
int sensorValue = 0; // 可変抵抗器から読み取った値
int outputValue = 0; // PWMに出力した値 (アナログ出力)
void setup() {
// シリアル通信をデフォルトの9600bpsに初期化する
Serial.begin(9600);
}
void loop() {
// アナログ出力の値を読み取る
sensorValue = analogRead(analogInPin);
// アナログ出力の範囲まで値をマップする
outputValue = map(sensorValue, 0, 1023, 0, 255);
// アナログ出力の値を変更する
analogWrite(analogOutPin, outputValue);
// シリアルモニターに結果を出力する
Serial.print("sensor = " );
Serial.print(sensorValue);
Serial.print("¥t output = ");
Serial.println(outputValue);
// 最終読み取り後、A/D変換器の値が落ち着くまで2ms待ってから次のループを行う
//
//
delay(2);
}
コードのメインループに可変抵抗器から得た未処理のアナログ値を保存するために、変数sensorValueを割り当てます。なぜなら、analogReadでは0~1023の1024段階の分解能で値を読み取るのに対し、analogWriteでは0~255の256段階でしかLEDの明るさを調整できないためです。LEDを暗くする前に、可変抵抗器から得た当該未処理の値を調整する必要があります。
値を調整するには、map()という関数を使用します。
outputValue = map(sensorValue, 0, 1023, 0, 255);
変数outputValueは、可変抵抗器から得た調整後の値を等しくさせるために割り当てます。
map()関数には、マップされる値、未処理の値の下限および上限、調整後の値の下限および上限という5つの引数に対応しています。
今回の例では、センサーの値は、0~1023というデフォルトの範囲から0~255の範囲にスケールダウンします。
その後、新しくマップされたセンサーの値はanalogOutPinに出力され、可変抵抗器のボリュームを動かすとLEDの明るさが変化します。最後に、調整前と調整後どちらのセンサーの値も、一定の間隔でArduinoのシリアルウィンドウに送られます。
<こちらの記事はArduino.ccの記事の意訳です>
No Comment to " 初心者向けarduinoの簡単アナログ入力とシリアル出力 "