Inhaltsverzeichnis:
- Schritt 1: Teile und Werkzeuge
- Schritt 2: Bereiten Sie die Krawatte vor
- Schritt 3: Anbringen der NeoPixel
- Schritt 4: Anbringen des Circuit Playground Express
- Schritt 5: Stromversorgung des CPX
- Schritt 6: Einrichten des Circuit Playground Express
- Schritt 7: Codieren des Circuit Playground Express
- Schritt 8: Zuknöpfen der Krawatte
Video: Die Holi-Tie - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:19
Von gwfongMonkey PatchingFolgen Sie mehr vom Autor:
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
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
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:
- 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.
- Masseverbindungen. Führen Sie den gleichen Test durch, jedoch mit den Erdungspads.
- Jede Datenzeile. Überprüfen Sie von einem Datenpad zum nächsten, ob eine Verbindung besteht.
Schritt 4: 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
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
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:
DIY So zeigen Sie die Zeit auf dem M5StickC ESP32 mit Visuino an - Einfach zu tun: 9 Schritte
DIY So zeigen Sie die Zeit auf dem M5StickC ESP32 mit Visuino an - Einfach zu machen: In diesem Tutorial lernen wir, wie Sie den ESP32 M5Stack StickC mit Arduino IDE und Visuino programmieren, um die Zeit auf dem LCD anzuzeigen
So deaktivieren Sie die Autokorrektur für nur ein Wort (iOS): 3 Schritte
So deaktivieren Sie die Autokorrektur für nur ein Wort (iOS): Manchmal korrigiert die Autokorrektur möglicherweise etwas, das Sie nicht korrigieren möchten, z. Textabkürzungen beginnen sich in Großbuchstaben zu setzen (imo korrigieren zum Beispiel zu IMO). So erzwingen Sie, dass die Korrektur eines Wortes oder einer Phrase beendet wird, ohne aut zu deaktivieren
So laden Sie die Sony A6000-Kamera auf: 17 Schritte
So laden Sie die Sony A6000-Kamera auf: Wenn Sie die Kamera zum ersten Mal verwenden, laden Sie den Akku auf. Der geladene Akku entlädt sich nach und nach, auch wenn Sie ihn nicht verwenden. Um eine Aufnahmegelegenheit nicht zu verpassen, laden Sie den Akku vor der Aufnahme auf. (App
So verbinden Sie die Android-Anwendung mit AWS IOT und verstehen die Spracherkennungs-API: 3 Schritte
So verbinden Sie die Android-Anwendung mit AWS IOT und verstehen die Spracherkennungs-API: In diesem Tutorial erfahren Sie, wie Sie die Android-Anwendung mit dem AWS IOT-Server verbinden und die Spracherkennungs-API verstehen, die eine Kaffeemaschine steuert. Die Anwendung steuert die Kaffeemaschine über Alexa Sprachdienst, die c
So bauen Sie eine Uhr, die die Zeit an die Wand projiziert – wikiHow
So bauen Sie eine Uhr, die Zeit an die Wand projiziert: Dieses Instructable zeigt Ihnen, wie Sie eine Projektoruhr bauen. Mit diesem Gerät können Sie die Zeit an die Wand projizieren. Basierend auf einem kleinen LCD-Wecker (nicht zu klein, sondern kann nicht projiziert und bearbeitet werden) ist dies eine gute Möglichkeit