Arduino Animatronic Eyes: 8 Adım (Resimlerle)

Arduino Animatronic Eyes: 8 Adım (Resimlerle)

İçindekiler:

Anonim

Çoğu bilgisayar korsanı gibi interneti inceledikten ve araştırdıktan sonra istediğim şeyin iyi bir şekilde belgelenmediğine karar verdim. Bu yüzden projeyi sadece kendim için değil, aynı zamanda bir çeşit belge almaya çalışacağım.

Bu proje için ihtiyacınız olacak:

Elektronik tarafı:

1 - Arduino tahtası

1 - Breadboard (herhangi bir boyutta)

2 - Servo's Ben Futaba S3003 kullandım

Donanım tarafı:

1 - Set gözleri (ebay, özellikle içinde korneanın çarptığı gerçekçi akrilik bebek gözlerini aradım).

1 - Set RC Araba yarım milleri

8 - EZ konnektörleri *

4 - Servo Boynuzları (Hepsi benim servolarla geldi)

Biyel kolu (çeşitli ebat ve kalınlıklar)

1 - Pleksiglas / Akrilik Levha (Levha olarak kullandım. Sadece elimde olduğu için)

1 - 12 "uzunluk Alüminyum Açı Braketi

Muhtelif Ekstralar:

Alüminyum çubuklar yerinde üretilmiş alüminyum şimler

Vidalar

Cotter pimleri

Dişli Çubuk (veya başı kesilmiş bir cıvata)

Fındık

2 Parça Epoksi

Araçlar:

matkap

Kesmek gördüm

Propan Meşalesi

kerpeten

Dosya

Dremel

* NOT: EZ konektör delik boyutları, biyel kolunuzun kalınlığına göre belirlenir. Yolun aşağısında bir RC Hobby mağazası olacak kadar şanslıydım, bu yüzden açık olanı satın aldım. Yanlış boyutta satın alırsanız, EZ konektöründe her zaman daha büyük bir delik açmaya çalışabilirsiniz ancak daha fazla acı olabilir.

Gereçler:

Adım 1: Donanım Kurulumu

Ne yazık ki bu gözler bir Halloween acelesiydi, o yüzden yapıyı iyi belgeledim. Her şeyi nasıl yaptığımı açıklamak için elimden geleni yapacağım.

İlk adım için iyi hazırlanmış bir planla başlayın. Basit tut. Servo 1, X Ekseni içindir. Servo 2, Y Ekseni içindir (resme bakınız).

"Basit servo tut" - Christen Gundersen

Daha sonra, servoların nerede olacağı ve göz braketlerinin nerede olacağı konusunda pleksiglas veya tahta parçası üzerinde işaretlemeye başlamak isteyeceksiniz.

Her şey iyi bir planla başlar!

Ping Pong topları kullanarak ilk ucuz testim.


Adım 2: Göz Desteklerinin Kesilmesi ve Takılması

Göz parantezimi yaptığım zaman tamamen serbest çizim yaptım ama çok az şey öğrendim, bu işi size aktaracağım.

NOT: Göz kapaklarının genişlemesini sağlamak için üç delik açtım.

Göz küresi çubuğu için deliklerinizi nereye delmek istediğinizi öğrenirken (resme bakınız). Somununuz için yer tutucunun iç kısmında yer bırakmak için dikkate almanız gerekir. Deliği iki alçak delik açarsanız, somunu takamazsınız.

Braketlerinizdeki çentikleri sağ tarafta kesmeniz gerekmez. (Neden gerçekten yaptığımdan emin değilim …..) Kontrol çubuklarının sürtünmeden geçmesi için göz deliklerinin sol tarafında çentik olması gerekir.

Destekleri monte etmek için hem alüminyum hem de pleksi boyunca küçük bir delik açtım, sonra onları monte etmek için yedek vidalar kullandım.

DİKKAT: Vidalamadan önce pleksiglası delmek zorundasınız, aksi takdirde çatlarsınız.

Son şey, gözlerinizi yeterince uzağa ayırmak ve servoyu rahatça arkaya sığdırabilmek.

Adım 3: Servo / kornaların montajı.

Servoları almak için tabanını kesin. Pleksiglas için kesici takımlar konusunda fazla bir şeyim yoktu, bu yüzden dört köşede bir matkap kullandım ve sonra dikdörtgenleri kesmek için bir dremel kesme ucu kullandım. Pleksi erimesini istemiyorsunuz, bu yüzden zaman ayırın ve oldukça hızlı hareket edin.

Servoları monte ederken, servo # 2'nin daha yükseğe itilmesi gerekir. Bu iki nedenden ötürü 1) servo kornasını göz küresinin tepesine göre tutmak ve 2) servo # 1 kontrol çubuklarına müdahale etmemesi için.

Daha sonra, ikinci gözü hareket ettirmek için aptal gibi davranmak için ikincil boynuzları takmak isteyeceksiniz. Yerleştirme kritiktir, bu nedenle "tembel göz" elde edemezsiniz. Kornayı servo seviyesine çıkarmak için onları şim veya rondelalar kullanarak monte ettim. (resme bakın) Aynı zamanda kornaya temas eden rondela sürtünmeyi kolaylaştırmak için bir naylon (plastik) rondeladır.

4. Adım: Gözbebeklerini Hazırlama ve Takma

Gözleri aldığın zaman bebekler içindir, o yüzden onları hazırlamalıyız.

Bu dört aşamalı bir işlemdir:

1) Göz küresinin arka yarısını alın ve en geniş kısmının yarım inç halkasını kesin. (iki resme bakınız)

2) İki parçalı epoksi kullanarak halkayı göze yapıştırın. Göz küresinin ön kısmına tutkal koymayın, yoksa gerçekçi dokunuşa zarar verirsiniz. Yapıştırıcıyı az miktarda kullanın.

3) Tutkal kuruyana kadar onlara dokunmayın. *

4) Göz küresinin # 1 üst ve sol tarafına ve göz küresinin # 2 üst ve sol tarafına bir delik açın. Bu delik, beşinci adımda çatal pimi almaktır.

* Göz kürleri sertleştikçe göz küresi montaj çubuğuna / pivot noktasına geçmek istersiniz.

Bu yüzden beyin fırtınası sırasında pivot noktasını nasıl elde edeceğimi bulmaya çalışıyordum ve RC mağazasında yarım millerle karşılaştım. Yapmam gereken, onları daha kolay yönetilebilir bir boyuta indirerek bir montaj çubuğu bulmaktı.

Montaj çubuğu, etrafa koyduğum bir cıvatadır, yarı milin içine "vidaladım" ve sonra dirseğe cıvatalandım. Bu çok sıkı bir bağlantıydı, yapıştırmak zorunda bile değildim!

Yarım miliniz çubuğun üzerine geldiğinde onu iki parçalı epoksi ile göz küresi saplamasına epoksi edebilirsiniz. Epoksinin tamamen zayıflamasına izin vermeyecek şekilde kurumasını sağlayın.

Son olarak, göz küresi montaj çubuğunu brakete monte edin. Gözbebeklerinin braketle aynı mesafede olmalarını sağlamak için zaman ayırın ve artık ayarlamayın.

Adım 5: Bağlantı Çubuklarını Takma

Kurulumum için, RC mağazasında sahip oldukları bazı biyel / itme çubuğu kullandım. Bu çubukların farklı uzunluklarda ve çaplarda bulunduğunu unutmayın; bu nedenle EZ konektörlerinize uydurduğunuzdan emin olun.

Bağlantı çubukları ve EZ konnektörleri ile ilgili en iyi şey, herhangi bir uzunluğa ayarlayabilmenizdir, çünkü çubuk EZ konektöründen geçer ve üstteki vida, çubuğu yerine sabitler.

Ağır pense veya demir testeresi kullanarak çubuklarınızı uzunlamasına kesin. Önemli olan şey, ucunda çapak olmamasını sağlamak ve böylece EZ konektörüne kaymasını sağlamak.

Göz küresine giden uçta, bir çeşit kanca tasarlaman gerekecek. Bu görev için, garajımda kolayca bulunabildiğinden ve zaten çok hoş bir "kanca" özelliğine sahip olduğu için pimi kullandım. Yapmanız gereken, çatal pimin bir bacağını kısa kesmek ve uzun bacağınızı konektör çubuğunuza lehimlemek. Lehimlendikten (ve soğutulduktan sonra), onu göz deliklerinde deldiğiniz deliklere asabilir ve pense kullanarak kapatabilirsiniz.

Son kısım için onu boynuzlardaki EZ Konektörüne takmanız gerekir, ancak bunları henüz sıkmayın. (şimdilik çubuklar üzerinde kayabiliyor olmalılar)

Adım 6: Servoları Bağlayın

Breadboard'umu kullanarak, her iki servoyu 5VDC'deki Arduino kartından da sürdürebildim, levhayı şu şekilde hazırladım:

1) 5VDC (TURUNCU TEL) breadboard güç şeridine

2) GND (BLUE WIRE) breadboard güç şeridine (aynı zemini her iki servoda da kullanmaya çalışıyorum)

3) Dijital PIN 8 (SARI TEL KABLOSU) yatay servolara (X Ekseni)

4) Dijital PIN 9 (SARI TEL ÜST) dikey servolara (Y Ekseni)

Bu kadar! Şimdi yazılım tarafına.

Adım 7: Programlama

Bu projenin en kafa karıştırıcı kısmı olabilir, bu yüzden sahip olabileceğiniz sorunları en aza indirmek için elimden geldiğince kod yazmaya çalıştım.

Tüm dosyalar sketchbook.zip içindedir.

İlk önce servolarınızı merkezileştirme kodu. Karşılaştığınız sorun servo pozisyonunu düzeltmek. Bu servoların 0 ila 180 derece arasında olduğunu unutmayın.

Özetle, servoları 90 ve 90'a ayarlamak istiyoruz, böylece servoların merkezinde “hareket alanı” var. Sonra Yatay (X Ekseni) ve Dikey (Y Ekseni) limitlerini ayarlayabiliriz. Bunun için eyes_servo_single_test değişen horServo.write (); ve vertServo.write ();

eyes_servo_single_test KOD

#Dahil etmek

Servo horServo;

Servo vertServo;

geçersiz kurulum () {

horServo.attach (8);

vertServo.attach (9);

}

boş döngü () {

horServo.write (80);

vertServo.write (40);

}

SON KODU

Ardından, herhangi bir bağ olup olmadığını görebileceğiniz şekilde servolar için yüksek ve düşük değerlerinizi takarak eyes_full_servo_test'i tekrar kullanırdım. Yanıp sönen bir anahtarın içine yerleştirdim, böylece hangi adımı attığınızı görebiliyorsunuz. USB kablosunu çekerek her zaman ortasından durdurabilirsiniz.

eyes_full_servo_test KOD

//==================

// Bu, Göz Projem için yaptığım hızlı bir servo pozisyon testi.

// Servolar, X ve Y ekseni için ayarlanan konumlardan hareket eder

// Test bir LED'i YÜKSEK 20 saniye, uzun yanıp sönmeye ayarlar.

// Test iki, servoları 6,5 saniye boyunca 40,0 konumunda, iki kez yanıp söner.

// Test üçü servoları 7,5 saniye 80,0 konumunda ayarlar, üç kez yanıp söner.

// Test dördü, servoları 8,5 saniye boyunca 0,70 konumunda, dört kez yanıp söner.

// Test beşi, servoları 0,110 pozisyonuna 9.5 saniye, beş kez yanıp sönmeye ayarlar.

// SIFIRLA BİR KEZ BASINIZ TESTİ TAMAMLANDI

#Dahil etmek // servo kütüphanesi

Servo horServo; // x ekseni servo

Servo vertServo; // y-asxis servo

int led = 13;

geçersiz kurulum () {

horServo.attach (8); // x ekseni servo pimi 8

vertServo.attach (9); // y ekseni servo pimi 9

pinMode (led, ÇIKIŞ);

}

boş döngü () {

// =================== TEST BİR ============== //

// İstirahat veya orta konumda servolar.

horServo.write (80);

vertServo.write (40);

//bir kere göz kırp

digitalWrite (led, YÜKSEK);

gecikmesi (20000);

digitalWrite (led, DÜŞÜK);

// ============ Test İki ================= //

// iki kez iki kez test et

horServo.write (20); // x sol limit

vertServo.write (40);

// iki kere göz kırp

digitalWrite (led, YÜKSEK);

gecikmesi (500);

digitalWrite (led, DÜŞÜK);

gecikmesi (500);

digitalWrite (yol, HIGH);

gecikmesi (500);

digitalWrite (led, DÜŞÜK);

gecikmesi (5000);

// ======================= Test= =================== //

// üç kez üç kez yanıp sönme testi

horServo.write (80); // x doğru limit

vertServo.write (40);

// üç kez yanıp sönme

digitalWrite (led, YÜKSEK);

gecikmesi (500);

digitalWrite (led, DÜŞÜK);

gecikmesi (500);

digitalWrite (yol, HIGH);

gecikmesi (500);

digitalWrite (led, DÜŞÜK);

gecikmesi (500);

digitalWrite (yol, HIGH);

gecikmesi (500);

digitalWrite (led, DÜŞÜK);

gecikmesi (5000);

// ======================= Test= ==================== //

// Dört kez dört kez yanıp sönmesini test et

horServo.write (80);

vertServo.write (0); // y üst sınır

// dört kez göz kırp

digitalWrite (led, YÜKSEK);

gecikmesi (500);

digitalWrite (led, DÜŞÜK);

gecikmesi (500);

digitalWrite (yol, HIGH);

gecikmesi (500);

digitalWrite (led, DÜŞÜK);

gecikmesi (500);

digitalWrite (yol, HIGH);

gecikmesi (500);

digitalWrite (led, DÜŞÜK);

gecikmesi (500);

digitalWrite (yol, HIGH);

gecikmesi (500);

digitalWrite (led, DÜŞÜK);

gecikmesi (5000);

// ====================== Test= ===================== //

// Beş Test beş kez yanıp söner

horServo.write (80);

vertServo.write (110); // y alt sınır

// beş kez yanıp söner

digitalWrite (led, YÜKSEK);

gecikmesi (500);

digitalWrite (led, DÜŞÜK);

gecikmesi (500);

digitalWrite (yol, HIGH);

gecikmesi (500);

digitalWrite (led, DÜŞÜK);

gecikmesi (500);

digitalWrite (yol, HIGH);

gecikmesi (500);

digitalWrite (led, DÜŞÜK);

gecikmesi (500);

digitalWrite (yol, HIGH);

gecikmesi (500);

digitalWrite (led, DÜŞÜK);

gecikmesi (500);

digitalWrite (yol, HIGH);

gecikmesi (500);

digitalWrite (led, DÜŞÜK);

gecikmesi (5000);

// ===================== SON ====================== //

// Dinlenmeye veya merkeze geri döner. Test sona erdi RESET çarptı ya da sonsuza kadar bekle

horServo.write (80);

vertServo.write (40);

digitalWrite (led, YÜKSEK);

ise (1) {}

}

SON KODU

Kod, gözleri yarıçapta hareket ettirmek için PI kullanır. Servolarınızı 8 ve 9 numaralı pinlerde olduğundan emin olmanız veya kodda değiştirmeniz gerekir. Her şeyin doğru ayarlandığından emin olduktan sonra, EZ konektörlerini yerine yerleştirebilirsiniz.

eyes_sketch KOD

#Dahil etmek

#define pi 3.14159265358979323846

#define twopi (2 * pi)

yüzer çemberradius = 50; // 50 her iki taraf - maksimum limit değerinizden daha fazlasını alamaz

şamandıra adım numarası = 360;

şamandıra basamağı;

#Dahil etmek // servo kontrol için servo kütüphanesini içerir

Servo horServo; // sol / sağ hareket için servo

Servo vertServo; // yukarı / aşağı hareket için servo

bayt randomhor; // rastgele yatay pozisyon değişkenini tanımla

bayt randomvert; // rastgele dikey pozisyon değişkenini tanımla

int randomdelay; // rastgele gecikme değişkenini tanımla

#define HLEFTLIMIT 40 // yatay (sol / sağ) servoda sol sınırı tanımlayın

#define HRIGHTLIMIT 80 // yatay (sol / sağ) servoda sağ sınırı tanımla

#define VTOPLIMIT 70 // dikey (yukarı / aşağı) servoda üst sınırı tanımlayın

#define VBOTLIMIT 110 // yatay (yukarı / aşağı) servoda alt limiti tanımla

geçersiz kurulum ()

{

horServo.attach (8); // pim 8'deki yatay servo

vertServo.attach (9); // pin 9 üzerindeki dikey servo

randomSeed (analogRead (0)); // Bağlantısız bir analog pim kullanarak bazı rasgele değerler oluşturun

stepangle = twopi / stepnumber;

(int i = 0; i

şamandıra açısı = i * basamak;

şamandıra x = günah (açı) * circleradius;

şamandıra y = cos (açı) * circleradius;

x = harita (x, 1-circleradius, circleradius, 0, 2 * circleradius);

y = harita (y, 1-circleradius, circleradius, 0, 2 * circleradius);

horServo.write (x); // yatay servoya yaz

vertServo.write (y); // yatay servoya yaz

gecikmesi (10);

}

}

geçersiz döngü ()

{

randomhor = random (HLEFTLIMIT, HRIGHTLIMIT); // sınırları belirle

randomvert = random (VTOPLIMIT, VBOTLIMIT); // sınırları belirle

randomdelay = random (1000, 4000); // her 1 ila 4 saniyede bir hareket eder

horServo.write (randomhor); // yatay servoya yaz

vertServo.write (randomvert); // dikey servoya yaz

gecikmesi (RandomDelay); // rastgele bir zaman gecikmesi (yukarıda ayarlanan değerler dahilinde)

}

SON KODU

Adım 8: Dokunuşları Sonlandırma

Ayrıca nasıl maske yapılacağını ve cam elyafını öğrenmeyi de seçtim. Buradaki adımlara girmeyeceğim ancak diğer talimatlar hakkında bilgi edinebilirsiniz (Yaptım!)

Basit bir cam elyafı maskesi yaptım ve gözü yerinde tutmak için bazı köşebentlerde perçinledim.

Herkese iyi şanslar! Sürüm 2.0 için geri bildirim bıraktığınızdan emin olun!

Birincilik Ödülü

Kit Yarışması

Finalisti

Arduino Yarışması