Compartilhar via


Ler valores de um conversor analógico para digital

Um conversor analógico para digital (ADC) é 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á .NET para ler valores de um ADC enquanto modula a tensão de entrada com um potenciômetro.

Pré-requisitos

  • Computador de placa única baseado em ARM (ARMv7 ou superior) (SBC)
  • MCP3008 conversor analógico para digital
  • Potenciômetro de três pinos
  • Breadboard
  • Fios de jumper
  • Placa de expansão GPIO Raspberry Pi (opcional/recomendado)
  • .NET SDK 10 ou posterior

Observação

Este tutorial é escrito supondo que o dispositivo de destino seja Raspberry Pi. No entanto, este tutorial pode ser usado para qualquer SBC baseado em Linux que dê suporte a .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 raspi-config comando. 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 descrito no diagrama a seguir:

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

O MCP3008 usa SPI (Interface Periférica Serial) para se comunicar. Veja a seguir as conexões do MCP3008 com o Raspberry Pi e o potentiometer:

  • VDD a 3.3V (mostrado em vermelho)
  • VREF para 3.3V (vermelho)
  • AGND para o chão (preto)
  • CLK para SCLK na cor laranja
  • DOUT para o MISO (cor laranja)
  • DIN para MOSI (laranja)
  • CS/SHDN para CE0 (verde)
  • DGND ligado à terra (preto)
  • CH0 para pino variável (meio) no potenciômetro (amarelo)

Forneça 3,3V e terra para os pinos externos no potenciômetro. A ordem não é importante.

Consulte os seguintes diagramas de pinout conforme necessário:

MCP3008 Raspberry Pi GPIO
Um diagrama mostrando o pinout do MCP3008 Um diagrama mostrando o pinout do cabeçalho GPIO do Raspberry Pi. Imagem cortesia da Raspberry Pi Foundation.
Imagem cortesia Raspberry Pi Foundation.

Dica

Uma placa de expansão GPIO em conjunto com um protoboard é recomendada para simplificar as conexões com o conector GPIO.

Criar o aplicativo

Conclua as seguintes etapas em seu ambiente de desenvolvimento preferencial:

  1. Crie um novo aplicativo de console .NET usando a CLI .NET ou Visual Studio. Nomeie-o AdcTutorial.

    dotnet new console -o AdcTutorial
    cd AdcTutorial
    
  2. Adicione o pacote Iot.Device.Bindings ao projeto. Use .NET CLI do diretório do projeto ou Visual Studio.

    dotnet package add Iot.Device.Bindings --version 4.1.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 apresentado:

    • hardwareSpiSettings é definido como uma nova instância de SpiConnectionSettings. O construtor define o busId parâmetro como 0 e o chipSelectLine parâmetro como 0.
    • Uma declaração de uso cria uma instância de SpiDevice chamando SpiDevice.Create e passando em hardwareSpiSettings. Isso SpiDevice representa o barramento SPI. A using declaração 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 passa o SpiDevice para o construtor.
    • Um while loop é 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 o percentual, o valor é dividido por 10,23. O MCP3008 é um ADC de 10 bits, o que significa que retorna 1024 valores possíveis variando de 0 a 1023. Dividir o valor por 10,23 representa o valor como uma porcentagem.
        • O percentual é arredondado para o 0,1 mais próximo.
      5. Dorme 500 ms.
  4. Crie o aplicativo. Se estiver usando a CLI .NET, execute dotnet build. Para criar em Visual Studio, pressione Ctrl+Shift+B.

  5. Implante o aplicativo no SBC como um aplicativo independente. Para obter instruções, consulte Deploy .NET aplicativos para Raspberry Pi. Certifique-se de conceder permissão de execução ao executável usando chmod +x.

  6. Execute o aplicativo no Raspberry Pi acessando o diretório de implantação e executando o executável.

    ./AdcTutorial
    

    Observe a saída enquanto você gira o botão do potenciômetro. Isso ocorre devido ao potenteiômetro que varia a tensão fornecida ao CH0 no ADC. O ADC compara a tensão de entrada no CH0 com a tensão de referência fornecida aoREF V para gerar um valor.

  7. Encerre o programa pressionando Ctrl+C.

Parabéns! Você usou o SPI para ler valores de um conversor analógico para digital.

Obter o código-fonte

A origem deste tutorial está disponível em GitHub.

Próximas etapas