Partager via


Lire des valeurs à partir d’un convertisseur analogique à numérique

Un convertisseur analogique à numérique (ADC) est un appareil capable de lire une valeur de tension d’entrée analogique et de la convertir en valeur numérique. Les ADC sont utilisés pour lire les valeurs des thermistors, des potentiomètres et d’autres appareils qui changent la résistance en fonction de certaines conditions.

Dans cette rubrique, vous allez utiliser .NET pour lire les valeurs d’un ADC lorsque vous modulez la tension d’entrée avec un potentiomètre.

Conditions préalables

  • Ordinateur monocarte (SBC) basé sur ARM (ARMv7 ou supérieur)
  • convertisseur analogique à numérique MCP3008
  • Potentiomètre à trois broches
  • Platine d’expérimentation
  • Câbles de liaison
  • Carte d’évaluation GPIO Raspberry Pi (facultative/recommandée)
  • SDK .NET 8 ou version ultérieure

Remarque

Ce tutoriel est écrit en supposant que l’appareil cible est Raspberry Pi. Toutefois, ce tutoriel peut être utilisé pour n’importe quel SBC linux qui prend en charge .NET, comme Orange Pi, ODROID, etc.

Préparer le fichier SBC

Vérifiez que votre SBC est configuré pour prendre en charge les services suivants :

  • SSH
  • SPI

Pour de nombreux appareils, aucune configuration supplémentaire n’est requise. Pour Raspberry Pi, utilisez la raspi-config commande. Pour plus d’informations sur raspi-config, reportez-vous à la documentation Raspberry Pi.

Préparer le matériel

Utilisez les composants matériels pour générer le circuit comme illustré dans le diagramme suivant :

Diagramme Fritzing montrant un circuit avec un MCP3008 ADC et un potentiomètre

Le MCP3008 utilise l’interface spi (Serial Peripheral Interface) pour communiquer. Voici les connexions de l’MCP3008 au Raspberry Pi et au potentiomètre :

  • VDD à 3.3V (indiqué en rouge)
  • V REF à 3.3V (rouge)
  • AGND à la terre (noir)
  • CLK vers SCLK (orange)
  • DOUT à MISO (orange)
  • DOUT à MOSI (orange)
  • CS/SHDN vers CE0 (vert)
  • DGND à la terre (noir)
  • Broche CH0 à variable (milieu) sur le potentiomètre (jaune)

Fournissez du courant à 3,3V et mettez à la terrer les broches externes sur le potentiomètre. L’ordre n’est pas important.

Si nécessaire, reportez-vous aux diagrammes de brochage suivant :

MCP3008 Raspberry Pi GPIO
Diagramme montrant le brochage du MCP3008 Diagramme montrant le raccordement de l’en-tête GPIO Raspberry Pi. Image avec la permission de Raspberry Pi Foundation.
Image courtesy Raspberry Pi Foundation.

Conseil / Astuce

Un circuit imprimé GPIO conjointement avec un tableau de navigation est recommandé pour simplifier les connexions à la tête du GPIO.

Créer l’application

Effectuez les étapes suivantes dans votre environnement de développement préféré :

  1. Créez une application console .NET à l’aide de l’interface CLI .NET ou de Visual Studio. Nommez-le AdcTutorial.

    dotnet new console -o AdcTutorial
    cd AdcTutorial
    
  2. Ajoutez le package Iot.Device.Bindings au projet. Utilisez l’interface CLI .NET à partir du répertoire du projet ou de Visual Studio.

    dotnet add package Iot.Device.Bindings --version 3.2.0-*
    
  3. Remplacez le contenu du fichier Program.cs par le code suivant :

    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);
    }
    

    Dans le code précédent :

    • hardwareSpiSettings est défini sur une nouvelle instance de SpiConnectionSettings. Le constructeur définit le busId paramètre sur 0 et le chipSelectLine paramètre sur 0.
    • Une déclaration using crée une instance de SpiDevice en appelant SpiDevice.Create et en transmettant hardwareSpiSettings. Cela SpiDevice représente le bus SPI. La using déclaration garantit que l’objet est supprimé et que les ressources matérielles sont correctement libérées.
    • Une autre déclaration using crée une instance de Mcp3008 et passe le SpiDevice dans le constructeur.
    • Une while boucle s’exécute indéfiniment. Chaque itération :
      1. Efface la console.
      2. Lit la valeur de CH0 sur l’ADC en appelant mcp.Read(0).
      3. Écrit la valeur brute dans la console.
      4. Écrit la valeur dans la console sous forme de pourcentage.
        • Pour calculer le pourcentage, la valeur est divisée par 10,23. Le MCP3008 est un ADC 10 bits, ce qui signifie qu’il retourne 1024 valeurs possibles comprises entre 0 et 1023. La division de la valeur par 10,23 représente la valeur sous la forme d’un pourcentage.
        • Le pourcentage est arrondi au 0,1 le plus proche.
      5. Est mis en veille pendant 500 ms.
  4. Générez l'application. Si vous utilisez l’interface CLI .NET, exécutez dotnet build. Pour générer dans Visual Studio, appuyez sur Ctrl+Maj+B.

  5. Déployez l’application sur le SBC en tant qu’application autonome. Pour obtenir des instructions, consultez Déployer des applications .NET sur Raspberry Pi. Veillez à accorder à l’exécutable l’autorisation d’exécution en utilisant chmod +x.

  6. Exécutez l’application sur Raspberry Pi en basculant vers le répertoire de déploiement et en exécutant l’exécutable.

    ./AdcTutorial
    

    Observez la sortie au fur et à mesure que vous faites pivoter le dial de potentiomètre. Cela est dû au potentiomètre qui varie la tension fournie à CH0 sur l’ADC. L’ADC compare la tension d’entrée sur CH0 à la tension de référence fournie à VREF pour générer une valeur.

  7. Terminez le programme en appuyant sur Ctrl+C.

Félicitations! Vous avez utilisé SPI pour lire des valeurs à partir d’un convertisseur analogique à numérique.

Obtenir le code source

La source de ce didacticiel est disponible sur GitHub.

Étapes suivantes