Eğitim
Öğrenme yolu
Yapay zeka uç mühendisi - Training
Bu öğrenme yolu, öğrencilere Azure hizmetlerini kullanarak uçta yapay zeka dağıtmayı açıklamayı amaçlar.
Bu tarayıcı artık desteklenmiyor.
En son özelliklerden, güvenlik güncelleştirmelerinden ve teknik destekten faydalanmak için Microsoft Edge’e yükseltin.
Genel amaçlı G/Ç (GPIO) pinleri, elektrik sinyallerini giriş olarak alacak şekilde yapılandırılabilir. En temel düzeyde bu, bir bağlantı hattının açılmasını/kapatılmasını algılayan senaryolar için yararlıdır. Bu tür devreler, bir bağlantı hattını tamamlayarak ikili (açık/kapalı) değerleri temsil eden basmalı düğmeler, geçiş anahtarları, reed anahtarları, basınç anahtarları ve diğer cihazları içerebilir.
Bu öğreticide bir bağlantı hattının açılıp kapatılmasını algılamak için .NET ve Raspberry Pi'nizin GPIO pinlerini kullanacaksınız.
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.
Cihazınızda SSH'nin etkinleştirildiğinden emin olun. Raspberry Pi için Raspberry Pi belgelerinde SSH Sunucusu Ayarlama bölümüne bakın.
Aşağıdaki diyagramda gösterildiği gibi bağlantı hattını oluşturmak için donanım bileşenlerini kullanın:
Yukarıdaki görüntüde yer raptiyesi ile pin 21 arasındaki doğrudan bağlantı yer almaktadır.
İpucu
Diyagramda görsel amaçlarla bir breadboard ve GPIO tartışması gösterilmiştir, ancak Raspberry Pi'ye bir zemin raptiyesi bağlayıp 21'i jumper kablosuyla sabitlemek için çekinmeyin.
Gerektiğinde aşağıdaki sabitleme diyagramına bakın:
Görüntü, Raspberry Pi Foundation'ın izniyle.
Tercih ettiğiniz geliştirme ortamında aşağıdaki adımları tamamlayın:
.NET CLI veya Visual Studio kullanarak yeni bir .NET Konsol Uygulaması oluşturun. Buna InputTutorial adını verin.
dotnet new console -o InputTutorial
cd InputTutorial
Projeye System.Device.Gpio paketini ekleyin. Proje dizininden veya Visual Studio'dan.NET CLI kullanın.
dotnet add package System.Device.Gpio --version 2.2.0-*
Program.cs dosyasının içeriğini aşağıdaki kodla değiştirin:
using System.Device.Gpio;
using System.Threading.Tasks;
const int Pin = 21;
const string Alert = "ALERT 🚨";
const string Ready = "READY ✅";
using var controller = new GpioController();
controller.OpenPin(Pin, PinMode.InputPullUp);
Console.WriteLine(
$"Initial status ({DateTime.Now}): {(controller.Read(Pin) == PinValue.High ? Alert : Ready)}");
controller.RegisterCallbackForPinValueChangedEvent(
Pin,
PinEventTypes.Falling | PinEventTypes.Rising,
OnPinEvent);
await Task.Delay(Timeout.Infinite);
static void OnPinEvent(object sender, PinValueChangedEventArgs args)
{
Console.WriteLine(
$"({DateTime.Now}) {(args.ChangeType is PinEventTypes.Rising ? Alert : Ready)}");
}
Yukarıdaki kodda:
GpioController
oluşturur. Bildirimi, using
nesnenin atılmasını ve donanım kaynaklarının düzgün bir şekilde serbest bırakılmasını sağlar.
GpioController
, hangi donanım platformunda çalıştığını algılaması ve mantıksal pin numaralandırma düzenini kullanması gerektiğini belirten hiçbir parametre olmadan örneği oluşturulur.PinMode.InputPullUp
açılır.
PinValue.Low
. Raptiyenin yerden bağlantısı kesildiğinde ve bağlantı hattı açık olduğunda, pin döndürür PinValue.High
.Read()
okunur. ise PinValue.High
, dizeyi Alert
konsola yazar. Aksi takdirde dizesini Ready
yazar.RegisterCallbackForPinValueChangedEvent()
pin üzerindeki ve PinEventTypes.Rising
PinEventTypes.Falling
olayları için bir geri çağırma işlevi kaydeder. Bu olaylar sırasıyla ve PinValue.Low
sabitleme durumlarına PinValue.High
karşılık gelir.OnPinEvent()
bir yöntemi gösterir.
OnPinEvent()
, karşılık gelen Alert
veya Ready
dizelerini de yazan başka bir üçüncül ifade kullanır.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.
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 +x
yürütülebilir yürütme izni verdiğinizden emin olun.
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.
./InputTutorial
Konsol aşağıdakine benzer bir metin görüntüler:
Initial status (05/10/2022 15:59:25): READY ✅
Pin 21'i yerden çıkarın. Konsol aşağıdakine benzer bir metin görüntüler:
(05/10/2022 15:59:59) ALERT 🚨
Pin 21'i ve zemini yeniden bağlayın. Konsol aşağıdakine benzer bir metin görüntüler:
(05/10/2022 16:00:25) READY ✅
Ctrl+C tuşlarına basarak programı sonlandırın.
Tebrikler! NuGet paketini kullanarak System.Device.Gpio
girişi algılamak için GPIO kullandınız! Bu tür girişler için birçok kullanım vardır. Bu örnek, bir anahtarın bağlantı hattına bağlandığı veya devreyi kırdığı herhangi bir senaryoyla kullanılabilir. Burada, genellikle açık kapıları veya pencereleri algılamak için kullanılan manyetik reed anahtarıyla kullanılan bir örnek verilmiştir.
Önceki örnek kavramı biraz daha genişleterek bunun lazer tripwire oluşturmak için nasıl uygulanabileceğine göz atalım. Lazer tripwire oluşturmak için aşağıdaki ek bileşenler gerekir:
Not
Lazer alıcı algılayıcı modülü , birçok internet perakendecisinde bulunan ortak bir modüle uygulanan genel addır. Cihaz ad veya üretici olarak değişebilir, ancak bu görüntüye benzemelidir.
Aşağıdaki diyagramda ayrıntılı olarak açıklandığı gibi bileşenleri bağlayın.
10.000 Ω dirençlere çok dikkat edin. Bunlar bir voltaj bölücü uygular. Bunun nedeni lazer alıcı modülünün ışının kırıldığını göstermek için 5V çıkışını vermeleridir. Raspberry Pi, GPIO girişi için yalnızca 3,3V'ye kadar destekler. Pine tam 5V göndermek Raspberry Pi'ye zarar verebileceğinden, alıcı modülünden gelen akım, voltajı 2,5V'ye yarıya indirecek bir voltaj bölücüden geçirilir.
Bir özel durum dışında , neredeyse öncekiyle aynı kodu kullanabilirsiniz. Diğer örneklerde, raptiyenin yerden bağlantısı kesildiğinde ve bağlantı hattı açık olduğunda pin döndürülmesi PinValue.High
için kullandıkPinMode.InputPullUp
.
Ancak lazer alıcı modülü söz konusu olduğunda açık devre algılamuyoruz. Bunun yerine, pinin lazer alıcı modülünden gelen akım için bir havuz gibi davranmasını istiyoruz. Bu durumda raptiyeyi ile PinMode.InputPullDown
açacağız. Bu şekilde pin, hiç akım almadığında ve PinValue.High
lazer alıcı modülünden akım aldığında geri dönerPinValue.Low
.
controller.OpenPin(pin, PinMode.InputPullDown);
Önemli
Raspberry Pi'nizde dağıtılan kodun lazer tripwire'ını test etmeden önce bu değişikliği içerdiğinden emin olun. Program onsuz çalışır, ancak yanlış giriş modunu kullanmak Raspberry Pi'nize zarar verme riski taşır!
Bu öğreticinin kaynağı GitHub'da kullanılabilir.
.NET geri bildirimi
.NET, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin:
Eğitim
Öğrenme yolu
Yapay zeka uç mühendisi - Training
Bu öğrenme yolu, öğrencilere Azure hizmetlerini kullanarak uçta yapay zeka dağıtmayı açıklamayı amaçlar.