Um sensor, muitos experimentos

(Atualização em 07/11/2021): No final do post tem uma lista atualizada de experimentos feitos com este sensor.

No post anterior aprendemos a dar os primeiros passos com Arduino. E agora chegou a hora de desenvolvermos um sensor muito simples que servirá de base para vários experimentos: um sensor de passagem.

Este sensor tem um princípio de funcionamento bastante simples: coloca-se um LED IR frontalmente iluminando um fototransistor (FT). Se houver luz chegando no FT, ele manda um sinal de “ligado” ao Arduino. Se houver algum obstáculo entre os dois impedindo que o LED ilumine o FT, ele manda um sinal de “desligado” para o Arduino.

Um outro arranjo possível é o arranjo lateral. O LED é posicionado lateralmente ao FT, e a iluminação deste pelo LED acontece por reflexão. Nesta configuração, o comportamento do FT se inverte: o sinal de “ligado” é enviado somente se houver algum obstáculo na frente do sensor que reflita a luz do LED. A Figura 1 mostra a resposta do sensor no arranjo frontal e no arranjo lateral.

Figura 1: arranjos frontal e lateral do LED em relação ao fotodiodo.

Circuito do sensor de passagem

O sensor de velocidade acima descrito pode ser facilmente construído com o Arduino Uno usando-se o diagrama abaixo:

Figura 2: Circuito do sensor de passagem.

A Figura 2 mostra que apenas 3 portas do Arduino são utilizadas. As portas 5V e GND fornecem energia para o LED e FT. O estado do FT pode ser lido tanto numa porta analógica, quanto numa porta digital. Mas preferi a porta digital (aqui escolhi a porta digital 3) porque há apenas dois estados possíveis: “ligado” ou “desligado”. Se utilizássemos a porta analógica, teríamos de nos preocupar em detectar valores entre 0 e 1023, e tentar entender se o sensor está no estado “ligado” ou “desligado”.

Vamos demonstrar o circuito acima de duas formas. A primeira forma é mais simples, e serve apenas para observar graficamente o funcionamento básico do sensor de passagem. Na segunda demonstração, iremos escrever um código que mede o tempo de passagem pelo sensor.

Sketch Arduino (1a. demonstração)

Na primeira demonstração, o Arduino monitora a porta digital onde o FD está conectado, envia o valor medido para a porta serial, enquanto nós observamos o valor de saída. Veja o código abaixo:

// Definição das entradas 

// define o pino digital 3 como entrada do fototransistor
const int FOTOpin = 3; 

void setup() {
  // coloque aqui o código de inicialização que será executada apenas uma vez.
  
  // configuração do pino 3 como entrada
  pinMode(FOTOpin, INPUT); 

  // inicializa a saída serial do Arduino
  Serial.begin(9600); 
 
}

void loop() {
  // put your main code here, to run repeatedly:

  // leitura do fotodiodo
  int v1 = digitalRead(FOTOpin); 

  // escreve a leitura do fototransistor na porta serial
  Serial.println(v1);  
}

Faça o upload do código acima para o Arduíno, clique no menu TOOLS/SERIAL PLOTTER para observar a leitura do FD. Passe a mão entre o LED e o FD e veja o que acontece.

Sketch Arduino (2a. demonstração)

Na segunda demonstração, o Arduino vai monitorar o FD e medir o tempo de passagem do objeto pelo sensor.

// Definição das entradas

// define o pino digital 3 como entrada do fototransistor
const int FOTOpin = 3; 
bool ligado = false;
long dt;

void setup() {
 // coloque aqui o código de inicialização que será executada apenas uma vez.
  
  // configuração do pino 3 como entrada
  pinMode(FOTOpin, INPUT); 

  // inicializa a saída serial do Arduino
  Serial.begin(9600); 
 
}

void loop() {
  // put your main code here, to run repeatedly:

  // leitura do fotodiodo
  int v1 = digitalRead(FOTOpin); 

  // detecta se um objeto chegou no sensor
  if ((v1 == HIGH) & (ligado == false)){
    ligado = true;
    dt = millis();
  }  

  // detecta se um objeto saiu do sensor
  if ((v1 == LOW) & (ligado == true)){
    ligado = false;
    dt = millis() - dt;
    Serial.print("Tempo de passagem (ms) = ");
    Serial.println(dt);
  }  

}

Faça o upload do código acima para o Arduíno, clique no menu TOOLS/SERIAL MONITOR para observar o conteúdo da porta serial. Passe a mão entre o LED e o FD e veja o que acontece. Não há mais uma descrição gráfica do sinal do FD, mas sim mensagens mostrando a duração em milissegundos da passagem de um objeto pelo sensor. Se conhecermos o tamanho do objeto é possível determinar a velocidade de passagem dele pelo sensor.

Sensor de passagem como um sensor de velocidade

Imagine que o nosso sensor acima possa ser montado de forma que um objeto de comprimento $L$ passe pelo sensor. Quando o objeto passa pelo sensor, a luz do LED no FT vai ser bloqueada por um tempo $\Delta t$. Assumindo que a largura do feixe do LED é infinitamente estreito, o objeto percorre uma distância $\Delta x = L$ ao cruzar o sensor. A velocidade média do objeto de comprimento $L$ ao passar pelo sensor é dada por:

$$\bar{v} = \frac{L}{\Delta t}.$$

O funcionamento básico do sensor é mostrado na animação abaixo:

Adaptando o sensor para medir a velocidade de uma NERF

Adaptei o sensor para medir a velocidade de carrinhos de brinquedo sobre umaa mesa e funcionou legal. Mas veio a pergunta “Será que este sensor funciona para coisas que se movem muito rápido?”. Daí resolvi testá-lo para medir a velocidade do objeto mais rápido a minha disposição: uma NERF. Para quem não sabe, NERF é aquela arma de brinquedo que atira dardos macios.

Um dardo de NERF (que peguei de um brinquedo que meu filho não brinca mais) tem 73 mm, e o tempo de passagem pelo sensor variou entre 4 ms e 5 ms. Usando-se o valor médio de 4.5 ms a velocidade de um tiro de NERF atinge impressionantes 58,4 km/h !!!!!!!

Tentei checar esse valor em outras fontes, e descobri neste vídeo aqui, que velocidade da NERF depende do modelo. No vídeo, um homem testa 5 modelos de NERF e mede velocidades que variam aproximadamente entre 50 km/h e 70 km/h, dependendo do modelo.

Fiquei muito feliz que o nosso sensor de passagem foi capaz de fornecer valores compatíveis com outras medições feitas com instrumentos profissionais de alta precisão.

Conclusões: um sensor, muitos experimentos

Em conclusão, nosso sensor baseado em Arduino, além de simples e barato, é bastante preciso. Como o título deste post já fala, este sensor servirá de base para uma série de experimentos muito interessantes nos próximos posts.

ATUALIZAÇÃO IMPORTANTE (feita em 07/08/2021):
No post Conservação da energia mecânica com Hotwheels e Arduino, eu mostrei como mudar o código acima para aumentar a precisão do sensor de milissegundos para microssegundos, e obter velocidades ainda mais precisas.


Lista de experimentos feitos com apenas um sensor de velocidade (atualizado em 07/09/2021):

4 thoughts to “Um sensor, muitos experimentos”

  1. Gostei muito, excelente. Há muito tempo que andava na procura de algo tão simples

  2. Tenho uma dúvida?

    O resistor não devia estar em Pull_up? Da forma como está instalado não dá LOW quando bloqueia o feixe de luz?

Leave a Reply

Your email address will not be published. Required fields are marked *