Como utilizar o sensor de velocidade encoder com o Arduino
O sensor de velocidade encoder é um dispositivo eletrônico que pode ser utilizado para realizar a contagem do número de rotações de um encoder acoplado a motor. Com base nessa informação, será possível determinar a velocidade do motor. É um dispositivo muito utilizado em projetos de robótica móvel, sistemas autônomos e sistemas de controle de velocidade.
O sensor de velocidade encoder possui em sua extremidade um LED infravermelho e um fototransistor, separados por um pequeno corredor. Ao ser ligado, o feixe de luz infravermelho é detectado pelo fototransistor. Quando um objeto é colocado entre o infravermelho e o fototransistor, a percepção do feixe de luz é interrompida e o sensor envia um sinal de detecção ao microcontrolador.
Para a detecção da velocidade de um motor, contagem de pulsos ou limite de posição, um disco de encoder é usado em conjunto com o sensor de velocidade encoder. O disco de encoder deve ser acoplado ao eixo do motor e seus furos entre o infravermelho e o fototransistor do sensor de velocidade, conforme a Figura 2.
Quando o motor girar, o disco do encoder gera interrupções no feixe de luz infravermelha que serão percebidas pelo fototransistor, gerando uma variação de tensão de saída do sensor de velocidade encoder. O sinal de saída gerado será parecido com uma onda quadrada.
Quando o motor girar mais rápido ocorrem mais interrupções no feixe de luz infravermelho e quando girar mais devagar acontecem menos interrupções. Dessa forma, será possível determinar a velocidade do motor.
O sensor de velocidade encoder conta com um comparador de tensão LM393 integrado para fornecer a saída digital e LEDs indicativos. A Figura 3 detalha os pinos e componentes do sensor.
Cada pino possui a seguinte função:
- VCC: Alimentação do sensor (entre 3,3 e 5V);
- GND: Aterramento do sensor;
- D0: Saída digital do sensor;
- A0: Saída analógica do sensor.
Neste tutorial, aprenderemos a utilizar o sensor de velocidade/módulo Encoder para contar o número de vez que um objeto passou entre o infravermelho e o fototransistor.
MATERIAIS NECESSÁRIOS
- 1x Placa UNO SMD R3 Atmega328 compatível com Arduino UNO;
- 1 x Cabo USB Tipo A-B compatível com Arduino UNO;
- 1 x Sensor de velocidade/ Módulo Encoder;
- 1 x Protoboard;
- Jumpers macho-macho.
ESQUEMÁTICO DE LIGAÇÃO
Inicialmente, certifique-se de que a sua placa Arduino esteja desligada. Em seguida, monte o circuito da Figura 4.
Ao montar o circuito observe os seguintes pontos:
- O pino VCC do sensor deve ser conectado ao 5V do Arduino;
- O pino GND do sensor deve ser conectado ao GND do Arduino;
- O pino D0 do sensor deve ser ligado ao pino digital 2 do Arduino.
ELABORANDO O CÓDIGO
Após a montagem do circuito, vamos programação do Sketch no Arduino IDE. A proposta deste projeto é contar o número de vez que um objeto passou entre o infravermelho e o fototransistor do sensor de velocidade encoder.
Vamos entender a lógica de programação desse projeto a partir dos seguintes passos:
1. Declarar as variáveis
Iniciamos o código declarando as variáveis que serão utilizadas no código. A variável sensorPin será usada para representar o pino digital 2 do Arduino, ao qual o pino D0 do sensor de velocidade encoder encontra-se conectado.
As variáveis leituraSensor e contagem serão utilizadas para armazenas a leitura do sensor e o número de vezes que um objeto foi detectado, respectivamente.
2. Inicializar a comunicação serial e definir pino do sensor como entrada
Na função setup() inicializamos a comunicação serial com taxa de transmissão em 9600 e definimos a variável sensorPin como entrada (INPUT).
3. Realizar a leitura digital do sensor de velocidade encoder
Iniciamos o loop() realizando a leitura do sensor de velocidade encoder. Para isso, utilizaremos a função digitalRead(sensorPin) e armazenamos esse valor na variável leituraSensor.
4. Verificar a detecção do objeto e adicionar ao contador
O sensor de velocidade encoder retorna nível lógico alto (1) quando detecta um objeto. De forma contrária, retorna nível lógico baixo (0) quando não detecta.
Para verificar se o sensor está ou não detectando usamos a estrutura condicional if…else, em que comparamos se o valor armazenado em leitraSensor é igual a 1. Satisfazendo a condição, a variável contador será incrementada em 1 e o número de detecções impresso no monitor serial.
Ao final, o Sketch deste projeto ficará da seguinte maneira:
/* - SENSOR DE VELOCIDADE ENCODER COM ARDUINO - =============================================== == BLOG DA ROBOTICA - www.blogdarobotica.com == =============================================== Autor: Carol Correia E-mail: contato@blogdarobotica.com Facebook: facebook.com/blogdarobotica Instagram:@blogdarobotica YouTube: youtube.com/user/blogdarobotica =============================================== */ int sensorPin = 2; //Pino D0 do sensor conectado a porta digital 2 do Arduino int leituraSensor; //Váriavel que irá armazenar os valores de leitura do sensor (0 ou 1) int contagem = 0; //Variável para armazenar o número de vezes que um objeto foi detectado void setup() { Serial.begin(9600); //Inicia a comunicação serial pinMode(sensorPin, INPUT); } void loop() { leituraSensor = digitalRead(sensorPin); //Leitura digital do sensor if ( leituraSensor == 1) { //Se o valor digital for igual a 1.... contagem++; //Soma o valor de 1 na contagem Serial.print("Numero de deteccoes: "); Serial.println(contagem); //valor da contagem no monitor serial delay(500); //espera de 0,5 segundos } }
O número de detecções será impresso no monitor serial conforme a Figura 5.
Espero ter ajudado,
Obrigada a todos e, em caso de dúvidas, deixe seu comentário abaixo!
Bacharel em Engenharia Elétrica com ênfase em Eletrônica, mestra em Engenharia Industrial e especialista em Docência com ênfase em Educação Inclusiva. Atua no setor de Desenvolvimento de Produtos na Casa da Robótica. Editora chefe e articulista no Blog da Robótica. Fanática por livros, Star Wars e projetos Maker.