読書とプログラミングを中心とした覚書ブログ

読書とプログラミングについて、日々経験したことを忘れないようにするため、極力ブログに記録を残すように頑張る。

Arduinoでロータリーエンコーダーの動作確認

 公開日     更新日  2019/01/08

   

ロータリーエンコーダーは、よくボリューム調整のつまみに使われているようなモジュールの呼び名です。
Arduinoで比較的簡単に扱えるし、くりくり回転させて気持ちよいインタフェースを実現できる優れものです。

以前自分でロータリーエンコーダーを扱う関数を作ってみたものの、もしやと思い検索してみると、実はArduinoの便利なライブラリがあることを発見したので、忘れないうちにメモを残そうと思いました。

Arduinoで使える便利なライブラリ

Arduinoのサイトで紹介されていますが、ロータリーエンコーダーを扱うライブラリはたくさんあったようです。

今回使ったライブラリは、この中でArduino IDE上の操作でインストールすることができ、GitHubでのソース提供をしている、最初の方に紹介されているEncoderライブラリを使うことにしました。

以前ロータリーエンコーダーを扱う関数を自作した時は、シンプルにloop()内で値を読むだけのつくりでしたが、EncoderライブラリにはAVRマイクロコントローラーの割り込み機能を活用して、より正確な増減を感知することができる作りになっています。

この割込み機能はとても便利なのですが、有効活用するためにはArduinoボードのモデルごとに、割り込みをサポートするある特定のピンへロータリーエンコーダーを結線しないといけないため、たとえATmega328のようなIOピンが大量にあるチップであっても、割り込み機能に使える組み合わせは一握りになってしまいます。
そのため回路図を作るときには結構悩むことになりそうです。

Encoderライブラリのインストール

Arduino IDEを起動して、次の操作でライブラリをインストールします。

  1. [スケッチ] – [ライブラリをインクルード] – [ライブラリを管理]を選択しライブラリマネージャダイアログを開く
  2. 検索フィルタにて、Encoderをタイプして候補を絞り込む
  3. 候補のうち、Paul StoffregenさんのEncoderを選択して、[インストール]ボタンを押す

インストールしたら、サンプルスケッチもインストールされているので動作確認に使います。

[ファイル] – [スケッチ例] – [Encoder] – [Basic]

ロータリーエンコーダーのテスト回路

手元にあったATmega328Pを使い、ロータリーエンコーダーの実験用回路を組んでみました。
割り込み機能のテストも兼ねていたので、ATmega328Pの場合は、ピン番号2と3を使います。
これ以外の組み合わせだと、最高のパフォーマンスは発揮できないようです。

実験用スケッチ

実験用のためのスケッチ例そのものですが、ピン番号を2と3に変更しました。

この実験用スケッチでは、ノブをくりくりすると、シリアルモニタに表示される数字の増減によって動作確認できます。

結構素早く反応して回転に追従していて、見ていて気持ちがよいです。

最後に

Arduinoの場合ライブラリが充実していて、試しにWEBで検索してみると容易に欲しい機能が簡単に手に入るのが魅力です。
今回のライブラリについても、以前自作していたものが(200行ぐらい書いていたような気がしますが)、数行のコード量で実現できるようになってラクチン。
新しいプロジェクトを始めるときには、ライブラリとして入手できたほうが、断然、開発スピードがちがいます!

やりたいことが思いついたら真っ先に検索に頼ったほうが建設的ということが分かったことが今回の教訓です。

 

レスポンシブ広告

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.

  関連記事

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で自作する

最近「子ども見守りサービス」が注目されているようです。 どうも私は課金の発生する …

Arduinoでロータリーエンコーダーの動作確認