Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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:
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 |
---|---|
![]() |
![]() 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:
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
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-*
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 deSpiConnectionSettings
. O construtor define obusId
parâmetro como 0 e ochipSelectLine
parâmetro como 0. - Uma declaração 'using' cria uma instância de
SpiDevice
através da chamada deSpiDevice.Create
e da passagem dehardwareSpiSettings
. IssoSpiDevice
representa o barramento SPI. Ausing
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 deMcp3008
e passa oSpiDevice
para o construtor. - Um
while
loop é executado indefinidamente. Cada iteração:- Limpa o console.
- Lê o valor de CH0 no ADC chamando
mcp.Read(0)
. - Grava o valor bruto na consola.
- 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.
- Espera 500 ms.
-
Crie o aplicativo. Se estiver usando a CLI do .NET, execute
dotnet build
. Para criar no Visual Studio, pressione Ctrl+Shift+B.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
.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.
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.