Aracılığıyla paylaş


Analogdan dijitale dönüştürücüden değerleri okuma

Analogdan dijitale dönüştürücü (ADC), analog giriş voltajı değerini okuyabilen ve dijital değere dönüştürebilen bir cihazdır. ADC'ler, belirli koşullara göre direnci değiştiren termistörler, potansiyometreler ve diğer cihazlardan gelen değerleri okumak için kullanılır.

Bu konu başlığında, giriş gerilimini bir potansiyometre ile modüle ettikçe ADC'den değerleri okumak için .NET kullanacaksınız.

Önkoşullar

  • ARM tabanlı (ARMv7 veya üzeri) tek kartlı bilgisayar (SBC)
  • analogdan dijitale dönüştürücü MCP3008
  • Üç pinli potansiyometre
  • Devre tahtası
  • Jumper telleri
  • Raspberry Pi GPIO tartışma panosu (isteğe bağlı/önerilen)
  • .NET SDK 10 veya üzeri

Uyarı

Bu öğretici, hedef cihazın Raspberry Pi olduğu varsayılarak yazılmıştır. Ancak bu öğretici Orange Pi, ODROID ve daha fazlası gibi .NET destekleyen tüm Linux tabanlı SBC'ler için kullanılabilir.

SBC'yi hazırlama

SBC'nizin aşağıdaki hizmetleri destekleyecek şekilde yapılandırıldığından emin olun:

  • SSH
  • SPI

Birçok cihaz için ek yapılandırma gerekmez. Raspberry Pi için komutunu kullanın raspi-config . hakkında raspi-configdaha fazla bilgi için Raspberry Pi belgelerine bakın.

Donanımı hazırlama

Aşağıdaki diyagramda gösterildiği gibi bağlantı hattını oluşturmak için donanım bileşenlerini kullanın:

MCP3008 ADC ve bir potansiyometre içeren devreyi gösteren bir Fritzing diyagramı

MCP3008, iletişim kurmak için Seri Çevre Birimi Arabirimi 'ni (SPI) kullanır. MCP3008'den Raspberry Pi ve potansiyometreye bağlantılar şunlardır:

  • V DD-3,3V (kırmızı ile gösterilir)
  • VREF - 3,3V (kırmızı)
  • AGND to toprak (siyah)
  • CLK'den SCLK'ye (turuncu renk)
  • DOUT to MISO (turuncu)
  • DIN MOSI'ye (turuncu)
  • CS/SHDN'den CE0'ye (yeşil)
  • DGND şaseye (siyah)
  • Potansiyometrenin değişken (orta) pinine CH0 bağlanır (sarı)

Potansiyometre üzerindeki dış uçlara 3.3V ve toprak sağlayın. Düzen önemsizdir.

Gerektiğinde aşağıdaki sabitleme diyagramlarına bakın:

MCP3008 Raspberry Pi GPIO
MCP3008 sabitlemesini gösteren diyagram Raspberry Pi GPIO başlığı pin yerleşimini gösteren diyagram. Görüntü, Raspberry Pi Foundation'ın izniyle.
Görüntü, Raspberry Pi Foundation'ın izniyle.

Tavsiye

GPIO üst bilgisine bağlantıları kolaylaştırmak için bir breadboard ile birlikte bir GPIO kapsam kartı önerilir.

Uygulamayı oluşturma

Tercih ettiğiniz geliştirme ortamında aşağıdaki adımları tamamlayın:

  1. .NET CLI veya Visual Studio kullanarak yeni bir .NET Konsol Uygulaması oluşturun. AdcTutorial olarak adlandır.

    dotnet new console -o AdcTutorial
    cd AdcTutorial
    
  2. Iot.Device.Bindings paketini projeye ekleyin. Proje dizininden .NET CLI veya Visual Studio kullanın.

    dotnet package add Iot.Device.Bindings --version 4.1.0
    
  3. Program.cs dosyasının içeriğini aşağıdaki kodla değiştirin:

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

    Önceki kodda:

    • hardwareSpiSettings yeni bir SpiConnectionSettings örneğine ayarlanır. Oluşturucu parametresini busId 0, parametresini chipSelectLine 0 olarak ayarlar.
    • Using bildirimi, SpiDevice.Create işlevini çağırarak ve hardwareSpiSettings ileterek bir SpiDevice örneği oluşturur. Bu SpiDevice , SPI veri yolunu temsil eder. using bildirimi, nesnenin atılmasını ve donanım kaynaklarının düzgün şekilde serbest bırakılmasını sağlar.
    • Başka bir using bildirimi, Mcp3008'in bir örneğini oluşturur ve SpiDevice'yi yapıcıya geçirir.
    • Döngü while süresiz olarak çalışır. Her yineleme:
      1. Konsolu temizler.
      2. çağrısı mcp.Read(0)yaparak ADC'de CH0 değerini okur.
      3. Ham değeri konsola yazar.
      4. Değeri yüzde olarak biçimlendirilmiş şekilde konsola yazar.
        • Yüzdeyi hesaplamak için değer 10,23'e bölünür. MCP3008 10 bit ADC'dir ve bu da 0-1023 arasında 1024 olası değer döndürdüğü anlamına gelir. Değeri 10,23'e bölmek, değeri yüzde olarak temsil eder.
        • Yüzde oranı en yakın 0,1'e yuvarlanmıştır.
      5. 500 ms uyuyor.
  4. Uygulamayı oluşturun. .NET CLI kullanıyorsanız dotnet build çalıştırın. Visual Studio oluşturmak için Ctrl+Shift+B tuşlarına basın.

  5. Uygulamayı SBC'ye bağımsız bir uygulama olarak dağıtın. Yönergeler için bkz. Raspberry Pi'ye .NET uygulamaları dağıtma. chmod +x kullanarak yürütülebilir yürütme izni verdiğinizden emin olun.

  6. Raspberry Pi'de uygulamayı çalıştırmak için dağıtım dizinine geçin ve yürütülebilir dosyayı çalıştırın.

    ./AdcTutorial
    

    Potansiyometre kadranını döndürürken çıkışı gözlemleyin. Bunun nedeni, potansiyometrenin ADC'deki CH0'e sağlanan voltajı değiştirmesidir. ADC, CH0 üzerindeki giriş voltajını bir değer oluşturmak için VREF'ye sağlanan referans voltajı ile karşılaştırır.

  7. Ctrl+C tuşlarına basarak programı sonlandırın.

Tebrikler! Analogdan dijitale dönüştürücüden değerleri okumak için SPI kullandınız.

Kaynak kodu alma

Bu öğreticinin kaynağı GitHub üzerinde mevcuttur.

Sonraki adımlar