注釈

こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。

参加する理由は?

  • エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。

  • 学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。

  • 独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。

  • 特別割引:最新製品の独占割引をお楽しみください。

  • 祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。

👉 私たちと一緒に探索し、創造する準備はできていますか?[ここ]をクリックして今すぐ参加しましょう!

2.1.6 ロータリーエンコーダモジュール

はじめに

このプロジェクトでは、ロータリーエンコーダについて学びます。ロータリーエンコーダは、 一定のタイミングシーケンスでの一定のパルスを持つ電子スイッチです。 ICと組み合わせると、インクリメント、デクリメント、ページ送りや マウスのスクロール、メニュー選択などの操作を実現できます。

必要な部品

このプロジェクトには、以下の部品が必要です。

../_images/Part_two_25.png

全てを一つのキットで購入すると便利です。以下がそのリンクです:

名前

このキットのアイテム

リンク

Raphael Kit

337

Raphael Kit

以下のリンクから、部品を個別に購入することもできます。

コンポーネントの紹介

購入リンク

GPIO拡張ボード

購入

ブレッドボード

購入

ジャンパーワイヤー

購入

ロータリーエンコーダモジュール

購入

回路図

../_images/image349.png

実験手順

ステップ1: 回路を組み立てる。

../_images/2.1.6_fritzing.png

この例では、ブレッドボードと40ピンケーブルを使って、ロータリーエンコーダのピンを Raspberry Piに直接接続できます。ロータリーエンコーダのGNDをGNDに、「+」を5Vに、SWをデジタルGPIO27に、DTをデジタルGPIO18に、CLKをデジタルGPIO 17に接続します。

ステップ2: コードのフォルダに移動します。

cd ~/raphael-kit/nodejs/

ステップ3: コードを実行する。

sudo node rotary_encoder_module.js

シェル上にカウントが表示されます。 ロータリーエンコーダを時計回りに回すと、カウントが増加し、 反時計回りに回すと、カウントが減少します。 ロータリーエンコーダ上のスイッチを押すと、読み取り値はゼロに戻ります。

コード

const Gpio = require('pigpio').Gpio;

const clkPin = new Gpio(17, {
  mode: Gpio.INPUT,
  pullUpDown: Gpio.PUD_DOWN,
  edge: Gpio.RISING_EDGE
});
const dtPin = new Gpio(18, {
  mode: Gpio.INPUT,
  pullUpDown: Gpio.PUD_DOWN,
});
const swPin = new Gpio(27, {
  mode: Gpio.INPUT,
  pullUpDown: Gpio.PUD_UP,
  edge: Gpio.FALLING_EDGE
});

var globalCounter = 0;

clkPin.on('interrupt',()=>{
  if(dtPin.digitalRead()==1){
      globalCounter--;
  }
  else{
      globalCounter++;
  }
  console.log(`globalCounter = ${globalCounter}`);
});

swPin.on('interrupt', () => {
  globalCounter = 0;
  console.log(`globalCounter = ${globalCounter}`);
});

コード説明

var globalCounter = 0;

clkPin.on('interrupt',()=>{
  if(dtPin.digitalRead()==1){
      globalCounter--;
  }
  else{
      globalCounter++;
  }
  console.log(`globalCounter = ${globalCounter}`);
});

dtPinが低から高になるとき、clkPinが高い場合、 カウントは減少します。 そうでない場合、カウントは増加します。

swPin.on('interrupt', () => {
  globalCounter = 0;
  console.log(`globalCounter = ${globalCounter}`);
});

軸が押されると、swPinは低を出力します。 この時点でglobalCounterをゼロに設定します。

現象の画像

../_images/2.1.6rotary_ecoder.JPG