Arduinoでロータリーエンコーダーの動作確認
公開日 更新日 2019/01/08
ロータリーエンコーダーは、よくボリューム調整のつまみに使われているようなモジュールの呼び名です。
Arduinoで比較的簡単に扱えるし、くりくり回転させて気持ちよいインタフェースを実現できる優れものです。
以前自分でロータリーエンコーダーを扱う関数を作ってみたものの、もしやと思い検索してみると、実はArduinoの便利なライブラリがあることを発見したので、忘れないうちにメモを残そうと思いました。
Arduinoで使える便利なライブラリ
Arduinoのサイトで紹介されていますが、ロータリーエンコーダーを扱うライブラリはたくさんあったようです。
今回使ったライブラリは、この中でArduino IDE上の操作でインストールすることができ、GitHubでのソース提供をしている、最初の方に紹介されているEncoderライブラリを使うことにしました。
以前ロータリーエンコーダーを扱う関数を自作した時は、シンプルにloop()内で値を読むだけのつくりでしたが、EncoderライブラリにはAVRマイクロコントローラーの割り込み機能を活用して、より正確な増減を感知することができる作りになっています。
この割込み機能はとても便利なのですが、有効活用するためにはArduinoボードのモデルごとに、割り込みをサポートするある特定のピンへロータリーエンコーダーを結線しないといけないため、たとえATmega328のようなIOピンが大量にあるチップであっても、割り込み機能に使える組み合わせは一握りになってしまいます。
そのため回路図を作るときには結構悩むことになりそうです。
Encoderライブラリのインストール
Arduino IDEを起動して、次の操作でライブラリをインストールします。
- [スケッチ] – [ライブラリをインクルード] – [ライブラリを管理]を選択しライブラリマネージャダイアログを開く
- 検索フィルタにて、Encoderをタイプして候補を絞り込む
- 候補のうち、Paul StoffregenさんのEncoderを選択して、[インストール]ボタンを押す
インストールしたら、サンプルスケッチもインストールされているので動作確認に使います。
[ファイル] – [スケッチ例] – [Encoder] – [Basic]
ロータリーエンコーダーのテスト回路
手元にあったATmega328Pを使い、ロータリーエンコーダーの実験用回路を組んでみました。
割り込み機能のテストも兼ねていたので、ATmega328Pの場合は、ピン番号2と3を使います。
これ以外の組み合わせだと、最高のパフォーマンスは発揮できないようです。
- USBシリアル変換
- ATmega328
- 10kΩ抵抗 ※ATmega328のRESETピンのプルアップ抵抗用
- ロータリーエンコーダー
- 100nFコンデンサー x2個 ※ロータリーエンコーダーのノイズ除去用
実験用スケッチ
実験用のためのスケッチ例そのものですが、ピン番号を2と3に変更しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <Encoder.h> Encoder myEnc(2, 3); void setup() { Serial.begin(9600); Serial.println("Basic Encoder Test:"); } long oldPosition = -999; void loop() { long newPosition = myEnc.read(); if (newPosition != oldPosition) { oldPosition = newPosition; Serial.println(newPosition); } } |
この実験用スケッチでは、ノブをくりくりすると、シリアルモニタに表示される数字の増減によって動作確認できます。
結構素早く反応して回転に追従していて、見ていて気持ちがよいです。
最後に
Arduinoの場合ライブラリが充実していて、試しにWEBで検索してみると容易に欲しい機能が簡単に手に入るのが魅力です。
今回のライブラリについても、以前自作していたものが(200行ぐらい書いていたような気がしますが)、数行のコード量で実現できるようになってラクチン。
新しいプロジェクトを始めるときには、ライブラリとして入手できたほうが、断然、開発スピードがちがいます!
やりたいことが思いついたら真っ先に検索に頼ったほうが建設的ということが分かったことが今回の教訓です。
レスポンシブ広告
関連記事
-
SlackのIncoming Webhooksが失敗した時の対処
我が家のIoTとしてSlackのIncoming Webhooksを活用したサー …
-
ATmega328の書き込み装置をArduino UNO用シールドとして作成
前回、AVRマイクロコントローラーのATmega328PへのArduinoブート …
-
素早くマイクミュートとPCスリープが出来るDIYボタンを作る
2020年はCOVID-19の影響で長期にわたる外出自粛が続きました。9月時点で …
-
Attiny13Aの工場出荷時の書き込みエラーを対策
Attiny13Aは工場出荷時に低速の動作周波数になってる模様です。 この時Ar …
-
ArduinoのPinChange割り込みライブラリとタイマーライブラリを使う
前回、素早くマイクミュートやPCスリープが行えるボタンを自作することで、とても晴 …
-
ドア開閉イベントをSlackへお知らせするセンサーを作る
最近Raspberry Piを手に入れてから個人的にマイコンが流行っていて、WE …
-
ATmega328へArduinoを書き込む
Arduino UNO等のArduinoボードを購入すると、USB端子に直接接続 …
-
「子ども見守りサービス」をDIYで自作する
最近「子ども見守りサービス」が注目されているようです。 どうも私は課金の発生する …
- PREV
- ATmega328へArduinoを書き込む
- NEXT
- アラジンストーブの青い炎を復活させる