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

Analog-dijital 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 ritmatörlerden, potansiyometrelerden ve diğer cihazlardan değerleri okumak için kullanılır.

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

Önkoşullar

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

Not

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'i destekleyen 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 potansiyometresi olan devreyi gösteren bir Arızalı diyagram

MCP3008, iletişim kurmak için Seri Çevre Birimi Arabirimi'ni (SPI) kullanır. Aşağıda, MCP3008 ile Raspberry Pi ve potentiometer arasındaki bağlantılar yer almaktadır:

  • VDD - 3,3V (kırmızıyla gösterilir)
  • VREF - 3,3V (kırmızı)
  • AGND'den yere (siyah)
  • CLK-SCLK (turuncu)
  • DOUT to MISO (turuncu)
  • DIN to MOSI (turuncu)
  • CS/SHDN-CE0 (yeşil)
  • DGND'den yere (siyah)
  • Potansiyometre üzerinde CH0-değişken (orta) pini (sarı)

Potansiyometre üzerindeki dış raptiyelere 3.3V ve zemin sağlayın. Düzen önemli değil.

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

MCP3008 Raspberry Pi GPIO
MCP3008'in pinout'unu gösteren diyagram Raspberry Pi GPIO üst bilgisinin sabitlemesini gösteren diyagram. Görüntü, Raspberry Pi Foundation'ın izniyle.
Görüntü, Raspberry Pi Foundation'ın izniyle.

İpucu

GPIO üst bilgisine bağlantıları kolaylaştırmak için bir içerik panosuyla birlikte GPIO tartışma panosu önerilir.

Uygulama 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 veya Visual Studio'dan.NET CLI kullanın.

    dotnet add package Iot.Device.Bindings --version 2.2.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);
    }
    

    Yukarıdaki kodda:

    • hardwareSpiSettings yeni bir örneğine SpiConnectionSettingsayarlanır. Oluşturucu parametresini busId 0, parametresini chipSelectLine 0 olarak ayarlar.
    • Using bildirimi çağrısı SpiDevice.Create yaparak ve geçirerek hardwareSpiSettingsbir örneğini SpiDevice oluşturur. Bu SpiDevice , SPI veri yolunu temsil eder. Bildirimi, using nesnenin atılmasını ve donanım kaynaklarının düzgün bir şekilde serbest bırakılmasını sağlar.
    • Başka bir using bildirim, öğesinin bir örneğini Mcp3008 oluşturur ve oluşturucuya geçirir SpiDevice .
    • 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ş konsola yazar.
        • Yüzdeyi hesaplamak için değer 10,23'e bölünür. MCP3008, 10 bitlik bir 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 en yakın 0,1'e yuvarlanır.
      5. 500 ms uyuyor.
  4. Uygulamayı oluşturun. .NET CLI kullanıyorsanız komutunu çalıştırın dotnet build. Visual Studio'da derlemek için Ctrl+ ShiftBtuş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. kullanarak chmod +xyü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, ADC'de CH0'a sağlanan voltajın değişen potansiyometre olmasıdır. 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! Analog-dijital dönüştürücüden değerleri okumak için SPI kullandınız.

Kaynak kodunu alma

Bu öğreticinin kaynağı GitHub'da kullanılabilir.

Sonraki adımlar