Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 :
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 |
---|---|
![]() |
![]() 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é :
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 à partir du répertoire du projet ou de Visual Studio.
dotnet add package Iot.Device.Bindings --version 3.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 lebusId
paramètre sur 0 et lechipSelectLine
paramètre sur 0.- Une déclaration using crée une instance de
SpiDevice
en appelantSpiDevice.Create
et en transmettanthardwareSpiSettings
. CelaSpiDevice
représente le bus SPI. Lausing
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 deMcp3008
et passe leSpiDevice
dans le constructeur. - Une
while
boucle 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 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.
- 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 d’exécution en utilisant
chmod +x
.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.
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.