Lire les valeurs d’un convertisseur analogique-numérique
Un convertisseur analogique-numérique (ADC, Analog-to-Digital Converter) est un appareil qui peut lire une valeur de tension d’entrée analogique et la convertir en une valeur numérique. Les ADC sont utilisés pour lire des valeurs auprès de thermistors, de potentiomètres et d’autres appareils dont la résistance change en fonction de certaines conditions.
Dans cette rubrique, vous allez utiliser .NET pour lire les valeurs d’un ADC quand vous modulez la tension d’entrée avec un potentiomètre.
Prérequis
- Ordinateur à carte unique (SBC) ARM (ARMv7 ou version supérieure)
- 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)
- Kit de développement logiciel (SDK) .NET version 7 ou ultérieure
Notes
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éparez le 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 commande raspi-config
. Pour plus d’informations sur raspi-config
, reportez-vous à la documentation sur Raspberry Pi.
Préparer le matériel
Utilisez les composants matériels pour générer le circuit, comme illustré dans le diagramme suivant :
Le MCP3008 utilise SPI (Serial Peripheral Interface) pour communiquer. Voici les connexions du MCP3008 au Raspberry Pi et au potentiomètre :
- VDD à 3.3V (indiqué en rouge)
- VREF à 3.3V (rouge)
- AGND à la terre (noir)
- CLK à SCLK (orange)
- DOUT à MISO (orange)
- DOUT à MOSI (orange)
- CS/SHDN à 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’a pas d’importance.
Si nécessaire, reportez-vous aux diagrammes de brochage suivant :
MCP3008 | Raspberry Pi GPIO |
---|---|
Image avec la permission de Raspberry Pi Foundation. |
Conseil
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é :
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
Ajoutez le package Iot.Device.Bindings au projet. Utilisez l’interface CLI .NET du répertoire du projet ou Visual Studio.
dotnet add package Iot.Device.Bindings --version 2.2.0-*
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 deSpiConnectionSettings
. Le constructeur définit le paramètrebusId
sur 0 et le paramètrechipSelectLine
sur 0. - Une déclaration using crée une instance d’appel de
SpiDevice
en appelantSpiDevice.Create
et en transférant àhardwareSpiSettings
. CeSpiDevice
représente le bus SPI. La déclarationusing
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 deMcp3008
et passe leSpiDevice
dans le constructeur. - Une boucle
while
s’exécute indéfiniment. Chaque itération :- Efface la console.
- Lit la valeur de CH0 sur l’ADC en appelant
mcp.Read(0)
. - Écrit la valeur brute dans la console.
- Écrit la valeur sur 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 1 024 valeurs possibles, comprises entre 0 et 1 023. La division de la valeur par 10,23 représente la valeur sous forme de pourcentage.
- Le pourcentage est arrondi au 0,1 le plus proche.
- Est mis en veille pendant 500 ms.
-
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.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 exécuter à l’aide de
chmod +x
.Exécutez l’application sur le Raspberry Pi en basculant vers le répertoire de déploiement et en exécutant l’exécutable.
./AdcTutorial
Observez la sortie quand vous faites pivoter le bouton du potentiomètre. Ceci est dû au potentiomètre qui fait varier 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.
Terminez le programme en appuyant sur Ctrl+C.
Félicitations ! Vous avez utilisé SPI pour lire des valeurs auprès d’un convertisseur analogique-numérique.
Obtenir le code source
La source de ce tutoriel est disponible sur GitHub.