Мазмуну:

Ардуино гитарасы Джек ачкычын кармоочу жана OLED: 7 кадам
Ардуино гитарасы Джек ачкычын кармоочу жана OLED: 7 кадам

Video: Ардуино гитарасы Джек ачкычын кармоочу жана OLED: 7 кадам

Video: Ардуино гитарасы Джек ачкычын кармоочу жана OLED: 7 кадам
Video: спокойная ночь на самой дешевой электрогитаре, дешевле нее только гитары с алика за 5-6к… 2024, Ноябрь
Anonim
Image
Image
Arduino гитарасы Jack кармоочу жана OLED менен
Arduino гитарасы Jack кармоочу жана OLED менен

Киришүү:

Бул көрсөтмө менин Arduino негизделген Guitar Jack плагин ачкыч кармагычымдын түзүлүшүн деталдуу чагылдырат

Бул менин биринчи көрсөтмөм, ошондуктан жолдо өзгөрүүлөрдү / жаңыртууларды киргизе алам

1 -кадам: Бөлүктөр жана шаймандар

Бөлүктөр жана куралдар
Бөлүктөр жана куралдар
Бөлүктөр жана куралдар
Бөлүктөр жана куралдар
Бөлүктөр жана куралдар
Бөлүктөр жана куралдар

Мен Amazon.co.uk же eBayден сатып алган бөлүктөрдүн көбүн, кээ бирлерин мурунтан эле тээп жүргөм - Бул жерде сизге керектүү нерселердин тизмеси келтирилген.

Amazon шилтемелери - бул бардык Affiliate шилтемелери, сиз башка жерден арзаныраак таба аласыз - мен Amazon Prime -ды көп колдоном, андыктан Amazon жөн эле менин колумдан келди.

Мен бул курулушту салыштырмалуу арзан жана бюджетке ылайыктуу кылгым келди. Сиз каалагандай чоңураак TFT экранын, ошондой эле башка Arduino колдоно аласыз. НАНОну колдонбоңуз, анткени ал эс тутуму көп болгондуктан бузулат. Код Pro Micro'дун RAMнын болжол менен 72% ын колдонот жана туруктуу, бирок тестирлөөдөн кийин NANO бузулат жана тоңуп калат.

(Көбүрөөк маалымат Кодекс кадамында.)

БӨЛҮКТӨР

1x Arduino Pro Micro -

Сары жана көк дисплей менен 1x 0.96 OLED -

4x WS2812 'Пикселдер' -

1x DS3231 RTC -

4x 1/4 Моно Джек (Же каалашынча) - Amazon (Алтын) же Амазонка (Күмүш) же eBay.co.uk

1x аралаш резистордук пакет -

4x 1/4 Гитаранын уячалары -

1x Micro USB Cable Extension Cable -

4x M3 бурамалары

КУРАЛДАР & МАТЕРИАЛДАР

- Паяльник (Бул мен сатып алган - TS100 - бул кошумча кеңештер менен келгендей

- Solder

- Hot Glue Gun (https://amzn.to/2UTd9PN)

- Зым (https://amzn.to/2VK2ILU)

- Зым кескичтер/стриптиздер (https://amzn.to/2KzqUzp)

- 3D принтер же 3D басып чыгаруу кызматы

ОПЦИОНАЛДЫК - Бул нерселер милдеттүү эмес, бардыгын кантип туташтырууну тандап алганыңызга жараша

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

- Бурамалуу терминалдык туташтыргычтар (2 уюл | 3 полюс | 4 полюс)

- PCB аталыштары (https://amzn.to/2X7RjWf)

2 -кадам: Корпусту 3D басып чыгаруу

Капты 3D басып чыгаруу
Капты 3D басып чыгаруу
Капты 3D басып чыгаруу
Капты 3D басып чыгаруу
Капты 3D басып чыгаруу
Капты 3D басып чыгаруу
Капты 3D басып чыгаруу
Капты 3D басып чыгаруу

Мен Black PLA+ колдонуп, өзүмдүн Creality CR-10S'име басып чыгардым (https://amzn.to/2X2SDtE)

Мен 0,2 катмар бийиктикте басып чыгардым, 25% толтуруу менен.

3 -кадам: Бардыгын бириктирүү + Схема

Баарын бириктирүү + Схема
Баарын бириктирүү + Схема
Баарын бириктирүү + Схема
Баарын бириктирүү + Схема
Баарын бириктирүү + Схема
Баарын бириктирүү + Схема
Баарын бириктирүү + Схема
Баарын бириктирүү + Схема

Ардуинону кантип туташтырууңуз толугу менен сизге байланыштуу - мен жеке өзүмдү "калкан" кылууну чечтим. Калкан жасоо үчүн, Pro Micro'го дал келүү үчүн, аялдардын башын вероонго такадым, андан кийин карама -каршы учунда +5v жана GND темир жолун коштум. Мен азыр 5v 'темир жолума +5v туташтыруу үчүн секирүүчү зымды колдондум жана GND үчүн дагы ушундай кылдым. Мен андан кийин 4x 100k резисторлорумду коштум, алардын бир чети +5вга туташып, анан экинчи тарабы тиешелүү түрдө A0, A1, A2 & A3 менен туташат. Мен аналогдук пиндерге A0, A1, A2 & A3, ошондой эле Pins 2 (SDA), 3 (SCL) & 4 бурамалуу терминалдарды коштум.

Электр өткөргүчтөрүңүздү өлчөп, тиешелүү узундуктарга кесиңиз. Мен биринчи WS2812 Пикселдик LED менен баштадым - БИРИНЧИ WS2812 LED +5v Arduino, GND Arduino жана DIN 4 -пинге туташат. Андан кийин калган 3 чынжырланып, 5v> 5v, GND> GND казыктары жана DOUT бир Пикселден кийинки DINге туташат. Лайк алгандан кийин, буларды үстүндөгү төрт бурчтуу тешиктерге акырын басып, ысык клейди коюп, арт жагын кокусунан туташуудан же шорттон коргоо үчүн.

Светодиоддордон кийин, мен гитаранын розеткаларын бурап койдум. Ар биринин пини GNDге, андан кийин ар биринин 2 -пини A0, A1, A2 & A3 га жараша туташат. Ошентип, бул Socket 1, A0, Socket 2 A1, Socket 3 A2 жана Socket 4 A3 үчүн.

Кийинчерээк мен OLED туташууларына 4 зымды кошуп, мүмкүн болушунча ашыкча ширетүүнү кыркып салдым. Сиз зымдарыңызды экрандын арткы жагынан жабыштыргыңыз келет, андыктан экрандын алдыңкы жагына ширетип жатасыз.

Пиндерге көңүл буруңуз! Кээ бир OLEDлердин сыртында GND, андан кийин VCC, кээ бирлеринин сыртында VCC, анан GND бар

Мүмкүн болушунча ширетилген туташууну кыркып же тегиздеп койгондон кийин, экранды акырын басып, анын жайгашкан жерине басыңыз. Бул дизайн боюнча бир аз тыгыз, бирок ар кандай басып чыгаруу толеранттуулугу буга таасир этиши мүмкүн экенин билиңиз, андыктан аны туура келтирүү үчүн бир аз пост-кайра иштетүү керек болушу мүмкүн. Орнотулгандан кийин, аны кармап туруу үчүн 4 бурчтун ар бирине ысык клей коюңуз.

Баарын схемага жана сүрөттөргө дал келтирүү үчүн туташтырыңыз, жана бактылуу болгондон кийин, Pro Micro менен RTC сааттарын ысык клейге салып, USB кеңейтүүсүн Pro Microго туташтырсаңыз болот.

Мен микро USB кеңейтүүсүн колдондум, а) USB кубат берүү үчүн колдонулушу мүмкүн, бирок дагы, б) ушунчалык зарыл болсо, Pro Micro программасын кайра бөлүп алса болот

Бактылуу болгондон кийин, 4 бураманы колдонуу менен ишти бурап салыңыз

4 -кадам: Плагиндер

Plugs!
Plugs!
Plugs!
Plugs!
Plugs!
Plugs!

Бул иштөөнүн жолу, бардык максаттар үчүн, дизайндын бир бөлүгү "омметр" катары иштейт. Омметр - бул электр каршылыгын өлчөөчү прибор. Көпчүлүк мультиметрлерде бул функция бар, анын жардамы менен сиз масштабды тандап, анан анын маанисин табуу үчүн резисторду өлчөйсүз. Жумушчу принцип -бул сиз билүүчү резисторду +veге туташтырыңыз, ал андан кийин -ve менен туташкан белгисиз каршылыкка туташат. 2 резистордун ортосундагы бирикме Arduino аналогдук пинге туташат, андыктан ал чыңалууну окуп, каршылыкты эсептей алат.

Бул чыңалуу бөлүштүргүч сыяктуу иштейт жана белгисиз каршылыктын каршылыгын эсептейт.

R1 жана R2 каршылыгынын чыңалуу бөлүштүрүүчү тармагы катары, Vout = Vin * R2 / (R1 + R2) - Биз белгилүү (R1) каршылыгыбыз үчүн 100k колдонуп жатабыз. Бул бизге "чыңалуунун төмөндөшүн" берет

Ушундан улам, биз азыр белгисиз (R2) каршылыктын каршылыгын иштеп чыга алабыз, R2 = Vout * R1 / (Vin - Vout) - мында R1 биздин 100k (100, 000 ом) каршылыгыбыз

Сиз колдонгуңуз келген ар бир сайгычтын башка резисторун колдонуу менен, сиз кодду ошого жараша колдонуучу уячасына жараша тууралай аласыз.

Мен 4 уячаны колдонуп жатам. Мен колдонууну чечтим:

Белгилүү резистор (x4) - 100к

Jack Plug 1 - 5.6k

Jack Plug 2 - 10k

Jack Plug 3 - 22k

Jack Plug 4 - 39k

Сиз, албетте, муну кеңейте аласыз жана каалаганча код коё аласыз.

5 -кадам: Кодекс

Кодекс
Кодекс

Биринчиден, сизге бул жерден жеткиликтүү болгон Arduino IDE керек болот:

Ошондой эле сизде бир нече Arduino китепканалары бар экенине ынанууңуз керек:

Adafruit NeoPixel:

u8g2:

Adafruit RTCLib:

Adafruit SleepyDog (Милдеттүү эмес):

Туура "Arduino" тактасын тандоо жөнүндө эскертүү. Башында мен бул долбоорду Arduino Nano менен баштадым, анткени алар Улуу Британияда болжол менен 3-4 фунт стерлингге арзан, же AliExpressтен сатып алган болсоңуз, £ 1.50 чейин аз (бирок 30-50 күн күтүүгө каршы эмеспиз)). Нанонун көйгөйү - бул SRAM 2 KB (2048 байт). Бул эскиз Global Variables менен 1728 байт динамикалык эс тутумун колдонот. Бул SRAMнын 84%, жергиликтүү өзгөрмөлөр үчүн 320 байт бекер. Бул жетишсиз болгон жана нанонун кулпуланышына жана тоңуп калышына алып келет.

Pro Micro (Леонардо) 2.5K SRAM (2560 байт) бар, башкача айтканда, жергиликтүү өзгөрмөлөр үчүн 694 байт бекер (Эскизде Pro Micro SRAMнин 72% ы колдонулат). Азырынча бул менин колдонуу үчүн толук шайкеш жана туруктуу болуп чыкты. Эгерде сиз көптөгөн джек -штепсельдерди колдонууну пландап жатсаңыз, анда SRAM менен көбүрөөк нерсени колдонууну ойлонушуңуз мүмкүн.

Flash сактоого келсек, бул эскизде 88% (25252 байт) 30k колдонулат (ATMega328p [Nano] жана ATMega32u4 [Pro Micro] экөөндө тең 32k бар, бирок 2k жүктөөчү үчүн сакталган)

Мен жылдар бою жүздөгөн Arduino эскиздерин жаздым, бирок мен хоббистмин - андыктан коддун кээ бир бөлүктөрү эффективдүү эмес же "муну жасоонун жакшы жолдору" болушу мүмкүн экенин эске алыңыз. Айтор, бул мен үчүн эң сонун иштеп жатат жана мен буга кубанычтамын. Мен AVR (эң негизги Arduino) же SAMD21 болобу, тактада иштеши керек болгон китепканаларды колдондум (менде бир нече Cortex M0 түзмөгү бар)

Мен ошондой эле колдонулган уячанын негизинде башка графиканы көрсөткүм келди. Эгерде сиз өзүңүздүн жеке оюңузду жасоону кааласаңыз, анда бул дисплейде колдонула турган сүрөттөр үчүн C массивин түзүү боюнча эң сонун жөнөкөй көрсөтмө:

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

Графикаңыз үчүн PROGMEM колдонууну тактаңыз. Мисалы:

YOUR_IMAGE_NAME PROGMEM = {} статикалык const белгиси жок

Дизайн боюнча, экран 5 секунддан кийин "таймут" кылат жана убакытты көрсөтүүгө кайтат.

Орнотуулардын көпчүлүгүн Settings.h сайтынан тапса болот, тактап айтканда, байланышкан джек штепсельдеринин аты бул жерде коддолгон:

#define PLUG1 "АЧКЫЧТАР"

#аныктоо PLUG2 "P2" #аныктоо PLUG3 "P3" #аныктоо PLUG4 "P4" #аныктоо GENERIC "NA"

Variables.h ичинде коддун маанилүү бөлүктөрү да бар

калкыма R1 = 96700.0;

калкыма R2 = 96300.0; калкып чыгуучу R3 = 96500.0; калкыма R4 = 96300.0;

Бул 4 резистордун ар биринин, белгилүү болгон каршылык мааниси.

R1 A0, R2ден A1ге, R3төн A2ге жана R4төн A3кө туташкан.

Мультиметрдин жардамы менен 100к каршылыгыңызды өлчөө жана резистордун так маанисин колдонуу максатка ылайыктуу. Баары туташкандан кийин, резистордун өлчөөсүн алыңыз. (Бирок күйгүзүлгөн эмес).

Джек розеткаларыңыз үчүн резисторлорду тандап жатканда, алардын ортосунда жакшы ажырым бар экенин текшериңиз жана аларды коддоодо өзүңүзгө тандаган резисторго караганда төмөн жана жогору жагымдуу диапазонду бериңиз. Мына, мен кодумда колдонгон нерсем:

калкып P1_MIN = 4000.0, P1_MAX = 7000.0; // 5.6K

калкыма P2_MIN = 8000.0, P2_MAX = 12000.0; // 10K калкыма P3_MIN = 20000.0, P3_MAX = 24000.0; // 22K калкыма P4_MIN = 36000.0, P4_MAX = 42000.0; // 39K

Мунун себеби аналогдук көрсөткүчтү жана анча чоң эмес чыңалуунун өзгөрүүсүн ж

Ошентип, эмне болот, эгерде аныкталган каршылык 4000 Ом менен 7000 Ом ортосунда болсо, биз сиз 5.6k каршылыгын колдонгонсуз деп ойлойбуз жана ошону менен код муну Jack Plug 1 катары көрөт. Эгерде өлчөнгөн каршылык 8000 Ом жана 12000 ом, божомол бул 10k каршылык жана Jack Plug 2 ж.б.у.с.

Эгерде сиз кандайдыр бир мүчүлүштүктөрдү оңдоо керек болсо (Сериялык мүчүлүштүктөр кымбат баалуу кочкорду колдонгондуктан "өндүрүшкө" жазылбаңыз) жөн гана Жөндөөлөрдүн чокусунда керектүү саптарды комментарийлеңиз.

//#SERIAL_DEBUG аныктоо

//#СЕРИАЛДЫ КҮТҮҮНҮ аныктаңыз

Комментарий бербөө үчүн, /// дегенди алып салыңыз. сызыкты кайра комментарийлөө үчүн // саптын алдына кайра кошуу.

SERIAL_DEBUG сериялык мүчүлүштүктөрдү оңдоону жана мындай нерселерди колдонууну иштетет (мисалы)

Serial.println (F ("салам дүйнө"));

WAIT_FOR_SERIAL - бул кошумча кадам, башкача айтканда, сиз Сериялык Мониторду ачмайынча, код улантылбайт. Бул маанилүү сериялык билдирүүлөрдү өткөрүп жибербөөңүзгө жардам берет. - ЭЧ КАЧАН МУНУ ӨЧҮРГҮЛӨ калтырбаңыз

Эгерде сиз WAIT_FOR_SERIAL күйгүзүлгөн болсоңуз, анда ачкыч кармагычыңызды "реалдуу дүйнөдө" эч кандай чөйрөдө колдоно албайсыз, анткени ал эскиздин негизги укуругуна кире электе Arduino IDE Serial мониторун күтүп калат. Мүчүлүштүктөрдү оңдоону аяктагандан кийин, бул линияны дагы бир жолу комментарийлебей турганыңызды текшериңиз жана өндүрүш/бүтүрүү үчүн эскизиңизди кайра жүктөңүз.

SERIAL_DEBUG опциясын колдонуп жатканда, менин кодумда төмөнкүлөр камтылган:

#ifdef SERIAL_DEBUG

Serial.print (F ("АКТИВДҮҮ ЖЕК =")); 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.print (i); Serial.print (F ("] =")); Serial.println (SOCKET_1234_HAS_PLUGTYPE_X ); } Serial.println (); if (INSERTED [socket]) {Serial.print (F ("Plug in socket")); Serial.print (розетка+1); Serial.print (F ("каршылыгы бар:")); Serial.println (каршылык); } #endif

Акыркы Serial.print линиясы сизге каршылык эмне экенин, акыркы киргизилген уячанын омс менен айтып берет. Ошентип, сиз бул эскизди джек розеткасынын каршылыгын текшерүү үчүн ohmmeter катары колдоно аласыз.

6 -кадам: Эскертүүлөр

Мен баарын камтыдым деп ойлойм, бирок комментарий калтырыңыз, мен колумдан келишинче окуп, жооп берүүгө аракет кылам:)

Бир аз начар видео үчүн кечирим сурайм - Менин штативим, коддоочу орнотуум же туура иштеген жерим жок, ошондуктан бул телефонду бир колунда кармап, экинчи колу менен демо кылууга аракет кылып тартылган.

Окуу үчүн рахмат.

Сунушталууда: