Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um conversor analógico para 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 alteram a resistência com base em determinadas condições.
Neste tópico, você usará .NET para ler valores de um ADC enquanto modula a tensão de entrada com um potenciômetro.
Pré-requisitos
- Computador de placa única baseado em ARM (ARMv7 ou superior) (SBC)
- MCP3008 conversor analógico para digital
- Potenciômetro de três pinos
- Breadboard
- Fios de jumper
- Placa de expansão GPIO Raspberry Pi (opcional/recomendado)
- .NET SDK 10 ou posterior
Observação
Este tutorial é escrito supondo que o dispositivo de destino seja Raspberry Pi. No entanto, este tutorial pode ser usado para qualquer SBC baseado em Linux que dê suporte a .NET, como Orange Pi, ODROID e muito mais.
Preparar o SBC
Verifique se o SBC está configurado para dar suporte aos seguintes serviços:
- SSH
- SPI
Para muitos dispositivos, nenhuma configuração adicional é necessária. Para Raspberry Pi, use o raspi-config comando. Para obter mais informações sobre raspi-config, consulte a documentação do Raspberry Pi.
Preparar o hardware
Use os componentes de hardware para criar o circuito, conforme descrito no diagrama a seguir:
O MCP3008 usa SPI (Interface Periférica Serial) para se comunicar. Veja a seguir as conexões do MCP3008 com o Raspberry Pi e o potentiometer:
- VDD a 3.3V (mostrado em vermelho)
- VREF para 3.3V (vermelho)
- AGND para o chão (preto)
- CLK para SCLK na cor laranja
- DOUT para o MISO (cor laranja)
- DIN para MOSI (laranja)
- CS/SHDN para CE0 (verde)
- DGND ligado à terra (preto)
- CH0 para pino variável (meio) no potenciômetro (amarelo)
Forneça 3,3V e terra para os pinos externos no potenciômetro. A ordem não é importante.
Consulte os seguintes diagramas de pinout conforme necessário:
| MCP3008 | Raspberry Pi GPIO |
|---|---|
|
|
Imagem cortesia Raspberry Pi Foundation. |
Dica
Uma placa de expansão GPIO em conjunto com um protoboard é recomendada para simplificar as conexões com o conector GPIO.
Criar o aplicativo
Conclua as seguintes etapas em seu ambiente de desenvolvimento preferencial:
Crie um novo aplicativo de console .NET usando a CLI .NET ou Visual Studio. Nomeie-o AdcTutorial.
dotnet new console -o AdcTutorial cd AdcTutorialAdicione 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.0Substitua 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 apresentado:
-
hardwareSpiSettingsé definido como uma nova instância deSpiConnectionSettings. O construtor define obusIdparâmetro como 0 e ochipSelectLineparâmetro como 0. - Uma declaração de uso cria uma instância de
SpiDevicechamandoSpiDevice.Createe passando emhardwareSpiSettings. IssoSpiDevicerepresenta o barramento SPI. Ausingdeclaração garante que o objeto seja descartado e os recursos de hardware sejam liberados corretamente. - Outra declaração
usingcria uma instância deMcp3008e passa oSpiDevicepara o construtor. - Um
whileloop é executado indefinidamente. Cada iteração:- Limpa o console.
- Lê o valor de CH0 no ADC chamando
mcp.Read(0). - Grava o valor bruto no console.
- Grava o valor no console formatado como uma porcentagem.
- Para calcular o percentual, o valor é dividido por 10,23. O MCP3008 é um ADC de 10 bits, o que significa que retorna 1024 valores possíveis variando de 0 a 1023. Dividir o valor por 10,23 representa o valor como uma porcentagem.
- O percentual é arredondado para o 0,1 mais próximo.
- Dorme 500 ms.
-
Crie o aplicativo. Se estiver usando a CLI .NET, execute
dotnet build. Para criar em Visual Studio, pressione Ctrl+Shift+B.Implante o aplicativo no SBC como um aplicativo independente. Para obter instruções, consulte Deploy .NET aplicativos para Raspberry Pi. Certifique-se de conceder permissão de execução ao executável usando
chmod +x.Execute o aplicativo no Raspberry Pi acessando o diretório de implantação e executando o executável.
./AdcTutorialObserve a saída enquanto você gira o botão do potenciômetro. Isso ocorre devido ao potenteiô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 aoREF V para gerar um valor.
Encerre o programa pressionando Ctrl+C.
Parabéns! Você usou o SPI para ler valores de um conversor analógico para digital.
Obter o código-fonte
A origem deste tutorial está disponível em GitHub.