Mündəricat:

Jack Tanıma və OLED ilə Arduino Gitara Cek Açar Sahibi: 7 addım
Jack Tanıma və OLED ilə Arduino Gitara Cek Açar Sahibi: 7 addım

Video: Jack Tanıma və OLED ilə Arduino Gitara Cek Açar Sahibi: 7 addım

Video: Jack Tanıma və OLED ilə Arduino Gitara Cek Açar Sahibi: 7 addım
Video: XX yüzillik. Faktlar, hadisələr və insanlar - 1920-ci il 2024, Noyabr
Anonim
Image
Image
Arduino Gitara Cek Tanıma və OLED ilə Cek Açar Sahibi
Arduino Gitara Cek Tanıma və OLED ilə Cek Açar Sahibi

Giriş:

Bu təlimat, Arduino əsaslı Guitar Jack plugin açar sahibimin quruluşunu ətraflı izah edəcək

Bu mənim ilk təlimatçılığımdır, buna görə də yol boyu dəyişikliklər / yeniləmələr edə biləcəyim üçün səbr edin

Addım 1: Parçalar və Alətlər

Parçalar və Alətlər
Parçalar və Alətlər
Parçalar və Alətlər
Parçalar və Alətlər
Parçalar və Alətlər
Parçalar və Alətlər

Amazon.co.uk və ya eBay -dən aldığım hissələrin çoxu, bəzilərini artıq təpiklədim - İşdə sizə lazım olanların siyahısı.

Amazon bağlantıları hamısı Ortaq bağlantılarıdır, başqa yerlərdə daha ucuz tapa bilərsiniz - Amazon Prime -dan çox istifadə edirəm, buna görə də Amazon mənim işim oldu.

Bu binanı olduqca ucuz və büdcəyə uyğun saxlamaq istədim. İstədiyiniz qədər böyük bir TFT ekranı və fərqli bir Arduino istifadə edə bilərsiniz. NANO istifadə etməyin, çünki yüksək yaddaş istifadəsi səbəbindən qəzaya uğrayacaq. Kod, Pro Micro RAM -ın təxminən 72% -ni istifadə edir və sabitdir, lakin testdən sonra bir NANO çökəcək və donacaq.

(Ətraflı kod addımında.)

PARÇALAR

1x Arduino Pro Micro -

Sarı və Mavi Ekranlı 1x 0.96 OLED -

4x WS2812 'Piksellər' -

1x DS3231 RTC -

4x 1/4 Mono Jack (Və ya istədiyiniz qədər) - Amazon (Qızıl) və ya Amazon (Gümüş) və ya eBay.co.uk

1x Qarışıq Rezistor Paketi -

4x 1/4 Gitara Jakları -

1x Mikro USB Kabel Uzatma Kabeli -

4x M3 vintlər

Alətlər və materiallar

- Lehimləmə Dəmiri (Aldığım budur - TS100 - əlavə məsləhətlərlə gəldiyi kimi

- Lehim

- İsti Yapışqan Tabancası (https://amzn.to/2UTd9PN)

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

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

- 3D printer və ya 3D çap xidməti

İSTEĞE BAĞLI - Bu maddələr hər şeyi necə bağlamağı seçdiyinizə görə isteğe bağlıdır

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

- Vidalı Terminal Bağlayıcıları (2 Qütb | 3 Qütb | 4 Qütb)

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

Addım 2: Kassanın 3D çapı

Kassanın 3D çapı
Kassanın 3D çapı
Kassanın 3D çapı
Kassanın 3D çapı
Kassanın 3D çapı
Kassanın 3D çapı
Kassanın 3D çapı
Kassanın 3D çapı

Qara PLA+ istifadə edərək, Creality CR-10S-də öz məhsulumu çap etdim (https://amzn.to/2X2SDtE)

0.2% hündürlükdə, 25% doldurma ilə çap etdim.

Addım 3: Hamısını bir araya gətirmək + Şematik

Hamısını bir araya gətirmək + sxematik
Hamısını bir araya gətirmək + sxematik
Hamısını bir araya gətirmək + sxematik
Hamısını bir araya gətirmək + sxematik
Hamısını bir araya gətirmək + sxematik
Hamısını bir araya gətirmək + sxematik
Hamısını bir araya gətirmək + sxematik
Hamısını bir araya gətirmək + sxematik

Arduino -nu necə bağlamağınız tamamilə sizə bağlıdır - mən şəxsən özümü "qalxan" etməyi seçmişəm. Qalxanı düzəltmək üçün Pro Micro ilə uyğunlaşmaq üçün qadın başlıqlarını veroboarda lehimlədim, sonra qarşı tərəflərə +5v və GND bir ray əlavə etdim. +5v -ni indiki 5v 'relsimə bağlamaq üçün tullanan teldən istifadə etdim və GND üçün də bunu etdim. Daha sonra bir ucu hamısı üçün +5v -ə qoşulan 4x 100k rezistorlarımı əlavə etdim, sonra digər tərəfi sırasıyla A0, A1, A2 və A3 -ə bağlayır. Daha sonra A0, A1, A2 və A3 analog sancaqlarına vintli terminallar əlavə etdim və 2 (SDA), 3 (SCL) & 4 pinlərinə də əlavə etdim.

Kabellərinizi ölçün və uyğun uzunluqlarda kəsin. Əvvəlcə WS2812 Pixel LEDləri ilə başladım - İLK WS2812 LED Arduinodan +5v -ə, Arduino -dan GND -yə, DIN isə Pin 4 -ə qoşulur. Bundan sonra qalan 3 -ü 5v> 5v -ni zəncirləyərək bir -birinə zəncirlə bağlayırlar. GND> GND pinləri və bir Pixel -dən DOUT, digərinin DIN -ə bağlanır. Lehimləndikdən sonra, yuxarıdakı kvadrat deliklərə yumşaq bir şəkildə basın və isti yapışqan yerinə qoyun və arxanı təsadüfən bağlanan və ya şortdan qoruyun.

LED -lərdən sonra Gitara Cek Soketlərini vidaladım. Hər birinin bir pimi GND -yə, sonra hər birinin 2 -ci pininə uyğun olaraq A0, A1, A2 və A3 -ə bağlanır. Beləliklə, Soket 1, A0, Soket 2 - A1, Soket 3 - A2 və Soket 4 - A3.

Sonra 4 telini OLED əlaqələrinə lehimlədim və artıq lehimi mümkün qədər kəsdim. Tellerinizi ekranın arxasından bağlamaq istəyirsiniz, buna görə də ekranın ön tərəfinə lehimləyirsiniz.

Pimlərə diqqət yetirin! Bəzi OLED -lərin xaricində GND, sonra VCC, bəzilərinin xaricində VCC və sonra GND var

Lehimləndikdən və lehim bağlantısını mümkün qədər düzəltdikdən sonra ekranı yerləşdiyi yerə yumşaq bir şəkildə basın. Dizayn baxımından bir qədər sıx uyğun gəlir, amma unutmayın ki, fərqli çap toleransları buna təsir edə bilər və buna görə də uyğunlaşdırmaq üçün bəzi kiçik post-emal etməlisiniz. Yerə qoyduqdan sonra, yerində saxlamaq üçün hər 4 küncdən bir az isti yapışqan qoyun.

Şematik və şəkillərə uyğun olaraq hər şeyi bağlayın və xoşbəxt olduqdan sonra, Pro Micro və RTC Clock -u isti yapışdıra bilərsiniz və sonra USB uzantısını Pro Micro -ya bağlaya bilərsiniz.

Mikro USB uzantısı istifadə etdim ki, a) USB güc vermək üçün istifadə olunsun, amma daha çox b) hər şeyi ayırmadan Pro Micro -nu yenidən proqramlaşdırmaq mümkün olsun.

Xoşbəxt olduqdan sonra işi 4 vintlə birlikdə vidalayın

Addım 4: Fişlər

Fişlər!
Fişlər!
Fişlər!
Fişlər!
Fişlər!
Fişlər!

Bunun necə işlədiyi, dizaynın bir hissəsi "ohmmetre" olaraq çalışmasıdır. Bir ohmmetre elektrik müqavimətini ölçmək üçün bir cihazdır. Əksər multimetrlərdə bu funksiyanı yerinə yetirməklə miqyası seçib dəyərini tapmaq üçün bir rezistoru ölçmək olar. İş prinsipi, bilinən bir rezistoru +ve -yə bağlamağınızdır ki, bu da -ve -yə qoşulan BİLMƏN bir rezistora bağlanır. 2 rezistor arasındakı birləşmə Arduino analog pininə qoşulur ki, gərginliyi oxuya və müqaviməti hesablaya bilsin.

Gərginlik bölücü kimi işləyir və naməlum rezistorun müqavimətini hesablayır.

R1 və R2 rezistorlarının gərginlik bölücü şəbəkəsi olaraq, Vout = Vin * R2 / (R1 + R2) - Məlum olan (R1) rezistorumuz üçün 100k istifadə edirik. Bu bizə "gərginlik düşməsi" verir

Buradan bilinməyən (R2) rezistorun müqavimətini işlədə bilərik.

R2 = Vout * R1 / (Vin - Vout) - burada R1 100k (100.000 ohm) müqavimətçimizdir

İstifadə etmək istədiyiniz hər bir fiş yuvasında fərqli bir rezistor istifadə edərək, istifadə olunan krikodan asılı olaraq kodu müvafiq olaraq tənzimləyə bilərsiniz.

4 ədəd fiş istifadə edirəm. İstifadə etməyi seçdim:

Tanınmış Rezistor (x4) - 100k

Jack Plug 1 - 5.6k

Jack Plug 2 - 10k

Jack Plug 3 - 22k

Jack Plug 4 - 39k

Əlbəttə ki, bunu genişləndirə və istədiyiniz qədər kod yaza bilərsiniz.

Addım 5: Kod

Kod
Kod

Əvvəlcə buradan əldə edilə bilən Arduino IDE -yə ehtiyacınız olacaq:

Bir neçə Arduino Kitabxananızın da olduğundan əmin olmalısınız:

Adafruit NeoPixel:

u8g2:

Adafruit RTCLib:

Adafruit SleepyDog (İsteğe bağlı):

Doğru "Arduino" lövhəsini seçməklə bağlı qeyd. Başlanğıcda bu layihəni Arduino Nano ilə başladım, çünki İngiltərədə təxminən 3-4 funt sterlinqə və ya AliExpress-dən satın alsanız 1.50 funt sterlinqə çox ucuzdur (lakin 30-50 gün gözləməyinizə əhəmiyyət verməyin)). Nanonun problemi, SRAM -ın 2 KB (2048 bayt) olmasıdır. Bu eskiz Qlobal Dəyişənlərlə birlikdə 1728 bayt dinamik yaddaşdan istifadə edir. SRAM -ın 84% -i, yerli dəyişənlər üçün cəmi 320 bayt pulsuzdur. Bu kifayət deyildi və Nanonun kilidlənməsinə və donmasına səbəb olardı.

Pro Micro (Leonardo) 2.5K SRAM -a (2560 bayt) malikdir, yəni yerli dəyişənlər üçün 694 bayt pulsuzdur (Eskiz Pro Micro SRAM -in 72% -ni istifadə edir). İndiyə qədər bu mənim istifadəm üçün mükəmməl uyğun və sabit olduğunu sübut etdi. Bir çox fiş istifadə etmək niyyətindəsinizsə, daha çox SRAM ilə bir şey istifadə etməyi düşünə bilərsiniz.

Flash yaddaşına gəldikdə, bu eskiz 88% (25252 bayt) 30k istifadə edir (ATMega328p [Nano] və ATMega32u4 [Pro Micro] hər ikisində 32k var, ancaq 2k yükləyici üçün ayrılmışdır)

İllər ərzində yüzlərlə Arduino eskizi yazmışam, amma hobbiçiyəm - kodun bəzi hissələrinin səmərəsiz ola biləcəyini və ya "bunu etmənin daha yaxşı yollarının" ola biləcəyini unutmayın. Deyilənə görə, mənim üçün mükəmməl işləyir və bundan məmnunam. AVR (ən əsas Arduino) və ya SAMD21 olsun (bir neçə Cortex M0 cihazım var), əksər lövhələrdə işləməli olan kitabxanalardan istifadə etdim.

İstifadə olunan yuvaya əsaslanaraq fərqli bir qrafik göstərmək istədim. Öz əlinizlə etmək istəyirsinizsə, bu ekranla istifadə ediləcək şəkillər üçün C Arrayının necə yaradılacağına dair parlaq bir sadə bələdçinizdir:

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

Qrafikləriniz üçün PROGMEM istifadə etdiyinizə əmin olun. Məsələn:

statik const imzasız simvol YOUR_IMAGE_NAME PROGMEM = {}

Dizayn olaraq, ekran 5 saniyədən sonra "zaman aşımına" uğrayacaq və vaxtı göstərməyə qayıdır.

Ayarların çoxunu Settings.h -də tapa bilərsiniz, xüsusən əlaqəli fişlərin adları burada kodlanır:

#deşif edin PLUG1 "KEYS"

#təyin PLUG2 "P2" #PLUG3 "P3" təyin #PLUG4 "P4" təyin #GENERIC "NA" tərif et

Variables.h içərisində kodun bəzi vacib hissələri də var

float R1 = 96700.0;

float R2 = 96300.0; float R3 = 96500.0; float R4 = 96300.0;

Bunlar, 4 müqavimətin hər birinin ohm olaraq bilinən müqavimət dəyərləridir.

R1 A0 -a, R2 -dən A1 -ə, R3 -dən A2 -yə və R4 -dən A3 -ə bağlıdır.

100k rezistorlarınızı bir multimetrlə ölçmək və rezistorun dəqiq dəyərini istifadə etmək məsləhətdir. Hər şey bağlandıqda rezistorun ölçüsünü götürün. (Ancaq işə salınmır).

Jak fişləriniz üçün rezistorlar seçərkən aralarında yaxşı bir ohm boşluğunun olduğundan əmin olun və onları kodlaşdırarkən özünüzə seçdiyiniz rezistordan daha aşağı və daha yüksək bir sıra verin. Kodumda istifadə etdiyim budur:

float P1_MIN = 4000.0, P1_MAX = 7000.0; // 5.6K

float P2_MIN = 8000.0, P2_MAX = 12000.0; // 10K float P3_MIN = 20000.0, P3_MAX = 24000.0; // 22K float P4_MIN = 36000.0, P4_MAX = 42000.0; // 39K

Bunun səbəbi analoqun oxunması və kiçik gərginlik dalğalanmaları və s

Beləliklə, nə olur, aşkar olunan müqavimət 4000 ohm və 7000 ohm arasındadırsa, 5.6k rezistor istifadə etdiyinizi güman edirik və buna görə də kod bunu Jack Plug 1 olaraq görür. Ölçülmüş müqavimət 8000 ohm və 12000 ohm, fərziyyə 10k rezistor olduğu və Jack Plug 2 və s.

Bir az ayıklama etməlisinizsə (Serial ayıklama qiymətli qoç istifadə etdiyindən 'istehsalda' şərhsiz buraxmayın) sadəcə Parametrlərin yuxarısında istədiyiniz sətirləri açın.

//#SERIAL_DEBUG təyin edin

//#SERİLİ GÖZLƏMƏYİ təyin edin

Yorum yazmamaq üçün, //… silin. xətti geri şərh etmək üçün // sətirinin önünə yenidən əlavə edin.

SERIAL_DEBUG, serial ayıklamayı və (məsələn) kimi şeylərin istifadəsini təmin edir.

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

WAIT_FOR_SERIAL əlavə bir addımdır, yəni Serial Monitoru açana qədər kod davam etməyəcək. Bu, heç bir vacib serial mesajını qaçırmamağınıza kömək edir. - BU ETKİNLİDƏN ASLA ÇIXMAYIN

WAIT_FOR_SERIAL -ı aktiv buraxsanız, eskizin əsas döngəsinə davam etməzdən əvvəl Arduino IDE Serial monitorunu gözlədiyinə görə heç bir "real dünya" mühitində açar sahibinizdən istifadə edə bilməyəcəksiniz. Hata ayıklamanızı tamamladıqdan sonra, bu sətri yenidən şərh etmədiyinizə əmin olun və istehsal/tamamlama üçün eskizinizi yenidən yükləyin.

SERIAL_DEBUG seçimindən istifadə edərkən kodumda aşağıdakılar var:

#ifdef SERIAL_DEBUG

Serial.print (F ("ACTIVE JACK =")); Serial.println (ACTIVE_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 [")); Serial. çap (i); Serial.print (F ("] =")); Serial.println (SOCKET_1234_HAS_PLUGTYPE_X ); } Serial.println (); if (INSERTED [socket]) {Serial.print (F ("Soketə qoşun")); Serial.çap (yuva+1); Serial.print (F ("rezistansı:")); Serial.println (müqavimət); } #endif

Son Serial.print xətti, müqavilənin ohm olaraq, son daxil edilən jakın nə olduğunu sizə xəbər verəcəkdir. Beləliklə, bu eskizdən bir fiş müqavimətini yoxlamaq üçün bir növ ohmmetre olaraq da istifadə edə bilərsiniz.

Addım 6: Qeydlər

Düşünürəm ki, hər şeyi əhatə etmişəm, amma şərh yazın və bacardığım vaxt oxumaq və cavab vermək üçün əlimdən gələni edəcəyəm:)

Bir qədər kasıb videoya görə üzr istəyirəm - Mənim tripodum, kodlaşdırma qurğum və ya düzgün iş yerim yoxdur, buna görə telefonu bir əlində tutaraq digər əlimlə demo etməyə çalışdığım üçün lentə alınıb.

Oxuduğunuz üçün təşəkkürlər.

Tövsiyə: