İçindekiler:
- Adım 1: Karıştırma Yöntemi » Yok
- Adım 2: Yöntem Yöntemi » Döndür
- Adım 3: Yöntem Yöntemi » Basit
- Adım 4: Yöntem Yöntemi » Orantılı
Video: Kanal Karıştırmayı Anlama: 4 Adım (Resimlerle)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:20
Daha önce uzaktan kumandalı bir şasi kullandıysanız, bilmeseniz bile karıştırmayı kullanmış olma ihtimaliniz yüksektir. Spesifik olarak, skid direksiyon veya diferansiyel direksiyon kullanan bir aracı kontrol etmek için tek bir joystick veya yalpa kullandıysanız, karıştırmayı kullanmışsınızdır.
Karıştırma, kasanın her iki tarafına ne kadar güç sağlanması gerektiğini belirlemek için joystick'inizden gelen verilerin nasıl kullanıldığıdır.
Bir joystick'i açarsanız, genellikle içinde iki potansiyometre görürsünüz. Biri Y ekseni (yukarı ve aşağı) boyunca mevcut konumunuzu ölçmek için, diğeri ise X ekseni boyunca (yan yana) nerede olduğunuzu ölçmek için.
Konuyla ilgili resmi bir eğitimim olmamasına rağmen daha önce kod miksajı yapmak zorunda kaldım ve son zamanlarda konuya biraz daha derine dalmak istedim.
Öncelikle, çoğu RC vericisinin, birçok motor kontrol cihazında olduğu gibi karıştırma özelliğine sahip olduğunu belirtmek isterim. Kodunuzda karıştırma işlemini kendiniz yapmanız gerekiyorsa, bu bilgi en yararlı olacaktır. Örneğin, bir RC alıcısından karıştırılmamış verileri okumak için bir Arduino kullanıyorsanız veya bir joystick'teki kaplardan analog verileri okuyorsanız veya bir mobil uygulamadaki dijital bir joystick'ten koordinatları okuyorsanız, söyleyin.
Bazı farklı karıştırma yaklaşımlarına bir göz atalım.
Adım 1: Karıştırma Yöntemi » Yok
İlk önce, karıştırmayı hiç kullanmazsanız ne olduğuna bir bakalım. Verileri sadece bir eksenden şasinin bir tarafına ve diğer ekseni diğer tarafa gönderirseniz, aracınız istediğiniz şekilde tepki vermez.
Örneğin, joystick'i dümdüz ileri iterseniz, Y ekseni tam gazda ve X ekseni 0'da. Yani düz gitmek yerine daireler çiziyor olacaksınız.
Adım 2: Yöntem Yöntemi » Döndür
Bir iş arkadaşım bir keresinde bana, fakir bir adamın karışımı için vericinizi 45 derece döndürebileceğinizi söylemişti. Bir joystick'teki iki potansiyometreden gelen değerleri bir ızgaradaki x herhangi bir y ekseni olarak düşünürseniz (her iki eksen -100 ila +100 arasında değişir) bu çok mantıklı çünkü her iki eksende de +100'e gidiyorsunuz joystick'i yukarı ve sağa doğru ittiğinizde. Dolayısıyla bu, doğrudan iki şasi kanalınızla (robotunuzun sol ve sağ tarafları) eşleşirse, robotunuzun ilerlemesini sağlar.
Bu yüzden denediğim ilk karıştırma yöntemi, x ve y koordinatlarını ızgaranın merkez noktası etrafında 45 derece matematiksel olarak döndürmek oldu.
Bu işe yarıyor, ancak %100 güçle ilerleyemiyorum çünkü dönerken, genel hareket ızgara içindeki bir daireyle sınırlandırılıyor, bu da o sağ üst köşeye asla gerçekten giremeyeceğiniz anlamına geliyor.
Bu aynı zamanda ızgaranın köşelerinin kullanılmamasına da neden olur. Hareketinizi sınırlayan ve böylece bu alanlara asla ulaşılmayacak şekilde bir joystick/gimple kullanıyorsanız bu bir sorun değildir, ancak aksi takdirde hareketlerinizin tamamen orantılı hissetmesi için ızgaranın o kısmının bir şeyler yapmasını isteyeceksiniz.
Benim gibi görsel bir öğreniciyseniz, bu talimatın başındaki videoyu izleyerek bu kavramı anlamak daha kolay olabilir.
Bazı kod örneklerine bakalım.
KOD ÖRNEKLERİMLE İLGİLİ NOTLAR: joystick_x ve joystick_y değerlerini nasıl alacağınızı projenize göre değişeceği için burada bırakıyorum. Ayrıca ±100 ile eşleştirme/kısıtlama yapacağım ama muhtemelen PWM için 1000 - 2000 veya analog çıkış vb. için 0 - 255 eşleştirmeniz gerekebilir. Her ihtimale karşı her zaman kısıtlarım.
Arduino Örneği:
// matematiksel olarak döndür
çift rad = -45*M_PI/180; int leftThrottle = joystick_x * cos(rad) - joystick_y * sin(rad); int rightThrottle = joystick_y * cos(rad) + joystick_x * sin(rad); //sol kısıtlaTrottle = constrain(leftThrottle, -100, 100); rightThrottle = kısıtlama(sağTrottle, -100, 100);
JavaScript Örneği:
//matematiksel olarak döndürvar rad = -45*Math. PI/180; leftThrottle = joystick_x * Math.cos(rad) - joystick_y * Math.sin(rad); rightThrottle = joystick_y * Math.cos(rad) + joystick_x * Math.sin(rad);//constrainleftThrottle = constrain(leftThrottle, -100, 100);rightThrottle = constrain(rightThrottle, -100, 100); //helper functionvar constrain = function(sayı, min, maks){ return Math.min(Math.maks(sayı, min), maks); };
Adım 3: Yöntem Yöntemi » Basit
Sırada, benim üzerinde çalıştığım projeye çok benzer bir proje üzerinde çalıştığı Shawn Hymel'in Maceraları Bilim SparkFun videolarından birinden aldığım çok basit bir denklemimiz var.
Bu denklem, ileri giderken tam hıza ulaşmanızı sağlar, ancak döndürme yöntemine çok benzer şekilde, ızgaranın köşe alanlarını göz ardı eder. Bunun nedeni, bazı durumlarda maksimumun 100 ve bazı durumlarda maksimumun 200 olmasıdır. Bu nedenle, 100'den sonra herhangi bir şeyi göz ardı etmek için bir kısıtlama işlevi kullanırsınız.
Ve bu arada ben buna basite küçümseyici demiyorum… Sadelikte bir güzellik var.
Arduino Örneği:
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x; //sol kısıtlaTrottle = constrain(leftThrottle, -100, 100); rightThrottle = kısıtlama(sağTrottle, -100, 100);
JavaScript Örneği:
var leftChannel = joystick_y + joystick_x;
var rightChannel = joystick_y - joystick_x;//constrain leftChannel = constrain(leftChannel, -100, 100); rightChannel = kısıtla(rightChannel, -100, 100); //helper functionvar constrain = function(sayı, min, maks){ return Math.min(Math.maks(sayı, min), maks); };
Adım 4: Yöntem Yöntemi » Orantılı
Her iki dünyanın denkleminden de en iyi şekilde yararlanmayı umarak basit yöntemden sıçradım. Buradaki fikir, daha büyük bir mesafe hareket ediyor olsanız da, dikey olarak hareket ettiğinizde olduğu gibi aynı aralığa sahip olmasına rağmen, çapraz olarak bile tüm yönlerde tam orantılı olmaktır, bu daha küçük bir mesafedir.
Örneklerimde tüm yönlerde -200 ila +200 arasında bir ölçek elde edersiniz, bunu ±100 olarak eşliyorum çünkü her kanala giden gücün yüzdesini temsil ediyor - ancak bunu kullanımınızda işe yarayan her şeye eşlemek isteyeceksiniz- Motor kontrol cihazınız için durum. Örneğin, bir PWM sinyali gönderiyorsanız, bunu 1000 ila 2000'e eşleyebilirsiniz veya bir analog sinyal gönderiyorsanız, onu 0-255'e eşleyebilir ve yönü boole vb.
Arduino Örneği:
int leftThrottle = joystick_y + joystick_x;
int rightThrottle = joystick_y - joystick_x;// bazı durumlarda maks 100'dür, bazı durumlarda 200'dür// hadi farkı çarpanlarına alalım, böylece maks her zaman 200int diff = abs(abs(joystick_y) - abs(joystick_x));leftGaz = solGaz < 0 ? leftTrottle - diff: leftThrottle + diff;rightGaz Gazı = sağGaz Gazı < 0 ? sağGaz - fark: sağGaz + fark; // ±200'den ± 100'e kadar harita veya hangi aralıkta iğne yaparsanız yapınGaz Gazı = map(leftThrottle, 0, 200, -100, 100);rightThrottle = map(rightthrottle, 0, 200, -100, 100); //constrainleftThrottle = constrain(leftThrottle, -100, 100);rightThrottle = constrain(rightThrottle, -100, 100);
JavaScript Örneği:
var leftThrottle = joystick_y + joystick_x;var rightThrottle = joystick_y - joystick_x;// bazı durumlarda maksimum 100, bazı durumlarda 200, // farkı çarpanlarına ayıralım, böylece maksimum her zaman 200var diff = Math.abs(Math.abs(joystick_y) - Math.abs(joystick_x));leftThrottle = leftThrottle < 0 ? leftTrottle - diff: leftThrottle + diff;rightGaz Gazı = sağGaz Gazı < 0 ? rightThrottle - diff: rightThrottle + diff;// ±200'den ±100'e veya neye ihtiyacınız olursa olsun harita -100, 100); //constrain leftThrottle = constrain(leftThrottle, -100, 100);rightThrottle = constrain(rightThrottle, -100, 100);//bazı yardımcı işlevlervar constrain = function(num, min, max){ return Math.min(Math. maks(sayı, min), maks); }; var map = function(num, inMin, inMax, outMin, outMax){ var p, inSpan, outSpan, mapped; inMin = inMin + inMax; sayı = sayı + inMax; inMax = inMax + inMax; inSpan = Math.abs(inMax-inMin); p = (sayı/inSpan)*100; outMin = outMin + outMax; outMax = outMax + outMax; outSpan = Math.abs(outMax - outMin); mapped = outSpan*(p/100) - (outMax/2); eşlenen dönüş;};
Önerilen:
3 KANAL SES MİKSERİ FM Radyo Vericisi ile Entegre: 19 Adım (Resimlerle)
3 KANAL SES MİKSERİ FM Radyo Vericisi ile Entegre: Herkese merhaba, bu yazıda bir FM radyo vericisi ile entegre 3 KANAL SES MİKSERİ oluşturmanız için size rehberlik edeceğim
3 Kanal Dijital LED Şerit WS2812 Kontrolör: 9 Adım (Resimlerle)
3 Kanallı Dijital LED Şerit WS2812 Denetleyici: Her zaman birden fazla dijital led şeridi kontrol etmenin ucuz bir yolunu istemişimdir. Bu talimat, bu projeyi tasarlarken ve inşa ederken attığım tüm adımları gösterir
Android Uygulamasını AWS IOT ile Bağlama ve Ses Tanıma API'sini Anlama: 3 Adım
Android Uygulamasını AWS IOT ile Bağlama ve Ses Tanıma API'sini Anlama: Bu eğitim, kullanıcıya Android Uygulamasını AWS IOT sunucusuna nasıl bağlayacağını ve bir Kahve Makinesini kontrol eden ses tanıma API'sini nasıl anladığını öğretir.Uygulama, Kahve Makinesini Alexa aracılığıyla kontrol eder Ses Hizmeti, her Uygulamanın c
Arduino İle 2.4Ghz NRF24L01 Modülünü Kullanan Kablosuz Uzaktan Kumanda - Nrf24l01 Quadcopter için 4 Kanal / 6 Kanal Verici Alıcı - Rc Helikopter - Arduino Kullanan Rc Uçak: 5 Adım (Resimlerle)
Arduino İle 2.4Ghz NRF24L01 Modülünü Kullanan Kablosuz Uzaktan Kumanda | Nrf24l01 Quadcopter için 4 Kanal / 6 Kanal Verici Alıcı | Rc Helikopter | Arduino Kullanan Rc Uçak: Bir Rc araba çalıştırmak için | Quadcopter | dron | RC uçak | RC tekne, her zaman bir alıcı ve vericiye ihtiyacımız var, RC QUADCOPTER için 6 kanallı bir verici ve alıcıya ihtiyacımız olduğunu ve bu tür TX ve RX'in çok maliyetli olduğunu varsayalım, bu yüzden bir tane yapacağız
Klimanın Uzaktan Kumandalarının IR Protokolünü Anlama: 9 Adım (Resimlerle)
Klimanın Uzaktan Kumandalarının IR Protokolünü Anlama: Bir süredir IR protokollerini öğreniyorum. IR sinyalleri nasıl gönderilir ve alınır. Bu noktada, geriye kalan tek şey AC uzaktan kumandaların IR protokolüdür. Neredeyse tüm elektronik cihazların (örneğin bir TV) geleneksel uzaktan kumandalarının aksine