İçindekiler:

Jack Tanıma ve OLED ile Arduino Gitar Jack Anahtarlık: 7 Adım
Jack Tanıma ve OLED ile Arduino Gitar Jack Anahtarlık: 7 Adım

Video: Jack Tanıma ve OLED ile Arduino Gitar Jack Anahtarlık: 7 Adım

Video: Jack Tanıma ve OLED ile Arduino Gitar Jack Anahtarlık: 7 Adım
Video: Keyestudio 37-in-1 Sensor Kit pour MicroBit and Arduino #34 2024, Temmuz
Anonim
Image
Image
Jack Tanıma ve OLED ile Arduino Gitar Jack Anahtarlık
Jack Tanıma ve OLED ile Arduino Gitar Jack Anahtarlık

Giriş:

Bu talimat, Arduino tabanlı Guitar Jack eklenti anahtar tutucumun yapısını detaylandıracak

Bu benim ilk talimatımdır, bu yüzden lütfen yol boyunca değişiklik / güncellemeler yapabileceğim için benimle birlikte olun.

Adım 1: Parçalar ve Araçlar

Parçalar ve Araçlar
Parçalar ve Araçlar
Parçalar ve Araçlar
Parçalar ve Araçlar
Parçalar ve Araçlar
Parçalar ve Araçlar

Amazon.co.uk veya eBay'den satın aldığım parçaların çoğu, bazılarını zaten tekmeledim - İşte ihtiyacınız olan şeylerin bir listesi.

Amazon bağlantılarının tümü Bağlı Kuruluş bağlantılarıdır, başka yerlerde daha ucuza bulabilirsiniz - Amazon Prime'ı çok kullanıyorum, bu yüzden Amazon benim tercihim oldu.

Bu yapıyı oldukça düşük maliyetli ve bütçe dostu tutmak istedim. Dilerseniz daha büyük bir TFT ekranı ve farklı bir Arduino kullanabilirsiniz. Yüksek bellek kullanımı nedeniyle çökeceği için NANO kullanmayın. Kod, Pro Micro'nun RAM'inin yaklaşık %72'sini kullanır ve kararlıdır, ancak testten sonra bir NANO çökecek ve donacaktır.

(Kod adımında daha fazla ayrıntı.)

PARÇALAR

1x Arduino Pro Mikro -

1x 0.96 Sarı ve Mavi Ekranlı OLED -

4x WS2812 'Piksel' -

1x DS3231 RTC -

4x 1/4 Mono Jack (Veya istediğiniz kadar) - Amazon (Altın) veya Amazon (Gümüş) veya eBay.co.uk

1x Karışık Direnç Paketi -

4x 1/4 Gitar Jakları -

1x Mikro USB Kablo Uzatma Kablosu -

4x M3 Vidalar

ARAÇLAR VE MALZEMELER

- Havya (Bu benim aldığım - bir TS100 - ek ipuçlarıyla geldiği için

- Lehim

- Sıcak Tutkal Tabancası (https://amzn.to/2UTd9PN)

- Tel (https://amzn.to/2VK2ILU)

- Tel kesiciler / sıyırıcılar (https://amzn.to/2KzqUzp)

- 3D Yazıcı veya 3D Baskı hizmeti

İSTEĞE BAĞLI - Bu öğeler, her şeyi nasıl bağlamayı seçtiğinize bağlı olarak isteğe bağlıdır

- Veroboard / Stripboard (https://amzn.to/2KzMFPE)

- Vidalı Terminal Konnektörleri (2 Kutup | 3 Kutup | 4 Kutup)

- PCB Başlıkları (https://amzn.to/2X7RjWf)

2. Adım: Kasayı 3B Yazdırma

Kasayı 3D Yazdırma
Kasayı 3D Yazdırma
Kasayı 3D Yazdırma
Kasayı 3D Yazdırma
Kasayı 3D Yazdırma
Kasayı 3D Yazdırma
Kasayı 3D Yazdırma
Kasayı 3D Yazdırma

Benimkini Creality CR-10S cihazımda Black PLA+ (https://amzn.to/2X2SDtE) kullanarak yazdırdım.

%25 dolgu ile 0,2 katman yüksekliğinde yazdırdım.

Adım 3: Hepsini Bir Araya Getirmek + Şematik

Hepsini Bir Araya Getirmek + Şematik
Hepsini Bir Araya Getirmek + Şematik
Hepsini Bir Araya Getirmek + Şematik
Hepsini Bir Araya Getirmek + Şematik
Hepsini Bir Araya Getirmek + Şematik
Hepsini Bir Araya Getirmek + Şematik
Hepsini Bir Araya Getirmek + Şematik
Hepsini Bir Araya Getirmek + Şematik

Arduino'nuzu nasıl bağlayacağınız tamamen size kalmış - ben şahsen kendimi tabiri caizse bir "kalkan" yapmayı seçtim. Kalkanı yapmak için, dişi başlıkları Pro Micro'ya uyacak şekilde veroboard'a lehimledim, ardından zıt uçlara +5v ve GND'lik bir ray ekledim. + 5v'yi şimdiki 5v 'ray'a bağlamak için atlama teli kullandım ve aynısını GND için yaptım. Daha sonra 4x 100k dirençlerimi ekledim, bir ucu hepsi için +5v'ye, diğer taraf sırasıyla A0, A1, A2 ve A3'e bağlı. Daha sonra A0, A1, A2 & A3 analog pinlerine ve ayrıca Pin 2 (SDA), 3 (SCL) & 4'e vidalı terminaller ekledim.

Kablolarınızı ölçün ve uygun uzunluklarda kesin. İlk önce WS2812 Pixel LED'lerle başladım - İLK WS2812 LED Arduino'dan +5v'ye, Arduino'dan GND'ye ve DIN Pin 4'e bağlanır. Bundan sonra, kalan 3'ü birbirine zincirlenir, tüm 5v> 5v'yi zincirler, Bir Pikselden GND > GND pinleri ve DOUT, bir sonrakinin DIN'sine bağlanır. Lehimlendikten sonra, bunları üstteki kare deliklere hafifçe bastırın ve sıcak tutkal yerlerine ve ayrıca arka tarafı herhangi bir kazayla bağlantı veya kısa devreden korumak için.

LED'lerden sonra Gitar Jack Soketlerini vidaladım. Her birinin bir pimi GND'ye bağlanır ve ardından her birinin 2. pimi buna göre A0, A1, A2 ve A3'e bağlanır. Yani bu Soket 1, A0, Soket 2 ila A1, Soket 3 ila A2 ve Soket 4 ila A3.

Daha sonra OLED bağlantılarına 4 kablo lehimledim ve fazla lehimi mümkün olduğunca kısalttım. Kablolarınızı ekranın arkasından takmak istiyorsunuz, böylece ekranın önüne lehim yapıyorsunuz.

Pinlere dikkat! Bazı OLED'lerin dışında GND, ardından VCC, bazılarının dışında VCC ve ardından GND bulunur

Lehimlendikten ve lehim bağlantısını mümkün olduğunca düzelttikten veya düzleştirdikten sonra, ekranı yavaşça yerine bastırın. Tasarım gereği biraz dardır, ancak farklı baskı toleranslarının bunu etkileyebileceğini ve bu nedenle sığdırmak için bazı küçük son işlemler yapmanız gerekebileceğini unutmayın. Yerleştirdikten sonra, yerinde tutmak için 4 köşenin her birine biraz sıcak tutkal yerleştirin.

Her şeyi Şematik ve resimlerle eşleştirmek için bağlayın ve bir kez mutlu olduğunuzda, Pro Micro ve RTC Saatini de sıcak yapıştırabilir ve ardından USB uzantısını Pro Micro'ya bağlayabilirsiniz.

Bir mikro USB uzantısı kullandım, böylece a) USB güç sağlamak için kullanılabilir, ancak daha fazlası, b) böylece gerekirse her şeyi ayırmadan Pro Micro'yu yeniden programlamak mümkün oldu

Mutlu olduğunuzda, kasayı 4 vidayı kullanarak vidalayın

Adım 4: Fişler

Fişler!
Fişler!
Fişler!
Fişler!
Fişler!
Fişler!

Bunun çalışma şekli, tüm niyet ve amaçlar için tasarımın bir kısmının bir "ohmmetre" olarak çalışmasıdır. Bir ohmmetre, elektrik direncini ölçmek için bir araçtır. Çoğu Multimetre, ölçeği seçip ardından değerini bulmak için bir direnci ölçtüğünüz bu işleve sahiptir. Çalışma prensibi, +ve'ye BİLİNEN bir direnç bağlamanız ve ardından -ve'ye bağlanan BİLİNMEYEN bir dirençle bağlantı kurmanızdır. 2 direnç arasındaki bağlantı Arduino analog pinine bağlanır, böylece voltajı okuyabilir ve direnci hesaplayabilir.

Voltaj bölücü gibi çalışır ve bilinmeyen direncin direncini hesaplar.

R1 ve R2 dirençlerinden oluşan bir voltaj bölücü ağı olarak, Vout = Vin * R2 / (R1 + R2) - Bilinen (R1) direncimiz için 100k kullanıyoruz. Bu bize "voltaj düşüşü" verir

Bundan, şimdi bilinmeyen (R2) direncinin direncini hesaplayabiliriz, R2 = Vout * R1 / (Vin – Vout) - burada R1 bizim 100k (100.000 ohm) direncimizdir

Kullanmak istediğiniz her fiş jakında farklı bir direnç kullanarak, kodu kullanılan jaka göre uygun şekilde ayarlayabilirsiniz.

4 jack fiş kullanıyorum. kullanmayı seçtim:

Bilinen Direnç (x4) - 100k

Jak Fişi 1 - 5.6k

Jak Fişi 2 - 10k

Jak Fişi 3 - 22k

Jak Fişi 4 - 39k

Elbette bunu genişletebilir ve istediğiniz kadar kodlayabilirsiniz.

Adım 5: Kod

kod
kod

İlk olarak, buradan erişebileceğiniz Arduino IDE'ye ihtiyacınız olacak:

Ayrıca birkaç Arduino Kitaplığınızın da olduğundan emin olmanız gerekir:

Adafruit NeoPixel:

u8g2:

Adafruit RTClib:

Adafruit SleepyDog (Opsiyonel):

Doğru "Arduino" kartını seçmeyle ilgili bir not. Başlangıçta bu projeye bir Arduino Nano ile başladım, çünkü bunlar Birleşik Krallık'ta yaklaşık 3 - 4 £ arasında süper ucuzlar veya AliExpress'ten satın alırsanız 1,50 £ kadar düşük (ancak 30-50 günlük beklemeyi umursamayın)). Nano ile ilgili sorun, SRAM'ının 2 KB (2048 bayt) olmasıdır. Bu çizim, Global Değişkenler ile 1728 bayt dinamik bellek kullanır. Bu, yerel değişkenler için yalnızca 320 bayt boş bırakarak SRAM'ın %84'ü demektir. Bu yetersizdi ve Nano'nun kilitlenmesine ve donmasına neden olacaktı.

Pro Micro (Leonardo) 2.5K SRAM'a (2560 bayt) sahiptir, bu da yerel değişkenler için 694 bayt boş alan olduğu anlamına gelir (Çizim, Pro Micro'nun SRAM'ının %72'sini kullanır). Şimdiye kadar bu, kullanımım için tamamen yeterli ve kararlı olduğunu kanıtladı. Birçok jak fişi kullanmayı düşünüyorsanız, daha fazla SRAM'li bir şey kullanmayı düşünebilirsiniz.

Flash depolama söz konusu olduğunda, bu taslak 30k'nin %88'ini (25252 bayt) kullanır (ATMega328p [Nano] ve ATMega32u4 [Pro Micro]'nun her ikisi de 32k'ye sahiptir, ancak 2k önyükleyici için ayrılmıştır)

Yıllar boyunca yüzlerce Arduino çizimi yazdım, ancak bir hobiciyim - bu yüzden kodun bazı bölümlerinin verimsiz olabileceğini veya "bunu yapmanın daha iyi yolları" senaryolarının olabileceğini unutmayın. Olduğu söyleniyor, benim için mükemmel çalışıyor ve bundan memnunum. AVR (en temel Arduino'lar) veya SAMD21 (bir avuç Cortex M0 cihazım var) olsun, çoğu panoda çalışması GEREKEN kütüphaneler kullandım.

Ben de kullanılan jaka göre farklı bir grafik göstermek istedim. Kendinizinkini yapmak istiyorsanız, bu ekranla kullanılacak görüntüler için C Dizisinin nasıl oluşturulacağına dair mükemmel ve basit bir kılavuzdur:

sandhansblog.wordpress.com/2017/04/16/interfacing-displaying-a-custom-graphic-on-an-0-96-i2c-oled/

Grafikleriniz için PROGMEM kullandığınızdan emin olun. Örneğin:

statik const imzasız karakter YOUR_IMAGE_NAME PROGMEM = { }

Tasarım gereği, ekran 5 saniye sonra "zaman aşımına uğrar" ve zamanı görüntülemeye geri döner.

Ayarların çoğu Settings.h içinde bulunabilir, özellikle ilgili jak fişlerinin adı burada kodlanmıştır:

#define PLUG1 "TUŞLARI"

#tanımla PLUG2 "P2" #tanımla PLUG3 "P3" #tanımla PLUG4 "P4" #tanımla GENEL "YOK"

Variables.h içinde kodun bazı önemli kısımları da vardır.

yüzer R1=96700.0;

yüzer R2=96300.0; yüzer R3=96500.0; yüzer R4=96300.0;

Bunlar, 4 direncin her birinin ohm cinsinden BİLİNEN direnç değerleridir.

R1, A0, R2'den A1, R3'ten A2'ye ve R4'ten A3'e bağlı.

100k dirençlerinizi bir multimetre kullanarak ölçmeniz ve direncin tam değerini kullanmanız önerilir. Her şey bağlandıktan sonra direncin ölçümünü yapın. (Ama açık değil).

Jak fişleriniz için direnç seçerken, aralarında iyi bir ohm aralığı olduğundan emin olun ve bunları kodlarken, kendinize seçtiğiniz dirençten daha düşük ve daha yüksek bir aralık verin. İşte kodumda kullandığım şey:

kayan nokta P1_MIN=4000.0, P1_MAX=7000.0; // 5.6K

kayan nokta P2_MIN=80000.0, P2_MAX=12000.0; // 10K kayan nokta P3_MIN=20000.0, P3_MAX=24000.0; // 22K kayan nokta P4_MIN=36000.0, P4_MAX=42000.0; // 39K

Bunun nedeni, analog okuma ve küçük voltaj dalgalanmaları vb. hesaba katmaktır.

O halde, tespit edilen direnç 4000 ohm ile 7000 ohm arasındaysa, 5.6k direnç kullandığınızı varsayıyoruz ve bu nedenle kod bunu Jack Plug 1 olarak görecektir. Ölçülen direnç 8000 ohm ile 7000 ohm arasındaysa. 12000 ohm, varsayım, bunun bir 10k direnç olduğu ve Jack Plug 2 ve benzeri olduğudur.

Biraz hata ayıklama yapmanız gerekiyorsa (Seri hata ayıklama değerli ram kullandığından 'üretimde' yorumsuz bırakmayın) Ayarlar.h'nin en üstünde ihtiyaç duyduğunuz satırların açıklamasını kaldırmanız yeterlidir.

//#define SERIAL_DEBUG

//#define WAIT_FOR_SERIAL

Yorumu kaldırmak için // … işaretini kaldırın. satırı tekrar yorumlamak için // öğesini satırın önüne yeniden ekleyin.

SERIAL_DEBUG, seri hata ayıklamayı ve (örneğin) gibi şeylerin kullanımını sağlar.

Serial.println(F("merhaba dünya"));

WAIT_FOR_SERIAL ek bir adımdır, yani Seri Monitörü açana kadar kod devam etmeyecektir. Bu, önemli seri mesajları kaçırmamanızı sağlar. - BUNU HİÇBİR ZAMAN ETKİN BIRAKMAYIN

WAIT_FOR_SERIAL'i etkin bırakırsanız, anahtarlığınızı herhangi bir "gerçek dünya" ortamında kullanamazsınız, çünkü taslağın ana döngüsüne devam etmeden önce Arduino IDE Seri monitörünü beklerken takılıp kalacaktır. Hata ayıklamanızı tamamladıktan sonra, bu satırı tekrar yorumladığınızdan emin olun ve çiziminizi üretim/tamamlama için yeniden yükleyin.

SERIAL_DEBUG seçeneğini kullanırken kodum aşağıdakileri içerir:

#ifdef SERIAL_DEBUG

Serial.print(F("AKTİF JAK = ")); Serial.println(AKTİF_JACK); int len = sizeof(SOCKET_1234_HAS_PLUGTYPE_X)/sizeof(SOCKET_1234_HAS_PLUGTYPE_X[0]); for (int i=0;i<len;i++) { Serial.print(F("SOCKET_1234_HAS_PLUGTYPE_X[")); Seri.baskı(i); Serial.print(F("] = ")); Serial.println(SOCKET_1234_HAS_PLUGTYPE_X); } Seri.println(); if (INSERTED[soket]) { Serial.print(F("Fiş soketi ")); Serial.print(soket+1); Serial.print(F(" dirence sahiptir: ")); Serial.println(direnç); } #endif

Son Serial.print satırı, en son takılan jakın ohm cinsinden direncinin ne olduğunu size söyleyecektir. Bu çizimi, bir jak fişinin direncini kontrol etmek için bir tür ohmmetre olarak da kullanabilirsiniz.

6. Adım: Notlar

Sanırım her şeyi anlattım ama lütfen yorum yapın, elimden geldiğince okuyup cevaplamaya çalışacağım:)

Biraz zayıf video için özür dilerim - Bir tripodum, kayıt kurulumum veya uygun bir çalışma alanım yok, tabiri caizse bu, telefonu bir elimde tutarken ve diğeriyle demo yapmaya çalışırken (kötü) çekildi.

Okuduğunuz için teşekkürler.

Önerilen: