Grove - Codificador Rotativo Óptico (TCUT1600X01)

O Grove - Optical Rotary Encoder(TCUT1600X01) é um sensor transmissivo que inclui um emissor infravermelho e dois fototransistores detectores. Normalmente, o emissor infravermelho emite raios infravermelhos, os fototransistores detectores recebem esses raios infravermelhos, então o fototransistor é acionado, ambas as saídas ficam em nível Alto e os indicadores LED on-board acendem. Quando há um obstáculo bloqueando, o fototransistor não consegue receber os raios infravermelhos, portanto o fototransistor será desligado e ambas as saídas ficarão em nível Baixo, e os indicadores LED on-board se apagam.
Você pode usar este sensor como um codificador rotativo para detectar a velocidade ou rotação e, graças aos dois fototransistores detectores, você pode até detectar a direção da rotação.
Recursos
- Detectores de fototransistor duplos, podem determinar a direção da rotação
- Indicadores LED on-board
- Interface Grove
Especificação
| Item | Valor |
|---|---|
| Tensão de operação | 3.3V / 5V |
| Temperatura de operação | -40°C a +105°C |
| Faixa de temperatura de armazenamento | -40°C a +125°C |
| Comprimento de onda do emissor | 950 nm |
| Gap | 3 mm |
| Interface | Digital |
Aplicações
- Sensores ópticos automotivos
- Sensor de posição precisa para codificador
- Sensor para movimento, velocidade e direção
- Sensor para codificação de “girar e pressionar”
Visão Geral de Hardware
Mapa de Pinos

Esquemático
Alimentação

A tensão típica do TCUT1600X01 é 5V, portanto usamos o conversor elevador em modo de corrente MP3120 para fornecer 5V estáveis. A entrada do MP3120 varia de 0.8V a 5V, então você pode usar este módulo com seu Arduino tanto em 3.3V quanto em 5V.

Quando os fototransistores detectores recebem o sinal infravermelho, a saída deve ser Alta e, quando o obstáculo bloqueia o infravermelho, as saídas OUT1 e OUIT2 devem ser Baixas. No entanto, devido à corrente de fuga, não será 0V. A tensão de fuga varia com a tensão de entrada.
Desenho Mecânico

Detecção Direcional

Graças aos dois fototransistores detectores, podemos detectar a direção do movimento. Se o obstáculo se mover da esquerda para a direita, os estados de saída devem mudar em 11 --> 01 --> 00 --> 10; da mesma forma, se o obstáculo se mover da direita para a esquerda, deve ser 11 --> 10 --> 00 -->01.
Plataformas Suportadas
| Arduino | Raspberry Pi |
|---|---|
|
|
As plataformas mencionadas acima como suportadas são uma indicação da compatibilidade de software ou teórica do módulo. Na maioria dos casos, fornecemos apenas biblioteca de software ou exemplos de código para a plataforma Arduino. Não é possível fornecer biblioteca de software / código de demonstração para todas as possíveis plataformas de MCU. Portanto, os usuários têm que escrever sua própria biblioteca de software.
Primeiros Passos
Brincar com Arduino
Hardware
Materiais necessários
| Seeeduino V4.2 | Base Shield | Grove - Optical Rotary Encoder |
|---|---|---|
|
|
|
| Compre Agora | Compre Agora | Compre Agora |
1 Conecte o cabo USB com cuidado, caso contrário você pode danificar a porta. Use o cabo USB com 4 fios internos, o cabo de 2 fios não consegue transferir dados. Se você não tiver certeza sobre o cabo que possui, pode clicar aqui para comprar
2 Cada módulo Grove vem com um cabo Grove quando você compra. Caso você perca o cabo Grove, pode clicar aqui para comprar.
-
Passo 1. Conecte o Grove - Optical Rotary Encoder à porta D5 do Base Shield.
-
Passo 2. Conecte o Grove - Base Shield ao Seeeduino.
-
Passo 3. Conecte o Seeeduino ao PC através de um cabo USB.

Se não tivermos o Grove Base Shield, também podemos conectar este módulo diretamente ao Seeeduino como abaixo.
| Seeeduino | Grove - Optical Rotary Encoder |
|---|---|
| 5V | Vermelho |
| GND | Preto |
| D6 | Branco |
| D5 | Amarelo |
Software
Se esta é a primeira vez que você trabalha com Arduino, recomendamos fortemente que veja Getting Started with Arduino antes de começar.
- Passo 1. Instale a Encoder Library na IDE do Arduino. Você pode encontrar esta biblioteca pelo seguinte caminho: Sketch-->Include Library-->Manage Libraries

Em seguida, pesquise por encoder na janela pop-up. Encontre Encoder by Paul Stoffregen, escolha a Version1.4.1 e clique em Install.

Quando a biblioteca for instalada, você verá INSTALLED, então clique em Close.

Agradecemos ao Paul por sua excelente biblioteca.
-
Passo 2. Reinicie a Arduino IDE. Abra o exemplo, você pode abri-lo das três maneiras a seguir:
- Abra-o diretamente na Arduino IDE pelo caminho: File --> Examples --> Encoder --> Basic.

- Abra-o no seu computador clicando em Basic.pde, que você pode encontrar em xxxx\Arduino\libraries\Encoder\examples\Basic, em que XXXX é o local onde você instalou a Arduino IDE.

- Ou, você pode simplesmente clicar no ícone

no canto superior direito do bloco de código para copiar o código a seguir para um novo sketch na Arduino IDE.
/* Encoder Library - Basic Example
* http://www.pjrc.com/teensy/td_libs_Encoder.html
*
* This example code is in the public domain.
*/
#include <Encoder.h>
// Change these two numbers to the pins connected to your encoder.
// Best Performance: both pins have interrupt capability
// Good Performance: only the first pin has interrupt capability
// Low Performance: neither pin has interrupt capability
Encoder myEnc(5, 6);
// avoid using pins with LEDs attached
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);
}
}
Você pode alterar dois números para os pinos conectados ao seu encoder para obter o melhor desempenho: ambos os pinos devem ter capacidade de interrupção, então você pode alterar a linha 13 do código para Encoder myEnc(2, 3);, enquanto isso, você deve conectar este sensor ao D2 do Grove Base Shield.
-
Passo 4. Faça o upload do demo. Se você não souber como fazer o upload do código, verifique How to upload code.
-
Passo 5. Abra o Serial Monitor da Arduino IDE clicando em Tool-> Serial Monitor. Ou pressione as teclas ++ctrl+shift+m++ ao mesmo tempo. Defina o baud rate para 9600.
Se tudo correr bem, você obterá o resultado. Quando você mover o obstáculo da esquerda para a direita, o valor da contagem aumentará em 1; quando você mover o obstáculo da direita para a esquerda, o valor da contagem será decrementado em 1.
Basic Encoder Test:
0
1
2
3
4
3
2
1
0
-1
-2
-3
-4
Brincar com Raspberry Pi (com Grove Base Hat para Raspberry Pi)
Hardware
- Passo 1. Itens usados neste projeto:
| Raspberry Pi | Grove Base Hat para RasPi | Grove - Optical Rotary Encoder |
|---|---|---|
![]() | ![]() | |
- Passo 2. Conecte o Grove Base Hat ao Raspberry.
- Passo 3. Conecte o Grove - OLED Display 1.12'' à porta I2C do Base Hat.
- Passo 4. Conecte o Raspberry Pi ao PC através de um cabo USB.
Software
- Passo 1. Siga Setting Software para configurar o ambiente de desenvolvimento e instalar o grove.py no seu Raspberry Pi.
- Passo 2. Execute os comandos abaixo para rodar o código.
# virutalenv for Python3
virtualenv -p python3 env
source env/bin/activate
#enter commmand
grove_optical_rotary_encoder
A seguir está o código grove_optical_rotary_encoder.py.
'''
This is the code for
- Grove - Optical Rotary Encoder(TCUT1600X01) <https://www.seeedstudio.com/Grove-Optical-Rotary-Encoder-TCUT1600X0-p-3142.html>`_
Examples:
.. code-block:: python
from grove.grove_button import GroveButton
import time, sys
# connect to pin 5 (slot D5)
PIN = 5
encoder = GroveOpticalRotaryEncoder(PIN)
# Read the value every second and detect motion
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"]
# The UPM version rotaryencoder has bug result in segment fault.
# This pure python version could work well.
class GroveOpticalRotaryEncoder(object):
'''
Grove optical Rotary Encoder(TCUT1600X01) class
Args:
pin(int): the number of gpio/slot your grove device connected.
'''
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
# called by GPIO library
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):
'''
set or get the position counter
Args:
pos(int):
optinal, the position counter to be set.
if not specified, only get the current counter
Returns:
(int): current position counter
'''
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))
# Instantiate a Grove Rotary Encoder, using signal pins mraa_pin1 & mraa_pin2
myRotaryEncoder = GroveOpticalRotaryEncoder(mraa_pin1, mraa_pin2);
'''
myRotaryEncoder = GroveOpticalRotaryEncoder(pin)
## Exit handlers ##
# This function stops python from printing a stacktrace when you hit control-C
def SIGINTHandler(signum, frame):
raise SystemExit
# This function lets you run code on exit, including functions from myRotaryEncoder
def exitHandler():
print("Exiting")
sys.exit(0)
# Register exit handlers
atexit.register(exitHandler)
signal.signal(signal.SIGINT, SIGINTHandler)
# Read the value every second and detect motion
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
Quando o comando for executado com sucesso, ele imprimirá o valor a cada segundo e detectará movimento.
# Read the value every second and detect motion
while True:
print("\rPosition: {0} ".format(encoder.position()), file=sys.stderr, end='')
time.sleep(0.001)
Você pode sair deste programa simplesmente pressionando ctrl+c.
Visualizador de Esquemático Online
Recursos
-
[PDF] Folha de dados do MP3120
Projeto
Este é o vídeo de introdução deste produto, com demos simples que você pode experimentar.
Suporte Técnico & Discussão sobre o Produto
Obrigado por escolher nossos produtos! Estamos aqui para lhe oferecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.





