- Ön koşullar
- Devre şeması
- Air Mouse için İşlem Akışı
- Arduino'nun Air Mouse için Programlanması
- Python Sürücü Betiği
- Arduino Air Mouse'u Test Etme
Dünyamızın sürükleyici gerçekliğe doğru nasıl ilerlediğini hiç merak ettiniz. Sanal gerçeklik, karma gerçeklik, artırılmış gerçeklik vb. Kullanarak çevremizle etkileşim kurmanın yeni yollarını ve yöntemlerini sürekli olarak buluyoruz. Yeni etkileşimli teknolojileriyle bizi etkilemek için bu hızlı ilerleme teknolojileriyle her gün yeni cihazlar çıkıyor.
Bu sürükleyici teknolojiler oyunlarda, etkileşimli etkinliklerde, eğlencede ve diğer birçok uygulamada kullanılır. Bu eğitici yazıda, sıkıcı bir fare kullanmak yerine sisteminizle etkileşime girmenin yeni bir yolunu sunan bu tür etkileşimli bir yöntemi öğreneceğiz. Oyun meraklılarımız, birkaç yıl önce bir oyun şirketinin Nintendo'nun, Wii denetleyicisi olarak bilinen bir el kumandası yardımıyla konsollarıyla etkileşime girmek için 3 boyutlu etkileşimli bir yöntem fikri sattığını bilmelidir. Bir oyun için hareketlerinizi bulmak ve onu sisteme kablosuz olarak göndermek için ivmeölçeri kullanır. Bu teknoloji hakkında daha fazla bilgi edinmek istiyorsanız EP1854518B1 patentlerine göz atabilirsiniz, bu size bu teknolojinin nasıl çalıştığına dair tam bir fikir verecektir.
Bu fikirden esinlenerek , sadece konsolu havada hareket ettirerek sistemlerle etkileşim kurmak için bir "Hava faresi" yapacağız, ancak 3 boyutlu koordinat referansları kullanmak yerine, sadece 2 boyutlu koordinat referansları kullanacağız. fare X ve Y olmak üzere iki boyutta çalıştığı için bilgisayar faresinin hareketlerini taklit edebiliriz.
Bu Kablosuz 3 Boyutlu Air Mouse'un arkasındaki konsept çok basittir, x ve y ekseni boyunca "Air mouse" eylemlerinin ve hareketlerinin ivmesinin değerini elde etmek için bir ivmeölçer kullanacağız ve ardından ivmeölçer, fare imlecini kontrol edeceğiz ve bilgisayarda çalışan python yazılım sürücüleri yardımıyla belirli işlemleri gerçekleştireceğiz.
Ön koşullar
- Arduino Nano (herhangi bir model)
- İvmeölçer ADXL335 Modülü
- Bluetooth HC-05 Modülü
- Basma düğmeleri
- Python Yüklü bilgisayar
Bilgisayara python yükleme hakkında daha fazla bilgi edinmek için Arduino-Python LED Denetimi ile ilgili önceki öğreticiyi izleyin.
Devre şeması
İçin elinizin hareketleri ile bilgisayarınızı kontrol Yani X ve Y ekseni boyunca ivme verir ve Bluetooth modülü sistemine kablosuz sinyali aktarmak için kullanılır tüm sistemi kablosuz yapmak için bir ivme gerekiyor.
Burada bir ADXL335 ivmeölçer kullanılır, bu, ivmeyi X, Y ve Z ekseni boyunca çıkaran MEMS tabanlı üç eksenli bir modüldür, ancak daha önce fareyi kontrol etmek için söylendiği gibi, yalnızca X ve Y ekseni boyunca ivmeye ihtiyaç duyarız.. Önceki projelerimizde Arduino ile ADXL335 ivmeölçeri kullanma hakkında daha fazla bilgi edinin:
- GPS, GSM ve İvme Ölçer kullanan Arduino Tabanlı Araç Kaza Uyarı Sistemi
- Arduino ve İvme Ölçer kullanarak Ping Pong Oyunu
- Arduino ile İvme Ölçer Tabanlı El Hareketi Kontrollü Robot
- Arduino kullanarak Deprem Dedektörü Alarmı
Burada xout ve yout pim ivme Arduino Analog A0 ve A1 pimleri ve sistem için Arduino sinyallerin iletilmesi için bağlanır HC-05 Bluetooth modülü, Bluetooth Tx ve Rx üzerinden çalışır, çünkü burada kullanılan pin bağlantıları, bu nedenle yazılım seri pinleri D2 ve D3 kullanıyoruz. Yazılım seri kullanılarak bağlanır, çünkü Bluetooth'u donanım serisine bağlarsak ve okumaları python konsolu üzerinden almaya başlarsak, Bluetooth python ile kendi baud hızında iletişim kuracağından uyumsuz baud hızı için hatalar gösterecektir. Arduino dahil olmak üzere farklı mikrodenetleyicileri kullanarak çeşitli Bluetooth tabanlı projelerden geçerek Bluetooth modülünü kullanma hakkında daha fazla bilgi edinin.
Burada üç basma düğmesi kullandık - biri Air mouse'u tetiklemek için, diğeri sol ve sağ tıklama için aşağıdaki resimde gösterildiği gibi:
Air Mouse için İşlem Akışı
Akış şeması, Arduino tabanlı Air Mouse'un işlem akışını gösterir:
1. Sistem sürekli olarak mekanik tetiğe basılıncaya kadar basılmasını kontrol eder. Bilgisayar faresi ile normal şekilde çalışabiliriz.
2. Sistem düğmeye basıldığını algıladığında, farenin kontrolü hava faresine aktarılır.
3. Tetik düğmesine basıldığında, sistem farenin okumalarını bilgisayara aktarmaya başlar. Sistem okuması, ivmeölçer okumalarından ve sol ve sağ tıklama okumalarından oluşur.
4. Sistem okumaları, ilk üç bitin X koordinatlarından oluştuğu, ikinci üç bitin Y koordinatlarından oluştuğu 1 bayt veya 8 bitlik veri akışından oluşur; Farenin sol tıklama durumu ve son bit, sağ tıklama durumunu almak için durum bitidir.
5. İlk üç bitin değeri, yani X koordinatı 100 <= Xcord <= 999 aralığında olabilirken, Y koordinatının değeri 100 <= Ycord <= 800 aralığında olabilir. Sağ tıklama ve sol tıklama değerleri, 0 veya 1 olan ikili değerlerdir; burada 1, tıklamanın yapıldığını ve 0 tıklamanın kullanıcı tarafından yapılmadığını gösterir.
6. Düğmenin zıplamasının imlecin konumunu etkilemesine izin vermemek için, farenin tetik düğmesine her tıklandıktan sonra 4 saniyelik bilinen bir gecikme tutulur.
7. Hava faresinde sağ ve sol tıklama için, önce sol veya sağ butona basmalıyız ve bundan sonra, hava faresinin istediğimiz pozisyonuna hareket etmek için tetik butonuna basmalıyız.
Arduino'nun Air Mouse için Programlanması
Arduino, X ve Y eksenindeki hızlanma değerlerini okuyacak şekilde programlanmalıdır. Programın tamamı sonunda verilmiştir, aşağıda koddan önemli parçacıklar verilmiştir.
Global değişkenleri ayarlama
Daha önce söylediğimiz gibi, Bluetooth modülünü yazılım seri pinleriyle bağlayacağız. Bu nedenle, yazılım serisini ayarlamak için yazılımın seri kitaplığını beyan etmemiz ve Tx ve Rx için pinleri ayarlamamız gerekir. Arduino Nano ve Uno'da Pin 2 ve 3 yazılım serisi olarak çalışabilir. Daha sonra, Tx ve Rx için pin ayarlamak için yazılım seri kitaplığından Bluetooth nesnesini açıklıyoruz.
#Dahil etmek
Geçersiz kurulum ()
In kurulum fonksiyonu, biz onlar giriş veya çıkış olarak hareket edip programı anlatmak için değişkenleri ayarlamak için gidiyoruz. Tetik düğmesi, giriş çekme olarak ayarlanacak ve sol ve sağ tıklamalar giriş olarak bildirilecek ve giriş darbeleri olarak davranmalarını sağlamak için Yüksek olarak ayarlanacaktır.
Ayrıca seri ve Bluetooth iletişimi için baud hızını 9600 olarak ayarlayın.
geçersiz kurulum () { pinMode (x, INPUT); pinMode (y, GİRİŞ); pinMode (tetikleyici, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, INPUT); pinMode (led, OUTPUT); digitalWrite (lclick, HIGH); digitalWrite (rclick, YÜKSEK); Serial.begin (9600); bluetooth.begin (9600); }
Boş döngü ()
Sisteme veri akışını ne zaman göndermemiz gerektiğini söylemek için tetik düğmesine ihtiyacımız olacağından, tüm kodu while döngüsünün içinde kurarız, bu da yukarı doğru çekildiğinde tetikleyicinin dijital durumunu sürekli olarak izler. işleme için daha ileri aktarın.
Bize tetik tuşuna basıldığında için sistemin durumunu bildirmek için bir LED ekli gibi, başlangıçta dışında düşük seviyesine yol açtı set ederken içeride 's varsayılan durumuna ve en yüksek olarak döngü sırasında edecek döngü LED yanar tetik düğmesine her basıldığında.
To sol ve sağ tıklama durumunu okumak düğmesi global ilan ettiler iki değişken lclick ve rclick , değerleri başlangıçta 0 kuruldu.
Ve döngüde , düğmelere basılı olup olmadığını kontrol etmek için sol ve sağ tıklama düğmesinin dijital durumuna göre bu değişkenlerin değerini ayarlayın.
AnalogRead işlevini kullanarak ivmeölçerin X ve Y pinlerinin değerlerini okuyacak ve bu değerleri ekran boyutuna eşleyerek fare işaretçisinin tüm ekran boyunca hareket etmesini sağlayacağız. Ekran boyutu ekrandaki pikseller olduğu için, buna göre ayarlamamız gerekiyor ve çıktı değerinin üç basamaklı olması gerektiğinden, X için aralığı kasıtlı olarak 100 <= X <= 999 ve benzer şekilde Y için 100 <= Y <= 800 olarak değer. Unutmayın, pikseller sol üst köşeden okunur, yani sol üst köşe (0,0) değerine sahiptir, ancak x ve y için üç basamak beyan ettiğimiz için değerlerimiz (100,100) noktasından okunur.
Ayrıca, değerleri seri monitörde ve sisteminiz üzerinden Bluetooth üzerinden almanıza yardımcı olan Seri.print ve bluetooth.print fonksiyonları yardımıyla koordinatların değerini ve tıklama durumunu seri ve Bluetooth üzerinden yazdırın .
Sonunda, bir düğmenin zıplaması nedeniyle tek bir değer tekrarlanabilir ve bu da bir fare imlecinin tek bir konum üzerinde kalmasına neden olur, bu yüzden bundan kurtulmak için bu gecikmeyi eklememiz gerekir.
boşluk döngüsü () { digitalWrite (led, LOW); while (digitalRead (trigger) == LOW) { digitalWrite (led, HIGH); lstate = digitalRead (lclick); rstate = digitalRead (rclick); xh = analogRead (x); yh = analogRead (y); xcord = harita (xh, 286,429,100,999); ycord = harita (yh, 282,427,100,800); Serial.print (xcord); Serial.print (ycord); eğer (lstate == LOW) Serial.print (1); başka Seri.baskı (0); eğer (rstate == LOW) Serial.print (1); başka Seri.baskı (0); bluetooth.print (xcord); bluetooth.print (ycord); eğer (lstate == DÜŞÜK) bluetooth.print (1); Başka bluetooth.print (0); eğer (rstate == DÜŞÜK) bluetooth.print (1); başka bluetooth.print (0); gecikme (4000); }}
Python Sürücü Betiği
Şu an itibariyle, donanım ve aygıt yazılımı kısmını tamamladık, şimdi hava faresini çalıştırmak için hava faresinden gelen sinyalleri imleç hareketlerine dönüştürebilecek bir sürücü betiğine ihtiyacımız var, bu yüzden bunun için seçtik Python. Python bir komut dosyası dilidir ve burada komut dosyası yazarak, burada fare imlecini kontrol ettiğimiz gibi, diğer programın kontrolünü ele geçirmemize yardımcı olduğunu kastediyoruz.
Bu yüzden python kabuğunuzu açın ve aşağıdaki komutları kullanarak aşağıdaki kitaplıkları yükleyin:
pip seri pip kurulum pyautogui
Seri böyle com portlar olarak seri arabirimler veri elde etmemizi sağlar ve ayrıca oysa bize manipüle sağlayan piton için bir kütüphane pyautogui piton, bu durumda, fareyi GUI özellikler üzerinde kontrol elde etmek için kütüphanesidir.
Şimdi sürücüler için koda gelelim, yapmamız gereken ilk şey seri ve pyautogui kitaplıklarını içe aktarmak ve ardından seri kitaplıktan 9600 baud hızı ile iletişim için com portunu ayarlamamız gerekiyor, Bluetooth ile aynı. seri çalışıyor. Bunun için Bluetooth modülünü sisteminize bağlamanız ve ardından sistem ayarlarında hangi com portuna bağlı olduğunu kontrol etmeniz gerekir.
Bir sonraki şey, Bluetooth'tan sisteme olan seri iletişimi okumak ve sürekli devam etmesini sağlamak, while 1 yardımıyla kodun geri kalanını sürekli bir döngüde tutmaktır.
Daha önce söylendiği gibi Arduino, koordinatlar için ilk 6 ve tıklama düğmelerinin durumu için son ikisi olmak üzere 8 bit gönderiyor. Bu yüzden ser.read yardımıyla tüm bitleri okuyun ve uzunluğunu 8 bit olarak ayarlayın.
Ardından, imleç koordinatları ve tıklamaları için bitleri dilimleyerek bölün ve ardından imleç bitlerini ayrı ayrı X ve Y koordinatlarına bölün. Aynı şey sol ve sağ tıklama için de geçerli.
Şimdi iletişimden bir bayt dizesi alıyoruz ve koordinatlara sığabilmeleri için onu bir tam sayıya dönüştürmemiz gerekiyor, bunu kod çözerek ve sonra onları tamsayılara yazarak yapıyoruz.
Şimdi pyautogui kullanmak imleci hareket ettirmek için MoveTo bağımsız değişkenleri olarak bu tamsayı koordinatları alır ve bu konuma imleci hareket işlevini.
Daha sonra tıklamaları kontrol edin, bunu son iki biti ve pyautogui'nin tıklama fonksiyonunu kullanarak yapıyoruz, varsayılan tıklama sol bir, ancak düğme değerini sağa bildirerek sağa ayarlayabiliriz, ayrıca tıklama sayısını da tanımlayabiliriz. click parametresini 2 olarak ayarlayarak bunu çift tıklamaya ayarlayın.
Aşağıda bilgisayarda çalıştırılacak tam Python kodu verilmiştir:
import serial import pyautogui ser = serial.Serial ('com3', 9600) while 1: k = ser.read (8) cursor = k click = k x = cursor y = cursor l = click r = click xcor = int (x.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor, ycor) eğer l == 49 ise: pyautogui.click (clicks = 2) elif r = = 49: pyautogui.click (düğme = 'sağ', tıklamalar = 2)
Arduino Air Mouse'u Test Etme
Bu yüzden Air Mouse'u çalıştırmak için ona bir güç kaynağı takın. Arduino Nano USB yuvasından veya 7805 IC kullanan 5v regüle güç kaynağından olabilir. Ardından, Bluetooth'unuzun bağlı olduğu com bağlantı noktasını ayarlayarak python sürücü komut dosyasını çalıştırın. Komut dosyası çalışırken, Bluetooth'un yanıp sönmesinde bir gecikme görürsünüz, bu da sisteminize bağlı olduğu anlamına gelir. Daha sonra çalıştırmak için tetik düğmesine tıklayın ve koordinatların konumunun değiştiğini ve sol veya sağ tıklamayı istiyorsanız, ardından önce sol veya sağ buton ve tetik butonuna birlikte basın, klik hareketini göreceksiniz. imlecin değişen konumu.
Aşağıdaki ayrıntılı çalışma videosunu kontrol edin.