Share via


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:

Um diagrama Fritzing mostrando um circuito com um ADC MCP3008 e um potenciômetro

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
Um diagrama mostrando a pinagem do MCP3008 Um diagrama mostrando a pinagem do cabeçalho GPIO do Raspberry Pi. Imagem cortesia da Raspberry Pi Foundation.
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:

  1. 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
    
  2. 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-*
    
  3. 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 de SpiConnectionSettings. O construtor define os parâmetros busId e chipSelectLine como 0.
    • Uma declaração using cria uma instância de SpiDevice chamando SpiDevice.Create e transmitindo hardwareSpiSettings. Esse SpiDevice representa o barramento SPI. A declaração using garante que o objeto seja descartado e os recursos de hardware sejam liberados corretamente.
    • Outra declaração using cria uma instância de Mcp3008 e transmite SpiDevice para o construtor.
    • Um loop while é executado indefinidamente. Cada iteração:
      1. Limpa o console.
      2. Lê o valor de CH0 no ADC chamando mcp.Read(0).
      3. Grava o valor bruto no console.
      4. 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.
      5. Entra em modo de suspensão após 500 ms.
  4. Crie o aplicativo. Ao usar a CLI do .NET, execute dotnet build. Para criar no Visual Studio, pressione Ctrl+Shift+B.

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

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

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

Próximas etapas