Partilhar via


Ler valores de um conversor analógico para digital

Um conversor analógico para digital (ADC) é um dispositivo que consegue ler um valor de tensão de entrada analógico e convertê-lo num valor digital. Os ADCs são utilizados para ler valores de termómetros, potentiometers e outros dispositivos que alteram a resistência com base em determinadas condições.

Neste tópico, irá utilizar o .NET para ler valores de um ADC à medida que modula a tensão de entrada com um potentiometer.

Pré-requisitos

  • Computador de quadro único (SBC) baseado em ARM (ARMv7 ou superior)
  • Conversor analógico para digital MCP3008
  • Potentiometer de três pinos
  • Breadboard
  • Fios jumper
  • Placa simultânea raspberry Pi GPIO (opcional/recomendada)
  • SDK .NET 7 ou posterior

Nota

Este tutorial é escrito partindo do princípio de que o dispositivo de destino é Raspberry Pi. No entanto, este tutorial pode ser utilizado 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, não é necessária qualquer configuração adicional. Para Raspberry Pi, utilize o raspi-config comando . Para obter mais informações sobre raspi-config, consulte a documentação do Raspberry Pi.

Preparar o hardware

Utilize os componentes de hardware para criar o circuito, conforme descrito no diagrama seguinte:

Um diagrama fritzing a mostrar um circuito com um ADC MCP3008 e um potentiometer

O MCP3008 utiliza a Interface de Periférico de Série (SPI) para comunicar. Seguem-se as ligações do MCP3008 ao Raspberry Pi e ao potentiometer:

  • V DD a 3,3V (mostrado a 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 a terra (preto)
  • CH0 a pino variável (meio) no potentiómetro (amarelo)

Forneça 3,3 V e desça aos pinos exteriores do potentiometer. A encomenda não é importante.

Veja os seguintes diagramas de pinout, conforme necessário:

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

Dica

Recomenda-se uma placa simultânea GPIO em conjunto com uma placa de pão para simplificar as ligações ao cabeçalho GPIO.

Criar a aplicação

Conclua os seguintes passos no seu ambiente de desenvolvimento preferencial:

  1. Crie uma nova Aplicação de Consola .NET com a CLI do .NET ou o Visual Studio. Dê-lhe o nome AdcTutorial.

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

    dotnet add package Iot.Device.Bindings --version 2.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 para 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 utilização cria uma instância de SpiDevice ao chamar SpiDevice.Create e transmitir hardwareSpiSettings. Isto SpiDevice representa o barramento SPI. A using declaração garante que o objeto é eliminado e que os recursos de hardware são libertados corretamente.
    • Outra using declaração cria uma instância de Mcp3008 e transmite-a SpiDevice para o construtor.
    • Um while ciclo é executado indefinidamente. Cada iteração:
      1. Limpa a consola.
      2. Lê o valor de CH0 no ADC ao chamar mcp.Read(0).
      3. Escreve o valor não processado na consola.
      4. Escreve o valor na consola formatada como uma percentagem.
        • Para calcular a percentagem, o valor é dividido por 10,23. O MCP3008 é um ADC de 10 bits, o que significa que devolve 1024 valores possíveis entre 0 e 1023. Dividir o valor por 10,23 representa o valor como uma percentagem.
        • A percentagem é arredondada para 0,1 mais próxima.
      5. Dorme 500 ms.
  4. Crie a aplicação. Se estiver a utilizar a CLI de .NET, execute dotnet build. Para criar no Visual Studio, prima Ctrl+Shift+B.

  5. Implemente a aplicação no SBC como uma aplicação autónoma. Para obter instruções, veja Implementar aplicações .NET no Raspberry Pi. Confirme que concede permissão de execução executável com chmod +x.

  6. Execute a aplicação no Raspberry Pi ao mudar para o diretório de implementação e executar o executável.

    ./AdcTutorial
    

    Observe a saída à medida que roda o dial de potentiómetro. Isto deve-se ao potentió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 ao VREF para gerar um valor.

  7. Termine o programa premindo Ctrl+C.

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

Obter o código-fonte

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

Passos seguintes