# Sensores Quick IRs

# 1. 12V Compact

Neste capítulo é mostrado a documentação necessária para conectar seu sensor infravermelho E3ZD62

# 1.1 Materiais necessários

___

Nesta página será passado um panorama de quais serão os materiais utilizados na conexão elétrica do sensor infravermelho. Estamos considerando que você já tenha um suporte com a elétrica inicial de todo robô montada, a qual inclui: roboRIO, módulos de distribuição, breaker de 120A, entre outros... 

## **Lista de Materiais**

- 1 x Sensor infravermelho retroreflexivo - **E3ZD62**
<p align=center >
  <img src="https://docs.stemos.com.br/uploads/images/gallery/2024-05/screenshot-2024-05-02-at-16-59-09.png" alt="module" width="50%"/>
</p>

- 1 x RoboRIO - **Estamos considerando que ele já está conectado eletricamente ao resto do robô**

  <p align=center >
  <img src="https://docs.stemos.com.br/uploads/images/gallery/2023-09/roborio.webp" alt="module" width="50%"/>
</p>

# 1.2 Conexão elétrica

Nesta página será mostrado como deverá ser realizada a conexão elétrica do sensor IR. 

## **Diagramas**

Antes de mais nada é importante esclarecermos o que cada cor de cabo indica. Então:

- Marrom - **Vcc+**
- Preto - **Output**
- Azul - **GND**

___
Neste diagrama inicial, estamos considerando o uso de uma VRM - **Voltage Regulator Module**

<div align="center">

<div drawio-diagram="952"><img src="https://docs.stemos.com.br/uploads/images/drawio/2024-05/drawing-3-1714680536.png"></div>

</div>

___

Já no segundo estamos apenas considerando o uso de uma PDH - **Power Distribution Hub**

<div align="center">

<div drawio-diagram="950"><img src="https://docs.stemos.com.br/uploads/images/drawio/2024-05/drawing-3-1714680519.png"></div>

</div>

____

<p class="callout info"> Importante notar que como o sensor utilizado é PNP, a carga - optoacoplador - deve ser conectada ao GND junto do sensor IR, como mostram os dois diagramas acima.</p>

# 1.3 Calibração do sensor

Nessa página será mostrado quais ajustes são possíveis fazer no sensor para melhorar sua precisão na hora de lermos um objeto.
___
## **Distância**

Com este sensor é possível ajustarmos a distância útil que queremos que ele leia, dessa forma, podemos regular nosso sensor de acordo com nosso mecanismo para maior compatibilidade. Para calibrarmos a distância útil de leitura primeiro é preciso notar o seguinte:

<p align=center >
<img src="https://docs.stemos.com.br/uploads/images/gallery/2023-10/scaled-1680-/9Nuluz-vermelha-led-ed30-d30c4-interruptor-de-sensor-fotoel-trico-infravermelho.png" alt="module" width="80%"/>
</p>

Nessa imagem podemos observar que temos dois ajustes, o primeiro deles é referente a distância, caso você queira diminuir a distância útil que o sensor detecta é preciso girar essa chave para a direção de *min*. Se quiser aumentar gire-a para a direção de *max*.
____
## **Leitura invertida**

Pode acontecer de quando ligarmos nosso sensor e formos detectar um objeto nossa leitura esteja invertida, de forma que quando detectar o objeto o sensor nos retorne *false*, e quando não detectar *true*. Para resolver isso, temos o segundo ajuste. Quando colocamos a segunda chave em L, o sensor indica *true* para quando detectarmos o objeto, e *false* quando não o fizer. Agora se colocarmos em D, o sensor indicará *false* quando detectarmos o objeto, ou seja, agora está invertido da configuração anterior. Escolha a de sua preferência.

<p class="callout info">Interessante notar que é possível realizar leituras sem necessariamente rodarmos um código, isso pode ser feito utilizando o LED que vem acoplado no sensor infravermelho, caso ele ligue quer dizer que o retorno é "true", se ficar desligado é "false".</p>

# 2. 5V

Este capítulo será usado para explicar as conexões elétricas do sensor infravermelho E18-d80NK.

# 2.1 Materiais necessários

___

Nesta página será passado um panorama de quais serão os materiais utilizados na conexão elétrica do sensor infravermelho. Estamos considerando que você já tenha um suporte com a elétrica inicial de todo robô montada, a qual inclui: roboRIO, módulos de distribuição, breaker de 120A, entre outros... 

## **Lista de Materiais**

- 1 x Sensor infravermelho retroreflexivo - **E18-d80NK**

<p align=center >
<img src="https://docs.stemos.com.br/uploads/images/gallery/2023-10/scaled-1680-/sensor-de-proximidade-infravermelho-e18-d80nk-212-1000x1000.jpg" alt="module" width="50%"/>
</p>

- 1 x RoboRIO - **Estamos considerando que ele já está conectado eletricamente ao resto do robô**

<p align=center >
<img src="https://docs.stemos.com.br/uploads/images/gallery/2023-09/scaled-1680-/roborio.webp" alt="module" width="50%"/>
</p>

- Serão utilizados alguns cabos de 24 AWG (Cabos jumper)

# 2.2 Conexão elétrica

Nesta página será mostrado como deverá ser realizada a conexão elétrica do sensor IR. 

## **Diagramas**

Antes de mais nada é importante esclarecermos o que cada cor de cabo indica. Então:

- Marrom - **Vcc+**
- Preto - **Output**
- Azul - **GND**

___

<div align="center">

<div drawio-diagram="188"><img src="https://docs.stemos.com.br/uploads/images/drawio/2023-10/drawing-4-1697646380.png"></div>

</div>

>A vantagem deste sensor é que é possível conecta-lo diretamente ao roboRIO sem optoacopladores ou outros componentes.

# 2.3 Calibração do sensor

Nessa página será mostrado quais ajustes são possíveis fazer no sensor para melhorar sua precisão na hora de lermos um objeto.
___
## **Distância**

Com este sensor é possível ajustarmos a distância útil que queremos que ele leia, dessa forma, podemos regula-lo de acordo com nosso mecanismo para maior compatibilidade. Para calibrarmos a distância útil de leitura primeira é preciso notar o seguinte:

<p align=center >
<img src="https://docs.stemos.com.br/uploads/images/gallery/2023-10/scaled-1680-/e18-d80nk-adjustable-ir-proximity-sensor-module-adjustment-1.jpg" alt="module" width="80%"/>
</p>

A parte de trás do sensor possui um parafuso, caso esse seja rotacionado no sentido **horário** a distância útil do sensor aumenta, agora, se o girarmos para o sentido **anti-horário** a distância de detecção diminui.

>Interessante notar que o sensor possui um LED acoplado, dessa forma ele liga quando indicar *true* e desliga quando indicar *false*.

# 3. Leitura dos sensores infravermelhos

Neste capítulo será abordado a parte do código para obter os dados dos sensores IR

# 3.1 Código em Java

___

Nesta página será descrito como deve ser feito o código em Java para lermos os dados obtidos pelo sensor infravermelho. Antes de começarmos a programar é importante esclarecer alguns items:

- Estamos considerando que você já saiba como mexer no VS Code WPILib de maneira geral e tenha sua elétrica montada conforme os capítulos anteriores.
- O código é o mesmo para qualquer sensor infravermelho retro reflexivo, ou que tenha um input apenas, como nosso caso.
____
## **Código**

A primeira etapa que devemos fazer é declarar a nossa entrada do roboRIO que estará fazendo a leitura do sensor. Portanto:

```java
  DigitalInput sensorInfravermelho = new DigitalInput(0);
```

Onde temos o número **0** é o local - parâmetro da função construtora da classe **DigitalInput** - que deve ser declarado qual porta **DIO** do roboRIO estamos utilizando, nesse caso, a 0, mas poderia ser a 1, 2, 3...
____

A segunda parte é a exibição desses valores em uma dashboard, em nosso caso estaremos utilizando a *shuffleboard*. Para fazer isso apenas faça - **dentro de uma função períodica para leituras contínuas**:

```java
@Override
public void robotPeriodic() 
{
  SmartDashboard.putBoolean("Estado do sensor IR", sensorInfravermelho.get());
}
```

> Caso sua leitura esteja invertida, ou seja, quando o sensor não está detectando nenhum objeto ele retorna verdadeiro (nesse caso será representado pelo true na *shuffleboard*), mas se detectar retorna falso. Para resolver isso apenas precisamos inverter a leitura. Para isso faça como o código abaixo:

```java
@Override
public void robotPeriodic() 
{
  SmartDashboard.putBoolean("Estado do sensor IR", !sensorInfravermelho.get());
}
```
>Se estiver utilizando o sensor ED30-D80B4 é possível reverter a leitura na própria calibração do sensor, para isso de uma olhada na página [1.3 Calibração do sensor](https://docs.stemos.com.br/books/sensores-quick-irs/page/13-calibracao-do-sensor)
____

## **Exibição na shuffleboard**

Quando colocarmos nossa variável de leitura na *shuffleboard*, será apenas uma caixa de texto, portanto, ela dirá *true* ou *false*. Entretanto é possível alterarmos para uma boolean box, a qual indicará pela cor se nosso sensor esta ou não lendo algo. Para fazer isso, clique com o botão direito no elemento da *shuffleboard* e faça o seguinte:

<div align="center">

[![Captura de tela 2023-10-17 150637.png](https://docs.stemos.com.br/uploads/images/gallery/2023-10/scaled-1680-/captura-de-tela-2023-10-17-150637.png)](https://docs.stemos.com.br/uploads/images/gallery/2023-10/captura-de-tela-2023-10-17-150637.png)

</div>

Caso nosso sensor detecte um objeto essa caixa deverá ficar verde.
___
> Lembrando que se ficar invertido é necessário reverter isso na leitura do código, como descrito mais acima nesta página

# 3.2 Código em LabView

___

Antes de começarmos a realizar a leitura dos nosso sensores infravermelhos em LabVIEW é preciso esclarecer dois items:

- Estamos considerando que você já saiba como instalar e mexer no programa LabVIEW para FRC.
- A segunda parte é que estamos considerando que você já tenha o resto da sua elétrica montada, e a única coisa que precisaremos fazer é construir o código no roboRIO.
___

## **Código**

A primeira etapa que devemos realizar é configurar uma referência para nossa porta de entrada digital, isso é feito em nosso **Begin.vi**, portanto vamos utilizar um VI de Open para informar a porta DIO que o sensor está conectado, e depois vamos fazer o registro da referência:

<div align="center">

[![Captura de tela 2023-10-18 141355.png](https://docs.stemos.com.br/uploads/images/gallery/2023-10/scaled-1680-/captura-de-tela-2023-10-18-141355.png)](https://docs.stemos.com.br/uploads/images/gallery/2023-10/captura-de-tela-2023-10-18-141355.png)

</div>

>Caso queira alterar a porta digital, apenas edite a constante DIO 0.

Para realizarmos a leitura do sensor infravermelho é preciso acessar a referência do sensor declarada anteriormente e obter seu valor por meio de um VI que retorna o valor da porta. Nesse caso estamos colocando seu valor em um **indicador**. Faremos isso utilizando o seguinte diagrama:

<div align="center">

[![Captura de tela 2023-10-18 142011.png](https://docs.stemos.com.br/uploads/images/gallery/2023-10/scaled-1680-/captura-de-tela-2023-10-18-142011.png)](https://docs.stemos.com.br/uploads/images/gallery/2023-10/captura-de-tela-2023-10-18-142011.png)

</div>

As vezes pode ser necessário reverter a leitura do sensor, pois ele pode detectar um objeto e retornar *false*, e isso atrapalha na hora da visualização. Portanto, para inverter a leitura faça o seguinte, adicione um not na função *get*, como segue:

<div align="center">

[![Captura de tela 2023-10-18 145441.png](https://docs.stemos.com.br/uploads/images/gallery/2023-10/scaled-1680-/captura-de-tela-2023-10-18-145441.png)](https://docs.stemos.com.br/uploads/images/gallery/2023-10/captura-de-tela-2023-10-18-145441.png)

</div>

>Se estiver utilizando um sensor ED30-D80B4 é possível inverter a leitura no próprio sensor, para isso de uma olhada na página [1.3 Calibração do sensor](https://docs.stemos.com.br/books/sensores-quick-irs/page/13-calibracao-do-sensor)

____

## **Visualização no Painel Frontal**

Quando criamos o indicador que armazena o estado do nosso sensor, automáticamente no *front panel* do LabVIEW é criado um elemento que indica o estado da variável. Da seguinte forma:

<div align="center">

[![Captura de tela 2023-10-18 142302.png](https://docs.stemos.com.br/uploads/images/gallery/2023-10/scaled-1680-/captura-de-tela-2023-10-18-142302.png)](https://docs.stemos.com.br/uploads/images/gallery/2023-10/captura-de-tela-2023-10-18-142302.png)

</div>