Compartir a través de


Leer valores de un convertidor analógico a digital

Un convertidor analógico a 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 los termistors, los 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 modula la tensión de entrada con un potenciómetro.

Prerrequisitos

  • Equipo con placa única (ARMv7 o superior) basado en ARM (SBC)
  • MCP3008 convertidor analógico a digital
  • Potenciómetro de tres pins
  • Placa de pruebas
  • Cables de puente
  • Tarjeta de expansión GPIO para Raspberry Pi (opcional/recomendada)
  • SDK de .NET 8 o posterior

Nota:

Este tutorial se escribe suponiendo que el dispositivo de destino sea Raspberry Pi. Sin embargo, este tutorial se puede usar para cualquier SBC basado en Linux que admita .NET, como Orange Pi, ODROID, etc.

Preparación del equipo SBC

Asegúrese de que el CLS está configurado para admitir los siguientes servicios:

  • SSH
  • SPI

Para muchos dispositivos, no se requiere ninguna configuración adicional. Para Raspberry Pi, use el comando . Para obtener más información sobre , consulte la documentación de Raspberry Pi.

Preparación del hardware

Use los componentes de hardware para compilar el circuito como se muestra en el diagrama siguiente:

Diagrama de Fritzing que muestra un circuito con un MCP3008 ADC y un potenciómetro

El MCP3008 usa la interfaz periférico serie (SPI) para comunicarse. A continuación se muestran las conexiones de la MCP3008 a Raspberry Pi y potenciómetro:

  • VDD a 3.3V (se muestra en rojo)
  • VREF a 3.3V (rojo)
  • De AGND a la toma de tierra (negro)
  • De CLK a SCLK (naranja)
  • De DOUT a MISO (naranja)
  • 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 anclaje según sea necesario:

MCP3008 Raspberry Pi GPIO
Diagrama en el que se muestran los pines de MCP3008 Diagrama que muestra la disposición de pines del encabezado GPIO de Raspberry Pi. Imagen proporcionada por Raspberry Pi Foundation.
Imagen cortesía 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 preferido:

  1. Cree una nueva aplicación de consola de .NET mediante la CLI de .NET o Visual Studio. Asígneles el nombre AdcTutorial.

    dotnet new console -o AdcTutorial
    cd AdcTutorial
    
  2. Agregue el paquete Iot.Device.Bindings al proyecto. Use .NET CLI desde el directorio del proyecto o Visual Studio.

    dotnet add package Iot.Device.Bindings --version 3.2.0-*
    
  3. 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:

    • se asigna a una nueva instancia de . El constructor establece el parámetro en 0 y el parámetro en 0.
    • Una declaración using crea una instancia de mediante una llamada a y pasando . Esto representa el bus SPI. La declaración garantiza que el objeto se elimina y los recursos de hardware se liberan correctamente.
    • Otra declaración crea una instancia de y pasa en el constructor.
    • Un bucle se ejecuta indefinidamente. Cada iteración:
      1. Se borra la consola.
      2. Lee el valor de CH0 en el ADC llamando a .
      3. Escribe el valor sin procesar en la consola.
      4. Escribe el valor en la consola con formato de porcentaje.
        • Para calcular el porcentaje, el valor se divide en 10,23. El MCP3008 es un ADC de 10 bits, lo que significa que devuelve 1024 valores posibles que van de 0 a 1023. Dividir el valor en 10,23 representa el valor como un porcentaje.
        • El porcentaje se redondea al 0,1 más cercano.
      5. Se suspende durante 500 ms.
  4. Compile la aplicación. Si usa la CLI de .NET, ejecute dotnet build. Para compilar en Visual Studio, presione Ctrl+Shift+B.

  5. Despliegue la aplicación en el SBC como una aplicación autónoma. Para obtener instrucciones, consulte Deploy .NET apps to Raspberry Pi. Asegúrese de conceder al ejecutable permiso de ejecución mediante .

  6. Ejecute la aplicación en Raspberry Pi cambiando al directorio de implementación y ejecutando el ejecutable.

    ./AdcTutorial
    

    Observe la salida a medida que gira la esfera del potenciómetro. Esto se debe al potenciómetro variando el voltaje suministrado a CH0 en el ADC. El ADC compara el voltaje de entrada en CH0 con el voltaje de referencia suministrado a VREF para generar un valor.

  7. Para finalizar el programa, presione CtrlC.

¡Felicidades! Ha usado SPI para leer valores de un convertidor analógico a digital.

Obtención del código fuente

El origen de este tutorial es disponible en GitHub.

Pasos siguientes

Aprenda a usar la entrada y salida de uso general para parpadear un LED