Spisu treści:

Holi-Tie: 8 kroków (ze zdjęciami)
Holi-Tie: 8 kroków (ze zdjęciami)

Wideo: Holi-Tie: 8 kroków (ze zdjęciami)

Wideo: Holi-Tie: 8 kroków (ze zdjęciami)
Wideo: Trying this trend at 37 weeks pregnant #shorts 2024, Lipiec
Anonim
Image
Image

Autor: gwfongMonkey PatchingObserwuj więcej autora:

Podświetlana rampa dla psa
Podświetlana rampa dla psa
Rzeźba ze stali i stopionego szkła
Rzeźba ze stali i stopionego szkła
Rzeźba ze stali i stopionego szkła
Rzeźba ze stali i stopionego szkła
Miedziany drut i stopiony szklany motyl
Miedziany drut i stopiony szklany motyl
Miedziany drut i stopiony szklany motyl
Miedziany drut i stopiony szklany motyl

O: Po prostu facet, który chce robić fajne rzeczy Więcej o gwfong »

To jest Holi-Tie, świąteczny krawat przeznaczony do noszenia podczas wakacji. Swobodnie oparty na Ampli-Tie firmy Becky Stern, który wykorzystuje płytkę Flora, Holi-Tie wykorzystuje mikrokontroler Circuit Python Express (CPX) do sterowania animacjami i muzyką NeoPixel. Przycisk zmienia się między 2 różnymi animacjami NeoPixel. Pojemnościowe panele dotykowe zmieniają kolory NeoPixel i szybkość animacji. Drugi przycisk przełącza między animacjami LED i muzyką. Wbudowany mikrofon służy do pomiaru hałasu otoczenia dla animacji miernika VU. A głośnik CPX odtwarza świąteczne melodie.

Wszystko jest zakodowane przy użyciu języka programowania Python działającego na szczycie systemu CircuitPython. Zasilany jest akumulatorem LiPo 3,7 V, 500 mAH, który został zmodyfikowany tak, aby posiadał włącznik/wyłącznik.

Istnieją dwa klipy wideo przedstawiające Holi-Tie:

  • Ukończono Holi-Tie
  • Wewnątrz Holi-Tie

Krok 1: Części i narzędzia

Części

  • Ekspresowy plac zabaw
  • 15x Neopiksele Flora
  • Drut magnetyczny
  • Samoprzylepna taśma rzepowa
  • Bateria lipo 500 mAH ze złączem JST
  • Krawat z trzciny cukrowej
  • Mini przełącznik suwakowy, SPDT
  • Rurki termokurczliwe

Pozyskując części, rozsądnie byłoby kupić dodatki. Miałem w sumie 20 NeoPixeli, z których jeden był zepsuty od początku, a jeden zrujnowany. Krawat z Candy Cane był tak tani, że kupiłem drugi na wszelki wypadek, gdybym zniszczył pierwszy.

Narzędzia

  • Pistolet na gorący klej
  • Stacja lutownicza
  • Nożyce do drutu
  • Mały nóż
  • Multimetr
  • Komputer
  • Zapalniczka lub opalarka
  • Nić i igła

Krok 2: Przygotowanie krawata

Przygotowanie krawata
Przygotowanie krawata
Przygotowanie krawata
Przygotowanie krawata
Przygotowanie krawata
Przygotowanie krawata

Głównym celem jest uzyskanie dostępu do wewnętrznego rdzenia łączącego i rozgraniczenie linii wskazujących, gdzie powinny być umieszczone diody LED.

Krok 1: Zawiąż krawat na swoim miejscu

Trudno będzie zawiązać krawat, gdy elektronika będzie na miejscu. Więc zawiąż krawat, aby wyglądał dobrze, a węzeł był dość mocny i nie rozplątywał się. Następnie ostrożnie pociągnij za mały koniec krawata, aby otworzyć otwór i przełożyć krawat przez głowę. To jest pozycja, na której będzie pracował krawat.

Istnieją różne rodzaje węzłów krawatowych. Znam tylko ten, którego nauczyłem się jako dziecko, Windsor. Nie powinno mieć znaczenia, który węzeł jest używany.

Krok 2: Otwórz tył krawata

Rozerwij szwy po jednej stronie pętli krawata i logo, a następnie na środku krawata. Bądź ostrożny, ponieważ na końcu musi być zszyty.

Krok 3: Narysuj linie, w których powinny być umieszczone diody LED

Aby diody LED pojawiły się w sekcjach białego paska opaski, łatwiej jest znaleźć linię środkową dla każdej sekcji białego paska z tyłu rdzenia wiązania, a następnie przyporządkować ją do przodu rdzenia wiązania. Sprawdź i dokładnie sprawdź, czy linia środkowa jest 1) pośrodku i 2) równoległa do paska. Precyzyjne dostrojenie pozycji diod LED będzie możliwe, jeśli są nieco odsunięte. Ale najlepiej jest zbliżyć się do dokładności teraz, a nie później.

Sprawdź wyśrodkowanie linii, umieszczając diody LED na liniach i kładąc tkaninę w paski na wierzchu. Dostosuj w razie potrzeby.

Krok 3: Mocowanie NeoPixels

Mocowanie NeoPixels
Mocowanie NeoPixels
Mocowanie NeoPixels
Mocowanie NeoPixels
Mocowanie NeoPixels
Mocowanie NeoPixels
Mocowanie NeoPixels
Mocowanie NeoPixels

Zasadniczo wykonujemy własną taśmę LED. Po prostu montujemy diody LED na rdzeniu spinającym, a następnie łączymy je ze sobą.

Krok 1: Przyklej NeoPixels do rdzenia krawata

Umieść odrobinę gorącego kleju z tyłu NeoPixel i umieść go na liniach środkowych. W przypadku sekcji z 3 NeoPixelami, wyrównaj w pionie środkowy NeoPixel i przyklej je najpierw. Ułatwi to ustawienie lewego i prawego NeoPixela w stosunku do środka, zwłaszcza biorąc pod uwagę, że szerokość krawata zwiększa się od góry do dołu.

Pamiętaj, aby ustawić wszystkie NeoPixels w tym samym kierunku, od lewego dolnego do prawego górnego. Jeśli to nie jest prawidłowe, pasek nie będzie działał.

Uwaga o gorącym kleju. Wystarczy, że projekt zostanie ukończony. Jeśli chodzi o to, czy przetrwa to przez długie lata, trzeba tylko zobaczyć.

Krok 3: Przylutuj ze sobą NeoPixels

Ponieważ zdecydowałem się zlutować razem NeoPixel zamiast używać przewodzącego gwintu, otwór w padach NeoPixel działa trochę przeciwko nam. Po prostu znajdź dobre miejsce na podkładce do przylutowania drutu. Nie próbuj wypełniać dziury lutem, ale jeśli tak się stanie, będzie OK.

Drut magnetyczny ma cienką warstwę izolacji wokół miedzianego rdzenia. Nożem zeskrob izolację na końcach, gdzie będą lutowane. Najlepiej zeskrobać cały obwód drutu.

Krok 4: Przetestuj łączność

Użyj multimetru, aby przetestować łączność:

  1. Połączenia dodatnie. Powinna istnieć łączność od czubka do ogona. Sprawdź połączenie testowe na elektrodach, a nie na przewodzie.
  2. Połączenia uziemiające. Wykonaj ten sam test, ale z podkładkami uziemiającymi.
  3. Każda linia danych. Z jednego tabletu danych do drugiego sprawdź, czy istnieje łączność.

Krok 4: Podłączanie Circuit Playground Express

Podłączanie Circuit Playground Express
Podłączanie Circuit Playground Express

Sercem systemu jest Circuit Playground Express (CPX). Adafruit ma wiele samouczków dotyczących tego kontrolera. W dalszej części tej instrukcji przedstawię kilka funkcji MCU.

Krok 1: Przylutuj CPX do dolnej końcówki NeoPixel

Wytnij odpowiednie długości drutu magnesu dla zasilania, uziemienia i danych. Przepchnij je przez materiał rdzenia krawata, aby dotknęły padów zasilania, uziemienia i danych NeoPixel. Przylutuj je, upewniając się, że istniejące przewody na podkładkach nadal zapewniają dobrą łączność.

Następnie odwróć rdzeń krawata i umieść CPX w pożądanej pozycji. Podłącz przewód zasilający do podkładki VOUT, przewód uziemiający do dowolnej podkładki uziemiającej, a przewód danych do dowolnej podkładki we/wy innej niż A0. Napisany przeze mnie kod używa formatu A3.

Przetestuj łączność.

Krok 2: Przywiąż CPX

Używając nici i igły, wybierz dowolne cztery równoodległe podkładki i przyszyj je do rdzenia krawata.

Krok 5: Zasilanie CPX

Zasilanie CPX
Zasilanie CPX
Zasilanie CPX
Zasilanie CPX
Zasilanie CPX
Zasilanie CPX

CPX nie posiada włącznika/wyłącznika. Oznacza to, że w momencie podłączenia baterii krawat włączy się. Oznacza to również, że jedynym sposobem na jego wyłączenie jest odłączenie baterii, co jest poważnym problemem. Prostym rozwiązaniem jest umieszczenie wyłącznika na akumulatorze.

Krok 1: Odetnij trzeci pin przełącznika

Jeden z niecentrycznych kołków nie jest potrzebny. Odetnij go równo z korpusem przełącznika.

Krok 2: Przylutuj przełącznik w linii z przewodem akumulatorowym

Przetnij przewód uziemiający akumulatora gdzieś pośrodku. Wsuń kawałek rurki termokurczliwej na każdy z przewodów uziemiających. Przylutuj jeden przewód uziemiający do jednego ze styków, a drugi przewód uziemiający do drugiego styku. Upewnij się, że nie stykają się ze sobą lub lut nie dotyka metalowego korpusu.

Sprawdź, czy nie są połączone za pomocą multimetru. Nasuń rurkę na lutowane połączenia i obkurcz ją. Dodaj kawałek taśmy elektrycznej do każdej części, która może ulec uszkodzeniu z powodu zmęczenia zginaniem.

Krok 3: Sprawdź, czy bateria działa

W tym momencie baterię można podłączyć do CPX. Jeśli wszystko poszło dobrze, przełącznik powinien być w stanie włączać i wyłączać CPX.

Krok 4: Zamontuj baterię

Umieść kawałek samoprzylepnej taśmy rzepowej z tyłu baterii i na rdzeń wiązania. To utrzyma go na miejscu, jeśli krawat nie będzie zbyt często manipulowany.

Krok 6: Przygotowanie Circuit Playground Express

Nie będę wchodził w szczegóły, jak skonfigurować CPX. Adafruit to robi, a potem jeszcze trochę. Podam kilka wskazówek dotyczących problemów, z którymi dość często się spotykałem.

CPX zawiesza się

Prawdopodobnie z powodu problemów z pamięcią w czasie wykonywania, CPX często się zawieszał. Szybkim rozwiązaniem jest usunięcie i ponowne flashowanie. Wyszukaj „Stary sposób” w tych instrukcjach. Zasadniczo jest to kilka naciśnięć przycisków, przeciąganie i upuszczanie, aby wymazać, a następnie przeciąganie i upuszczanie, aby ponownie flashować.

Ostrzeżenie: to usuwa wszystko. Cały kod na CPX zostanie utracony.

Zapisywanie zmian w CPX może powodować problemy

Odkryłem, że czasami po zapisaniu pliku na CPX środowisko uruchomieniowe Pythona będzie w złym stanie. Poprawka polegała na ponownym uruchomieniu środowiska uruchomieniowego Pythona przez naciśnięcie przycisku resetowania. Naciśnij go tylko raz. Dwukrotne naciśnięcie go rozpocznie proces ponownego flashowania.

Zapisywanie bezpośrednio na CPX jest ryzykowne

Ze względu na możliwość, że CPX musi zostać przeflashowany, istnieje ryzyko utraty całego kodu. Po dwukrotnym zgubieniu kodu wymyśliłem prosty przepływ pracy. Zapisałbym swój kod na lokalnym dysku twardym. Kiedy był gotowy do przetestowania na CPX, po prostu skopiowałem go, uruchamiając prosty skrypt wdrażania.

Krok 7: Kodowanie ekspresowego placu zabaw dla torów

W tym momencie CPX i NeoPixels są prawie kompletne. Nie trzeba z nimi wykonywać żadnych innych prac mechanicznych ani elektrycznych. Reszta to całe oprogramowanie.

Kod można znaleźć na moim koncie github. Podstawowy kod Pythona powinien działać bez żadnych zmian we wszystkich systemach operacyjnych. Nie instaluj zewnętrznych bibliotek Adafruit CircuitPython. Nie są używane.

Oto ogólne podsumowanie tego, co dzieje się w kodzie.

Jakie wejście co robi?

  • Przycisk A: Przechodzi przez animacje LED
  • Przycisk B: przełącza utwory
  • Pojemnościowy panel dotykowy A1: Zmienia kolory animacji LED
  • Pojemnościowy panel dotykowy A6: Zmienia prędkość animacji LED

Istnieją 3 animacje, ale tylko 2 działają

kod.py

importuj piksele wyłączone

#import vumeter import schody import twinkle … led_animations = [pikselioff. PixelsOff(piksele), # vumeter. VuMeter(piksele, 100, 400) schody. Stairs(piksele), twinkle. Twinkle(piksele)]

Przeniosłem kod stylu miernika Ampli-Tie VU. Wykorzystuje mikrofon CPX do zbierania dźwięku i oświetlania NeoPixels w oparciu o amplitudę dźwięku. Jednak chciałem więcej animacji. Ze względu na ograniczenia pamięci wykonawczej musiałem wybrać animacje, które chciałem. Więc domyślnie dwa pozostałe, Stairs i Twinkle, będą działać bez konieczności wprowadzania zmian w kodzie. Aby uruchomić animację miernika VU, jedna lub obie inne animacje muszą zostać skomentowane, a miernik VU odkomentowany.

Menedżer muzyki i kodowanie offline

mroźny_bałwan.py

importuj nuty jako mn

# Frosty the Snowman # piosenka Waltera E. Rollinsa = [(mn. G4, mn. HLF), (mn. E4, mn. DTQ), (mn. F4, mn. ETH), (mn. G4, mn. QTR), (mn. C5, mn. HLF), …

konwertuj_na_binarny.py

piosenki = [(jingle_bells.song, "jingle_bells.bin"), (frosty_the_snowman.song, "frosty_the_snowman.bin")] dla piosenki w utworach: data=song[0] file=song[1] with open(file, "wb") as bin_file: dla wpisu w danych: print("writing: " + str(entry)) note=entry[0] dur=entry[1] bin_file.write(struct.pack("<HH", note, dur))

Chciałem muzyki świątecznej. CPX obsługuje zarówno WAV, jak i tony. Pliki WAV okazały się zbyt duże pod względem rozmiaru pliku i pamięci uruchomieniowej. Wykorzystanie struktur danych Pythona do przechowywania dźwięków i czasu ich trwania również okazało się zużywać zbyt dużo pamięci wykonawczej. Zmodyfikowałem więc kod Holi-Tie, aby odczytywał skompresowany plik binarny, który zawierał tylko niezbędne dane utworu w skompresowanym formacie binarnym. Napisałem skrypt, który odczytuje piosenkę przechowywaną w strukturze danych Pythona i zapisuje ją w formacie binarnym. Zakodowanie utworu jako danych binarnych w pliku sprawia, że utwór jest zarówno mały, jak i dynamiczny. Po zakończeniu odtwarzania utworu pamięć zostaje zwolniona.

Dodawanie kolejnych utworów jest trywialne. Szczegółowe informacje można znaleźć w pliku README.md w utworach.

Przycisk A ożywia NeoPixels, B odtwarza muzykę, ale nie jednocześnie

kod.py

def button_a_pressed():

if music.is_playing(): # Zatrzymaj muzykę, jeśli odtwarzasz music.stop() next_led_animation() def button_b_pressed(): if active_led_animation != 0: # Uruchom animację bez operacji next_led_animation(0) if music.is_playing(): # Przełącz włączanie i wyłączanie muzyki music.stop() else: music.play()

Nawet przy bardziej wydajnym pod względem pamięci systemie zarządzania muzyką, nie byłem w stanie przechowywać w pamięci wykonawczej 2 animacji, odtwarzając 1 z nich, a także odtwarzać piosenkę w tym samym czasie. Ponieważ zdecydowałem się już w ogóle nie mieć licznika VU w pamięci uruchomieniowej, nie chciałem zmniejszać liczby animacji do zaledwie 1. Więc napisałem kod tak, że albo animacja jest odtwarzana, albo muzyka jest odtwarzana, ale nie Zarówno. Inną opcją było zmniejszenie liczby NeoPixels, ale to straciłoby trochę chłodu animacji.

Funkcjonalność kodu Pythona

Chociaż jestem doświadczonym programistą, nigdy nie napisałem Pythona. Po tym, jak się zorientowałem i zacząłem stosować dobre praktyki kodowania, takie jak enkapsulacja i modularyzacja, szybko odkryłem, że używam zbyt dużo pamięci uruchomieniowej. Jest więc sporo kodu nie-DRY. Musiałem również użyć niektórych technik MicroPython, takich jak const(), aby jeszcze bardziej zmniejszyć problemy z pamięcią w czasie wykonywania.

Skompilowane moduły

skompilować

#!/kosz/bash

compiler=~/development/circuitpython/mpy-cross-3.x-windows.exe utwory cd python3./convert_to_binary.py cd.. for f w *.py; wykonaj jeśli

Na początku projektu poszedłem za radą Adafruit i przechowywałem wszystkie biblioteki Adafruit CircuitPython we flashu. To jednak nie pozostawiało wiele miejsca na mój projekt. Aby móc przenieść mój kod do CPX, zacząłem kompilować moduły i umieszczać je na MCU. Okazuje się, że Holi-Tie nie potrzebuje żadnej z zewnętrznych bibliotek. Istniejące biblioteki w UF2 były wystarczające do tego projektu. Uruchamianie plików *.mpy jest nieco bardziej wydajne, więc zachowałem proces wdrażania skompilowanych modułów.

Jak widać w powyższym skrypcie kompilacji, pracuję na komputerze z systemem Windows, ale używam narzędzi Unix, takich jak bash i python3. Używam Cygwina, aby to osiągnąć. Ten skrypt można łatwo przetłumaczyć na wsadowy system DOS i natywną implementację Python3 dla systemu Windows.

Krok 8: Zapinanie krawata

Zapinanie krawata
Zapinanie krawata
Zapinanie krawata
Zapinanie krawata

Ostatnim krokiem jest umieszczenie rdzenia krawata na miejscu, ponowne złożenie krawata i zszycie go z powrotem. Upewnij się, że możesz udostępnić CPX. Będziesz go potrzebować podczas wymiany baterii lub wprowadzania zmian w kodzie.

Zalecana: