Inhaltsverzeichnis:

Die Holi-Tie - Gunook
Die Holi-Tie - Gunook

Video: Die Holi-Tie - Gunook

Video: Die Holi-Tie - Gunook
Video: 10 вещей, которые приносят в дом удачу, счастье и деньги 2024, November
Anonim
Image
Image

Von gwfongMonkey PatchingFolgen Sie mehr vom Autor:

Beleuchtete Hunderampe
Beleuchtete Hunderampe
Skulptur aus Stahlherz und geschmolzenem Glas
Skulptur aus Stahlherz und geschmolzenem Glas
Skulptur aus Stahlherz und geschmolzenem Glas
Skulptur aus Stahlherz und geschmolzenem Glas
Schmetterling aus Kupferdraht und geschmolzenem Glas
Schmetterling aus Kupferdraht und geschmolzenem Glas
Schmetterling aus Kupferdraht und geschmolzenem Glas
Schmetterling aus Kupferdraht und geschmolzenem Glas

About: Nur ein Typ, der coole Sachen machen will Mehr über gwfong »

Dies ist die Holi-Tie, eine festliche Krawatte für die Feiertage. Das Holi-Tie basiert lose auf dem Ampli-Tie von Becky Stern, das ein Flora-Board verwendet, und verwendet einen Circuit Python Express (CPX)-Mikrocontroller, um die NeoPixel-Animationen und die Musik zu steuern. Eine Schaltfläche wechselt zwischen 2 verschiedenen NeoPixel-Animationen. Kapazitive Touchpads ändern die NeoPixel-Farben und die Animationsgeschwindigkeiten. Die andere Taste wechselt zwischen LED-Animationen und Musik. Das integrierte Mikrofon wird verwendet, um Umgebungsgeräusche für die VU-Meter-Animation zu messen. Und der CPX-Lautsprecher gibt Feiertags-Chiptunes aus.

Alles wird mit der Programmiersprache Python programmiert, die auf dem CircuitPython-System läuft. Es wird von einem 3,7 V, 500 mAH LiPo-Akku betrieben, der mit einem Ein- / Ausschalter modifiziert wurde.

Es gibt zwei Videoclips, die den Holi-Tie zeigen:

  • Holi-Tie abgeschlossen
  • In der Holi-Tie

Schritt 1: Teile und Werkzeuge

Teile

  • Circuit Playground Express
  • 15x Flora-Neopixel
  • Magnetdraht
  • Klebendes Klettband
  • 500mAH Lipo-Akku mit JST-Anschluss
  • Candy Cane Krawatte
  • Mini-Schiebeschalter, SPDT
  • Schrumpfschlauch

Bei der Beschaffung der Teile ist es ratsam, Extras zu kaufen. Ich hatte insgesamt 20 NeoPixel, von denen eines von Anfang an kaputt war und eines habe ich ruiniert. Die Candy Cane-Krawatte war so billig, dass ich mir eine zweite gekauft habe, für den Fall, dass ich die erste ruiniere.

Werkzeuge

  • Heißklebepistole
  • Lötstation
  • Kabelschneider
  • Kleines Messer
  • Multimeter
  • Rechner
  • Feuerzeug oder Heißluftpistole
  • Faden und Nadel

Schritt 2: Bereiten Sie die Krawatte vor

Bereiten Sie die Krawatte vor
Bereiten Sie die Krawatte vor
Bereiten Sie die Krawatte vor
Bereiten Sie die Krawatte vor
Bereiten Sie die Krawatte vor
Bereiten Sie die Krawatte vor

Das Hauptziel besteht darin, Zugang zum inneren Ankerkern zu erhalten und Linien abzugrenzen, die angeben, wo die LEDs positioniert werden sollen.

Schritt 1: Binden Sie die Krawatte in Position

Es wird schwierig, die Krawatte zu binden, wenn die Elektronik vorhanden ist. Binden Sie die Krawatte also so, dass sie gut aussieht und der Knoten ziemlich fest ist und sich nicht auflöst. Ziehen Sie dann vorsichtig am kleinen Ende der Krawatte, um das Loch zu öffnen, um die Krawatte über den Kopf zu bekommen. Dies ist die Position, an der die Krawatte gearbeitet wird.

Es gibt viele verschiedene Krawattenknoten. Ich kenne nur den, den ich als Kind gelernt habe, den Windsor. Es sollte egal sein, welcher Knoten verwendet wird.

Schritt 2: Öffnen Sie die Rückseite der Krawatte

Reißen Sie die Nähte an einer Seite der Krawattenschlaufe und des Logos auf und dann in der Mitte der Krawatte. Seien Sie vorsichtig, da es am Ende wieder zugenäht werden muss.

Schritt 3: Zeichnen Sie Linien, wo die LEDs platziert werden sollen

Damit die LEDs in den weißen Streifenabschnitten des Kabelbinders erscheinen, ist es einfacher, die Mittellinie für jeden weißen Streifenabschnitt auf der Rückseite des Kabelbinderkerns zu finden und diese dann der Vorderseite des Kabelbinderkerns zuzuordnen. Überprüfen Sie, ob die Mittellinie 1) in der Mitte und 2) parallel zum Streifen ist. Eine Feinabstimmung der LED-Positionen ist möglich, wenn sie etwas daneben liegen. Aber es ist am besten, es jetzt und nicht später so genau zu machen.

Testen Sie die Zentrierung der Linien, indem Sie LEDs auf die Linien legen und den Streifenstoff darauf legen. Passen Sie bei Bedarf an.

Schritt 3: Anbringen der NeoPixel

Anbringen der NeoPixel
Anbringen der NeoPixel
Anbringen der NeoPixel
Anbringen der NeoPixel
Anbringen der NeoPixel
Anbringen der NeoPixel
Anbringen der NeoPixel
Anbringen der NeoPixel

Grundsätzlich stellen wir unseren eigenen LED-Streifen her. Wir montieren die LEDs einfach auf den Kabelbinder und verbinden sie dann miteinander.

Schritt 1: Kleben Sie die NeoPixels auf den Ankerkern

Gib einen Klecks Heißkleber auf die Rückseite des NeoPixels und platziere ihn auf den Mittellinien. Für die Abschnitte mit 3 NeoPixeln richten Sie das mittlere NeoPixel vertikal aus und kleben Sie diese zuerst auf. Dies erleichtert die Positionierung des linken und rechten NeoPixels in Bezug auf die Mitte, insbesondere da die Breite der Krawatte von oben nach unten zunimmt.

Achten Sie darauf, alle NeoPixel in die gleiche Richtung auszurichten, von links unten nach rechts oben. Wenn dies nicht korrekt ist, funktioniert der Streifen nicht.

Eine Anmerkung zum Heißkleber. Es genügt, das Projekt abzuschließen. Ob es noch Jahre hält, muss man einfach sehen.

Schritt 3: Verlöten Sie die NeoPixels miteinander

Da ich beschlossen habe, die NeoPixel zusammenzulöten, anstatt leitfähiges Gewinde zu verwenden, arbeitet das Loch in den NeoPixel-Pads etwas gegen uns. Finden Sie einfach einen guten Platz auf dem Pad, um den Draht anzulöten. Versuchen Sie nicht, das Loch mit Lot zu füllen, aber wenn es passiert, ist es in Ordnung.

Magnetdraht hat eine dünne Isolationsschicht um einen Kupferkern. Mit einem Messer die Isolierung nur an den Enden abkratzen, an denen sie gelötet werden sollen. Schaben Sie am besten den gesamten Umfang des Drahtes ab.

Schritt 4: Konnektivität testen

Verwenden Sie ein Multimeter, um die Konnektivität von:

  1. Positive Verbindungen. Es sollte eine Konnektivität von der Spitze bis zum Schwanz geben. Stellen Sie sicher, dass die Testverbindung auf den Pads und nicht auf dem Draht liegt.
  2. Masseverbindungen. Führen Sie den gleichen Test durch, jedoch mit den Erdungspads.
  3. Jede Datenzeile. Überprüfen Sie von einem Datenpad zum nächsten, ob eine Verbindung besteht.

Schritt 4: Anbringen des Circuit Playground Express

Anbringen des Circuit Playground Express
Anbringen des Circuit Playground Express

Der Circuit Playground Express (CPX) ist das Herzstück des Systems. Adafruit hat zahlreiche Tutorials für diesen Controller. Später in diesem anweisbaren werde ich einige der MCU-Funktionen hervorheben.

Schritt 1: Löten Sie das CPX an die untere Spitze NeoPixel

Schneiden Sie geeignete Längen des Magnetdrahts für Strom, Masse und Daten ab. Schieben Sie sie durch das Bindekerngewebe, sodass sie die NeoPixel-Strom-, Erdungs- und Datenpads berühren. Löten Sie sie fest, um sicherzustellen, dass die vorhandenen Drähte auf den Pads immer noch eine gute Verbindung herstellen.

Anschließend den Ankerkern umdrehen und das CPX in die gewünschte Position bringen. Führen Sie das Stromkabel zum VOUT-Pad, das Massekabel zu einem beliebigen Massepad und das Datenkabel zu einem anderen E/A-Pad als A0. Der Code, den ich geschrieben habe, verwendet A3.

Testen Sie die Konnektivität.

Schritt 2: Befestigen Sie den CPX

Wählen Sie mit einem Faden und einer Nadel vier äquidistante Polster und nähen Sie sie auf den Krawattenkern.

Schritt 5: Stromversorgung des CPX

Stromversorgung des CPX
Stromversorgung des CPX
Stromversorgung des CPX
Stromversorgung des CPX
Stromversorgung des CPX
Stromversorgung des CPX

Der CPX hat keinen Ein-/Ausschalter. Dies bedeutet, dass sich die Krawatte in dem Moment, in dem die Batterie eingesteckt wird, einschaltet. Dies bedeutet auch, dass die einzige Möglichkeit zum Ausschalten darin besteht, den Akku herauszuziehen, was sehr umständlich ist. Eine einfache Lösung besteht darin, den Akku mit einem Aus-/Aus-Schalter zu versehen.

Schritt 1: Schneiden Sie den 3. Pin am Schalter ab

Einer der nicht mittigen Stifte wird nicht benötigt. Schneiden Sie es bündig mit dem Gehäuse des Schalters ab.

Schritt 2: Löten Sie den Schalter in Reihe mit einem Batteriekabel

Schneiden Sie das Massekabel der Batterie irgendwo in der Mitte durch. Schieben Sie ein Stück Schrumpfschlauch auf jeden der Erdungsdrähte. Löten Sie einen Erdungsdraht an einen der Stifte und den anderen Erdungsdraht an den anderen Stift. Achten Sie darauf, dass sie sich nicht berühren oder das Lot den Metallkörper berührt.

Stellen Sie mit einem Multimeter sicher, dass diese nicht angeschlossen sind. Schieben Sie den Schlauch über die Lötverbindungen und schrumpfen Sie ihn. Fügen Sie ein wenig Isolierband zu jedem Teil hinzu, das aufgrund von Biegeermüdung versagen kann.

Schritt 3: Überprüfen Sie, ob der Akku funktioniert

Zu diesem Zeitpunkt kann der Akku in das CPX eingesteckt werden. Wenn alles gut gelaufen ist, sollte der Switch das CPX ein- und ausschalten können.

Schritt 4: Batterie montieren

Kleben Sie ein wenig Klettband auf die Rückseite des Akkus und auf den Kabelbinder. Dadurch wird es an Ort und Stelle gehalten, wenn die Krawatte nicht zu viel gehandhabt wird.

Schritt 6: Einrichten des Circuit Playground Express

Ich werde nicht ins Detail gehen, wie man den CPX einrichtet. Adafruit macht das und noch einiges mehr. Ich werde ein paar Tipps für Probleme geben, die mir häufig begegnet sind.

CPX friert ein

Wahrscheinlich aufgrund von Problemen mit dem Laufzeitspeicher friert der CPX ziemlich oft ein. Die schnelle Lösung besteht darin, zu löschen und neu zu flashen. Suchen Sie in dieser Anleitung nach "Old Way". Im Grunde sind es ein paar Tastendrücke, ein Drag-and-Drop zum Löschen und dann ein Drag-and-Drop zum erneuten Flashen.

Achtung: Dadurch wird alles gelöscht. Der gesamte Code auf dem CPX geht verloren.

Das Speichern von Änderungen an CPX kann zu Problemen führen

Ich habe festgestellt, dass sich die Python-Laufzeit nach dem Speichern einer Datei auf dem CPX manchmal in einem schlechten Zustand befindet. Die Fehlerbehebung bestand darin, die Python-Laufzeit durch Drücken der Reset-Taste neu zu starten. Drücken Sie es nur einmal. Durch zweimaliges Drücken wird der erneute Flash-Vorgang gestartet.

Direkt auf CPX zu speichern ist riskant

Aufgrund der Möglichkeit, dass der CPX neu geflasht werden muss, besteht die Gefahr, dass der gesamte Code verloren geht. Nachdem ich meinen Code zweimal verloren hatte, kam ich auf einen einfachen Workflow. Ich würde meinen Code auf der lokalen Festplatte speichern. Wenn es bereit war, auf dem CPX getestet zu werden, würde ich es einfach kopieren, indem ich ein einfaches Deploy-Skript ausführte.

Schritt 7: Codieren des Circuit Playground Express

An diesem Punkt sind CPX und NeoPixels ziemlich vollständig. Es müssen keine weiteren mechanischen oder elektrischen Arbeiten mit ihnen durchgeführt werden. Der Rest ist Software.

Den Code finden Sie in meinem Github-Account. Der Python-Kerncode sollte ohne Änderungen für alle Betriebssysteme funktionieren. Installieren Sie nicht die externen Adafruit CircuitPython-Bibliotheken. Sie werden nicht verwendet.

Hier ist eine allgemeine Zusammenfassung dessen, was im Code vor sich geht.

Welche Eingabe bewirkt was?

  • Taste A: Durchläuft die LED-Animationen
  • Taste B: Blättert durch die Lieder
  • Kapazitives Touchpad A1: Ändert die Farben für die LED-Animationen
  • Kapazitives Touchpad A6: Ändert die Geschwindigkeit der LED-Animationen

3 Animationen existieren, aber nur 2 sind wirksam

code.py

Pixeloff importieren

#import vumeter import Treppen Import twinkle … led_animations = [Pixeloff. PixelsOff(Pixel), # vumeter. VuMeter(Pixel, 100, 400) Treppen. Treppen(Pixel), twinkle. Twinkle(Pixel)]

Ich habe den Ampli-Tie VU-Meter-Style-Code portiert. Es verwendet das CPX-Mikrofon, um Ton aufzunehmen und die NeoPixel basierend auf der Tonamplitude zu beleuchten. Ich wollte jedoch mehr Animationen. Aufgrund von Speicherbeschränkungen zur Laufzeit musste ich auswählen, welche Animationen ich wollte. Standardmäßig werden die anderen beiden, Stairs und Twinkle, ausgeführt, ohne dass Codeänderungen vorgenommen werden müssen. Um die VU-Meter-Animation auszuführen, müssen eine oder beide der anderen Animationen auskommentiert und die VU-Meter auskommentiert werden.

Musikmanager und Offline-Kodierung

frosty_the_snowman.py

importiere musical_notes als mn

# Frosty the Snowman # Walter E. Rollins Lied = [(mn. G4, mn. HLF), (mn. E4, mn. DTQ), (mn. F4, mn. ETH), (mn. G4, mn. QTR), (mn. C5, mn. HLF), …

convert_to_binary.py

Lieder = [(jingle_bells.song, "jingle_bells.bin"), (frosty_the_snowman.song, "frosty_the_snowman.bin")] für Lied in Liedern: data=song[0] file=song[1] mit open(file, "wb") als bin_file: für Eintrag in Daten: print("writing: " + str(entry)) note=entry[0] dur=entry[1] bin_file.write(struct.pack("<HH", note, dur))

Ich wollte Urlaubsmusik. Der CPX unterstützt sowohl WAV als auch Töne. WAV-Dateien erwiesen sich in Bezug auf Dateigröße und Laufzeitspeicher als zu groß. Die Verwendung von Python-Datenstrukturen zum Halten von Tönen und deren Dauer erwies sich auch als zu viel Laufzeitspeicher. Also habe ich den Holi-Tie-Code modifiziert, um eine komprimierte Binärdatei zu lesen, die nur die notwendigen Songdaten in einem komprimierten Binärformat enthielt. Ich habe ein Skript geschrieben, das einen Song in einer Python-Datenstruktur liest und in das Binärformat schreibt. Wenn der Song als Binärdaten in einer Datei codiert ist, wird der Song sowohl klein als auch dynamisch. Sobald der Song abgespielt ist, wird der Speicher freigegeben.

Es ist trivial, weitere Songs hinzuzufügen. Einzelheiten finden Sie in der README.md in den Liedern.

Taste A animiert NeoPixel, B spielt Musik, aber nicht gleichzeitig

code.py

def button_a_pressed():

if music.is_playing(): # Musik stoppen wenn music.stop() next_led_animation() def button_b_pressed(): if active_led_animation != 0: # No-Op-Animation ausführen next_led_animation(0) if music.is_playing(): # Toggle Musik an oder aus music.stop() sonst: music.play()

Selbst mit dem speichereffizienteren Musikverwaltungssystem war ich nicht in der Lage, 2 Animationen im Laufzeitspeicher zu halten, während ich 1 davon abspielte und gleichzeitig einen Song abspielte. Da ich mich bereits dafür entschieden habe, VU-Meter überhaupt nicht im Laufzeitspeicher zu haben, wollte ich die Anzahl der Animationen nicht auf nur 1 reduzieren. Also habe ich den Code so geschrieben, dass entweder die Animation abgespielt wird oder die Musik abgespielt wird, aber nicht beide. Eine andere Möglichkeit bestand darin, die Anzahl der NeoPixel zu reduzieren, aber das würde etwas von der Coolness der Animation verlieren.

Python-Code-Funkiness

Obwohl ich ein erfahrener Softwareentwickler bin, hatte ich noch nie Python geschrieben. Nachdem ich den Dreh raus hatte und angefangen hatte, gute Codierungspraktiken wie Kapselung und Modularisierung anzuwenden, stellte ich schnell fest, dass ich zu viel Laufzeitspeicher verbrauchte. Es gibt also einiges an Nicht-DRY-Code. Ich musste auch einige MicroPython-Techniken wie const() verwenden, um Speicherprobleme bei der Laufzeit weiter zu reduzieren.

Kompilierte Module

kompilieren

#!/bin/bash

compiler=~/development/circuitpython/mpy-cross-3.x-windows.exe cd songs python3./convert_to_binary.py cd.. for f in *.py; do if

Zu Beginn des Projekts folgte ich dem Rat von Adafruit und speicherte alle Adafruit CircuitPython-Bibliotheken auf Flash. Dies ließ jedoch wenig Raum für mein Projekt. Um meinen Code auf das CPX zu bekommen, habe ich angefangen, die Module zu kompilieren und auf der MCU zu platzieren. Es stellt sich heraus, dass der Holi-Tie keine der externen Bibliotheken benötigt. Die vorhandenen Bibliotheken im UF2 waren für dieses Projekt ausreichend. Das Ausführen von *.mpy-Dateien ist etwas effizienter, daher habe ich den Prozess der Bereitstellung der kompilierten Module beibehalten.

Wie aus dem obigen Kompilierungsskript ersichtlich, arbeite ich auf einem Windows-Rechner, verwende aber Unix-Dienstprogramme wie bash und python3. Ich benutze Cygwin, um dies zu erreichen. Dieses Skript kann leicht in DOS-Batch und eine Windows-native Python3-Implementierung übersetzt werden.

Schritt 8: Zuknöpfen der Krawatte

Zuknöpfen der Krawatte
Zuknöpfen der Krawatte
Zuknöpfen der Krawatte
Zuknöpfen der Krawatte

Der letzte Schritt besteht darin, den Krawattenkern wieder anzubringen, die Krawatte wieder zusammenzusetzen und wieder zu nähen. Stellen Sie sicher, dass Sie das CPX zugänglich machen können. Sie benötigen es, wenn Sie die Batterie austauschen oder Codeänderungen vornehmen.

Empfohlen: