
Michael Fisher
0
1303
200
Sıkıldın mı? Bir lazer kulesi inşa etmek de mümkün. Bilirsin - o gider pew pew, birçok farklı yöne doğru kırmızı ışını vuruyor ve hatta bir duman makinesine bile atabiliyor? Evet, onlardan biri.
Neye İhtiyacınız Var?
- Arduino
- 2 servo
- Bu sensör kitinden bir tanesi gibi lazer modülü
- Piezo zil veya diğer küçük çıkışlı cihaz
- Sabitleme için metal tel ve kablo bağları
- Uzun dişi -> erkek atlama kabloları ve normal atlama kabloları
İsteğe bağlı olarak, bir duman makinesi gereklidir - lazer oldukça düşük watt'tır, bu nedenle ışını karanlık bir odada bile dumansız göremezsiniz.
Plan Oluştur
Taretin temel fikri, yatay dönüş sağlamak için lazer modülünü bir servonun üzerine koymak; daha sonra dikey hareket sağlamak için bu paketi 90 derecelik bir açıyla yerleştirilmiş başka bir servoya monte edin. Sağlamak için bir piezo var pew pew ses efektleri ve iyi önlem almak için bir duman makinesine atıyorum.
Servo Testleri
Servonuza bağlı olarak, teller farklı şekilde renklendirilebilir, ancak genel olarak:
- Kırmızı pozitif tel, ve her iki servomda da üçün merkezi idi - + 5V rayına bağlanacak.
- Kahverengi veya siyah, Arduino’da GND’ye bağlanacak olan negatif.
- Beyaz veya turuncu, PWM özellikli bir dijital I / O pinine (aşağıdaki demoda 9 ve 10) bağlanacak olan sinyal kablosudur..
İki servonuzu bağladıktan sonra, aşağıdaki örnek kodu yükleyin. Bir servo seçtim “Hori” yatay hareketi ve diğerlerini kontrol etmek “din değiştirmek”. Her biri tam bir hareket taraması gerçekleştirmelidir (benim durumumda yaklaşık 60 derece).
#include Servo vert, hori; // bir servoyu kontrol etmek için servo nesnesi yaratma // maksimum sekiz servo nesnesi yaratılabilir int pos = 0; // servo pozisyonunu saklamak için değişken void setup () hori.attach (9); vert.attach (10); // 9,10 pimindeki servoyu vertwrite (0) 'daki servo nesnelerine bağlar; hori.write (0); void loop () için (pos = 0; pos = 1; pos- = 10) // 180 dereceden 0 dereceye kadar geri döner vert.write (pos); // servo'ya 'pos' değişkeninde pozisyona gitmesini söyleyin hori.write (pos); gecikmesi (100); // servonun pozisyona ulaşması için 100ms bekler
Hepsi iyi? Öyleyse devam et.
Lazerin Test Edilmesi ve Pew Pew Ses
Lazer modülü tıpkı bir LED gibidir, ancak modülde yerleşik bir rezistöre sahiptir, böylece doğrudan dijital I / O'ya bağlayabiliriz - çok basit. Benimle aynı lazer modülünü kullanıyorsanız, “-” gider GND, S pim 12'ye gider. Pim 12'nin çıktısını almak için yukarıdaki örnek kodu değiştirin:
int lazer = 12; pinMode (lazer, ÇIKIŞ);
Ardından, standardı kullanarak her bir döngüyü pimi açın ve kapatın digitalWrite () yöntem.
Piezo zilini rahat bir ses seviyesinde sürmek için sadece PWM kullanacağız - eğer istersen ton kütüphanesini kullanmayı deneyebilirsin, ama tek ihtiyacım olan basit bir gürültü. Siyah kabloyu toprağa ve kırmızı kabloyu pim 11'e bağlayın. zil İlgili pim üzerinde, çıkış moduna ayarlayın ve analogWrite (sesli, 100) (veya 254’e kadar istediğiniz sayı); ve analogWrite (zil, 0) kapatmak.
İki servoyu taramak, bir lazeri etkinleştirmek ve sinir bozucu sesi çalmak için modifiye edilmiş tam örnek kod burada bulunabilir.
Tüm bileşenleriniz çalışıyor olmalı - şimdi hepsini birbirine bağlamamız gerekiyor.
Taret oluşturma
Kablo bağlarını kullanarak bir servoyu diğerine bağlayın; hangisi olduğu hiç önemli değil, sadece birinin yatay olarak hareket edeceğinden ve diğerinin düşey hareket edeceğinden emin olun. Açı doğru değilse, rotor bıçağını çekebilir ve test sırasında yeniden oturabilirsiniz.
Lazer modülünü diğer servo bıçağına sabitlemek için bazı sert modelleme telleri kullanın.
Sonunda, her şeyi daha fazla kablo bağı ve biraz hurda ağacı olan bir masa ayağına bağladım..
Taretin Programlanması
Seni bilmiyorum ama lazer taret fikrim sayısız bilim kurgu filmi ve star trek bölümünden geliyor. Her zaman birileri bir taretten geçecek ve küçük Pew-Pew çekimler geniş bir paternde uçacak, her zaman milisaniye çok yavaş, bu yüzden kahramanımız gerçekten çarpmıyor. Bu, kopyalamaya çalıştığım şey, ancak bir taretin yapması gerekenler hakkındaki fikrinize uydurmak için ana rutini düzenlemekten çekinmeyin.
İşte ana döngü için kullandığım sözde kod:
- Seri çekim arasındaki süreyi ve her bir çekim arasındaki süreyi rastgele.
- Her servo, vert ve hori için başlangıç ve bitiş konumlarını randomize edin..
- Alınacak çekim sayısını rastgele.
- Her atıştan sonraki değişim derecelerini hesaplayın, başlangıç ve bitiş konumları arasındaki farkın atış sayısına bölünmesiyle.
- Servoları başlangıç pozisyonlarına getirin ve oraya ulaşmak için biraz bekleyin (100ms)
- Servoları daha önce hesaplandığı gibi biraz hareket ettirirken, tüm çekimler yapılana kadar döngü yapın; hareket et ve ateş et, hareket et ve ateş et.
- Tekrar et.
Ben de ayrı ekledim ateş() kodu biraz daha iyi yapılandırma yöntemi. Tüm aralıklarını ayarlayın Rastgele () Her parametreyi hızlandırmak veya yavaşlatmak için fonksiyonlar; veya daha fazla dans kulübü vibe için atış sayısını artırın. Kullanılan kodun bir videosu için aşağı kaydırın!
#include Servo vert, hori; // bir servoyu kontrol etmek için servo nesnesi yarat int int = 0; // servo pozisyonunu saklamak için değişken int laser = 12; int zil = 11; void setup () hori.attach (9); vert.attach (10); // 9 no'lu servoyu servo objesine pinMode'a bağlar (lazer, OUTPUT); pinMode (zil, ÇIKIŞ); void loop () int timeBetweenBursts = rasgele (200,1000); int timeBetweenShots = rasgele (50,200); int vertStart = rasgele (1,180); int vertEnd = rastgele (1,180); int horiStart = rastgele (1,180); int horiEnd = rastgele (1,180); int numShots = rastgele (5,20); int vertChange = (vertEnd - vertStart) / numShots; // her atışta dikey eksenin ne kadar hareket edeceği int horiChange = (horiEnd - horiStart) / numShots; vert.write (vertStart); // önce pozisyona başlamasına izin verin, biraz bekleyin hori.write (horiStart); gecikmesi (100); (int atış = 0; atış
Eylemde
Bu küçük oyuncağın pratik bir kullanımı olduğunu sanmıyorum ama çok eğlenceli ve istediğiniz efekti elde etmek için ince ayar yapabileceğiniz çok sayıda değişken var. Belki de ev yapımı bir LEGO filmi için kullanışlı olacak?