- Ön koşullar:
- Projenin arkasındaki konsept:
- Devre şeması:
- Arduino'nuzu programlama:
- Python'unuzu programlama:
- Hareket Kontrollü Bilgisayar İş Başında:
Son zamanlarda Hareketle kontrol edilen dizüstü bilgisayarlar veya bilgisayarlar çok ünlü hale geliyor. Bu tekniğe Sıçrama hareketi adı verilir ve bu, bilgisayarımızdaki / Dizüstü bilgisayarımızdaki belirli işlevleri sadece elimizi önünde sallayarak kontrol etmemizi sağlar. Bunu yapmak çok güzel ve eğlenceli, ancak bu dizüstü bilgisayarlar gerçekten çok yüksek fiyatlı. Öyleyse bu projede Arduino ve Python'un Gücünü birleştirerek kendi Hareketle kontrol Dizüstü / Bilgisayarımızı oluşturmayı deneyelim.
Elimizin konumunu belirlemek ve konuma bağlı olarak bir medya oynatıcıyı (VLC) kontrol etmek için iki Ultrasonik sensör kullanacağız. Bunu gösteri için kullandım, ancak projeyi anladıktan sonra, sadece birkaç satır kodu değiştirerek ve en sevdiğiniz uygulamayı en sevdiğiniz şekilde kontrol ederek her şeyi yapabilirsiniz.
Ön koşullar:
Arduino'yu Python ile birleştiren birkaç projeyi halihazırda ele aldık. Dolayısıyla, Python'u ve onun seri kitaplığını zaten yüklediğinizi ve yanıp sönen LED gibi birkaç temel projeyi başarıyla denediğinizi varsayıyorum. Değilse, endişelenmeyin, bu Arduino-Python Led Kontrol eğitimine geri dönebilir ve bununla başa çıkabilirsiniz. Bu yüzden devam etmeden önce Python ve pyserial kitaplığını kurduğunuzdan emin olun.
Projenin arkasındaki konsept:
Projenin arkasındaki konsept çok basit. Monitörümüzün üstüne iki Ultrasonik (US) sensör yerleştireceğiz ve Arduino kullanarak monitör ile elimiz arasındaki mesafeyi okuyacağız, bu mesafe değerine bağlı olarak belirli eylemleri gerçekleştireceğiz. Bilgisayarımızda eylemler gerçekleştirmek için Python pyautogui kitaplığını kullanıyoruz. Arduino'dan gelen komutlar bilgisayara seri port (USB) üzerinden gönderilir. Bu veriler daha sonra bilgisayarda çalışan python tarafından okunacak ve okunan verilere dayanarak bir eylem gerçekleştirilecektir.
Devre şeması:
To El Hareketleri ile PC kontrolü, sadece Arduino ile iki Ultrasonik sensörler bağlayın. ABD sensörünün 5V ile çalıştığını ve dolayısıyla Arduino'nun yerleşik Voltaj regülatörü tarafından çalıştırıldığını biliyoruz. Arduino, modülü çalıştırmak ve ayrıca Seri iletişim için PC / Dizüstü bilgisayara bağlanabilir. Bağlantılar tamamlandıktan sonra bunları aşağıda gösterildiği gibi monitörünüze yerleştirin. Bunu monitörüme yapıştırmak için çift taraflı bant kullandım ama kendi yaratıcılığınızı kullanabilirsiniz. Bir yere sabitledikten sonra Programlamaya devam edebiliriz.
Arduino'nuzu programlama:
Arduino, elin ABD sensöründen mesafesini okuyacak şekilde programlanmalıdır. Programın tamamı bu sayfanın sonunda verilmiştir; hemen aşağıda programın açıklamasını verdim. Ultrasonik sensörde yeniyseniz, Arduino ve Ultrasonik Sensör Tabanlı Mesafe Ölçümünden geçmeniz yeterlidir.
Mesafenin değerini okuyarak jestlerle kontrol edilecek belirli eylemlere ulaşabiliriz, örneğin bu programda demo olarak 5 eylem programladım.
Eylem 1: Her iki el de sensörün önünde belirli bir uzak mesafeye yerleştirildiğinde, VLC oynatıcısındaki videonun Oynatılması / Duraklatılması gerekir.
Eylem 2: Sağ el sensörün önüne belirli bir uzak mesafeden yerleştirildiğinde, video bir adım İleri Sarmalıdır.
Eylem 3: Sol el sensörün önünde belirli bir uzak mesafeye yerleştirildiğinde, video bir adım geri gitmelidir.
Eylem 4: Sağ el sensörün önüne belirli bir yakın mesafeden yerleştirildiğinde ve ardından sensöre doğru hareket ettirilirse video ileri sarılmalıdır ve eğer uzaklaştırılırsa video Geri Sarılmalıdır.
Eylem 5: Sol el sensörün önüne belirli bir yakın mesafeye yerleştirildiğinde ve ardından sensöre doğru hareket ettirildiğinde videonun sesi artmalı ve uzaklaştırılırsa ses azalmalıdır.
Yukarıdaki eylemleri gerçekleştirmek için programın nasıl yazıldığını görelim. Bu nedenle, tüm programlar gibi, aşağıda gösterildiği gibi I / O pinlerini tanımlayarak başlıyoruz. İki ABD sensörü, Dijital pim 2,3,4 ve 5'e bağlanır ve + 5V pini ile çalışır. Tetik pimleri çıkış pini ve Yankı pimleri giriş pimleridir.
Arduino ve python arasındaki seri iletişim, 9600 baud hızında gerçekleşir.
const int trigger1 = 2; // 1. Sesnor const echo1 = 3'ün tetik pini // 1. Sesnor const int trigger2 = 4'ün yankı pini; // 2. Sesnor sabitinin tetik pini int echo2 = 5; // 2. Sesnor void kurulumunun yankı pini () {Serial.begin (9600); pinMode (trigger1, OUTPUT); pinMode (echo1, INPUT); pinMode (trigger2, OUTPUT); pinMode (echo2, INPUT); }
Herhangi bir eylemi sonuçlandırmadan önce her seferinde Sensör ile el arasındaki mesafeyi hesaplamamız gerekir. Yani bunu birçok kez yapmalıyız, bu da bu kodun bir işlev olarak kullanılması gerektiği anlamına gelir. Hesaplama_distance () adında bize sensör ile el arasındaki mesafeyi döndürecek bir fonksiyon yazdık.
/ * ### Mesafeyi hesaplama işlevi ### * / void calculate_distance (int tetik, int echo) {digitalWrite (trigger, LOW); gecikme Mikrosaniye (2); digitalWrite (tetikleyici, YÜKSEK); gecikme Mikrosaniye (10); digitalWrite (tetikleyici, DÜŞÜK); time_taken = pulseIn (eko, YÜKSEK); dist = alınan zaman * 0,034 / 2; eğer (dist> 50) dist = 50; }
Bizim ana İçinde döngü biz mesafenin değeri denetlemek ve eylemler gerçekleştirmek yukarıda bahsedilen. Bundan önce, mevcut mesafe değeriyle güncellenen iki değişken distL ve distR kullanıyoruz.
hesapla_distance (trigger1, echo1); distL = dist; // sol sensörün mesafesini al calculate_distance (trigger2, echo2); distR = dist; // doğru sensörün mesafesini öğrenin
Her iki sensör arasındaki mesafeyi bildiğimiz için, şimdi onu önceden tanımlanmış değerlerle karşılaştırabilir ve belirli eylemlere ulaşabiliriz. Örneğin, her iki el de 40 mc mesafeye yerleştirilmişse videoyu oynatır / duraklatırız. Burada "Oynat / Duraklat" kelimesi seri port üzerinden gönderilecektir.
if ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // Her iki eli de algıla {Serial.println ("Oynat / Duraklat"); gecikme (500);}
Yalnızca Sağ el modülün önüne yerleştirilirse videoyu bir adım ileri alırız ve sol el ise bir adım geri sararız. Eyleme bağlı olarak, burada "Geri Sar" veya "İleri" kelimesi seri bağlantı noktası aracılığıyla gönderilecektir
if ((distL> 40 && distL <50) && (distR == 50)) // Sol Eli Algıla {Serial.println ("Geri Sar"); gecikme (500);} if ((distR> 40 && distR <50) && (distL == 50)) // Sağ El Algıla {Serial.println ("İleri"); gecikme (500);}
Hatalı tetikleyicileri önlemek için hacim ve parça üzerinde ayrıntılı kontrol sağlamak için farklı bir yöntem kullanıyoruz. Sesi kontrol etmek için sol eli yakl. 15 cm mesafeden, sesi artırmak için sensörden uzaklaştırma hacmini azaltmak için sensöre doğru hareket ettirebilirsiniz. Aynı kod aşağıda gösterilmiştir. Eyleme bağlı olarak, burada "Vup" veya "Vdown" kelimesi seri port üzerinden gönderilecektir.
// Sola Kilitle - Kontrol Modu if (distL> = 13 && distL <= 17) {delay (100); // El Tutma Süresi calculate_distance (trigger1, echo1); distL = dist; eğer (distL> = 13 && distL <= 17) {Serial.println ("Sol Kilitli"); while (distL <= 40) {calculate_distance (trigger1, echo1); distL = dist; if (distL <10) // El {Serial.println ("Vup") içinde itildi; delay (300);} if (distL> 20) // El çıkardı {Serial.println ("Vdown"); gecikme (300);}}}}
Sağ taraf sensörü için aynı yöntemi videonun izini kontrol etmek için de kullanabiliriz. Yani, sağ eli sensöre doğru hareket ettirirsek, filmi hızlı ileri alır ve sensörden uzaklaştırırsanız filmi geri sarar. Eyleme bağlı olarak, burada "Geri Sar" veya "İleri" kelimesi seri bağlantı noktası üzerinden gönderilecektir
Artık sayfanın sonunda verilen bu hareket kontrollü PC için kodun tamamını okuyabilir ve bir bütün olarak anlamayı deneyebilir ve ardından Arduino IDE'nize kopyalayabilirsiniz.
Python'unuzu programlama:
Bu proje için python programı çok basit. Doğru baud hızı üzerinden Arduino ile bir seri iletişim kurmalı ve ardından bazı temel klavye eylemlerini gerçekleştirmeliyiz. Python ile ilk adım, p yautogui modülünü kurmak olacaktır. Bu adımı uyguladığınızdan emin olun çünkü program pyautogui modülü olmadan çalışmayacaktır.
Windows için pyautogui modülünün kurulması:
Windows için pyautogui'yi kurmak için aşağıdaki adımları izleyin. Diğer platformları kullanıyorsanız, adımlar da aşağı yukarı benzer olacaktır. Bilgisayarınızın / Dizüstü bilgisayarınızın internete bağlı olduğundan emin olun ve aşağıdaki adımlarla devam edin
Adım 1: Windows Komut istemini açın ve dizini python'u kurduğunuz klasöre değiştirin. Varsayılan olarak komut şöyle olmalıdır
cd C: \ Python27
Adım 2: python dizininizin içinde pip'inizi yükseltmek için python –m pip install –upgrade pip komutunu kullanın. Pip, python modüllerini kolayca kurmamıza yardımcı olan bir python aracıdır. Bu modül yükseltildikten sonra (aşağıdaki resimde gösterildiği gibi) bir sonraki adıma geçin.
python –m pip kurulumu – yükseltme pip
Adım 3: pyautogui modülünü kurmak için “ python –m pip install pyautogui ” komutunu kullanın. İşlem başarılı olduktan sonra, buna benzer bir ekran görmelisiniz.
python –m pip kurulumu – yükseltme pip
Artık pyautogui modülü ve pyserial modülü (önceki eğitimde kurulu) python ile başarılı bir şekilde yüklendiğine göre, python programına geçebiliriz. Tam piton kod öğretici sonunda verilir ancak aşağıdaki gibi aynı için açıklama.
Bu proje için gerekli üç modülü de içe aktaralım. Bunlar pyautogui, seri python ve zamandır.
seri içe aktar # Seri iletişim için içe aktarılmış seri içe aktarma süresi # Gecikme işlevlerini kullanmak için gerekli içe aktarma pyautogui
Daha sonra COM portu üzerinden Arduino ile bağlantı kuruyoruz. Bilgisayarımda Arduino COM 18'e bağlı. Arduino'nuzun hangi COM portuna bağlı olduğunu bulmak için cihaz yöneticisini kullanın ve aşağıdaki satırı buna göre düzeltin.
ArduinoSerial = serial.Serial ('com18', 9600) # ArduinoSerialData zaman.sleep (2) adında Seri port nesnesi oluştur
Sonsuz while döngüsünün içinde, COM portunu tekrar tekrar dinleriz ve anahtar kelimeleri önceden tanımlanmış çalışmalarla karşılaştırır ve buna göre klavye presleri yaparız.
while 1: gelen = str (ArduinoSerial.readline ()) # seri veriyi okur ve gelen 'Oynat / Duraklat' ise satır yazdırma gelen olarak yazdırır: pyautogui.typewrite (, 0.2) gelen 'Geri Sar' ise: pyautogui. kısayol tuşu ('ctrl', 'sol') gelen 'İleri' ise: pyautogui.hotkey ('ctrl', 'sağ') gelen 'Vup' ise: pyautogui.hotkey ('ctrl', 'aşağı') eğer ' Vdown 'incoming: pyautogui.hotkey (' ctrl ',' up ')
Gördüğünüz gibi, bir tuşa basmak için, tuş boşluğuna 0.2 saniye basacak olan “pyautogui.typewrite (, 0.2)” komutunu kullanmamız yeterlidir. Ctrl + S gibi kısayol tuşlarına ihtiyacınız varsa, “pyautogui.hotkey ('ctrl', 's')” kısayol tuş komutunu kullanabilirsiniz .
Bu kombinasyonları kullandım çünkü VLC media player üzerinde çalışıyorlar, bunları bilgisayardaki herhangi bir şeyi hareketlerle kontrol etmek için kendi uygulamalarınızı oluşturmak için istediğiniz şekilde değiştirebilirsiniz.
Hareket Kontrollü Bilgisayar İş Başında:
Bağlantıları yukarıda tanımlandığı gibi yapın ve Arduino kodunu Arduino kartınıza yükleyin. Ardından aşağıdaki python komut dosyasını kullanın ve programı dizüstü bilgisayarınızda / bilgisayarınızda başlatın.
Artık bilgisayarınızda VLC medya oynatıcısını kullanarak herhangi bir filmi oynatabilir ve aşağıda verilen videoda gösterildiği gibi filmi kontrol etmek için elinizi kullanabilirsiniz.
Umarım projeyi anladınız ve onunla oynamaktan zevk almışsınızdır. Bu sadece bir demo ve bunun etrafında çok daha havalı jest kontrollü şeyler oluşturmak için yaratıcılığınızı kullanabilirsiniz. Bunun yararlı olup olmadığını ve bunu kullanarak ne yaratacağınızı bana bildirin, bunu bilmekten memnuniyet duyarım.