Pular para o conteúdo principal

Grove - Codificador Rotativo Óptico (TCUT1600X01)

pir

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.

pir

Recursos

  • Detectores de fototransistor duplos, podem determinar a direção da rotação
  • Indicadores LED on-board
  • Interface Grove

Especificação

ItemValor
Tensão de operação3.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 emissor950 nm
Gap3 mm
InterfaceDigital

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

pir

Esquemático

Alimentação

pir

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.

pir

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

pir

Detecção Direcional

pir

dica

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

ArduinoRaspberry Pi

pir

pir

cuidado

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.2Base ShieldGrove - Optical Rotary Encoder

pir

pir

pir

Compre AgoraCompre AgoraCompre Agora
nota

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.

pir

nota

Se não tivermos o Grove Base Shield, também podemos conectar este módulo diretamente ao Seeeduino como abaixo.

SeeeduinoGrove - Optical Rotary Encoder
5VVermelho
GNDPreto
D6Branco
D5Amarelo

Software

nota

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

pir

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

pir

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

pir

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:

    1. Abra-o diretamente na Arduino IDE pelo caminho: File --> Examples --> Encoder --> Basic.

    pir

    1. 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.

    pir

    1. Ou, você pode simplesmente clicar no ícone

    pir

    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);
}
}
dica

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.

success

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 PiGrove 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
success

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

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.

Loading Comments...