Leer valores de un convertidor analógico digital
Un conversor analógico-digital (ADC) es un dispositivo que puede leer un valor de voltaje de entrada analógico y convertirlo en un valor digital. Los ADC se usan para leer valores de termistores, potenciómetros y otros dispositivos que cambian la resistencia en función de ciertas condiciones.
En este tema, usará .NET para leer valores de un ADC a medida que se modula el voltaje de entrada con un potenciómetro.
Requisitos previos
- Equipo de placa única (SBC) basado en ARM (ARMv7 o superior)
- Conversor analógico-digital MCP3008
- Potenciómetro de tres pines
- Placa de pruebas
- Cables de puente
- Placa adaptadora GPIO de Raspberry Pi (opcional/recomendada)
- SDK de .NET 7 o versiones posteriores
Nota
En este tutorial, se presupone que el dispositivo de destino es Raspberry Pi. Sin embargo, se puede usar con cualquier equipo SBC basado en Linux que admita .NET, como Orange Pi, ODROID, etc.
Preparación del equipo de placa única
Asegúrese de que el equipo de placa única esté configurado para admitir estos servicios:
- SSH
- SPI
En muchos dispositivos, no se requiere ninguna configuración adicional. En Raspberry Pi, use el comando raspi-config
. Para obtener más información sobre raspi-config
, consulte la documentación de Raspberry Pi.
Preparación del hardware
Use los componentes de hardware para crear el circuito como se muestra en el diagrama siguiente:
MCP3008 usa la interfaz de periféricos en serie (SPI) para comunicarse. A continuación se muestran las conexiones desde MCP3008 al dispositivo Raspberry Pi y el potenciómetro:
- De VDD a 3,3V (se muestra en color rojo)
- De VREF a 3,3V (rojo)
- De AGND a la toma de tierra (negro)
- De CLK a SCLK (naranja)
- De DOUT a MISO (naranja)
- De DIN a MOSI (naranja)
- De CS/SHDN a CE0 (verde)
- De DGND a la toma de tierra (negro)
- De CH0 a un pin variable (central) en el potenciómetro (amarillo)
Proporcione 3,3V y una toma de tierra a los pines externos del potenciómetro. El orden no es importante.
Consulte los siguientes diagramas de pines según sea necesario:
MCP3008 | GPIO de Raspberry Pi |
---|---|
Imagen de Raspberry Pi Foundation. |
Sugerencia
Se recomienda una placa de pruebas de GPIO junto con una placa para optimizar las conexiones con el encabezado de GPIO.
Creación de la aplicación
Complete los pasos siguientes en el entorno de desarrollo que prefiera:
Cree una aplicación de consola de .NET mediante la CLI de .NET o Visual Studio. Asígnele el nombre AdcTutorial.
dotnet new console -o AdcTutorial cd AdcTutorial
Agregue el paquete Iot.Device.Bindings al proyecto. Use la CLI de .NET desde el directorio del proyecto o Visual Studio.
dotnet add package Iot.Device.Bindings --version 2.2.0-*
Reemplace el contenido de Program.cs por el código siguiente:
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); }
En el código anterior:
-
hardwareSpiSettings
se establece en una instancia nueva deSpiConnectionSettings
. El constructor establece el parámetrobusId
en 0 y el parámetrochipSelectLine
en 0. - Una declaración using crea una instancia de
SpiDevice
mediante una llamada aSpiDevice.Create
y pasandohardwareSpiSettings
. Este objetoSpiDevice
representa el bus SPI. La declaraciónusing
garantiza que el objeto se deseche y que los recursos de hardware se liberen correctamente. - Otra declaración
using
crea una instancia deMcp3008
y pasaSpiDevice
en el constructor. - Se ejecuta un bucle
while
indefinidamente. En cada iteración:- Se borra la consola.
- Se lee el valor de CH0 en el ADC mediante la llamada a
mcp.Read(0)
. - Escribe el valor sin procesar en la consola.
- Se escribe el valor en la consola con el formato de porcentaje.
- Para calcular el porcentaje, el valor se divide por 10,23. MCP3008 es un ADC de 10 bits, lo que significa que devuelve 1024 valores posibles en el rango 0-1023. La división del valor por 10,23 representa el valor como un porcentaje.
- El porcentaje se redondea al 0,1 más cercano.
- Se suspende durante 500 ms.
-
Compile la aplicación. Si usa la CLI de .NET, ejecute
dotnet build
. Para realizar la compilación en Visual Studio, presione Ctrl+Mayús+B.Implemente la aplicación en el equipo de placa única como una aplicación independiente. Para obtener instrucciones, vea Implementación de aplicaciones .NET en Raspberry Pi. Asegúrese de conceder el permiso execute ejecutable mediante
chmod +x
.Para ejecutar la aplicación en Raspberry Pi, cambie al directorio de implementación y ejecute el archivo ejecutable.
./AdcTutorial
Observe la salida a medida que gira la rueda del potenciómetro. Esto se debe a que el potenciómetro varía el voltaje proporcionado a CH0 en el ADC. El ADC compara el voltaje de entrada en CH0 con el voltaje de referencia proporcionado a VREF para generar un valor.
Presione Ctrl+C para finalizar el programa.
Felicidades. Ha usado SPI para leer valores de un conversor analógico-digital.
Obtención del código fuente
El código fuente de este tutorial está disponible en GitHub.