Skip to main content

Grove - Optical Rotary Encoder(TCUT1600X01)

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

pir

Grove - Optical Rotary Encoder(TCUT1600X01)は、赤外線発光器と2つのフォトトランジスタ検出器を含む透過型センサーです。通常、赤外線発光器は赤外線を発し、フォトトランジスタ検出器が赤外線を受信するとフォトトランジスタがオンになり、両方の出力がHighとなり、オンボードLEDインジケーターが点灯します。障害物が赤外線を遮ると、フォトトランジスタは赤外線を受信できなくなり、フォトトランジスタがオフになり、両方の出力がLowとなり、オンボードLEDインジケーターが消灯します。

このセンサーを回転エンコーダとして使用して速度や回転を検出することができ、2つのフォトトランジスタ検出器のおかげで回転方向を検出することも可能です。

pir

特徴

  • 2つのフォトトランジスタ検出器により回転方向を判定可能
  • オンボードLEDインジケーター
  • Groveインターフェース

仕様

項目
動作電圧3.3V / 5V
動作温度-40°C ~ +105°C
保存温度範囲-40°C ~ +125°C
発光波長950 nm
ギャップ3 mm
インターフェースデジタル

応用例

  • 自動車用光学センサー
  • エンコーダ用の高精度位置センサー
  • 動作、速度、方向のセンサー
  • 「回転と押し込み」エンコーディング用センサー

ハードウェア概要

ピンマップ

pir

回路図

電源

pir

TCUT1600X01の標準電圧は5Vであるため、MP3120電流モード昇圧コンバータを使用して安定した5Vを供給します。MP3120の入力範囲は0.8Vから5Vまでなので、Arduinoで3.3Vおよび5Vの両方でこのモジュールを使用することができます。

pir

フォトトランジスタ検出器が赤外線信号を受信すると、出力はHighになります。障害物が赤外線を遮ると、OUT1とOUT2はLowになります。ただし、漏れ電流のために0Vにはなりません。漏れ電圧は入力電圧によって変化します。

機械図面

pir

方向検出

pir

tip
2つのフォトトランジスタ検出器のおかげで、移動方向を検出することができます。障害物が左から右に移動すると、出力状態の変化は**11 --> 01 --> 00 --> 10**となります。同様に、障害物が右から左に移動すると、**11 --> 10 --> 00 --> 01**となります。

対応プラットフォーム

ArduinoRaspberry Pi

pir

pir

caution
上記で対応していると記載されているプラットフォームは、モジュールのソフトウェアまたは理論的な互換性を示しています。ほとんどの場合、Arduinoプラットフォーム向けのソフトウェアライブラリやコード例のみを提供しています。すべての可能なMCUプラットフォーム向けにソフトウェアライブラリやデモコードを提供することは不可能です。そのため、ユーザー自身でソフトウェアライブラリを作成する必要があります。

はじめに

Arduinoで遊ぶ

ハードウェア

必要な材料

Seeeduino V4.2Base ShieldGrove - Optical Rotary Encoder

pir

pir

pir

今すぐ購入今すぐ購入今すぐ購入
note
**1** USBケーブルを優しく差し込んでください。そうしないとポートを損傷する可能性があります。内部に4本の線があるUSBケーブルを使用してください。2本線のケーブルではデータを転送できません。使用しているケーブルが不明な場合は、[こちら](https://www.seeedstudio.com/Micro-USB-Cable-48cm-p-1475.html)をクリックして購入できます。

**2** Groveモジュールを購入すると、各モジュールにGroveケーブルが付属しています。Groveケーブルを紛失した場合は、[こちら](https://www.seeedstudio.com/Grove-Universal-4-Pin-Buckled-20cm-Cable-%285-PCs-pack%29-p-936.html)をクリックして購入できます。
  • ステップ1. Grove - Optical Rotary EncoderをBase ShieldのD5ポートに接続します。

  • ステップ2. Grove - Base ShieldをSeeeduinoに差し込みます。

  • ステップ3. USBケーブルを使用してSeeeduinoをPCに接続します。

pir

note
    Grove Base Shieldがない場合は、以下のように直接このモジュールをSeeeduinoに接続することもできます。
SeeeduinoGrove - Optical Rotary Encoder
5V
GND
D6
D5黄色

ソフトウェア

note
    Arduinoを初めて使用する場合は、開始する前に[Arduinoの使い方](https://wiki.seeedstudio.com/ja/Getting_Started_with_Arduino/)を参照することを強くお勧めします。
  • ステップ1. Arduino IDEにEncoder Libraryをインストールします。このライブラリは以下のパスで見つけることができます:Sketch-->Include Library-->Manage Libraries

pir

次に、ポップアップウィンドウでencoderを検索します。Encoder by Paul Stoffregenを見つけ、Version1.4.1を選択してInstallをクリックします。

pir

ライブラリがインストールされるとINSTALLEDと表示されます。その後、Closeをクリックしてください。

pir

Paulさんの素晴らしいライブラリに感謝します。

  • ステップ2. Arduino IDEを再起動します。例を開きます。以下の3つの方法で開くことができます:
    1. Arduino IDEで直接以下のパスから開きます:File --> Examples --> Encoder --> Basic

pir

  1. Basic.pde をクリックしてコンピュータで開きます。このファイルは xxxx\Arduino\libraries\Encoder\examples\Basic にあります。XXXX は Arduino IDE をインストールした場所です。

pir

  1. または、コードブロックの右上隅にあるアイコンをクリックして、以下のコードをコピーし、Arduino IDE の新しいスケッチに貼り付けることもできます。

    pir

/* Encoder Library - Basic Example
* http://www.pjrc.com/teensy/td_libs_Encoder.html
*
* このサンプルコードはパブリックドメインです。
*/

#include <Encoder.h>

// エンコーダに接続されているピンを変更してください。
// 最良のパフォーマンス: 両方のピンが割り込み機能を持つ
// 良好なパフォーマンス: 最初のピンのみが割り込み機能を持つ
// 低パフォーマンス: どちらのピンも割り込み機能を持たない
Encoder myEnc(5, 6);
// LEDが接続されているピンは使用しないでください

void setup() {
Serial.begin(9600);
Serial.println("基本エンコーダテスト:");
}

long oldPosition = -999;

void loop() {
long newPosition = myEnc.read();
if (newPosition != oldPosition) {
oldPosition = newPosition;
Serial.println(newPosition);
}
}
tip

エンコーダに接続されているピンを変更することができます。最良のパフォーマンスを得るには、両方のピンが割り込み機能を持つ必要があります。そのため、コードの13行目を Encoder myEnc(2, 3); に変更し、このセンサーをベースシールドの D2 に接続してください。

  • ステップ 4. デモをアップロードします。コードのアップロード方法がわからない場合は、コードのアップロード方法 を確認してください。

  • ステップ 5. Arduino IDE の シリアルモニター を開きます。Tool-> Serial Monitor をクリックするか、++ctrl+shift+m++ キーを同時に押します。ボーレートを 9600 に設定してください。

tip

すべてが正常に動作すれば、結果が得られます。障害物を左から右に移動すると、カウント値が1ずつ増加します。障害物を右から左に移動すると、カウント値が1ずつ減少します。

基本エンコーダテスト:
0
1
2
3
4
3
2
1
0
-1
-2
-3
-4

Raspberry Pi で遊ぶ (Grove Base Hat for Raspberry Pi を使用)

ハードウェア

  • ステップ 1. このプロジェクトで使用するもの:

    Raspberry PiGrove Base Hat for RasPiGrove - Optical Rotary Encoder
  • ステップ 2. Grove Base Hat を Raspberry Pi に接続します。

  • ステップ 3. Grove - OLED Display 1.12'' を Base Hat の I2C ポートに接続します。

  • ステップ 4. Raspberry Pi を USB ケーブルで PC に接続します。

ソフトウェア

  • ステップ 1. ソフトウェア設定 に従って開発環境を構成し、grove.py を Raspberry Pi にインストールします。
  • ステップ 2. 以下のコマンドを実行してコードを実行します。
# Python3 用の仮想環境
virtualenv -p python3 env
source env/bin/activate
# コマンドを入力
grove_optical_rotary_encoder

以下は grove_optical_rotary_encoder.py のコードです。


'''
これは以下のためのコードです:
- Grove - Optical Rotary Encoder(TCUT1600X01) <https://www.seeedstudio.com/Grove-Optical-Rotary-Encoder-TCUT1600X0-p-3142.html>`_

例:

.. code-block:: python

from grove.grove_button import GroveButton
import time, sys

# ピン5 (スロット D5) に接続
PIN = 5
encoder = GroveOpticalRotaryEncoder(PIN)

# 毎秒値を読み取り、動きを検出
while True:
print("\rPosition: {0} ".format(encoder.position()), file=sys.stderr, end='')
time.sleep(0.001)

'''
from __future__ import print_function
import time, sys, signal, atexit
from grove.gpio import GPIO

__all__ = ["GroveOpticalRotaryEncoder"]

# UPM バージョンの rotaryencoder はセグメントフォールトを引き起こすバグがあります。
# この純粋な Python バージョンは正常に動作します。
class GroveOpticalRotaryEncoder(object):
'''
Grove Optical Rotary Encoder(TCUT1600X01) クラス

Args:
pin(int): Grove デバイスが接続されている GPIO/スロット番号。
'''
def __init__(self, pin1, pin2 = None):
pin2 = pin1 + 1 if pin2 is None else pin2
self.__gpio = GPIO(pin1, GPIO.IN)
self.__gpio2 = GPIO(pin2, GPIO.IN)
self.__gpio.on_event = self.__gpio_event
self._pos = 0

# GPIO ライブラリによって呼び出される
def __gpio_event(self, pin, value):
v1 = self.__gpio.read()
if not v1: return
v2 = self.__gpio2.read()
self._pos += 1 if v2 else -1

def position(self, pos = None):
'''
位置カウンターを設定または取得

Args:
pos(int):
オプション、設定する位置カウンター。

指定されていない場合、現在のカウンターのみ取得

Returns:
(int): 現在の位置カウンター
'''
if not pos is None:
self._pos = pos
return self._pos

def main():
from grove.helper import SlotHelper
sh = SlotHelper(SlotHelper.GPIO)
pin = sh.argv2pin()

'''
from upm.pyupm_rotaryencoder import RotaryEncoder as GroveOpticalRotaryEncoder
from mraa import getGpioLookup

mraa_pin1 = getGpioLookup("GPIO%02d" % (pin + 0))
mraa_pin2 = getGpioLookup("GPIO%02d" % (pin + 1))

# 信号ピン mraa_pin1 & mraa_pin2 を使用して Grove Rotary Encoder をインスタンス化
myRotaryEncoder = GroveOpticalRotaryEncoder(mraa_pin1, mraa_pin2);
'''
myRotaryEncoder = GroveOpticalRotaryEncoder(pin)

## 終了ハンドラ ##
# Control-C を押したときに Python がスタックトレースを表示しないようにする関数
def SIGINTHandler(signum, frame):
raise SystemExit

# 終了時にコードを実行できる関数 (myRotaryEncoder の関数を含む)
def exitHandler():
print("終了します")
sys.exit(0)

# 終了ハンドラを登録
atexit.register(exitHandler)
signal.signal(signal.SIGINT, SIGINTHandler)

# 毎秒値を読み取り、動きを検出
counter = 0
while True:
print("\rPosition: {0} ".format(myRotaryEncoder.position()), file=sys.stderr, end='')
counter += 1
if counter >= 5000:
print("")
counter = 0
time.sleep(0.001)

if __name__ == '__main__':
main()
(env)pi@raspberrypi:~ grove_optical_rotary_encoder
success

コマンドが正常に実行されると、毎秒値を出力し、動きを検知します。

# 毎秒値を読み取り、動きを検知する
while True:
print("\r位置: {0} ".format(encoder.position()), file=sys.stderr, end='')
time.sleep(0.001)

このプログラムを終了するには、単に ctrl+c を押してください。

回路図オンラインビューア

リソース

プロジェクト

この製品の紹介動画です。簡単なデモを含んでおり、試してみることができます。

技術サポートと製品ディスカッション

私たちの製品を選んでいただきありがとうございます!製品の使用体験がスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、いくつかのコミュニケーションチャネルを用意しています。

Loading Comments...