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:
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 |
---|---|
![]() |
![]() 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:
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
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-*
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 deSpiConnectionSettings
. O construtor define obusId
parâmetro como 0 e ochipSelectLine
parâmetro como 0. - Uma declaração de utilização cria uma instância de
SpiDevice
ao chamarSpiDevice.Create
e transmitirhardwareSpiSettings
. IstoSpiDevice
representa o barramento SPI. Ausing
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 deMcp3008
e transmite-aSpiDevice
para o construtor. - Um
while
ciclo é executado indefinidamente. Cada iteração:- Limpa a consola.
- Lê o valor de CH0 no ADC ao chamar
mcp.Read(0)
. - Escreve o valor não processado na consola.
- 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.
- Dorme 500 ms.
-
Crie a aplicação. Se estiver a utilizar a CLI de .NET, execute
dotnet build
. Para criar no Visual Studio, prima Ctrl+Shift+B.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
.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.
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.