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, você usará o .NET para ler valores de um ADC à medida que modula 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 8 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 muito mais.

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, use o raspi-config comando. Para obter mais informações sobre o 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 mostrando 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 a 3,3V (mostrado em 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 mostrando a pinagem do MCP3008 Um diagrama mostrando a disposição dos pinos do cabeçalho GPIO do Raspberry Pi. Imagem cortesia da Fundação Raspberry Pi.
Imagem cedida pela 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 um novo aplicativo de console .NET usando a CLI do .NET ou o Visual Studio. Nomeie-o AdcTutorial.

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

    dotnet add package Iot.Device.Bindings --version 3.2.0-*
    
  3. Substitua o conteúdo do ficheiro 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 está 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 'using' cria uma instância de SpiDevice através da chamada de SpiDevice.Create e da passagem de hardwareSpiSettings. Isso SpiDevice representa o barramento SPI. A using declaração garante que o objeto seja descartado e que os recursos de hardware sejam liberados corretamente.
    • Outra using declaração 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 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 usando 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 independente. Para obter instruções, consulte Implantar aplicativos .NET no Raspberry Pi. Certifique-se de dar permissão de execução ao ficheiro 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 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 o 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óximos passos