Bagikan melalui


Membaca nilai dari konverter analog-ke-digital

Konverter analog-ke-digital (ADC) adalah perangkat yang dapat membaca nilai tegangan input analog dan mengonversinya menjadi nilai digital. ADC digunakan untuk membaca nilai dari termistor, potentiometer, dan perangkat lain yang mengubah ketahanan berdasarkan kondisi tertentu.

Dalam topik ini, Anda akan menggunakan .NET untuk membaca nilai dari ADC saat Memodulasi tegangan input dengan potentiometer.

Prasyarat

  • Komputer papan tunggal berbasis ARM (ARMv7 atau lebih besar) (SBC)
  • MCP3008 konverter analog-ke-digital
  • Potensiometer tiga pin
  • Breadboard
  • Kabel jumper
  • Papan ekstensi GPIO Raspberry Pi (opsional/dianjurkan)
  • .NET SDK versi 10 atau lebih baru

Nota

Tutorial ini ditulis dengan asumsi perangkat target adalah Raspberry Pi. Namun, tutorial ini dapat digunakan untuk SBC berbasis Linux apa pun yang mendukung .NET, seperti Orange Pi, ODROID, dan banyak lagi.

Menyiapkan SBC

Pastikan SBC Anda dikonfigurasi untuk mendukung layanan berikut:

  • SSH
  • SPI

Untuk banyak perangkat, tidak diperlukan konfigurasi tambahan. Untuk Raspberry Pi, gunakan raspi-config perintah . Untuk informasi selengkapnya tentang raspi-config, lihat dokumentasi Raspberry Pi.

Menyiapkan perangkat keras

Gunakan komponen perangkat keras untuk membangun sirkuit seperti yang digambarkan dalam diagram berikut:

Diagram Fritzing memperlihatkan sirkuit dengan MCP3008 ADC dan potentiometer

MCP3008 menggunakan Serial Peripheral Interface (SPI) untuk berkomunikasi. Berikut ini adalah koneksi dari MCP3008 ke Raspberry Pi dan potentiometer:

  • VDD ke 3.3V (ditampilkan dalam warna merah)
  • V REF ke 3.3V (merah)
  • AGND ke tanah (hitam)
  • CLK ke SCLK (oranye)
  • DOUT ke MISO (oranye)
  • DIN ke MOSI (oranye)
  • CS/SHDN ke CE0 (hijau)
  • DGND ke tanah (hitam)
  • CH0 ke pin tengah (variabel) pada potensiometer (kuning)

Sambungkan 3,3V dan ground ke pin luar pada potentiometer. Urutan tidak penting.

Silakan merujuk pada diagram pinout berikut sesuai kebutuhan:

MCP3008 Raspberry Pi GPIO
Diagram yang memperlihatkan pinout MCP3008 Diagram yang menunjukkan pinout header Raspberry Pi GPIO. Gambar atas izin Raspberry Pi Foundation.
Gambar milik Raspberry Pi Foundation.

Petunjuk / Saran

Papan breakout GPIO direkomendasikan untuk digunakan bersama dengan breadboard guna menyederhanakan koneksi ke header GPIO.

Membuat aplikasi

Selesaikan langkah-langkah berikut di lingkungan pengembangan pilihan Anda:

  1. Buat Aplikasi Konsol .NET baru menggunakan .NET CLI atau Visual Studio. Beri nama AdcTutorial.

    dotnet new console -o AdcTutorial
    cd AdcTutorial
    
  2. Tambahkan paket Iot.Device.Bindings ke proyek. Gunakan .NET CLI dari direktori proyek atau Visual Studio.

    dotnet package add Iot.Device.Bindings --version 4.1.0
    
  3. Ganti konten Program.cs dengan kode berikut:

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

    Dalam kode sebelumnya:

    • hardwareSpiSettings diatur ke instans baru SpiConnectionSettings. Konstruktor mengatur busId parameter ke 0 dan chipSelectLine parameter ke 0.
    • Deklarasi using membuat instans SpiDevice dengan memanggil SpiDevice.Create dan meneruskan hardwareSpiSettings. Ini SpiDevice mewakili bus SPI. Deklarasi using memastikan objek dihapus dan sumber daya perangkat keras dilepas secara tepat.
    • Deklarasi lain using membuat instans Mcp3008 dan meneruskan SpiDevice ke konstruktor.
    • Perulangan while berjalan tanpa batas waktu. Setiap perulangan:
      1. Menghapus konsol.
      2. Membaca nilai CH0 pada ADC dengan memanggil mcp.Read(0).
      3. Menulis nilai mentah ke konsol.
      4. Menulis nilai ke konsol yang diformat sebagai persentase.
        • Untuk menghitung persentase, nilai dibagi 10,23. MCP3008 adalah ADC 10-bit, yang berarti mengembalikan nilai 1024 yang mungkin berkisar 0-1023. Membagi nilai dengan 10,23 mewakili nilai sebagai persentase.
        • Persentase dibulatkan ke 0,1 terdekat.
      5. Menunggu selama 500 ms.
  4. Buat aplikasi. Jika menggunakan CLI .NET, jalankan dotnet build. Untuk membangun di Visual Studio, tekan Ctrl+Shift+B.

  5. Sebarkan aplikasi ke SBC sebagai aplikasi mandiri. Untuk petunjuknya, lihat aplikasi Deploy .NET ke Raspberry Pi. Pastikan untuk memberikan izin eksekusi menggunakan chmod +x.

  6. Jalankan aplikasi pada Raspberry Pi dengan beralih ke direktori penyebaran dan jalankan executable.

    ./AdcTutorial
    

    Amati output saat Anda memutar kenop potentiometer. Hal ini disebabkan oleh variasi tegangan yang disuplai ke CH0 pada ADC oleh potentiometer. ADC membandingkan tegangan input pada CH0 dengan tegangan referensi yang disediakan ke VREF untuk menghasilkan nilai.

  7. Hentikan program dengan menekan Ctrl+C.

Selamat! Anda telah menggunakan SPI untuk membaca nilai dari konverter analog-ke-digital.

Dapatkan kode sumber

Sumber untuk tutorial ini tersedia pada GitHub.

Langkah berikutnya