Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Un convertitore analogico-digitale (ADC) è un dispositivo che può leggere un valore di tensione di input analogico e convertirlo in un valore digitale. I convertitori analogico-digitali (ADC) vengono utilizzati per la lettura di valori da termostratori, potenziometri e altri dispositivi che modificano la resistenza in base a determinate condizioni.
In questo argomento si userà .NET per leggere i valori da un ADC mentre si modula la tensione di input con un potentiometro.
Prerequisiti
- Computer basato su ARM (ARMv7 o versione successiva) a scheda singola (SBC)
- MCP3008 convertitore analogico-digitale
- Potentiometro a tre pin
- Basetta sperimentale
- Cavi del ponticello
- Scheda di interfaccia Raspberry Pi GPIO (facoltativa/consigliata)
- .NET SDK 10 o versione successiva
Nota
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 comando . Per altre informazioni su , vedere la documentazione di Raspberry Pi.
Preparare l'hardware
Usare i componenti hardware per compilare il circuito come illustrato nel diagramma seguente:
Diagramma di Fritzing che mostra un circuito con un MCP3008 ADC e un potentiometro
Il MCP3008 usa l'interfaccia SPI (Serial Peripheral Interface) per comunicare. Di seguito sono riportate le connessioni dalla MCP3008 al potentiore Raspberry Pi:
- VDD a 3.3V (mostrato in rosso)
- VREF a 3.3V (rosso)
- AGND a terra (nero)
- Da CLK a SCLK (arancione)
- Da DOUT a MISO (arancione)
- DIN a MOSI (arancione)
- da CS/SHDN a CE0 (colore verde)
- DGND a terra (nero)
- Collegare CH0 al pin variabile (centrale) del potenziometro (giallo)
Fornire 3,3 V e massa ai pin esterni sul potenziometro. L'ordine non è importante.
Consultare i diagrammi di pinout seguenti, se necessario:
| MCP3008 | Raspberry Pi GPIO |
|---|---|
| Diagramma che mostra il pinout del MCP3008 | Immagine per gentile concessione della Raspberry Pi Foundation. Diagramma che mostra il pinout del connettore GPIO del Raspberry Pi.
Immagine per gentile concessione Raspberry Pi Foundation. |
Suggerimento
Per semplificare le connessioni all'intestazione GPIO, è consigliabile usare una scheda breakout GPIO insieme a una breadboard.
Creare l'app
Completare i passaggi seguenti nell'ambiente di sviluppo preferito:
Creare una nuova applicazione console .NET utilizzando il .NET CLI o Visual Studio. Denominarlo AdcTutorial.
dotnet new console -o AdcTutorial cd AdcTutorialAggiungere il pacchetto Iot.Device.Bindings al progetto. Usare .NET CLI dalla directory del progetto o Visual Studio.
dotnet package add Iot.Device.Bindings --version 4.1.0Sostituire 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:
- Viene impostato su una nuova istanza di . Il costruttore imposta il parametro su 0 e il parametro su 0.
- Una dichiarazione using crea un'istanza di un oggetto chiamando una funzione e passando i parametri necessari. Rappresenta il bus SPI. La dichiarazione garantisce che l'oggetto venga eliminato e che le risorse hardware vengano rilasciate correttamente.
- Un'altra dichiarazione crea un'istanza di e passa l'oggetto nel costruttore.
- Un ciclo viene eseguito per un periodo illimitato. Ogni iterazione:
- Cancella il contenuto della console.
- Legge il valore di CH0 nell'ADC chiamando .
- Scrive il valore grezzo nella console.
- Scrive il valore nella console formattandolo come percentuale.
- Per calcolare la percentuale, il valore viene diviso per 10,23. Il MCP3008 è un ADC a 10 bit, ovvero restituisce 1024 valori possibili compresi tra 0 e 1023. Dividendo il valore per 10,23 rappresenta il valore come percentuale.
- La percentuale viene arrotondata al valore 0,1 più vicino.
- Attende 500 millisecondi.
Compilazione dell'app. Se si usa l'interfaccia della riga di comando di .NET, eseguire
dotnet build. Per eseguire la compilazione in Visual Studio, premere Ctrl+Shift+B.Distribuire l'app nel SBC come app autonoma. Per istruzioni, vedere Deploy .NET apps to Raspberry Pi. Assicurarsi di concedere all'eseguibile l'autorizzazione di esecuzione usando .
Eseguire l'app in Raspberry Pi passando alla directory di distribuzione ed eseguendo il file eseguibile.
./AdcTutorialOsserva l'output mentre si ruota il quadrante del potenziometro. Ciò è dovuto al potentiometro che varia la tensione fornita a CH0 sull'ADC. L'ADC confronta la tensione di input su CH0 con la tensione di riferimento fornita a VREF per generare un valore.
Terminare il programma premendo CTRLC.
Felicitazioni! È stato usato SPI per leggere i valori da un convertitore analogico a digitale.
Ottenere il codice sorgente
La sorgente di questo tutorial è disponibile su GitHub.
Passaggi successivi
Impara a utilizzare l'input/output di uso generico per far lampeggiare un LED