Arduino 入門
Lesson 12
【ポテンショメータ編】
「Arduino」を使ったマイコンプログラミングを子供と一緒に学習するブログ。
少しずつ、子供と一緒に楽しみながら気長にアップしてく予定です。
本日はLesson 12 ポテンショメータ編です。
※いわゆる可変抵抗器のことです。
analogRead()関数の使い方を説明していないことに気づき・・・。
何かの電子部品を使って簡単に説明でないか?と考えました。
そこで思いついたのがポテンショメータです。
本Lesson解説で使用しているのはArduino互換品です。
互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
はじめに
ポテンショメータは可変抵抗器です。
ボリュームと呼ばれることもあります。
今回利用するのは回転式のポテンショメータです。
私が使用しているものと見た目は異なりますが下記がポテンショメータとなります。
タイプは好みで、つまみあり、なし。
Lesson 12目標
「ポテンショメータ」の使い方を理解します。
あわせて、analogRead()関数についても理解します。
そして、電圧値をArduino UNOで測定してみましょう!
※シリアルモニタでモニタしましょう。
最後に、本Lessonも、遊ぶというところが一番大事なところです。
準備
ではLessonの準備に取り掛かりましょう。
今回も部品は多くないので、すぐに実践に移ることができます。
必要なもの
- USB接続用のPC(IDE統合環境がインストールされたPC)
→管理人が勝手に比較したBTOメーカーを紹介しています。 - UNO R3(以下UNO)、おすすめUNO互換品(ELEGOO)
- PCとUNOを接続するUSBケーブル
- ブレッドボード安価(大)、ブレッドボード安価(中)
※おすすめブレッドボード(大)、おすすめブレッドボード(中) - ポテンショメータ(可変抵抗器)
- M-M Jumper wire(UNOと部品をつなぐための配線)
使用部品説明
ポテンショメータについて説明していきます。
実は、すでにLesson 09のサーボモータ編で使用しています。
そこで説明しているのですが、おさらいも兼ねてもう一度説明します。
ポテンショメータ 実物写真
下の写真が、ポテンショメータです。
今回購入したELEGOO UNO キットに合わせて梱包されています。
ポテンショメータは可変抵抗器です。
ボリュームと呼ばれることもあります。
今回利用するのは回転式のポテンショメータです。
中には抵抗素子が入っています。
端子は全部で3つあります。
抵抗の両端の端子2つと、可変した抵抗値の電圧値を取り出す端子の1つです。
今回は下側2つの端子を電源とGNDに、上側中央の端子をアナログ入力端子につなぎます。
手持ちがない方は以下からどうぞ。
見た目は異なりますが使い方は同じです。
なかなか、単品での購入はできないです。
そのため、購入される場合は種類が異なる物が入ったセットをおすすめします。
後々使い勝手が良いです。
タイプは好みで、つまみあり、なし。
上記が在庫切れの場合は下記なども。
ポテンショメータ 原理
ポテンショメータ自体の原理は単純です。
内蔵されている抵抗の両端に電圧をかけた状態でツマミを回すことで抵抗値の比率が変わります。
それによって、端子から取り出せる電圧が変わります。
取り出した電圧はアナログ入力端子に入れることによってデジタル値に変換することで制御信号として利用することができます。
詳しく知りたい方は下記が参考になります。
ボリュームの説明ですが同じです。
ポテンショメータ使い方
ポテンショメータの中央端子をアナログ入力に接続します。
つないだ端子の情報をanalogRead(pin)関数で読み取ります。
analogRead(pin)は読み取った電圧値を0~1023の整数値を戻り値として返します。
ようするに、読み取った0V~5Vの電圧値を0~1023のデジタル値に変換することができるわけです。
その変化をanalogRead(pin)関数によってデジタル値に変換するということです。
AD変換するということですね。
※analog to digital converter
アナログ入力に関しては下記で詳しく説明しています。
実践 回路作成とコード作成
最初に回路図を確認してください。
次に、回路図に合わせて部品を接続します。
最後にコードを書いて、ポテンショメータを動かしていきましょう。
Arduinoのピン配置を確認したい方は番外編02を参照してください。
回路図
回路図がこちら。
こちらがブレッドボード図。
※M-M jumper wireのみで結線できます。
回路図は「fritzing」を利用しています。
「fritzing」の使い方は下記を参照してください。
接続
下図に示すように、用意した部品を使用して接続しましょう。
部品はポテンショメータのみです。
ブレッドボードを使用していますが、F-M Wireを利用すればブレッドボードなしでも接続できます。
M-M jumper wireを使用してUNOと接続しましょう。
使用するポートは、アナログ入力ピンの「A3」、電源の「5V」、「GND」です。
穴に挿入しづらいときは、ラジオペンチなどを使用してください。
コードの書き込み
接続が終わったら、USBケーブルを使用してUNOにプログラムを書き込んで行きましょう。
本記事のコードを参考に書いてみてください。
実際書いてみた方が慣れるのに良いです。
コードを書き終えたら、いつでも利用できるように「ファイル」⇒「名前を付けて保存」で保存しておきましょう。
コマンド説明
新しく出てきたコマンドの説明をしていきます。
※復習も兼ねて、一部以前に説明したコマンドも記載しています。
コマンド | 説明 |
---|---|
float | 浮動小数点を持つ数値のためのデータ型。 ※小数が扱えます。 整数よりも分解能が高いアナログ的な値が必要なときに使用。 使用可能な値の範囲:3.4028235E+38~-3.4028235E+38 ※32ビット(4バイト)のサイズ 例 TrigPin変数を不動小数点のデータ型にする。 float TrigPin; |
Serial.begin(speed) | シリアル通信のデータ転送レートをbpsで指定。 ※bpsはビット/秒 speed:転送レート(int) |
analogRead(pin) | アナログ値を読み取るアナログ入力ピンを指定。 pin:0,1,2,3,4,5のいずれかを指定 例 アナログ入力ピンに3番を指定する。 analogRead(3); |
サンプルコード
サンプルコードを下記に示します。
※サンプルコード内の計算をfloatを利用しています。
これは計算のオーバーフローを避けるためです。
//Lesson12 Potentiometer(可変抵抗器) //https://omoroya.com/ int analogPin =3; //アナログ入力ピンを3番に設定 int val = 0; //読み取り値の変数設定 float v_convert = 0.0f; //計算値の変数設定、オーバーフローしないようにflaot設定 void setup() { Serial.begin(9600); //シリアル通信のデータ転送レートを9600bpsで指定。bpsはビット/秒。 } void loop(){ val = analogRead( analogPin ); //ピンの値を読み取り v_convert = (float)val / 1023.0f * 5.0f; //読み取った値を電圧に変換、floatで計算 Serial.print( "value / volt : " ); //表示をプリント Serial.print( val ); //読み取り値を表示 Serial.print( " / " ); //表示をプリント Serial.println( v_convert ); //計算した電圧値を表示、改行 delay(2000); //2秒ごとに表示させるための遅延 }
可変抵抗器の動きで電圧が変わるのをキャプチャーしやすくするためにdelayで2秒の遅延を与えています。
実際には2秒待つ必要はありません。
動作確認
では、さっそく動作を確認していきます。
ポテンショメータをゆっくりと動かしてモニタで電圧値を確認します。
結果はこちら。
※IDEの「ツール」⇒「シリアルモニタ」を開いて確認してください。
つまみ | 測定値 |
---|---|
最小 | |
最大 | |
ゆくりと回して キャプチャ |
可変抵抗器の動きで電圧か変わっているのを読み取れているのがわかります。
これがanalogRead()関数の使い方になります。
これを使えば、ある電圧を読み取って何かをさせるといったことができます。
扇風機をイメージするとわかりやすいでしょうか。
つまみ最小:OFF、つまみ最大:風力最大
といった使いかたができます。
下記にわかりやすい動作の解説があります。
まとめ
今回は以下の内容について理解してもらいました。
今回も項目4の遊ぶことが一番の目標でした。
2.analogRead()関数について理解する。
3.シリアルモニタで電圧値を読み取る。
4.楽しんで遊ぶ。
いかがだったでしょうか。
Lesson 12 ポテンショメータ編はここまで。
ぜひ、みなさんも子供と一緒にやられてみることをお勧めします。
測定するって、なぜかわからないですが楽しいですよね!
疑問点、質問などありましたら気軽にコメントください。
次回Lesson 13は「ジョイスティック編」です。
ゲームのコントローラなどに使われています。
ジョイスティックの使い方を理解できれば色々と遊ぶことができそうです。
最後に
疑問点、質問などありましたら気軽にコメントください。
この電子部品の解説をしてほしい!などなどなんでもOKです。
リンク切れ、間違いなどあればコメントいただけると助かります。
Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。
Arduino入門編、Arduino入門編2で使用しているUNOはAmazonにて購入可能です。
Arduino入門編では互換品を使用。
Arduinoはオープンソース。
複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
学習用、遊び用、お試し用には安価な互換品がおすすめです。
ELEGOO UNO キット レベルアップ チュートリアル付 uno mega2560 r3 nanoと互換 Arduino用
上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
Amazonでお得に買う方法
Amazonでお得に購入するならAmazon Mastercard、Amazonギフト券がおすすめです。
時期により異なりますが、様々なキャンペーンを実施しています。
\Amazonギフト券/
Amazonギフトカード キャンペーン
\Amazon Mastercard お申込み/
Amazon Mastercard 申し込み
いずれの場合もプライム会員である方がお得!!
\Amazon Prime 30日間の無料会員を試す/
無料会員登録
コメント
初めまして。大学の課題で初めてArduinoを使っていて、ブログを参考にさせていただいております。とてもわかりやすく、初心者でもできそうな気がしてきます。
ところで本題なのですが、複数台のポテンションメーター の出力を受け取ることはできるのでしょうか。
困っているので返信いただけると嬉しいです!!
コメントありがとうございます。
アナログ入力がA0~A5の6個あります。
単純に読み取りたいだけであれば6個受け取ることが可能です。
それ以上必要な場合は、一工夫ひつようとなります。