Spisu treści:

Arduino Guitar Jack Key Holder z rozpoznawaniem Jacka i OLED: 7 kroków
Arduino Guitar Jack Key Holder z rozpoznawaniem Jacka i OLED: 7 kroków

Wideo: Arduino Guitar Jack Key Holder z rozpoznawaniem Jacka i OLED: 7 kroków

Wideo: Arduino Guitar Jack Key Holder z rozpoznawaniem Jacka i OLED: 7 kroków
Wideo: Arduino Guitar Jack Key Holder with Jack Recognition & OLED 2024, Lipiec
Anonim
Image
Image
Uchwyt na klucze Arduino Guitar Jack z rozpoznawaniem Jacka i OLED
Uchwyt na klucze Arduino Guitar Jack z rozpoznawaniem Jacka i OLED

Wstęp:

Ta instrukcja szczegółowo opisze budowę mojego breloczka do wtyczki Guitar Jack opartego na Arduino

To moja pierwsza instrukcja, więc proszę o wyrozumiałość, ponieważ mogę wprowadzić zmiany / aktualizacje po drodze

Krok 1: Części i narzędzia

Części i narzędzia
Części i narzędzia
Części i narzędzia
Części i narzędzia
Części i narzędzia
Części i narzędzia

Większość części, które kupiłem na Amazon.co.uk lub eBay, niektóre już kręciłem - Oto lista tego, czego będziesz potrzebować.

Linki Amazon to wszystkie linki afiliacyjne, możesz znaleźć tańsze gdzie indziej – często korzystam z Amazon Prime, więc Amazon właśnie był moim celem.

Chciałem, aby ta wersja była dość tania i przyjazna dla budżetu. Możesz użyć większego ekranu TFT, jeśli sobie tego życzysz, a także innego Arduino. Nie używaj NANO, ponieważ ulegnie awarii z powodu dużego zużycia pamięci. Kod wykorzystuje około 72% pamięci RAM Pro Micro i jest stabilny, ale z testów NANO zawiesza się i zawiesza.

(Więcej szczegółów w kroku Kod.)

CZĘŚCI

1x Arduino Pro Micro -

1x 0.96 OLED z żółtym i niebieskim wyświetlaczem -

4x WS2812 „Piksele” -

1x DS3231 RTC -

4x 1/4 Mono Jack (lub tyle, ile chcesz) - Amazon (złoty) lub Amazon (srebrny) lub eBay.co.uk

1x Pakiet mieszanych rezystorów -

4x 1/4 Gniazda Gitarowe -

1x przedłużacz kabla Micro USB -

4x śruby M3

NARZĘDZIA I MATERIAŁY

- Lutownica (to ta, którą kupiłem - TS100 - jak przyszło z dodatkowymi końcówkami

- Lutowane

- Pistolet do klejenia na gorąco (https://amzn.to/2UTd9PN)

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

- Przecinaki do drutu / ściągacze izolacji (https://amzn.to/2KzqUzp)

- Drukarka 3D lub usługa drukowania 3D

OPCJONALNIE – Te elementy są opcjonalne, w zależności od tego, jak zdecydujesz się połączyć wszystko

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

- Złącza śrubowe (2 bieguny | 3 bieguny | 4 bieguny)

- Nagłówki PCB (https://amzn.to/2X7RjWf)

Krok 2: Drukowanie 3D obudowy

Drukowanie 3D obudowy
Drukowanie 3D obudowy
Drukowanie 3D obudowy
Drukowanie 3D obudowy
Drukowanie 3D obudowy
Drukowanie 3D obudowy
Drukowanie 3D obudowy
Drukowanie 3D obudowy

Wydrukowałem moją na moim Creality CR-10S, używając Black PLA+ (https://amzn.to/2X2SDtE)

Drukowałem na 0,2 warstwy, z 25% wypełnieniem.

Krok 3: Składanie wszystkiego razem + schemat

Składanie wszystkiego razem + schemat
Składanie wszystkiego razem + schemat
Składanie wszystkiego razem + schemat
Składanie wszystkiego razem + schemat
Składanie wszystkiego razem + schemat
Składanie wszystkiego razem + schemat
Składanie wszystkiego razem + schemat
Składanie wszystkiego razem + schemat

To, jak zdecydujesz się połączyć z Arduino, zależy wyłącznie od Ciebie - osobiście postanowiłem zrobić sobie „tarczę”, że tak powiem. Aby wykonać osłonę, przylutowałem żeńskie nagłówki do veroboard, aby pasowały do Pro Micro, a następnie dodałem szynę +5V i GND na przeciwległych końcach. Użyłem przewodu połączeniowego do podłączenia + 5 V do mojej „szyny” 5 V i zrobiłem to samo dla GND. Następnie dodałem moje rezystory 4x 100k, jeden koniec podłączony do +5V dla wszystkich z nich, a następnie drugi koniec podłączony odpowiednio do A0, A1, A2 i A3. Następnie dodałem zaciski śrubowe do pinów analogowych A0, A1, A2 i A3, a także pinów 2 (SDA), 3 (SCL) i 4

Odmierz okablowanie i przytnij na odpowiednią długość. Najpierw zacząłem od diod LED WS2812 Pixel - PIERWSZY WS2812 LED łączy się z +5V z Arduino, GND z Arduino, a DIN łączy się z pinem 4. Następnie pozostałe 3 są połączone razem, łącząc wszystkie 5v > 5v, GND > GND piny i DOUT z jednego Pixela, łączy się z DIN następnego. Po przylutowaniu, wciśnij je delikatnie w kwadratowe otwory na górze i przyklej na gorąco, a także, aby chronić tył przed przypadkowymi połączeniami lub szortami.

Po diodach wkręciłem gniazda Guitar Jack. Jeden pin każdego z nich łączy się z GND, a następnie drugi pin każdego z nich łączy się odpowiednio z A0, A1, A2 i A3. Więc to jest Socket 1 na A0, Socket 2 na A1, Socket 3 na A2 i Socket 4 na A3.

Następnie przylutowałem 4 przewody do połączeń OLED i maksymalnie przyciąłem nadmiar lutowia. Chcesz podłączyć przewody z tyłu ekranu, więc lutujesz z przodu ekranu.

Zwróć uwagę na szpilki! Niektóre OLED mają GND na zewnątrz, następnie VCC, niektóre mają VCC na zewnątrz, a następnie GND

Po przylutowaniu i przycięciu lub spłaszczeniu połączenia lutowanego tak bardzo, jak to możliwe, delikatnie wciśnij ekran w jego miejsce. Z założenia jest to trochę ciasne dopasowanie, ale pamiętaj, że różne tolerancje druku mogą na to wpłynąć, więc może być konieczne wykonanie drobnej obróbki końcowej, aby dopasować. Po umieszczeniu nałóż trochę gorącego kleju na każdym z 4 rogów, aby utrzymać go na miejscu.

Podłącz wszystko, aby dopasować schemat i zdjęcia, a gdy będziesz zadowolony, możesz również przykleić na gorąco zegar Pro Micro i RTC, a następnie podłączyć rozszerzenie USB do Pro Micro.

Użyłem rozszerzenia micro USB, aby a) USB można było wykorzystać do zasilania, ale bardziej, b) tak, aby w razie potrzeby można było przeprogramować Pro Micro bez rozrywania wszystkiego na części

Gdy będziesz zadowolony, skręć obudowę za pomocą 4 śrub

Krok 4: Wtyczki

Korki!
Korki!
Korki!
Korki!
Korki!
Korki!

Sposób, w jaki to działa, polega na tym, że dla wszystkich celów i celów część projektu działa jako „omomierz”. Omomierz to przyrząd do pomiaru rezystancji elektrycznej. Większość multimetrów ma tę funkcję, dzięki której wybierasz skalę, a następnie mierzysz rezystor, aby znaleźć jego wartość. Zasada działania polega na tym, że podłączasz ZNANY rezystor do +ve, który jest następnie podłączony do NIEZNANEGO rezystora, który łączy się z -ve. Złącze między 2 rezystorami łączy się z pinem analogowym Arduino, dzięki czemu może odczytywać napięcie i obliczać rezystancję.

Działa jak dzielnik napięcia i oblicza rezystancję nieznanego rezystora.

Jako sieć dzielnika napięcia rezystorów R1 i R2, Vout = Vin * R2 / (R1 + R2) - Używamy 100k dla naszego znanego rezystora (R1). To daje nam „spadek napięcia”

Na tej podstawie możemy teraz obliczyć rezystancję nieznanego rezystora (R2), R2 = Vout * R1 / (Vin – Vout) - gdzie R1 to nasz rezystor 100k (100 000 omów)

Używając innego rezystora w każdym wtyku, którego chcesz użyć, możesz dostosować kod w zależności od używanego gniazda.

Używam 4 wtyczek jack. Zdecydowałem się użyć:

Znany rezystor (x4) - 100k

Wtyczka Jack 1 - 5,6k

Wtyk Jack 2 - 10k

Wtyczka Jack 3 - 22k

Wtyk Jack 4 - 39k

Możesz to oczywiście rozszerzyć i zakodować tyle, ile chcesz.

Krok 5: Kodeks

Kod
Kod

Po pierwsze, potrzebujesz Arduino IDE, dostępnego tutaj:

Musisz również upewnić się, że masz też kilka bibliotek Arduino:

Adafruit NeoPixel:

u8g2:

Adafruit RTCLib:

Adafruit SleepyDog (opcjonalnie):

Uwaga dotycząca wyboru odpowiedniej płytki „Arduino”. Pierwotnie rozpocząłem ten projekt od Arduino Nano, ponieważ są one bardzo tanie w cenie około 3 GBP w Wielkiej Brytanii lub zaledwie 1,50 GBP, jeśli kupisz od AliExpress (ale nie przejmuj się 30-50 dniowym oczekiwaniem). Problem z Nano polega na tym, że jego SRAM ma 2 KB (2048 bajtów). Ten szkic wykorzystuje 1728 bajtów pamięci dynamicznej ze zmiennymi globalnymi. To 84% pamięci SRAM, pozostawiając tylko 320 bajtów wolnych dla zmiennych lokalnych. To było niewystarczające i spowodowałoby zablokowanie i zamrożenie Nano.

Pro Micro (Leonardo) ma 2,5 KB SRAM (2560 bajtów), co oznacza, że dla zmiennych lokalnych jest 694 bajtów (Szkic wykorzystuje 72% pamięci SRAM Pro Micro). Jak dotąd okazało się to idealnie odpowiednie i stabilne dla mojego użytkowania. Jeśli zamierzasz używać wielu wtyczek jack, możesz rozważyć użycie czegoś z większą ilością SRAM.

Jeśli chodzi o pamięć Flash, ten szkic wykorzystuje 88% (25252 bajtów) 30k (zarówno ATMega328p [Nano], jak i ATMega32u4 [Pro Micro] mają 32k, ale 2k jest zarezerwowane dla bootloadera)

Przez lata napisałem setki szkiców Arduino, ale jestem hobbystą - pamiętaj więc, że niektóre części kodu mogą być nieefektywne lub mogą istnieć "lepsze sposoby na zrobienie tego" scenariuszy. Biorąc to pod uwagę, działa to doskonale dla mnie i jestem z niego zadowolony. Użyłem bibliotek, które POWINNY działać na większości płyt, czy to AVR (najbardziej podstawowe Arduino) czy SAMD21 (mam kilka urządzeń Cortex M0)

Chciałem również wyświetlić inną grafikę w oparciu o używane gniazdo. Jeśli chcesz stworzyć własny, to jest genialny prosty przewodnik, jak utworzyć C Array dla obrazów, które mają być używane z tym wyświetlaczem:

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

Upewnij się, że używasz programu PROGMEM do swojej grafiki. Np:

static const unsigned char YOUR_IMAGE_NAME PROGMEM = { }

Zgodnie z projektem ekran „przegaśnie” po 5 sekundach i powróci do wyświetlania czasu.

Większość ustawień można znaleźć w Settings.h, w szczególności nazwy powiązanych wtyczek jack są zakodowane tutaj:

#define „KLUCZE” WTYCZKI1

#define PLUG2 "P2" #define PLUG3 "P3" #define PLUG4 "P4" #define GENERIC "NA"

W Variables.h znajduje się również kilka ważnych części kodu

pływak R1=96700,0;

pływak R2=96300,0; pływak R3=96500,0; pływak R4=96300,0;

Są to ZNANE wartości rezystancji w omach każdego z 4 rezystorów.

R1 podłączony do A0, R2 do A1, R3 do A2 i R4 do A3.

Wskazane jest zmierzenie rezystorów 100k za pomocą multimetru i użycie dokładnej wartości rezystora. Wykonaj pomiar rezystora, gdy wszystko jest podłączone. (Ale nie włączony).

Wybierając rezystory do swoich wtyków jack, upewnij się, że jest między nimi dobry odstęp omowy, a podczas kodowania podaj sobie fajny zakres niższy i wyższy niż wybrany rezystor. Oto, czego użyłem w moim kodzie:

pływak P1_MIN=4000.0, P1_MAX=7000.0; // 5,6 tys

pływak 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

Powodem tego jest uwzględnienie odczytu analogowego i niewielkich wahań napięcia itp

Więc co się dzieje, jeśli wykryta rezystancja wynosi od 4000 do 7000 omów, zakładamy, że użyłeś rezystora 5,6k, a zatem kod zobaczy to jako wtyczkę Jack 1. Jeśli zmierzona rezystancja wynosi od 8000 omów do 12000 omów, założenie jest takie, że to opornik 10k a to Jack Plug 2 i tak dalej.

Jeśli potrzebujesz zrobić jakieś debugowanie (nie zostawiaj bez komentarza w 'produkcji', ponieważ debugowanie szeregowe zużywa cenną pamięć RAM) po prostu odkomentuj wymagane wiersze na górze Settings.h

//#define SERIAL_DEBUG

//#define WAIT_FOR_SERIAL

Aby odkomentować, po prostu usuń // …. aby skomentować linię z powrotem, dodaj ponownie // na początku linii.

SERIAL_DEBUG umożliwia debugowanie szeregowe i używanie takich rzeczy jak (na przykład)

Serial.println(F("Witaj świecie"));

WAIT_FOR_SERIAL to dodatkowy krok, co oznacza, że dopóki nie otworzysz Serial Monitor, kod nie będzie kontynuowany. Dzięki temu nie przegapisz żadnych ważnych wiadomości seryjnych. - NIGDY NIE ZOSTAWIAJ TEGO WŁĄCZONEJ

Jeśli zostawisz włączone WAIT_FOR_SERIAL, nie będziesz mógł używać swojego posiadacza klucza w żadnym „świecie rzeczywistym”, ponieważ utknie w oczekiwaniu na monitor szeregowy Arduino IDE, zanim będzie mógł przejść do głównej pętli szkicu. Po zakończeniu debugowania należy ponownie odkomentować ten wiersz i ponownie przesłać szkic do produkcji/ukończenia.

Podczas korzystania z opcji SERIAL_DEBUG mój kod zawiera następujące elementy:

#ifdef SERIAL_DEBUG

Serial.print(F("AKTYWNY 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[")); druk.seryjny(i); Serial.print(F("] = ")); Serial.println(SOCKET_1234_HAS_PLUGTYPE_X); } Serial.println(); if (INSERTED[socket]) { Serial.print(F("Podłącz gniazdo")); Serial.print(gniazdo+1); Serial.print(F(" ma rezystancję: ")); Serial.println(opór); } #endif

Ostatnia linia Serial.print powie Ci, jaka jest rezystancja w omach ostatniego włożonego gniazda. Możesz więc użyć tego szkicu jako pewnego rodzaju omomierza do sprawdzenia rezystancji wtyczki jack.

Krok 6: Notatki

Myślę, że omówiłem wszystko, ale proszę o komentarz, a postaram się przeczytać i odpowiedzieć, kiedy będę mógł:)

Przepraszamy za nieco kiepskie wideo - nie mam statywu, urządzenia do nagrywania ani odpowiedniej przestrzeni roboczej, że tak powiem, więc zostało to nagrane (źle) trzymając telefon w jednej ręce i próbując go demo w drugiej.

Dziękuje za przeczytanie.

Zalecana: