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)
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:
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 de SpiConnectionSettings. El constructor establece el parámetro busId en 0 y el parámetro chipSelectLine en 0.
Una declaración using crea una instancia de SpiDevice mediante una llamada a SpiDevice.Create y pasando hardwareSpiSettings. Este objeto SpiDevice representa el bus SPI. La declaración using garantiza que el objeto se deseche y que los recursos de hardware se liberen correctamente.
Otra declaración using crea una instancia de Mcp3008 y pasa SpiDevice 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.
El origen de este contenido se puede encontrar en GitHub, donde también puede crear y revisar problemas y solicitudes de incorporación de cambios. Para más información, consulte nuestra guía para colaboradores.
Comentarios de .NET
.NET es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios: