Stwórz podświetlany syntezator Rainbow za pomocą Arduino !: 8 kroków (ze zdjęciami)

Stwórz podświetlany syntezator Rainbow za pomocą Arduino !: 8 kroków (ze zdjęciami)

Spisu treści:

Anonim

To Instruktable pokazuje, jak dodać ekran dotykowy o wysokiej rozdzielczości do Arduino i stworzyć syntezator sterujący kolorowymi diodami LED! Techniki, których się tutaj nauczysz, mogą służyć jako podstawa dla innych projektów z ekranem dotykowym!

W tym Instruktażu dowiesz się:

  • Skąd wziąć ekran dotykowy o wysokiej rozdzielczości 800x480.
  • Jak lutować nagłówki na ekranie dotykowym.
  • Jak wydrukować 3D i złożyć stojak LCD (opcjonalny krok).
  • Jak podłączyć kolorowy ekran dotykowy do Arduino Uno.
  • Jak zbudować gniazdo wyjścia liniowego na ekranie dotykowym za pomocą elementów pasywnych.
  • Jak podłączyć matrycę LED do Arduino.

Do tego Instruktażu potrzebujesz:

  • Ekran dotykowy o wysokiej rozdzielczości oparty na chipie FT810 (zobacz następny krok do mojej rekomendacji)
  • Męskie nagłówki 2x5 i 1x4 (można je kupić i przyciąć do długości)
  • Lutownica
  • Taśma elektryczna
  • Przewody połączeniowe kobieta-mężczyzna
  • Przewody połączeniowe męsko-męskie.
  • An Arduino Uno
  • Deska do krojenia chleba
  • Zestaw diod WS2812 (dostałem moduł 4x4 za około 5 USD od eBay)
  • Rezystor 220Ohm i 100Ohm, kondensator ceramiczny 100nF i kondensator cienkowarstwowy 1uF oraz gniazdo audio 3,5 mm.
  • Deska do krojenia chleba
  • An Arduino Uno
  • Zestaw wzmacnianych głośników komputerowych lub słuchawek dousznych.

Kredyty / Zastrzeżenie: Ten projekt wykorzystuje swobodnie dostępny i licencjonowany przez GPL kod biblioteki, nad którym pracowałem, pracując w AlephObjects, producencie drukarek 3D open source LulzBot. Ten projekt i związane z nim filmy zostały wykonane w moim własnym domu, przy użyciu własnego sprzętu.

Kieszonkowe dzieci:

Krok 1: Ekran dotykowy używany w tej instrukcji

Do tego Instruktażu będę używał ekranów dotykowych firmy Haoyu Electronics. Użyłem następujących:

  • 5-calowy graficzny ekran dotykowy LCD, 800x480, SPI, FT810

Ten ekran kosztuje około 36 USD za wysyłkę. To więcej niż inne ekrany Arduino, ale masz dużo pieniędzy:

  • Wyraźny panel dotykowy o wysokiej rozdzielczości z rozdzielczością 800x480.
  • Wbudowany procesor graficzny i pamięć RAM umożliwiają sterowanie bez zagłuszania Arduino.
  • Wbudowany syntezator audio z wysokiej jakości próbkami dźwięku i różnymi instrumentami do wyboru.
  • Obsługa krajobrazu i portretu (w modelu FT810 lub lepszym).
  • Obsługa wielu dotknięć.
  • Wbudowany dekoder JPEG, wave i wideo, do zaawansowanych projektów.

Krok 2: Przygotowanie ekranu

Po wyświetleniu ekranu musisz przylutować do niego nagłówki. Ekrany Haoyu są świetne, ponieważ są wyposażone w łatwe do lutowania otwory przelotowe, a użytkownik ma możliwość lutowania hedera bezpośrednio z tyłu ekranu lub na końcu małego kabla taśmowego, który jest przymocowany do odłączanej deski rozdzielczej.

Aby zakończyć zadanie lutowania, będziesz chciał tymczasowo odłączyć kabel taśmowy i wyjąć płytkę PCB z tyłu panelu. Użyj paznokcia, aby delikatnie unieść zacisk podtrzymujący złącza LCD i uwolnić kabel taśmowy. Następnie usuń cztery śruby mocujące płytę na miejscu.

Teraz przylutuj nagłówek 5x2 (lub dwa nagłówki 5x1) tam, gdzie chcesz. Zakryj plecy taśmą elektryczną, aby uniknąć szortów. Następnie ponownie przykręć płytkę i ponownie podłącz kabel taśmowy.

Krok 3: Opcjonalnie: Wydrukuj stojak LCD i Dodaj wstawki mosiężne

Postanowiłem wydrukować stojak 3D, aby pomieścić mój panel LCD 1

Panel wyposażony jest w cztery mosiężne wkładki; są one przeznaczone do sprasowania w plastik za pomocą ciepła.Gdy ochładzają się, małe zęby na nich gryzą się w plastik i chronią przed wypadnięciem. Wkładki te są powszechnym sposobem dodawania trwałych nici do części drukowanych 3D.

Po zakończeniu drukowania, odkręciłem cztery mosiężne wkładki z panelu.

Podgrzałam żelazko i trzymałam je końcówką skierowaną do góry, delikatnie równoważąc wkładkę na końcówce. Następnie położyłem na nim plastikową część i powoli wepchnąłem wkładki do wstępnie uformowanych otworów, aż zrównały się z powierzchnią.

Ten krok działa lepiej, jeśli masz lutownicę z wąską stożkową końcówką. Jeśli nigdy wcześniej tego nie robiłeś, możesz poćwiczyć, gdy żelazko jest fajne - masz tylko jedną szansę, aby zrobić to dobrze, gdy żelazko jest gorące!

Uważaj z tym krokiem, ponieważ mosiężne wkładki stają się bardzo gorące i nie chcesz, aby spadły na twoje kolana. Pracuj na powierzchni odpornej na ciepło i jeśli spadną z końcówki żelazka, oprzyj się pokusie natychmiastowego sięgnięcia po nie!

1 Źródła: LCD Stand STL i CAD Files

Krok 4: Usuń film i zamontuj wyświetlacz

Teraz odwróć wyświetlacz i zdejmij przednią akrylową ramkę, a następnie zdejmij folię ochronną z panelu LCD (zwiększy to przejrzystość wyświetlacza). Użyj śrub, aby zamontować wyświetlacz na stojaku z nadrukiem 3D.

Krok 5: Nagłówki lutowane do modułu LED

Użyj bocznych obcinaków, aby odłamać cztero-pinową długość głowic i przylutować je do modułu LED, jak pokazano na zdjęciu. Można również ciąć długość przewodów połączeniowych na pół i lutować je bezpośrednio, jeśli wolisz.

Krok 6: Podłącz obwód

Przeprowadź trzy przewody połączeniowe od Arduino do modułu LED w następujący sposób:

  • 5V do czerwonej szyny na desce do krojenia chleba
  • GND na czarną szynę na breadboardie
  • IN, aby przypiąć ~ 5 do Arduino

Do wyświetlacza LCD podłącz:

  • 5V do czerwonej szyny na desce do krojenia chleba
  • GND na czarną szynę na breadboardie
  • SCK, aby przypiąć ~ 13 do Arduino
  • MISO, aby przypiąć ~ 12 do Arduino
  • MOSI do przypięcia ~ 11 do Arduino
  • CS, aby przypiąć ~ 10 do Arduino
  • PD do pin ~ 9 na Arduino
  • AUDIO przechodzi do obwodu audio, jak pokazano na tablicy i schemacie
  • GND przechodzi do czarnej szyny na płycie

Z Arduino:

  • Poprowadź kabel zworki z pinów 5 V do czerwonej szyny na płycie
  • Poprowadź kabel połączeniowy z kołka GND do czarnej szyny na płycie

Po ukończeniu obwodu wyjściowego audio można teraz podłączyć słuchawki douszne lub zestaw wzmacnianych głośników komputerowych do gniazda audio.

Projekt wyjścia audio:

Wyjście AUDIO panelu wyświetlacza jest sygnałem cyfrowym, który nie jest przeznaczony do bezpośredniego sterowania głośnikiem. Próba dokonania tego może spowodować uszkodzenie panelu lub głośnika. Aby zapewnić prawidłowe wyjście audio, musisz zbudować układ kondycjonujący, który wykonuje następujące zadania:

  • Przekształć cyfrowy sygnał PWM (z modulacją szerokości impulsu) w napięcie analogowe.
  • Ogranicza prąd wyjściowy i napięcia do bezpiecznych poziomów.

Zadanie można wykonać za pomocą dwóch rezystorów i dwóch kondensatorów.

Sprawdziłem arkusz danych dla układu FTDI FT810 i stwierdziłem, że pin AUDIO może napędzać do 16mA przy 3.3V. Oznacza to, że obciążenie musi mieć rezystancję nie mniejszą niż 206 omów. Aby zabezpieczyć pin przed krótkim, zacząłem od umieszczenia rezystora 220 Ohm szeregowo z pinem AUDIO. Następnie dodałem inny rezystor 100 Ohm do masy, aby utworzyć dzielnik napięcia. Gdy nic nie jest podłączone do gniazda, spada 3.3V do poziomu około 1V, co jest bezpieczne dla audio na poziomie linii. 100nF tworzy filtr dolnoprzepustowy, który wygładza szum PWM o wysokiej częstotliwości, przekazując częstotliwości audio. Pozostały kondensator 1uF nazywany jest kondensatorem sprzęgającym AC. Blokuje przepływ prądu stałego przez gniazdo audio, jednocześnie przepuszczając sygnał audio.

Krok 7: Instalowanie biblioteki FastLED i uruchamianie kodu

Pobierz plik.zip zawierający szkic Arduino z mojego repozytorium github.

Otwórz Arduino IDE i przejdź do „Szkic” -> „Dołącz bibliotekę” -> „Zarządzaj bibliotekami …”. Zainstaluj bibliotekę „FastLED” autorstwa Daniela Garcii. Następnie otwórz plik „RainbowPiano.ino” i prześlij go do Arduino Uno!

Krok 8: Przegląd kodu

Kod wykorzystuje strukturę interfejsu użytkownika, którą opracowałem w C ++. Ta struktura umożliwia zbudowanie interfejsu z jednego z większej liczby ekranów interfejsu użytkownika. Aplikacja na fortepian ma tylko jeden ekran, który jest zdefiniowany następującym kodem:

class PianoScreen: public InterfaceScreen {… public: static void onEntry (); static void onRedraw (draw_mode_t co); static void onTouchStart (tag uint8_t); static void onIdle (); }; // Wyświetl wszystkie ekrany w aplikacji w poniższej tabeli SCREEN_TABLE {DECL_SCREEN (PianoScreen)}; SCREEN_TABLE_POST void PianoScreen:: onEntry () {// Kod, który jest wykonywany po wyświetleniu ekranu} void PianoScreen:: onRedraw (draw_mode_t co) {// Kod działający w celu narysowania ekranu} void PianoScreen:: onTouchStart (uint8_t tag) { // Kod, który działa, gdy użytkownik dotyka ekranu} void PianoScreen:: onIdle () {// Kod dla zadań uruchamianych, gdy ekran jest aktywny}

Najważniejszą z nich jest onRedraw (). Maluje interfejs użytkownika, wywołując metody w CommandProcessor obiekt, który wysyła polecenia rysowania do panelu wyświetlacza. Pierwszy zestaw poleceń czyści ekran czarnym (0x000000):

CommandProcessor cmd; cmd.cmd (CLEAR_COLOR_RGB (0x000000)).cmd (CLEAR (true, true, true));

Następnie kod rysuje przyciski wyboru instrumentów w górnej części ekranu:

#define GRID_ROWS 8 #define GRID_COLS 6 cmd.font (font_small).fgcolor (czarny).tag (241).button (BTN_POS (1,1), BTN_SIZE (1,1), F („Piano”))

Jest tu kilka rzeczy do odnotowania. Po pierwsze, biblioteka interfejsu użytkownika umożliwia rozmieszczenie interfejsu na siatce. W tym przypadku układam mój interfejs na siatce 6x8. Następnie ustawiam czcionkę i kolor, a następnie znacznik.

Każdy przycisk interfejsu jest powiązany ze znacznikiem. Gdy użytkownik kliknie przycisk, onTouchStart () metoda jest wywoływana z tym tagiem, więc możesz podjąć odpowiednie działania dla tego przycisku. Znacznik poprzedza polecenie przycisku, które wysyła instrukcje, aby ustawić przycisk oznaczony „Fortepian” w pozycji (1,1), zajmując jednocześnie miejsce 1x1 na siatce. Kod do układania klawiszy fortepianu jest podobny, ale dzieje się w pętli.

Później w kodzie znajduje się funkcja, która odpowiada na naciśnięcie przycisku ze znacznikiem 241:

void PianoScreen:: onTouchStart (tag uint8_t) {switch (tag) {case 241: highlighted_instrument = tag; instrument = PIANO; złamać; …} onRefresh (); }

Gdy użytkownik naciśnie przycisk, kod modyfikuje niektóre zmienne, aby ustawić instrument na FORTEPIAN a następnie dzwoni onRefresh () aby zaktualizować ekran z podświetlonym nowym przyciskiem. Podświetlenie jest wykonywane przez highlightCallback () funkcja, która podczas onRefresh () jest wywoływany dla każdego przycisku, aby umożliwić zmianę kolorów przycisków na podstawie ich znaczników i stanu podświetlenia.

Kod do odtwarzania dźwięków jest nieco inny:

void PianoScreen:: onTouchStart (tag uint8_t) {switch (tag) {… default: // Kod do ustawiania kolorów LED … if (instrument == HIHAT) {// Specjalny przypadek do notatek na zestaw perkusyjny} else { // Wyłącz dźwięk sound.play (instrument, NOTE_C3 + tag - 1); } highlighted_note = tag; } onRefresh (); }

To zamyka to szybkie przejście. Mam nadzieję, że to wprowadzenie wystarczy, aby rozpocząć projektowanie własnych interfejsów graficznych dla projektów Arduino!