Bu eğitimde Kuvvet sensörü, Arduino Uno ve bir servo motor kullanarak bir devre geliştireceğiz. Servo şaft konumunun kuvvet sensörü üzerinde bulunan ağırlıkla belirlendiği bir servo kontrol sistemi olacaktır. Daha ileri gitmeden önce servo ve diğer bileşenler hakkında konuşalım.
Servo Motorlar, doğru mil hareketine veya konumuna ihtiyaç duyulan yerlerde kullanılır. Bunlar yüksek hızlı uygulamalar için önerilmemektedir. Bunlar düşük hız, orta tork ve doğru konum uygulaması için önerilmiştir. Bu motorlar robotik kollu makinelerde, uçuş kontrollerinde ve kontrol sistemlerinde kullanılmaktadır. Servo motorlar ayrıca bazı yazıcı ve faks makinelerinde de kullanılmaktadır.
Servo motorlar farklı şekil ve boyutlarda mevcuttur. Bir servo motorda esas olarak orada teller olacaktır, biri pozitif voltaj için, diğeri toprak içindir ve sonuncusu konum ayarı içindir. KIRMIZI kablo güce bağlanır, Siyah kablo toprağa bağlanır ve SARI tel sinyale bağlanır.
Servo motor, DC motor, konum kontrol sistemi ve dişlilerin bir kombinasyonudur. DC motor şaftının konumu, SIGNAL pinine PWM sinyalinin görev oranına bağlı olarak, servodaki kontrol elektroniği tarafından ayarlanır. Basitçe söylemek gerekirse, kontrol elektroniği DC motoru kontrol ederek şaft konumunu ayarlar. Milin konumuna ilişkin bu veriler SİNYAL pimi aracılığıyla gönderilir. Kontrole konum verileri, servo motorun Sinyal pini aracılığıyla PWM sinyali şeklinde gönderilmelidir.
PWM (Darbe Genişliği Modülasyonlu) sinyalinin frekansı, servo motor tipine göre değişebilir. Burada önemli olan PWM sinyalinin GÖREV ORANI. Bu GÖREV ORANI baz alınarak kontrol elektroniği mili ayarlar.
Aşağıdaki şekilde gösterildiği gibi, şaftın saat 9'a hareket ettirilmesi için AÇMA ORANI 1 / 18ie olmalıdır. 18 ms'lik bir sinyalde 1 milyon saniye 'AÇIK zaman' ve 17 milyon saniye 'KAPALI zaman.
Şaftın saat 12 ° 'ye taşınması için sinyalin AÇMA süresi 1.5ms ve KAPALI zaman 16.5ms olmalıdır.
Bu oran servodaki kontrol sistemi ile deşifre edilir ve ona göre pozisyonu ayarlar.
Buradaki bu PWM, ARDUINO UNO kullanılarak oluşturulmuştur.
Şimdilik UNO tarafından üretilen PWM sinyalinin görev oranını değiştirerek SERVO MOTOR şaftını kontrol edebileceğimizi biliyoruz.
Şimdi kuvvet sensörü veya ağırlık sensörü hakkında konuşalım.
ARDUINO UNO ile bir FORCE sensörünü arayüzlemek için arduno uno'da 8 bit ADC (Analogdan Dijitale Dönüştürme) özelliğini kullanacağız.
FORCE sensörü, yüzeye basınç uygulandığında direncini değiştiren bir dönüştürücüdür. FORCE sensörü farklı boyut ve şekillerde mevcuttur.
Daha ucuz versiyonlardan birini kullanacağız çünkü burada fazla doğruluğa ihtiyacımız yok. FSR400, piyasadaki en ucuz kuvvet sensörlerinden biridir. FSR400'ün resmi aşağıdaki şekilde gösterilmektedir.
Şimdi FSR 400'ün uzunluk boyunca hassas olduğuna dikkat etmek önemlidir, kuvvet veya ağırlığın şekilde gösterildiği gibi sensörün gözünün ortasındaki labirent üzerinde yoğunlaştırılması gerekir.
Güç yanlış zamanlarda uygulanırsa, cihaz kalıcı olarak hasar görebilir.
Bilmeniz gereken bir diğer önemli şey de sensörün yüksek menzilli akımları sürdürebilmesidir. Bu yüzden kurulum sırasında sürüş akımlarını aklınızda bulundurun. Ayrıca sensörün 10 Newton'luk bir kuvvet sınırı vardır. Yani sadece 1 kg ağırlık uygulayabiliyoruz. 1 Kg'dan daha yüksek ağırlıklar uygulanırsa, sensör bazı sapmalar gösterebilir. 3Kg'dan fazla artarsa. sensör kalıcı olarak hasar görebilir.
Daha önce de belirtildiği gibi bu sensör, basınçtaki değişiklikleri algılamak için kullanılır. Bu nedenle ağırlık, FORCE sensörünün üzerine uygulandığında, direnç büyük ölçüde değişir. FS400'ün ağırlık üzerindeki direnci aşağıdaki grafikte gösterilmiştir:
Yukarıdaki şekilde gösterildiği gibi, sensörün iki kontağı arasındaki direnç ağırlık ile azalır veya sensörün iki kontağı arasındaki iletkenlik artar.
Saf bir iletkenin direnci şu şekilde verilir:
Nerede, p- İletkenin direnci
l = İletken uzunluğu
A = İletken alanı.
Şimdi "R" dirençli bir iletken düşünün, eğer iletken üzerine bir miktar basınç uygulanırsa, iletken üzerindeki alan azalır ve basınç sonucunda iletken uzunluğu artar. Dolayısıyla formülle iletkenin direnci artmalıdır, çünkü direnç R alanla ters orantılıdır ve ayrıca uzunluk l ile doğru orantılıdır.
Böylece basınç veya ağırlık altındaki bir iletken için bununla iletkenin direnci artar. Ancak bu değişiklik, genel dirence kıyasla küçük. Önemli bir değişiklik için birçok iletken bir arada istiflenmiştir.
Yukarıdaki şekilde gösterilen Kuvvet Sensörlerinin içinde olan budur. Yakından bakıldığında sensörün içinde birçok çizgi görülebilir. Bu çizgilerin her biri bir iletkeni temsil eder. Sensörün hassasiyeti iletken numaralarındadır.
Ancak bu durumda basınçla direnç azalacaktır çünkü burada kullanılan malzeme saf iletken değildir. Buradaki FSR, sağlam polimer kalın film (PTF) cihazlarıdır. Yani bunlar saf iletken malzeme cihazları değil. Bunlar, sensörün yüzeyine uygulanan kuvvetin artmasıyla dirençte azalma gösteren bir malzemeden yapılmıştır.
Bu malzeme, FSR grafiğinde gösterildiği gibi özellikleri gösterir.
Direnişteki bu değişim, biz onları okuyamadığımız sürece bir işe yaramaz. Eldeki kontrolör sadece voltajdaki olasılıkları okuyabilir ve daha azını okuyamaz, bunun için voltaj bölücü devresi kullanacağız, bununla direnç değişimini voltaj değişimi olarak türetebiliriz.
Gerilim bölücü dirençli bir devredir ve şekilde gösterilmiştir. Bu dirençli ağda bir sabit direncimiz ve diğer değişken direncimiz var. Şekilde gösterildiği gibi, burada R1 sabit bir dirençtir ve R2, direnç görevi gören FORCE sensörüdür.
Dalın orta noktası ölçüme alınır. R2 değişikliği ile Vout'ta değişim yaşıyoruz. Yani bununla, ağırlıkla değişen bir voltajımız var.
Şimdi burada dikkat edilmesi gereken önemli nokta, kontrolör tarafından ADC dönüşümü için alınan girişin 50µAmp kadar düşük olmasıdır. Direnç bazlı voltaj bölücünün bu yükleme etkisi önemlidir, çünkü voltaj bölücünün Vout'undan çekilen akım, hata yüzdesi artışlarını arttırır, çünkü artık yükleme etkisi konusunda endişelenmemize gerek yoktur.
Şimdi, KUVVET SENSÖRÜ üzerine kuvvet uygulandığında, bölücü ucundaki voltaj, UNO'nun ADC kanalına bağlı olarak bu pini değiştirir, sensör üzerindeki kuvvet her değiştiğinde, UNO ADC'sinden farklı bir dijital değer alacağız.
Bu ADC dijital değeri, PWM sinyalinin görev oranıyla eşleşir, bu nedenle sensöre uygulanan kuvvetle ilgili olarak SERVO konum kontrolüne sahibiz.
Bileşenler
Donanım: UNO, güç kaynağı (5v), 1000uF kapasitör, 100nF kapasitör (3 adet), 100KΩ direnç, SERVO MOTOR (SG 90), 220Ω direnç, FSR400 kuvvet sensörü.
Yazılım: Atmel studio 6.2 veya aurdino her gece.
Devre Şeması ve Çalışma Açıklaması
Güç sensörü servo motor kontrolü için devre şemasıdır, şekil aşağıda gösterilmiştir.
Sensördeki voltaj tamamen doğrusal değildir; gürültülü olacak. Gürültüyü filtrelemek için, şekilde gösterildiği gibi bölücü devredeki her direnç boyunca bir kapasitör yerleştirilir.
Burada bölücü tarafından sağlanan voltajı (ağırlığı doğrusal olarak temsil eden voltaj) alacağız ve onu Arduino Uno'nun ADC kanallarından birine besleyeceğiz. Dönüştürmeden sonra bu dijital değeri (ağırlığı temsil eden) alacağız ve bunu PWM değeriyle ilişkilendireceğiz ve bu PWM sinyalini SERVO motoruna sağlayacağız.
Yani ağırlık ile birlikte, dijital değere bağlı olarak görev oranını değiştiren bir PWM değerimiz var. Dijital değer ne kadar yüksekse PWM'nin görev oranı o kadar yüksektir. Bu nedenle, daha yüksek görev oranı PWM sinyali ile servo şaft, girişte verilen şekle göre en sağa veya en sola ulaşmalıdır.
Ağırlık daha düşükse, daha düşük PWM görev oranına sahip oluruz ve girişteki şekle göre servo en sağa ulaşmalıdır.
Bununla birlikte AĞIRLIK veya KUVVET ile SERVO pozisyon kontrolüne sahibiz.
Bunun gerçekleşmesi için programda birkaç talimat oluşturmamız gerekiyor ve bunlar hakkında aşağıda ayrıntılı olarak konuşacağız.
ARDUINO, şekilde gösterildiği gibi altı ADC kanalına sahiptir. Bunlardan herhangi biri veya tümü analog voltaj için giriş olarak kullanılabilir. UNO ADC 10 bit çözünürlüktedir (yani (0- (2 ^ 10) 1023) arasındaki tam sayı değerleri) Bu, 0 ile 5 volt arasındaki giriş voltajlarını 0 ile 1023 arasındaki tam sayı değerlerine eşleyeceği anlamına gelir. (5/1024 = 4.9mV) birim başına.
Burada UNO'nun A0'ını kullanacağız. Birkaç şeyi bilmemiz gerekiyor.
|
Öncelikle Arduino Uno ADC kanallarının varsayılan referans değeri 5V'tur. Bu, herhangi bir giriş kanalında ADC dönüşümü için maksimum 5V giriş voltajı verebileceğimiz anlamına gelir. Bazı sensörler 0-2.5V arasında voltaj sağladığından, 5V referans ile daha az doğruluk elde ederiz, bu nedenle bu referans değerini değiştirmemizi sağlayan bir talimatımız var. Yani referans değerini değiştirmek için elimizde (“analogReference ();”) Şimdilik olarak bırakıyoruz.
Varsayılan olarak, 10 bit olan maksimum kart ADC çözünürlüğünü elde ederiz, bu çözünürlük komut kullanılarak değiştirilebilir ("analogReadResolution (bit);"). Bu çözünürlük değişikliği bazı durumlarda kullanışlı olabilir. Şimdilik olarak bırakıyoruz.
Şimdi yukarıdaki koşullar varsayılan olarak ayarlanmışsa, "analogRead (pin)" işlevini doğrudan çağırarak "0" kanalının ADC'sinden değeri okuyabiliriz; burada "pin", analog sinyali bağladığımız pini temsil eder, bu durumda "A0" olacaktır. ADC'den gelen değer, “int SENSORVALUE = analogRead (A0) şeklinde bir tamsayı olarak alınabilir; ", Bu komutla ADC'den sonraki değer" SENSORVALUE "tamsayısında saklanır.
UNO'nun PWM'si, PCB kartı üzerinde "~" ile simgelenen pinlerden herhangi birinde elde edilebilir. UNO'da altı PWM kanalı vardır. PIN3'ü amacımız için kullanacağız.
analogWrite (3, VALUE); |
Yukarıdaki koşuldan, PWM sinyalini doğrudan ilgili pinden alabiliriz. Parantez içindeki ilk parametre, PWM sinyalinin pin numarasını seçmek içindir. İkinci parametre görev oranını yazmak içindir.
Arduino Uno'nun PWM değeri 0'dan 255'e değiştirilebilir. En düşük "0" ile en yüksek "255" ile. Görev oranı olarak 255 ile PIN3'te 5V alacağız. Görev oranı 125 olarak verilirse PIN3'te 2,5V alacağız.
Şimdi servo motor kontrolünden bahsedelim, Arduino Uno'nun sadece derece değeri vererek servo pozisyonunu kontrol etmemizi sağlayan bir özelliği var. Diyelim ki servonun 30'da olmasını istiyorsak, değeri doğrudan programda temsil edebiliriz. SERVO başlık dosyası tüm görev oranı hesaplamalarını dahili olarak halleder. Arduino ile servo motor kontrolü hakkında daha fazlasını buradan öğrenebilirsiniz.
Artık sg90 0-180 dereceden hareket edebiliyor, 0-1024 ADC sonucumuz var.
Dolayısıyla ADC, SERVO POZİSYONUNUN yaklaşık altı katıdır. ADC sonucunu 6'ya bölerek yaklaşık SERVO eli konumunu elde edeceğiz. Dolayısıyla görev oranı AĞIRLIK veya KUVVET ile doğrusal olarak değişen bir PWM sinyalimiz var. Bu servo motora verildiğinden, servo motoru kuvvet sensörü ile kontrol edebiliriz.