Оглавление:

Брелок для ключей Arduino Guitar Jack с распознаванием разъемов и OLED: 7 шагов
Брелок для ключей Arduino Guitar Jack с распознаванием разъемов и OLED: 7 шагов

Видео: Брелок для ключей Arduino Guitar Jack с распознаванием разъемов и OLED: 7 шагов

Видео: Брелок для ключей Arduino Guitar Jack с распознаванием разъемов и OLED: 7 шагов
Видео: Проверка китайца на безопасность #blondinkadrive 2024, Июль
Anonim
Image
Image
Брелок для ключей с разъемом для гитары Arduino с распознаванием разъема и OLED
Брелок для ключей с разъемом для гитары Arduino с распознаванием разъема и OLED

Вступление:

В этом руководстве будет подробно описана сборка моего держателя ключей для плагина Guitar Jack на базе Arduino.

Это мой первый инструктаж, поэтому, пожалуйста, будьте терпеливы, поскольку я могу вносить изменения / обновления в процессе

Шаг 1. Детали и инструменты

Запчасти и инструменты
Запчасти и инструменты
Запчасти и инструменты
Запчасти и инструменты
Запчасти и инструменты
Запчасти и инструменты

Большинство запчастей я купил на Amazon.co.uk или eBay, а некоторые я уже покупал - вот список того, что вам понадобится.

Ссылки Amazon - это все партнерские ссылки, вы можете найти дешевле в другом месте - я часто использую Amazon Prime, поэтому мне просто пришло время использовать Amazon.

Я хотел, чтобы эта сборка была достаточно недорогой и недорогой. Вы можете использовать TFT-экран большего размера, если хотите, а также другую Arduino. Не используйте NANO, так как он выйдет из строя из-за большого использования памяти. Код использует около 72% оперативной памяти Pro Micro и стабилен, но после тестирования NANO выйдет из строя и зависнет.

(Подробнее см. В шаге «Код».)

ЧАСТИ

1x Arduino Pro Micro -

1x 0,96-дюймовый OLED-дисплей с желто-синим дисплеем -

4x WS2812 «Пиксели» -

1x DS3231 RTC -

4x 1/4 дюйма Mono Jack (или сколько угодно) - Amazon (золото) или Amazon (серебро) или eBay.co.uk

1x набор смешанных резисторов -

Гитарные гнезда 4x 1/4 -

1x удлинительный кабель Micro USB -

4x винта M3

ИНСТРУМЕНТЫ И МАТЕРИАЛЫ

- Паяльник (это тот, который я купил - TS100 - в комплекте с дополнительными наконечниками

- припой

- Термоклеевой пистолет (https://amzn.to/2UTd9PN)

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

- Кусачки / стрипперы (https://amzn.to/2KzqUzp)

- 3D-принтер или услуга 3D-печати

ДОПОЛНИТЕЛЬНО - Эти элементы не являются обязательными, в зависимости от того, как вы решите все подключить.

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

- Разъемы с винтовыми клеммами (2 полюса | 3 полюса | 4 полюса)

- Заголовки печатных плат (https://amzn.to/2X7RjWf)

Шаг 2: 3D-печать корпуса

3D-печать корпуса
3D-печать корпуса
3D-печать корпуса
3D-печать корпуса
3D-печать корпуса
3D-печать корпуса
3D-печать корпуса
3D-печать корпуса

Я напечатал свой на своем Creality CR-10S, используя Black PLA + (https://amzn.to/2X2SDtE)

Я печатал на высоте 0,2 слоя с заполнением 25%.

Шаг 3: Собираем все вместе + Схема

Собираем все вместе + схема
Собираем все вместе + схема
Собираем все вместе + схема
Собираем все вместе + схема
Собираем все вместе + схема
Собираем все вместе + схема
Собираем все вместе + схема
Собираем все вместе + схема

Как вы решите подключить свой Arduino, полностью зависит от вас - я лично решил сделать себя, так сказать, «щитом». Чтобы сделать щит, я припаял женские разъемы к плате, чтобы они соответствовали Pro Micro, затем я добавил шину +5 В и GND на противоположных концах. Я использовал перемычку, чтобы подключить + 5 В к моей теперь 5-вольтовой «шине», и сделал то же самое для GND. Затем я добавил свои 4 резистора по 100 кОм, один конец подключил к + 5 В для всех из них, а затем другой конец подключился к A0, A1, A2 и A3 соответственно. Затем я добавил винтовые клеммы к аналоговым контактам A0, A1, A2 и A3, а также к контактам 2 (SDA), 3 (SCL) и 4.

Отмерьте проводку и отрежьте ее до нужной длины. Сначала я начал с пиксельных светодиодов WS2812 - ПЕРВЫЙ светодиод WS2812 подключается к + 5 В от Arduino, GND от Arduino, а DIN подключается к выводу 4. После этого остальные 3 соединяются вместе, объединяя все 5 В> 5 В, GND> GND контакты и DOUT от одного пикселя, подключаются к DIN следующего. После пайки аккуратно вдавите их в квадратные отверстия в верхней части и закрепите горячим клеем, а также для защиты задней части от любых случайных соединений или коротких замыканий.

После светодиодов я прикрутил гнезда для гитарных разъемов. Один контакт каждого подключается к GND, а затем второй контакт каждого подключается к A0, A1, A2 и A3 соответственно. Итак, Socket 1 к A0, Socket 2 к A1, Socket 3 к A2 и Socket 4 к A3.

Затем я припаял 4 провода к разъемам OLED и максимально обрезал лишний припой. Вы хотите прикрепить провода к задней части экрана, так что вы припаиваете к передней части экрана.

Обратите внимание на булавки! У некоторых OLED есть GND снаружи, затем VCC, у некоторых VCC снаружи, а затем GND

После пайки и максимально возможной обрезки или сплющивания паяного соединения осторожно нажмите на экран в нужное место. Это немного сложно по дизайну, но имейте в виду, что разные допуски печати могут повлиять на это, и поэтому вам, возможно, придется выполнить небольшую постобработку, чтобы подогнать его. Оказавшись на месте, нанесите немного горячего клея на каждый из 4 углов, чтобы удерживать его на месте.

Подключите все, чтобы оно соответствовало схеме и изображениям, и, когда будете счастливы, вы можете горячо приклеить Pro Micro и часы RTC на место, а затем подключить удлинитель USB к Pro Micro.

Я использовал расширение micro USB, чтобы а) USB можно было использовать для обеспечения питания, но более того, б) чтобы можно было перепрограммировать Pro Micro при необходимости, не разбирая все на части

Когда все будет хорошо, скрутите корпус с помощью 4 винтов.

Шаг 4: Вилки

Вилки!
Вилки!
Вилки!
Вилки!
Вилки!
Вилки!

Это работает так, что, по сути, часть конструкции работает как «омметр». Омметр - это прибор для измерения электрического сопротивления. Большинство мультиметров имеют эту функцию, при которой вы выбираете шкалу, а затем измеряете резистор, чтобы найти его значение. Принцип работы заключается в том, что вы подключаете ИЗВЕСТНЫЙ резистор к + ve, который затем подключается к НЕИЗВЕСТНОМУ резистору, который подключается к -ve. Соединение между двумя резисторами подключается к аналоговому выводу Arduino, чтобы он мог считывать напряжение и вычислять сопротивление.

Он работает как делитель напряжения и вычисляет сопротивление неизвестного резистора.

Как сеть делителя напряжения из резисторов R1 и R2, Vout = Vin * R2 / (R1 + R2) - Мы используем 100 кОм для нашего известного резистора (R1). Это дает нам «падение напряжения»

Исходя из этого, теперь мы можем вычислить сопротивление неизвестного резистора (R2), R2 = Vout * R1 / (Vin - Vout) - где R1 - наш резистор 100 кОм (100 000 Ом)

Используя разные резисторы в каждом разъеме, который вы хотите использовать, вы можете соответствующим образом настроить код в зависимости от используемого разъема.

Я использую 4 штекера. Я решил использовать:

Известный резистор (x4) - 100 кОм

Разъем 1 - 5,6 кОм

Джек Plug 2 - 10к

Джек Plug 3 - 22k

Джек Plug 4 - 39k

Вы, конечно, можете расширить это и закодировать столько, сколько захотите.

Шаг 5: Код

Код
Код

Во-первых, вам понадобится IDE Arduino, доступная здесь:

Вам также необходимо убедиться, что у вас есть несколько библиотек Arduino:

Adafruit NeoPixel:

u8g2:

Adafruit RTCLib:

Adafruit SleepyDog (необязательно):

Замечание о выборе правильной платы "Arduino". Первоначально я начал этот проект с Arduino Nano, потому что они очень дешевые, примерно от 3 до 4 фунтов стерлингов в Великобритании или всего 1,50 фунтов стерлингов, если вы покупаете на AliExpress (но не обращайте внимания на 30-50-дневное ожидание.). Проблема с Nano в том, что его SRAM составляет 2 КБ (2048 байт). В этом скетче используется 1728 байт динамической памяти с глобальными переменными. Это 84% SRAM, оставляя только 320 байт для локальных переменных. Этого было недостаточно, и Nano мог заблокироваться и зависнуть.

Pro Micro (Leonardo) имеет 2,5 КБ SRAM (2560 байтов), что означает, что 694 байта свободно для локальных переменных (в скетче используется 72% SRAM Pro Micro). Пока что это оказалось вполне адекватным и стабильным для моего использования. Если вы собираетесь использовать много штекеров, вы можете рассмотреть возможность использования чего-то с большим количеством SRAM.

Что касается флэш-памяти, этот скетч использует 88% (25252 байта) из 30 КБ (ATMega328p [Nano] и ATMega32u4 [Pro Micro] имеют 32 КБ, но 2 КБ зарезервированы для загрузчика).

Я написал сотни скетчей 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 для вашей графики. Например:

static const unsigned char YOUR_IMAGE_NAME PROGMEM = {}

По умолчанию экран «отключится» через 5 секунд и вернется к отображению времени.

Большинство настроек можно найти в Settings.h, в частности, здесь кодируются названия соответствующих штекеров:

#define PLUG1 "KEYS"

#define PLUG2 "P2" #define PLUG3 "P3" #define PLUG4 "P4" #define 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,6 тыс.

float 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; // 39К

Причина в том, чтобы учесть аналоговые показания и незначительные колебания напряжения и т. Д.

Итак, что происходит: если обнаруженное сопротивление составляет от 4000 Ом до 7000 Ом, мы предполагаем, что вы использовали резистор 5,6 кОм, и, таким образом, код будет видеть это как Jack Plug 1. Если измеренное сопротивление находится между 8000 Ом и 12000 Ом, предполагается, что это резистор 10 кОм, разъем Jack Plug 2 и так далее.

Если вам нужно выполнить некоторую отладку (не оставляйте без комментариев в поле «production», поскольку последовательная отладка требует драгоценного RAM), просто раскомментируйте нужные строки в верхней части Settings.h

// # определяем SERIAL_DEBUG

// # определяем WAIT_FOR_SERIAL

Чтобы раскомментировать, просто удалите //…. чтобы закомментировать строку, снова добавьте // в начало строки.

SERIAL_DEBUG включает последовательную отладку и использование таких вещей, как (например)

Serial.println (F ("привет, мир"));

WAIT_FOR_SERIAL - дополнительный шаг, это означает, что, пока вы не откроете Serial Monitor, код не будет продолжаться. Это гарантирует, что вы не пропустите ни одного важного последовательного сообщения. - НИКОГДА НЕ ОСТАВЛЯЙТЕ ЭТО ВКЛЮЧЕННЫМ

Если вы оставите WAIT_FOR_SERIAL включенным, вы не сможете использовать ключницу в любой «реальной» среде, так как она застрянет в ожидании последовательного монитора Arduino IDE, прежде чем сможет продолжить работу в основном цикле скетча. После завершения отладки убедитесь, что вы снова раскомментируете эту строку, и повторно загрузите свой эскиз для производства / завершения.

При использовании опции 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 ("Вставить розетку")); Serial.print (сокет + 1); Serial.print (F ("имеет сопротивление:")); Serial.println (сопротивление); } #endif

Последняя строка Serial.print сообщит вам, какое сопротивление в омах у последнего вставленного разъема. Таким образом, вы также можете использовать этот эскиз как своего рода омметр для проверки сопротивления штекера.

Шаг 6: Примечания

Думаю, я все рассказал, но, пожалуйста, комментируйте, и я постараюсь прочитать и ответить, когда смогу:)

Приносим извинения за несколько плохое видео - у меня нет штатива, настройки перекодирования или подходящего рабочего места, так сказать, так что это было снято (плохо), держа телефон в одной руке и пытаясь продемонстрировать его в другой.

Спасибо за прочтение.

Рекомендуемые: