Partilhar via


Ler valores de um conversor analógico-digital

Um conversor analógico-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 mudam a resistência com base em determinadas condições.

Neste tópico, vais usar .NET para ler valores de um ADC enquanto modulas a tensão de entrada com um potenciómetro.

Pré-requisitos

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

Observação

Este tutorial foi escrito assumindo que o dispositivo alvo é o Raspberry Pi. No entanto, este tutorial pode ser usado para qualquer SBC baseado em Linux que suporte .NET, como Orange Pi, ODROID e outros.

Preparar o SBC

Certifique-se de que o SBC está configurado para suportar os seguintes serviços:

  • SSH
  • SPI

Para muitos dispositivos, nenhuma configuração adicional é necessária. Para o Raspberry Pi, usa o raspi-config comando. Para mais informações sobre raspi-config, consulte a documentação do Raspberry Pi.

Preparar o hardware

Use os componentes de hardware para construir o circuito conforme descrito no diagrama a seguir:

Um diagrama de Fritzing que mostra um circuito com um ADC MCP3008 e um potenciómetro

O MCP3008 usa SPI (Serial Peripheral Interface) para se comunicar. A seguir estão as conexões do MCP3008 para o Raspberry Pi e potenciômetro:

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

Forneça 3.3V e terra aos pinos externos do potenciômetro. A ordem não é importante.

Consulte os diagramas de pinagem abaixo conforme necessário.

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

Sugestão

Recomenda-se uma placa de breakout GPIO em conjunto com uma placa de ensaio para agilizar as conexões com o conector GPIO.

Criar a aplicação

Conclua as seguintes etapas em seu ambiente de desenvolvimento preferido:

  1. Crie uma nova aplicação de consola .NET usando .NET CLI ou Visual Studio. Chama-lhe 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:

    • hardwareSpiSettings é definido para uma nova instância de SpiConnectionSettings. O construtor define o busId parâmetro para 0 e o chipSelectLine parâmetro para 0.
    • Uma declaração de uso cria uma instância de SpiDevice ao chamar SpiDevice.Create e passando hardwareSpiSettings. Isto SpiDevice representa o barramento SPI. A using declaração garante que o objeto é eliminado e que os recursos de hardware são devidamente libertados.
    • Outra using declaração cria uma instância de Mcp3008 e passa o SpiDevice para o construtor.
    • Um while loop corre 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 na consola.
      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 retorna 1024 valores possíveis que variam de 0 a 1023. Dividindo o valor por 10,23 representa o valor como uma porcentagem.
        • A percentagem é arredondada para 0,1 mais próximo.
      5. Espera 500 ms.
  4. Crie o aplicativo. Se estiver a usar a CLI .NET, execute dotnet build. Para construir em Visual Studio, pressione Ctrl+Shift+B.

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

  6. Execute a aplicação no Raspberry Pi mudando para o diretório de implantação e executando o executável.

    ./AdcTutorial
    

    Observe a saída ao rodar o mostrador do potenciómetro. Isto deve-se ao facto de o potenciómetro variar a tensão fornecida a CH0 no ADC. O ADC compara a tensão de entrada no CH0 com a tensão de referência fornecida ao VREF para gerar um valor.

  7. Termine o programa pressionando Ctrl+C.

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

Obter o código-fonte

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

Próximos passos