Ler valores de um conversor analógico/digital
Um ADC (conversor analógico-digital) é um dispositivo que pode ler um valor de tensão de entrada analógica e convertê-lo em um valor digital. Os ADCs são usados para ler valores de termistores, potenciômetros e outros dispositivos que alteram a resistência com base em determinadas condições.
Neste tópico, você usará o .NET para ler valores de um ADC enquanto modula a tensão de entrada com um potenciômetro.
Pré-requisitos
- SBC (computador de placa única) baseado em ARM (ARMv7 ou superior)
- Conversor analógico-digital MCP3008
- Potenciômetro de três pinos
- Placa universal
- Cabos de jumper
- Placa de breakout Raspberry Pi GPIO (opcional/recomendado)
- .NET SDK 7 ou posterior
Observação
Este tutorial foi escrito supondo que o dispositivo de destino seja o Raspberry Pi. No entanto, este tutorial pode ser usado para qualquer SBC baseado em Linux com suporte para .NET, como Orange Pi, ODROID e muito mais.
Preparar o SBC
Verifique se o SBC está configurado para dar suporte aos seguintes serviços:
- SSH
- SPI
Para muitos dispositivos, nenhuma configuração adicional é necessária. Para Raspberry Pi, use o comando raspi-config
. Para obter mais informações sobre raspi-config
, consulte a Documentação do Raspberry Pi.
Preparar o hardware
Use os componentes de hardware para criar o circuito, conforme ilustrado no seguinte diagrama:
O MCP3008 usa SPI (Serial Peripheral Interface) para se comunicar. Veja a seguir as conexões do MCP3008 com o Raspberry Pi e o potenciômetro:
- VDD para 3.3V (exibido em vermelho)
- VREF para 3.3V (vermelho)
- AGND para terra (preto)
- CLK para SCLK (laranja)
- DOUT para MISO (laranja)
- DIN para MOSI (laranja)
- CS/SHDN para CE0 (verde)
- DGND para terra (preto)
- CH0 para pino variável (meio) no potenciômetro (amarelo)
Forneça 3.3 V e aterre os pinos externos do potenciômetro. A ordem não é importante.
Confira os seguintes diagramas de pinagem conforme necessário:
MCP3008 | GPIO do Raspberry Pi |
---|---|
Imagem cortesia da Raspberry Pi Foundation. |
Dica
Recomenda-se uma placa de fuga GPIO com uma placa de ensaio para simplificar as conexões com o cabeçalho GPIO.
Criar o aplicativo
Siga estas etapas em seu ambiente de desenvolvimento preferencial:
Crie um aplicativo de console .NET usando a CLI do .NET ou o Visual Studio. Defina o nome como AdcTutorial.
dotnet new console -o AdcTutorial cd AdcTutorial
Adicione o pacote Iot.Device.Bindings ao projeto. Use a CLI do .NET no diretório do projeto ou no Visual Studio.
dotnet add package Iot.Device.Bindings --version 2.2.0-*
Substitua o conteúdo do Program.cs pelo seguinte código:
using System; using System.Device.Spi; using System.Threading; using Iot.Device.Adc; var hardwareSpiSettings = new SpiConnectionSettings(0, 0); using SpiDevice spi = SpiDevice.Create(hardwareSpiSettings); using var mcp = new Mcp3008(spi); while (true) { Console.Clear(); double value = mcp.Read(0); Console.WriteLine($"{value}"); Console.WriteLine($"{Math.Round(value/10.23, 1)}%"); Thread.Sleep(500); }
No código anterior:
-
hardwareSpiSettings
é definido como uma nova instância deSpiConnectionSettings
. O construtor define os parâmetrosbusId
echipSelectLine
como 0. - Uma declaração using cria uma instância de
SpiDevice
chamandoSpiDevice.Create
e transmitindohardwareSpiSettings
. EsseSpiDevice
representa o barramento SPI. A declaraçãousing
garante que o objeto seja descartado e os recursos de hardware sejam liberados corretamente. - Outra declaração
using
cria uma instância deMcp3008
e transmiteSpiDevice
para o construtor. - Um loop
while
é executado indefinidamente. Cada iteração:- Limpa o console.
- Lê o valor de CH0 no ADC chamando
mcp.Read(0)
. - Grava o valor bruto no console.
- Grava o valor no console formatado como uma porcentagem.
- Para calcular a porcentagem, o valor é dividido por 10,23. O MCP3008 é um ADC de 10 bits, o que significa que ele retorna 1024 valores possíveis que variam de 0 a 1023. Dividir o valor por 10,23 representa o valor em porcentagem.
- O percentual é arredondado para o 0,1 mais próximo.
- Entra em modo de suspensão após 500 ms.
-
Crie o aplicativo. Ao usar a CLI do .NET, execute
dotnet build
. Para criar no Visual Studio, pressione Ctrl+Shift+B.Implante o aplicativo no SBC como um aplicativo autônomo. Para obter instruções, confira Implantar aplicativos .NET no Raspberry Pi . Dê a permissão de execução ao executável usando
chmod +x
.Execute o aplicativo no Raspberry Pi alternando para o diretório de implantação e executando o executável.
./AdcTutorial
Observe a saída conforme você gira o controle circular do potenciômetro. Isso se deve ao potenciômetro variar a tensão fornecida a CH0 no ADC. O ADC compara a tensão de entrada em CH0 com a tensão de referência fornecida a VREF para gerar um valor.
Encerre o programa pressionando Ctrl+C.
Parabéns! Você usou SPI para ler valores de um conversor analógico-digital.
Obter o código-fonte
A fonte deste tutorial está disponível no GitHub.