Mundarija:

Arduino Gitara Jekni tanib oluvchi va OLEDli kalit ushlagichi: 7 qadam
Arduino Gitara Jekni tanib oluvchi va OLEDli kalit ushlagichi: 7 qadam

Video: Arduino Gitara Jekni tanib oluvchi va OLEDli kalit ushlagichi: 7 qadam

Video: Arduino Gitara Jekni tanib oluvchi va OLEDli kalit ushlagichi: 7 qadam
Video: Arduino Guitar Jack Key Holder with Jack Recognition & OLED 2024, Iyul
Anonim
Image
Image
Arduino gitara uyasi Jekni tanib olish va OLED bilan
Arduino gitara uyasi Jekni tanib olish va OLED bilan

Kirish:

Bu ko'rsatma mening Arduino asosidagi Guitar Jack plagin kalit ushlagichining tuzilishi haqida batafsil ma'lumot beradi

Bu mening birinchi o'qituvchim, shuning uchun men bilan sabr -toqat qiling, chunki men yo'lda o'zgartirishlar / yangilanishlar kiritishim mumkin

1 -qadam: ehtiyot qismlar va asboblar

Qismlar va asboblar
Qismlar va asboblar
Qismlar va asboblar
Qismlar va asboblar
Qismlar va asboblar
Qismlar va asboblar

Aksariyat qismlarni Amazon.co.uk yoki eBay -dan sotib oldim, ba'zilarini men allaqachon tepib yubordim - Mana sizga kerak bo'lgan narsalar ro'yxati.

Amazon havolalari - bu Hamma sheriklik havolalari, siz boshqa joydan arzonroq topishingiz mumkin - men Amazon Prime -dan juda ko'p foydalanaman, shuning uchun Amazon shunchaki men uchun bordi.

Men bu qurilishni ancha arzon va byudjetga mos saqlashni xohlardim. Siz xohlaganingizdek kattaroq TFT ekranidan, shuningdek boshqa Arduino -dan foydalanishingiz mumkin. NANO -dan foydalanmang, chunki u xotiradan yuqori foydalanish tufayli qulab tushadi. Kod Pro Micro operativ xotirasining 72 foizini ishlatadi va barqaror, lekin sinovdan NANO qulab tushadi va muzlab qoladi.

(Batafsil kod bosqichida.)

QISMLAR

1x Arduino Pro Micro -

Sariq va ko'k displeyli 1x 0,96 dyuymli OLED -

4x WS2812 'piksel' -

1x DS3231 RTC -

4x 1/4 dyuymli Mono Jek (Yoki xohlaganingizcha) - Amazon (Oltin) yoki Amazon (Kumush) yoki eBay.co.uk

1x aralash rezistorlar to'plami -

4x 1/4 dyuymli gitara uyasi -

1x Micro USB kabel uzaytiruvchi kabeli -

4x M3 vintlardek

QUROLLAR VA MATERIALLAR

- Lehimlash dazmollari

- Lehim

- Issiq yopishtiruvchi qurol (https://amzn.to/2UTd9PN)

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

- Sim kesgichlar/striptizchilar (https://amzn.to/2KzqUzp)

- 3D printer yoki 3D bosib chiqarish xizmati

QO'ShIMChA - Bu elementlar ixtiyoriydir, bu siz hamma narsani qanday ulashni tanlashingizga bog'liq

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

- Vintli terminal ulagichlari (2 qutbli | 3 qutbli | 4 qutbli)

- PCB sarlavhalari (https://amzn.to/2X7RjWf)

2 -qadam: Kosonni 3D bosib chiqarish

Kosonni 3D bosib chiqarish
Kosonni 3D bosib chiqarish
Kosonni 3D bosib chiqarish
Kosonni 3D bosib chiqarish
Kosonni 3D bosib chiqarish
Kosonni 3D bosib chiqarish
Kosonni 3D bosib chiqarish
Kosonni 3D bosib chiqarish

Men o'zimning Creality CR-10S-da Black PLA+ yordamida chop qildim (https://amzn.to/2X2SDtE)

Men 0,2 qatlam balandlikda, 25% to'ldirish bilan chop etdim.

3 -qadam: Hammasini birlashtirish + sxematik

Hammasini birlashtirish + sxematik
Hammasini birlashtirish + sxematik
Hammasini birlashtirish + sxematik
Hammasini birlashtirish + sxematik
Hammasini birlashtirish + sxematik
Hammasini birlashtirish + sxematik
Hammasini birlashtirish + sxematik
Hammasini birlashtirish + sxematik

Arduino -ni qanday ulashni o'zingiz hal qilasiz - men shaxsan o'zimni "qalqon" qilishni tanladim. Qalqonni yasash uchun men Pro Micro -ga mos keladigan ayol boshlarini veroboardga lehimladim, keyin qarama -qarshi uchlarida +5v va GND temir yo'lini qo'shdim. Men +5v ni hozirgi 5v "temir yo'li" ga ulash uchun o'tish simini ishlatardim va GND uchun ham shunday qildim. Keyin men 4x 100k rezistorlarimni qo'shdim, bir uchi hammasi uchun +5v ga ulangan, keyin ikkinchi tomoni mos ravishda A0, A1, A2 va A3 ga ulangan. Keyin men A0, A1, A2 va A3 analog pinlariga vintli terminallarni, shuningdek, 2 (SDA), 3 (SCL) va 4 -pinlarni qo'shdim.

Elektr simlarini o'lchab, kerakli uzunliklarga kesib oling. Men birinchi bo'lib WS2812 pikselli LED -laridan boshladim - BIRINChI WS2812 LED Arduino -dan +5v ga, Arduino -dan GND -ga, DIN esa 4 -pinga ulanadi. Shundan so'ng, qolgan 3 ta 5V> 5v zanjir bilan bog'lab qo'yilgan. GND> GND pinlari va DOUT bitta Pixel -dan keyingi DIN -ga ulanadi. Lehimlangandan so'ng, ularni tepadagi to'rtburchaklar teshiklariga, issiq yopishtiruvchi joyiga sekin bosing va orqa qismini tasodifiy ulanish yoki qisqa tutashuvdan saqlang.

LEDlardan so'ng, men gitara uyasi rozetkalarini burab qo'ydim. Har birining bitta pimi GND ga, so'ngra har birining 2 -piniga mos ravishda A0, A1, A2 va A3 ga ulanadi. Shunday qilib, bu Socket 1, A0, Soket 2 - A1, Soket 3 - A2 va Soket 4 - A3.

Keyin men OLED ulanishiga 4 ta simni lehimladim va ortiqcha lehimni iloji boricha kesib tashladim. Siz simlaringizni ekranning orqa qismidan ulashni xohlaysiz, shuning uchun siz ekranning old qismiga lehimsiz.

Pimlarga e'tibor bering! Ba'zi OLED -larda tashqi tomondan GND, keyin VCC, ba'zilarining tashqarisida VCC, keyin esa GND bor

Bir marta lehimlangandan so'ng, siz lehim aloqasini iloji boricha kesib tashladingiz yoki tekisladingiz, ekranni joyiga sekin bosing. Bu dizayn jihatidan biroz mahkamlangan, lekin shuni bilingki, har xil bosma toleranslar bunga ta'sir qilishi mumkin, shuning uchun siz uni moslashtirish uchun birozdan keyin ishlov berishingiz kerak bo'ladi. Joyga qo'yilgandan so'ng, uni ushlab turish uchun 4 burchakning har biriga issiq elim qo'ying.

Sxematik va rasmlarga mos keladigan hamma narsani ulang va baxtli bo'lgandan so'ng, siz Pro Micro va RTC soatlarini issiq yopishtirishingiz va USB kengaytmasini Pro Micro -ga ulashingiz mumkin.

Men micro USB kengaytmasini ishlatardim, a) USB quvvat bilan ta'minlanishi mumkin, lekin b) shuning uchun agar kerak bo'lsa, hamma narsani ajratmasdan Pro Micro -ni qayta dasturlash mumkin edi.

Baxtli bo'lgandan so'ng, ishni 4 vint yordamida mahkamlang

4 -qadam: vilkalar

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

Bu qanday ishlaydi, dizaynning bir qismi "ohmmetr" sifatida ishlaydi. Ohmmetr - elektr qarshiligini o'lchash uchun asbob. Ko'pgina multimetrlar bu funktsiyaga ega, shunda siz o'lchovni tanlaysiz va uning qiymatini topish uchun rezistorni o'lchaysiz. Ishchi printsip shundaki, siz bilgan qarshilikni +ve ga ulashingiz kerak, u keyin -ve ga ulanadigan BILIMSIZ rezistorga ulanadi. 2 rezistor orasidagi birikma Arduino analog piniga ulanadi, shunda u kuchlanishni o'qiydi va qarshilikni hisoblaydi.

U kuchlanish bo'luvchi kabi ishlaydi va noma'lum qarshilik qarshiligini hisoblab chiqadi.

R1 va R2 rezistorlarining kuchlanish bo'luvchi tarmog'i sifatida, Vout = Vin * R2 / (R1 + R2) - Biz ma'lum bo'lgan (R1) qarshilik uchun 100k dan foydalanayapmiz. Bu bizga "kuchlanish pasayishi" ni beradi

Shundan kelib chiqib, biz hozir noma'lum (R2) rezistor qarshiligini ishlab chiqishimiz mumkin.

R2 = Vout * R1 / (Vin - Vout) - bu erda R1 - 100k (100000 ohm) qarshiligimiz

Siz foydalanmoqchi bo'lgan har bir ulagichga boshqa rezistorni qo'llagan holda, siz kodni mos keladigan rozetkaga qarab sozlashingiz mumkin.

Men 4 ta ulagichdan foydalanaman. Men foydalanishni tanladim:

Ma'lum qarshilik (x4) - 100k

Jek vilkasi 1 - 5,6 ming

Jek vilkasi 2 - 10k

Jek Plug 3 - 22k

Jek Plug 4 - 39k

Siz, albatta, buni kengaytirib, xohlaganingizcha kod yozishingiz mumkin.

5 -qadam: Kod

Kodeks
Kodeks

Birinchidan, sizga bu erda mavjud bo'lgan Arduino IDE kerak bo'ladi:

Bundan tashqari, sizda bir nechta Arduino kutubxonasi borligiga ishonch hosil qilishingiz kerak bo'ladi:

Adafruit NeoPixel:

u8g2:

Adafruit RTCLib:

Adafruit SleepyDog (ixtiyoriy):

To'g'ri "Arduino" taxtasini tanlash haqida eslatma. Dastlab men bu loyihani Arduino Nano bilan boshlaganman, chunki ular Buyuk Britaniyada taxminan 3-4 funt sterlingga, yoki AliExpressdan sotib olsangiz, 1,50 funtga arzon (lekin 30-50 kun kutishga qarshi emas)). Nano bilan bog'liq muammo shundaki, bu SRAM - 2 KB (2048 bayt). Ushbu eskizda global o'zgaruvchilar bilan 1728 baytli dinamik xotira ishlatiladi. Bu SRAMning 84%, mahalliy o'zgaruvchilar uchun atigi 320 bayt bo'sh qoladi. Bu etarli emas edi va Nano qulflanib qolib ketishiga olib keldi.

Pro Micro (Leonardo) 2,5K SRAM (2560 bayt) ga ega, ya'ni mahalliy o'zgaruvchilar uchun 694 bayt bo'sh (Proket Micro SRAM -ning 72% ishlatilgan). Hozircha bu mening foydalanishim uchun juda mos va barqaror bo'lib chiqdi. Agar siz ko'p ulagichlardan foydalanmoqchi bo'lsangiz, SRAM -dan ko'proq narsani ishlatishingiz mumkin.

Flash xotirasiga kelsak, bu eskizda 30% ning 88% (25252 bayt) ishlatiladi (ATMega328p [Nano] va ATMega32u4 [Pro Micro] ikkalasida ham 32k, lekin 2k yuklovchi uchun saqlangan)

Men yillar davomida yuzlab Arduino eskizlarini yozganman, lekin men havaskorman - shuni yodda tutingki, kodning ba'zi qismlari samarasiz bo'lishi mumkin yoki "buni qilishning yaxshiroq usullari" bo'lishi mumkin. Aytgancha, bu men uchun juda yaxshi ishlaydi va men bundan mamnunman. Men AVR (eng asosiy Arduino) yoki SAMD21 bo'lsin (menda bir nechta Cortex M0 qurilmalari bor) bo'lsin, ko'pgina taxtalarda ishlashi kerak bo'lgan kutubxonalardan foydalandim.

Men ishlatilgan uyaga qarab boshqa grafikani ko'rsatishni xohlardim. Agar siz o'zingiz yaratmoqchi bo'lsangiz, bu displeyda ishlatiladigan tasvirlar uchun C massivini yaratish bo'yicha ajoyib oddiy qo'llanma:

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

Grafika uchun PROGMEMdan foydalanganingizga ishonch hosil qiling. Masalan:

statik const imzosiz belgisi YOUR_IMAGE_NAME PROGMEM = {}

Dizayni bo'yicha, ekran 5 soniyadan so'ng "tanaffus" qiladi va vaqtni ko'rsatishga qaytadi.

Sozlamalarning ko'pini Settings.h da topish mumkin, xususan, ulangan ulagichlarning nomi bu erda kodlangan:

#aniqlang PLUG1 "KEYS"

#PLUG2 "P2" ni aniqlang #PLUG3 "P3" ni belgilang #PLUG4 "P4" ni belgilang #Umumiy "NA" ni aniqlang

Variables.h ichida kodning muhim qismlari ham bor

float R1 = 96700.0;

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

Bu 4 ta rezistorning ohmda ma'lum bo'lgan qarshilik qiymatlari.

R1 A0, R2 - A1, R3 - A2 va R4 - A3 ga ulangan.

100k qarshiligingizni multimetr yordamida o'lchash va rezistorning aniq qiymatini ishlatish maqsadga muvofiqdir. Hamma narsa ulangandan so'ng rezistorning o'lchovini oling. (Lekin yoqilmagan).

Jek vilkalari uchun rezistorlarni tanlayotganda, ular orasidagi ohm oralig'i yaxshi ekanligiga ishonch hosil qiling va ularni kodlashda o'zingiz tanlagan rezistordan pastroq va balandroq oraliq bering. Mana mening kodimda nima ishlatganman:

float P1_MIN = 4000.0, P1_MAX = 7000.0; // 5,6 ming

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

Buning sababi analog o'qish va kuchlanishning kichik tebranishlarini hisobga olishdir

Xo'sh, nima bo'ladi, agar aniqlangan qarshilik 4000 ohmdan 7000 ohmgacha bo'lsa, biz siz 5.6k rezistor ishlatgan deb taxmin qilyapmiz, shuning uchun kod buni Jek Plug 1 sifatida ko'radi. Agar o'lchangan qarshilik 8000 ohm va 12000 ohm, bu 10k qarshilik va Jek Plug 2 va boshqalar.

Agar siz disk raskadrovka qilishingiz kerak bo'lsa ("ishlab chiqarishda" sharhlanmagan qoldirmang, chunki ketma -ket disk raskadrovka qimmatbaho qo'chqorni ishlatadi).

//#SERIAL_DEBUG ni aniqlang

//#SERIALNI KUTISHNI belgilang

Fikr bildirmaslik uchun, // ni olib tashlang. chiziqni sharhlash uchun // satr oldiga // ni qayta qo'shing.

SERIAL_DEBUG ketma -ket disk raskadrovka va (masalan) kabi narsalardan foydalanishga imkon beradi.

Serial.println (F ("salom dunyo"));

WAIT_FOR_SERIAL - bu qo'shimcha qadam, ya'ni Serial monitorni ochmaguningizcha kod davom etmaydi. Bu sizga muhim ketma -ket xabarlarni o'tkazib yubormaslikka yordam beradi. - Hech qachon bu yoqilganni qoldirmang

Agar siz WAIT_FOR_SERIAL -ni yoqsangiz, siz kalit ushlagichini "haqiqiy dunyo" muhitida ishlata olmaysiz, chunki u eskizning asosiy halqasida davom etishidan oldin Arduino IDE Serial monitorini kutib qoladi. Nosozliklarni tuzatishni tugatganingizdan so'ng, ushbu qatorni yana izohdan chiqarganingizga ishonch hosil qiling va ishlab chiqarish/tugatish uchun eskizingizni qayta yuklang.

SERIAL_DEBUG opsiyasidan foydalanganda mening kodim quyidagilarni o'z ichiga oladi:

#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]); uchun (int i = 0; i <len; i ++) {Serial.print (F ("SOCKET_1234_HAS_PLUGTYPE_X [")); Serial.print (i); Serial.print (F ("] =")); Serial.println (SOCKET_1234_HAS_PLUGTYPE_X ); } Serial.println (); if (INSERTED [soket]) {Serial.print (F ("Soketga ulang"))); Serial.print (soket+1); Serial.print (F ("o'zgarmasligi bor:")); Serial.println (qarshilik); } #endif

Oxirgi Serial.print liniyasi ohmda oxirgi o'rnatilgan uyaning qarshiligi nima ekanligini aytib beradi. Shunday qilib, siz ushbu eskizni rozetkaning qarshiligini tekshirish uchun ohmmetr sifatida ishlatishingiz mumkin.

6 -qadam: Eslatmalar

O'ylaymanki, men hamma narsani yoritganman, lekin iltimos, sharh qoldiring va men qo'limdan kelganicha o'qishga va javob berishga harakat qilaman:)

Kambag'al video uchun uzr - menda shtativ, qayta yozish moslamasi yoki to'g'ri ish joyi yo'q, shuning uchun bu telefonni bir qo'lida ushlab, ikkinchi qo'li bilan demo qilishga urinish (yomon) tasvirga olingan.

O'qiganingiz uchun tashakkur.

Tavsiya: