İçindekiler:

Arduino için DIY Lazer Direksiyon Modülü: 14 Adım (Resimlerle)
Arduino için DIY Lazer Direksiyon Modülü: 14 Adım (Resimlerle)

Video: Arduino için DIY Lazer Direksiyon Modülü: 14 Adım (Resimlerle)

Video: Arduino için DIY Lazer Direksiyon Modülü: 14 Adım (Resimlerle)
Video: Arduino ile Yarış Simülatörü Serisi - FFB Direksiyon Yapımı - Bölüm 4 2024, Temmuz
Anonim
Image
Image

Bu Eğitilebilir Kitapta, eBay'den 3D baskılı parçalar ve ucuz bileşenler kullanarak çift eksenli, tek aynalı lazer ışını yönlendirme modülünün yapımını göstereceğim.

Bu proje, Tam XY Kontrollü Arduino Lazer Gösterisi ve Gerçek Galvoslu Arduino Lazer Gösterisi ile benzerlikler taşıyor, ancak ucuz solenoidlerle 3D baskılı bir tasarım kullanan ilk proje olduğuna inanıyorum. Tasarımın geliştirilip geliştirilebilmesi için tüm tasarım dosyalarını GPLv3'ün altına koyuyorum.

Şu anda sadece modülü monte etmiş ve bazı çok temel test kodları yazmış olsam da, bir gün Arduino'dan daha önceki Eğitilebilir, Süper Hızlı Analog Voltajlarımdan vektör grafik kodunu dahil ederek onu bir sonraki seviyeye taşıyabileceğimi umuyorum.

1. Adım: 3B Basılmamış Parçaları Toplayın

Lazer tertibatı aşağıdaki parçalardan oluşur:

  • 4 mikro solenoid
  • Bir 1/2 inç ayna
  • Dört M3 vida

Kullandığım belirli solenoidler eBay'den her biri 1,45 dolara satın alındı. Yuvarlak ayna HobbyLobby'deki el işleri reyonunda bulundu - 25'lik bir paket bana 3 dolardan daha ucuza mal oldu. Aynaları eBay'de de bulabilirsiniz.

Ayrıca yine eBay'den ucuz bir lazer işaretçiye ihtiyacınız olacak. Karanlıkta parlayan bir vinil levha ile birlikte mor bir lazer bu proje için mükemmel bir kombinasyon!

Bir dizi yardım eli gerekli değildir, ancak lazer işaretçiyi tutmak ve konumlandırmak için çok yararlı olacaktır. Güç düğmesini basılı tutmak için büyük bir cilt klipsi kullanılabilir.

Bir Arduino'ya (Arduino Nano kullandım) ve solenoidleri sürmenin bir yoluna ihtiyacınız olacak. VajkF'nin yorumlarda belirttiği gibi, L298 veya L9110'a dayananlar gibi önceden yapılmış H köprüsü kullanabilirsiniz. Bunlar eBay'de birkaç dolara kolayca bulunabilir ve ayrıca motorları ve robotik projelerini sürmek için de kullanılabilir.

H-köprüsüm olmadığı için kendi sürücümü ayrı bileşenlerden oluşturdum:

  • Dört NPN bipolar transistör (bir MPS3704 kullandım)
  • Dört direnç (1.2k ohm direnç kullandım)
  • Dört diyot (1N4004 kullandım)
  • 9V pil ve pil konektörü

Elektronik bileşenler benim laboratuvarımdandı, bu yüzden onlar için kesin bir maliyetim yok, ancak zaten parçalara sahip değilseniz veya bunları temizleyemiyorsanız, önceden oluşturulmuş bir H köprüsü kullanmak muhtemelen daha uygun maliyetlidir. Bununla birlikte, kendinizinkini oluşturmak için şemaları sağlayacağım.

2. Adım: Aynalı Direksiyon Modülünü 3D Bastırın

Aynalı Direksiyon Modülünü 3D Bastırın
Aynalı Direksiyon Modülünü 3D Bastırın
Aynalı Direksiyon Modülünü 3D Bastırın
Aynalı Direksiyon Modülünü 3D Bastırın

Lazer direksiyon modülü iki adet 3D baskılı parçadan oluşur: dört solenoidi monte etmek için bir taban ve ayna için mafsallı bir platform.

Tasarımı değiştirmeniz gerekebilir diye FreeCAD dosyalarının yanı sıra 3D baskıya sizin için iki STL dosyasını ekledim. Tüm içerik GPLv3 kapsamındadır, yani geliştirmelerinizi yapmakta ve paylaşmakta özgürsünüz!

Adım 3: Lazer Modülünü Birleştirin

Lazer Modülünü Birleştirin
Lazer Modülünü Birleştirin
Lazer Modülünü Birleştirin
Lazer Modülünü Birleştirin
Lazer Modülünü Birleştirin
Lazer Modülünü Birleştirin
  • Dört solenoidi alt parçaya yapıştırmak için sıcak tutkal kullanın.
  • Aynayı üst parçanın ortasına yapıştırmak için sıcak tutkal kullanın.
  • Metal pistonları solenoidlere sokun ve ardından üst parçayı direklerin üzerine yerleştirin (ancak vidalamayın). Üst parçayı hafifçe döndürün ve küçük bir tornavida kullanarak her bir pistonu yerine kaldırın. Diskin dudağı, piston üzerindeki oluğa kaymalıdır. 3D baskılı menteşeler çok kırılgan olduğundan dikkatli olun. Sabırla ve muhtemelen birkaç başarısız denemeyle, dört pistonu da menteşeleri bükmeden veya baskı uygulamadan konumlandırabilirsiniz.
  • Tüm pistonlar yerleştirildikten sonra M3 vidalarını kısmen takın, ancak bunları sıkmadan önce her bir pistonu hafifçe aşağı doğru bastırın ve aynanın serbestçe eğildiğinden emin olun. Serbest hareket etmiyorsa veya tutmuyorsa, üst plakayı çıkarmak, bir veya daha fazla solenoidi gevşetmek ve hafif bir dışa açıyla yeniden takmak gerekebilir (bununla orta direk arasına ara parçaları koymak bu konuda yardımcı olabilir).

4. Adım: Lazer İşaretçi Yakasını yazdırın

Lazer İşaretçi Yakasını Yazdırın
Lazer İşaretçi Yakasını Yazdırın
Lazer İşaretçi Yakasını Yazdırın
Lazer İşaretçi Yakasını Yazdırın

Lazer işaretleyici yaka, lazer işaretçinin kafasına oturur. Daha sonra yakayı kavramak için bir dizi yardım eli kullanabilir ve lazeri tam olarak bankanızın üzerine yerleştirmenize izin verebilirsiniz.

Adım 5: Sürüş Devresini Birleştirin

Sürüş Devresini Birleştirin
Sürüş Devresini Birleştirin

Sürücü devresi şematik olarak gösterilmiştir. Daha önce de belirtildiği gibi, benim sürümüm ayrı bileşenlerden oluşturuldu, ancak hazır bir H köprüsü de kullanabilirsiniz. Kendinizinkini kurmayı seçerseniz, dört solenoidin her biri için bir tane olmak üzere bu devrenin dört kopyasını oluşturmanız gerekecektir.

Her devre, ikisi sol ve sağ solenoidi kontrol etmek için ve ikisi yukarı ve aşağı solenoidleri kontrol etmek için bir Arduino pinine bağlanacaktır. Bunların aşağıdaki gibi PWM özellikli pinlere bağlanması gerekir:

  • Pim 9: Yukarı Solenoidi
  • Pim 3: Aşağı Solenoid
  • Pim 11: Sol Solenoid
  • Pim 10: Sağ Solenoid

Dört solenoid sürücü devresinin tümünü sürmek için tek bir 9V pil kullanılabilir veya bir masaüstü güç kaynağı kullanabilirsiniz. Arduino, USB gücünü kesecek ve 9V pilin pozitif tarafına bağlanmamalıdır. Ancak, pilin negatif tarafı toprak referansı olarak kullanılır ve Arduino'daki GND pinine ve ayrıca transistörlerdeki emiter pinlerine kablolanmalıdır.

6. Adım: Örnek Kodu Yükleyin

Örnek Kodu Yükleyin
Örnek Kodu Yükleyin

Örnek kod aşağıdaki özelliklerle güncellendi:

  • PWM frekansını, mekanizma düşük hızlarda neredeyse sessiz olacak şekilde ayarlar. Motion Test 1'deki uğultu tamamen gitti!
  • Solenoidlerin doğrusal olmayan tepkisini "doğrusallaştırmak" için Schimpf'in makalesine dayalı voltaj denklemleri olarak ekler.

Bu blogdaki koda dayalı olarak bir Lorenz Attractor uygulamasını da ekledim.

Sonuçların aslına uygunluğu arzulanan bir şey bırakıyor, ama hala üzerinde çalışıyorum!:)

Sonraki adımlar, kodda kullanılan bazı teknikleri göstermektedir.

7. Adım: Sesi Kısma

Hareket Testi 1'de, özellikle yukarı ve aşağı hareket sırasında yüksek bir vızıltı duyabilirsiniz. Bunun, Arduino'nun varsayılan PWM kesme frekansının duyulabilir aralıkta olmasından kaynaklandığı ortaya çıktı. Bobin voltajının hızlı açılıp kapanması, onların o frekansta titreşmesine neden olarak onları küçük küçük hoparlörler haline getirir.

Bu sorunu çözmek için koddaki PWM frekansını artırdım:

#define PWM_FREQ_31372Hz 0x01 // PWM frekansını 31372.55 Hz olarak ayarlar#define PWM_FREQ_3921Hz 0x02 // PWM frekansını 3921.16 Hz olarak ayarlar #define PWM_FREQ_980Hz 0x03 // PWM frekansını 980.39MT1 Hz olarak ayarlar & 0b11111000) | Sıklık; // timer1 (pin 9 ve 10) frekansını ayarla TCCR2B = (TCCR2B & 0b11111000) | Sıklık; // timer2 (pin 3 ve 11) frekansını ayarla }

Arduino PWM frekansını ayarlamak, solenoidleri veya motorları susturmak için kullanışlı bir numaradır. Hangisinin size en iyi sonucu verdiğini görmek için farklı frekans seçenekleriyle denemeler yapın. Biraz daha gelişmiş programlama içermesine rağmen, zamanlayıcıların nasıl çalıştığına dair iyi bir kaynak burada.

Adım 8: Bozulmayı Azaltmak için Gerilimlerin Ayarlanması

Bozulmayı Azaltmak için Gerilimleri Ayarlama
Bozulmayı Azaltmak için Gerilimleri Ayarlama

İlk hareket testlerim, solenoidlerin tepkisinde önemli bozulma olduğunu gösterdi. Hareket Testi 3'te (soldaki şekil), dairesel bir spiral olması gereken şey, bunun yerine tırtıklı kenarları olan dikdörtgen bir ağ haline geldi.

Bu sorunu çözmek biraz matematik gerektiriyordu, ancak web'de sorunu yazılımda çözecek kadar iyi anlamama yardımcı olan harika bir makale bulabildim.

Sistemi ayarlamak ve ortaya çıkan izlerin görünümünü iyileştirmek için geçtiğim süreçte sizi takip eden adımlar!

Adım 9: Yazılımı Matematikle Mükemmelleştirme

Yazılımı Matematikle Mükemmelleştirmek
Yazılımı Matematikle Mükemmelleştirmek
Yazılımı Matematikle Mükemmelleştirmek
Yazılımı Matematikle Mükemmelleştirmek

Sistemi ayarlamanın sırrı, Eastern Washington Üniversitesi'nden Paul H. Schimpf tarafından yazılan "Solenoid Kuvvetinin Ayrıntılı Açıklaması" adlı mükemmel bir makale olduğu ortaya çıktı (bağlantı). Özellikle, denklem 17 bana solenoid kuvvetini çeşitli terimlerle verdi.

Aşağıdaki terimlerin ölçülmesi kolaydı:

  • R - Solenoidimin direnci
  • l - Solenoidin uzunluğu
  • x - Solenoiddeki pistonun yer değiştirmesi
  • V - Solenoid üzerindeki voltaj

Ayrıca solenoid tarafından uygulanan kuvvetin, çift eksenli ayna üzerindeki 3D baskılı yaylardan gelen kuvveti dengelemesi gerektiğini de biliyordum. Bir yayın kuvveti, aşağıdaki gibi ifade edilen Hooke yasasına tabidir:

F = -kx

k'nin değerini bilmememe rağmen, en azından Schimpf'in makalesinden denklem 17'den çıkardığım kuvvetin Hooke yasasındaki kuvvete eşit olması gerektiğini biliyordum.

Alfa (α) değeri zor bir değerdi. Denklem 13 ve 14, solenoid (A), dönüş sayısı (N) ve manyetik geçirgenlik değerlerinden (μ) bu değerlerin nasıl hesaplanacağını gösterse de, saymak için bir solenoidi parçalamak zorunda kalmak istemedim. dönüş sayısı, solenoidimin çekirdeğinin yapıldığı malzemeyi de bilmiyordum.

Adım 10: Ucuz Bir Bileşen Test Cihazı Günü Kurtarır

Ucuz Bir Bileşen Test Cihazı Günü Kurtarır!
Ucuz Bir Bileşen Test Cihazı Günü Kurtarır!
Ucuz Bir Bileşen Test Cihazı Günü Kurtarır!
Ucuz Bir Bileşen Test Cihazı Günü Kurtarır!
Ucuz Bir Bileşen Test Cihazı Günü Kurtarır!
Ucuz Bir Bileşen Test Cihazı Günü Kurtarır!

Ancak, 15 ve 16 numaralı denklemin bana ihtiyacım olanı verdiği ortaya çıktı. eBay'den 10 dolara satın aldığım ucuz bir M328 bileşen test cihazım vardı. Solenoidimin endüktansını ölçmek için kullanabildi ve armatürü farklı derinliklerde iterek bana farklı endüksiyon değerleri verdiğini buldum.

Tam olarak yerleştirilmiş armatürle ölçmek bana L(0) değerini verdi.

Solenoidimin uzunluğu 14 mm idi, bu yüzden endüktansı armatürle beş konumda ölçtüm ve bu bana L(x için çeşitli değerler verdi):

  • L(0.0) = 19.8 mH
  • L(3,5) = 17,7 mH
  • L(7.0) = 11,1 mH
  • L(10.5) = 9.3 mH
  • L(14) = 9,1 mH

Daha sonra, belirli bir μr seçimi için denklem 15 ve 16'nın değerine karşı değerlerimi çizmek için bir elektronik tablo kullandım ve sonra iyi bir eşleşme bulana kadar seçimimi değiştirdim. Bu, grafikte gösterildiği gibi μr 2.9 olduğunda oldu.

Adım 11: Yay Sabiti K'yi Bulun, Problemi Çözün

Image
Image
Mevcut Sorunların ve Olası Çözümlerin Analizi
Mevcut Sorunların ve Olası Çözümlerin Analizi

Geriye kalan tek bilinmeyen, yay sabiti olan K idi. Bunu, çift eksenli montajımdaki solenoidlerden birine 9V uygulayarak ve aynanın aşağı çekildiği mesafeyi ölçerek ölçtüm. Bu değerlerle 10.41 civarında bulduğum K denklemlerini çözebildim.

Artık strok boyunca çeşitli konumlarda solenoidin çekişini hesaplamak için ihtiyaç duyduğum değerlere sahiptim. F(x)'i Hooke yasasından yay kuvvetine eşitleyerek, gerekli V gerilimini çözebilirim.

Grafik, solenoidi istenen herhangi bir x konumuna hareket ettirmek için gereken voltajı gösterir.

Sağda, voltajın sıfır ve konumun 3 mm olduğu yerde, bu, 3D baskılı menteşeler tamamen gevşediğinde solenoidin nötr durma noktasına karşılık gelir. Grafikte sola hareket etmek, armatürün 3D baskılı menteşelerin çekilmesine karşı solenoidin içine çekilmesine karşılık gelir - bu başlangıçta daha fazla voltaj gerektirir, ancak armatür solenoidin içine doğru derinleştikçe çekme artar ve gerekli sürüş voltajı azalır.

Bu ilişki kesinlikle doğrusal değildir, ancak Schimpf'in makalesindeki denklemlerle, kiriş sapması doğrusal olacak şekilde doğru voltajları vermek için Arduino kodumu yazabilirim:

float positionToVoltage(float x) {

// İstenilen x'te menteşeler tarafından uygulanan geri yükleme kuvveti (Hooke Yasası). const şamandıra yay_F = -yay_K * (x - yay_X0); // Solenoidin çekme kuvveti ile menteşelerin geri dönüş kuvveti eşleşecek şekilde voltaj sqrt(-2*R*R*(-spring_F)*solenoid_len/(a*L_0*exp(-a*x/solenoid_len)))); }

Bu, orijinal hareket testimden çok daha dairesel bir spirale yol açar. Görev tamamlandı!

Adım 12: Ayrık Bileşenler Kullanan Sürücü Devresi Hakkında Soru ve Cevaplar

Neden solenoidi doğrudan Arduino'ya bağlayamıyorum?

Arduino'nun zarar görmeden ne kadar akım sağlayabileceği meselesi. Bu pin başına yaklaşık 40mA'dır. Arduino'nun 5V'da çalıştığını bilerek, yükün gerekli minimum direncini (bu durumda solenoid) hesaplamak için Ohm yasasını kullanabiliriz. 5 voltu 0,040 ampere bölmek bize 125 ohm verir. Yükün direnci daha büyükse, onu doğrudan Arduino'ya bağlayabiliriz, aksi takdirde yapamayız. Küçük bir solenoid tipik olarak 50 ohm'luk bir dirence sahiptir, bu nedenle onu doğrudan Arduino'dan çalıştıramayız. Yapsaydık, 100mA çekerdi, ki bu açıkça çok fazla.

Neden solenoid için 9V, Arduino için 5V kullanıyorsunuz?

Arduino 5V'ta çalışır, ancak bu bir solenoid için biraz fazla. Bir transistör kullanmak, Arduino için kullanılan 5V'dan bağımsız olan solenoid için bir voltaj seçmemize izin verir.

Bir transistörün bu proje için uygun olup olmadığını nasıl anlarım?

Arduino'da olduğu gibi, ana gereksinim, solenoidden geçen akımın, transistör (özellikle kollektör akımı) için maksimum değerleri aşmamasıdır. Solenoidin direncini ölçerek ve ardından besleme gerilimini buna bölerek en kötü senaryoyu kolayca hesaplayabiliriz. Solenoidler için 9V besleme akımı ve 50 ohm'luk bir solenoid direnci durumunda, en kötü durum senaryosu bizi 180mA'ya koyar. Örneğin MPS3704, bize yaklaşık 3'lük bir marj veren 600 mA'lık bir maksimum kollektör akımı için derecelendirilmiştir.

Arduino'nun çıkışı ile transistörün tabanı arasına konacak direncin minimum değerini nasıl belirlerim?

Arduino'nun çıkışı, bipolar transistörlerin temel ayağını bir akım sınırlayıcı direnç aracılığıyla bağlayacaktır. Arduino 5V'da çalıştığından, akımı 40mA'nın altında sınırlamak için gereken direnci hesaplamak için tekrar Ohm yasasını kullanabiliriz. Yani, en az 125 ohm'luk bir değer elde etmek için 5 voltu 0,04 amper'e bölün. Daha yüksek direnç değerleri akımı azaltacak ve bu da bize daha da büyük bir güvenlik marjı sağlayacaktır.

Bu direnç için aşmamam gereken bir maksimum değer var mı?

Anlaşıldı, evet. Bir transistör, akım kazancı olarak bilinen şeye sahiptir. Örneğin, kazanç 100 ise, tabana 1mA koyarsak, transistörün kontrol ettiği yükten 100mA'ya kadar akacağı anlamına gelir. Tabana 1.8mA koyarsak, yükten 180mA'ya kadar akacaktır. Daha önce 9V'da solenoidden 180mA aktığını hesapladığımız için, 1.8mA'lık bir temel akım "tatlı nokta"dır ve daha azdır ve solenoidimiz tamamen açılmayacaktır.

Arduino'nun 5V verdiğini biliyoruz ve 1.8mA akımın akmasını istiyoruz, bu yüzden direnci (R=V/I) hesaplamak için Ohm yasasını (R=V/I) kullanıyoruz. 1.8mA'ya bölünen 5V, 2777 ohm'luk bir direnç sağlar. Yaptığımız varsayımlar göz önüne alındığında, direncin 125 ile 2777 arasında olması gerektiğini düşünüyoruz -- 1000 ohm gibi bir şey seçmek bize her iki şekilde de oldukça iyi bir güvenlik marjı sağlıyor.

Adım 13: Mevcut Sorunların ve Olası Çözümlerin Analizi

Mevcut Sorunların ve Olası Çözümlerin Analizi
Mevcut Sorunların ve Olası Çözümlerin Analizi

Mevcut prototip potansiyel gösteriyor, ancak birkaç sorun devam ediyor:

  1. X ve Y ekseni boyunca hareket dik görünmüyor.
  2. Ayna yön değiştirdiğinde bir sıçrama olur.
  3. Çözünürlük oldukça düşük ve görünür merdiven basamağı desenleri var.
  4. Daha yüksek hareket hızlarında, lazerin yolu, titreşimler ve çınlama nedeniyle bozulur.

Sorun 1), hareketi bir eksen boyunca dikey eksene ileten 3D baskılı esnek menteşelerin tasarımından kaynaklanabilir.

Sorun 2), tahrik pistonları ile ayna platformu arasındaki bağlantıdaki gevşeklikten kaynaklanır, bu, aynanın X ve Y ekseni arasındaki geçişlerde sarsılmasına ve atlama yapmasına neden olur. Bu ani hareket, lazer noktasının daha hızlı kontrolsüz bir hareket yaptığı karanlık bir X şeklinde boşluğa yol açar.

Sorun 3), varsayılan Arduino PWM'nin yalnızca 255 seviyeye sahip olması ve bunların birçoğunun voltaj eğrisinin şekli nedeniyle boşa harcanması nedeniyle oluşur. Bu, 16 bit olan ve 65536 benzersiz değere sahip olan zamanlayıcı1 kullanılarak önemli ölçüde iyileştirilebilir.

Sorun 4), ayna ve solenoidin kayar armatürünün (pistonlar) önemli miktarda hareketli kütle oluşturması nedeniyle oluşur.

1) ve 2) sorunları mekanik tasarımla ilgili olduğundan, bir olasılık metalik pistonları çıkarmak ve bunları doğrudan eğim plakasına yapıştırılmış küçük nadir toprak mıknatısları ile değiştirmek olabilir. Solenoidler, fiziksel temas kurmadan mıknatısları çekecek veya itecek açık bir bobin olacaktır. Bu, daha yumuşak harekete yol açar ve toplam kütleyi azaltırken sarsılma olasılığını ortadan kaldırır.

Kütleyi azaltmak sorun 4) için birincil çözümdür, ancak aynayı kontrollü bir şekilde hızlandırmak ve yavaşlatmak için yazılımda bir hareket kontrol profili uygulanarak kalan sorunlar doğrudan yazılımda hedeflenebilir. Bu, 3D yazıcı belleniminde zaten yaygın olarak yapılmaktadır ve benzer yöntemler burada da işe yarayabilir. 3D yazıcılar için geçerli olduğu için hareket kontrolü ile ilgili bazı kaynaklar şunlardır:

  • "Hareket Kontrol Profillerinin Matematiği", Chuck Lewin (bağlantı)
  • "Sarsıntı Kontrollü Hareket Açıklaması", (link)

Trapezoidal bir hareket kontrol profili eklemenin, aynanın çınlama veya titreşim artefaktları olmadan çok daha yüksek hızlarda sürülmesine izin vereceğinden şüpheleniyorum.

Adım 14: Gelecekteki Çalışmalar ve Olası Uygulamalar

Bu sorunlara çözümler geliştirmek önemli miktarda çalışma gerektirse de, bu açık kaynaklı ışın yönlendirme modülünün aşağıdaki gibi uygulamalarda galvanometre tabanlı projelere uygun fiyatlı bir alternatif haline gelebileceğini umuyorum:

  • DJ'ler ve VJ'ler için ucuz bir lazer şovu.
  • Vectrex gibi eski bir atari oyunu için bir elektro-mekanik vektör ekranı.
  • RepRap hareketinin ruhuna uygun olarak kendi lazer direksiyon modülünü yazdırabilen bir DIY reçine tipi SLA 3D yazıcı.
  • Kameralar için dijital kaydırma veya optik görüntü sabitleme.
Arduino Yarışması 2017
Arduino Yarışması 2017
Arduino Yarışması 2017
Arduino Yarışması 2017

Arduino Yarışması 2017'de İkincilik Ödülü

Önerilen: