Leggere i valori da un convertitore da analogico a digitale
Articolo
Un convertitore analogico-digitale (ADC) è un dispositivo in grado di leggere un valore di tensione di input analogico e convertirlo in un valore digitale. Le schede adc vengono usate per leggere i valori dallermistor, dai potentiometri e da altri dispositivi che cambiano resistenza in base a determinate condizioni.
In questo argomento si userà .NET per leggere i valori da un ADC durante la modularità della tensione di input con un potentiometro.
Prerequisiti
Computer a scheda singola basato su ARM (ARMv7 o versione successiva)
Questa esercitazione viene scritta presupponendo che il dispositivo di destinazione sia Raspberry Pi. Tuttavia, questa esercitazione può essere usata per qualsiasi SBC basato su Linux che supporta .NET, ad esempio Orange Pi, ODROID e altro ancora.
Preparare il SBC
Verificare che il SBC sia configurato per supportare i servizi seguenti:
SSH
SPI
Per molti dispositivi non è necessaria alcuna configurazione aggiuntiva. Per Raspberry Pi, usare il raspi-config comando . Per altre informazioni su raspi-config, vedere la documentazione di Raspberry Pi.
Preparare l'hardware
Usare i componenti hardware per compilare il circuito come illustrato nel diagramma seguente:
MCP3008 usa l'interfaccia SPI (Serial Peripheral Interface) per comunicare. Di seguito sono riportate le connessioni da MCP3008 a Raspberry Pi e potentiometro:
Da V DD a 3.3V (mostrato in rosso)
V REF a 3.3V (rosso)
AGND a terra (nero)
Da CLK a SCLK (arancione)
DOUT to MISO (arancione)
Da DIN a MOSI (arancione)
DA CS/SHDN a CE0 (verde)
DA DGND a terra (nero)
Da CH0 a variabile (centrale) sul potentiometro (giallo)
Fornire 3.3V e terra ai pin esterni sul potentiometro. L'ordine non è importante.
Fare riferimento ai diagrammi di pinout seguenti in base alle esigenze:
Per semplificare le connessioni all'intestazione GPIO, è consigliabile usare una scheda di interruzione GPIO in combinazione con una barra di esplorazione.
Creare l'app
Completare i passaggi seguenti nell'ambiente di sviluppo preferito:
Creare una nuova app console .NET usando l'interfaccia della riga di comando di .NET o Visual Studio. Denominarlo AdcTutorial.
Sostituire il contenuto di Program.cs con il codice seguente:
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);
}
Nel codice precedente:
hardwareSpiSettings è impostato su una nuova istanza di SpiConnectionSettings. Il costruttore imposta il busId parametro su 0 e il chipSelectLine parametro su 0.
Una dichiarazione using crea un'istanza di SpiDevice chiamando SpiDevice.Create e passando hardwareSpiSettings. Rappresenta SpiDevice il bus SPI. La using dichiarazione garantisce che l'oggetto venga eliminato e che le risorse hardware vengano rilasciate correttamente.
Un'altra using dichiarazione crea un'istanza di Mcp3008 e passa l'oggetto SpiDevice nel costruttore .
Un while ciclo viene eseguito per un periodo illimitato. Ogni iterazione:
Cancella la console.
Legge il valore di CH0 in ADC chiamando mcp.Read(0).
Scrive il valore non elaborato nella console.
Scrive il valore nella console formattato come percentuale.
Per calcolare la percentuale, il valore viene diviso per 10,23. MCP3008 è un ADC a 10 bit, ovvero restituisce 1024 valori possibili compresi tra 0 e 1023. La divisione del valore per 10,23 rappresenta il valore come percentuale.
La percentuale viene arrotondata allo 0,1 più vicino.
Dorme 500 ms.
Compilare l'app. Se si usa l'interfaccia della riga di comando di .NET, eseguire dotnet build. Per compilare in Visual Studio, premere CTRL+MAIUSC+B.
Distribuire l'app in SBC come app autonoma. Per istruzioni, vedere Distribuire app .NET in Raspberry Pi. Assicurarsi di concedere all'eseguibile l'autorizzazione di esecuzione usando chmod +x.
Eseguire l'app in Raspberry Pi passando alla directory di distribuzione ed eseguendo il file eseguibile.
./AdcTutorial
Osservare l'output durante la rotazione del quadrante del potentiometro. Ciò è dovuto al potentiometro che varia la tensione fornita a CH0 sul ADC. AdC confronta la tensione di input su CH0 con la tensione di riferimento fornita a VREF per generare un valore.
Terminare il programma premendo CTRL+C.
Congratulazioni! È stato usato SPI per leggere i valori da un convertitore analogico a digitale.
L'origine di questo contenuto è disponibile in GitHub, in cui è anche possibile creare ed esaminare i problemi e le richieste pull. Per ulteriori informazioni, vedere la guida per i collaboratori.
Feedback su .NET
.NET è un progetto di open source. Selezionare un collegamento per fornire feedback:
Questo percorso di apprendimento ha lo scopo di spiegare agli studenti come distribuire intelligenza artificiale nei dispositivi perimetrali usando servizi di Azure.