Inhaltsverzeichnis:

Die Algorithmus-Maschine - Gunook
Die Algorithmus-Maschine - Gunook

Video: Die Algorithmus-Maschine - Gunook

Video: Die Algorithmus-Maschine - Gunook
Video: Künstliche Intelligenz - Büchse der Pandora? | Prof. Dr. Thomas Villmann 2024, Juli
Anonim
Image
Image
LED-Leiste: 3D-Druck der Maske
LED-Leiste: 3D-Druck der Maske

Ich unterrichte seit 15 Jahren Informatik auf College-Niveau, und obwohl meine Expertise eher auf der Programmierseite liegt, verbringe ich immer noch ziemlich viel Zeit damit, Standardalgorithmen zum Suchen und Sortieren zu behandeln. Aus pädagogischer Sicht ist die zentrale Frage die Rechenkomplexität: Wie viel Zeit benötigt jeder Algorithmus bei einer bestimmten Eingabegröße? Aber es gibt zahlreiche Nuancen. Haben die Algorithmen zum Beispiel unterschiedliche Laufzeiten in Abhängigkeit von den spezifischen Eingabewerten (im Gegensatz zur Größe)? In welchen Fällen würden Sie einen Sortieralgorithmus einem anderen vorziehen? Obwohl wir diese Themen abstrakt besprechen, hat es mich immer gestört, dass es keine einfache Möglichkeit gab, zu sehen, wie verschiedene Algorithmen unter verschiedenen Bedingungen funktionieren.

Ziele

Mein übergeordnetes Ziel für dieses Projekt war es, ein interaktives Display für Studenten zu erstellen, um Algorithmen zu visualisieren und zu erkunden. Ich habe mich auf Algorithmen beschränkt, die mit Arrays von Werten (Ganzzahlen) arbeiten, sodass ich einen adressierbaren RGB-LED-Streifen verwenden kann, um den Array-Inhalt zu visualisieren. Das Array hat 100 Elemente, und jede ganze Zahl wird einer Farbe in Regenbogenreihenfolge zugeordnet, sodass sofort ersichtlich ist, ob das Array sortiert, teilweise sortiert oder randomisiert ist. Zusätzlich zu den Werten wollte ich jedoch eine Möglichkeit haben, Steuerungsaspekte des Algorithmus zu visualisieren – zum Beispiel, welche Elemente des Arrays gerade verglichen oder ausgetauscht werden.

Die konkreten Ziele sind:

- Bieten Sie eine Vielzahl von Such- und Sortieralgorithmen

- Visualisieren Sie die Werte im Array so, dass der Fortschritt des Algorithmus hervorgehoben wird

- Visualisieren Sie die Algorithmussteuerung; insbesondere die zu berücksichtigenden Elemente.

- Ermöglichen Sie Benutzern, die Eingabedatenmuster auszuwählen, anstatt immer Zufallswerte zu generieren

- Erlauben Sie Benutzern, die Geschwindigkeit zu steuern und den Algorithmus zu pausieren

- Benutzern erlauben, Best-Case-, Worst-Case-, Average-Case-Verhalten zu erzwingen (Algorithmus-spezifisch)

- Zeigen Sie die Anzahl der Schritte an, während der Algorithmus fortschreitet

Visualisierung

Aus Sicht des physikalischen Designs ist der interessanteste Teil dieses Projekts die Visualisierung des Arrays. Ich hatte Probleme damit, die Daten und die Steuerung anzuzeigen und das Anzeigegerät selbst zu bauen. Mein Ziel war es, die Datenwerte als farbige Kreise und die Kontrollpunkte als farbige Pfeile anzuzeigen, die auf die Datenwerte zeigen. Nach einigen Experimenten entschied ich mich für ein Design mit zwei parallelen Streifen von 100 RGB-LEDs (WS2812) mit einer kreisförmigen Maske über jeder Daten-LED und einer dreieckigen Maske über jeder Kontroll-LED. Ich habe ein 3D-Modell der Maske mit 10 Paaren von Kreisen und Dreiecken erstellt und dann 10 dieser Module in 3D gedruckt, um insgesamt 100 Kreise und 100 Dreiecke zu erhalten. Die Größe und der Abstand meiner Maske ist für Streifen mit 100 LEDs pro Meter ausgelegt. Die 3D-Modelldateien werden später in dieser Beschreibung bereitgestellt.

Elektronik und Gehäuse

Der Rest des Geräts ist aus elektronischer Sicht einfach. Zusätzlich zu den beiden LED-Streifen gibt es eine Reihe von Tastern, einen Drehgeber (für die Geschwindigkeitsregelung) und eine 7-Segment-Anzeige (um Schritte anzuzeigen). Bei so vielen Tasten und Bedienelementen habe ich mich für einen ESP32-Mikrocontroller entschieden, da er viele Pins freilegt und ziemlich leistungsstark ist. Ich werde die Verdrahtungsstrategie durchgehen, aber sie ist ziemlich einfach. Sie könnten wahrscheinlich etwas Schlaues mit Schieberegistern machen, wenn Sie weniger Pins verwenden möchten.

Sie können das Gehäuse für dieses Gerät in vielen verschiedenen Formen bauen. Ich habe es mir zunächst als große rechteckige Platine mit dem LED-Streifen oben und einem Raster von Tasten in der Mitte vorgestellt. Die Form, die ich letztendlich gefunden habe, ist inspiriert von einer Art Sichtweise der 60er Jahre auf die Technologie des Weltraumzeitalters. Sie können es auch mit den LED-Streifen in vertikaler Ausrichtung bauen. Oder machen Sie den LED-Teil viel größer – füllen Sie eine ganze Wand – mit einem separaten Bedienfeld.

Software

Der Code für dieses Gerät ist auf GitHub frei verfügbar, und ich habe mein Bestes getan, um zu dokumentieren, wie es funktioniert und wie es konfiguriert wird. Die einzige externe Bibliothek, die Sie benötigen, ist FastLED, um die WS2812-Streifen anzusteuern.

Lieferungen

Elektronik

1 ESP32-Entwicklungsboard (z. B.

2 WS2812 oder ähnliche LED-Streifen, Dichte 100 LEDs pro Meter (z. B.

1 Dreieck „Start“-Button (z. B.

12 Kurzzeittasten (z. B. https://amzn.com/B01N4D4750) -- verschiedene Formen, wenn Sie möchten

1 Packung (20) vorverdrahtete Tasteranschlüsse (z. B.

1 Packung JST-Anschlüsse (z. B.

1 Drehgeber (z. B.

1 Drehknopf für Drehgeber (z. B.

1 Pack Dupont Steckverbinder (z. B. https://amzn.com/B014YTPFT8) -- es lohnt sich auch das Crimpwerkzeug zu besorgen.

1 Fassbuchse (für Strom) (z. B.

1 TM1637 7-Segment numerische Anzeige (z. B.

Löt- und Verdrahtungsgeräte

3D-Modelldateien

Das 3D-Modell für ein Paar 10-Licht-Module finden Sie auf Thingiverse:

www.thingiverse.com/thing:4178181

Sie müssen dieses Modell fünfmal für insgesamt 10 Module ausdrucken.

Software

github.com/samguyer/AlgorithmMachine

Gehege

Holz, Plexiglas, Edelstahlschrauben und -schrauben

Diffusionsmaterial. Mein Favorit ist Lee Filter #216 Full White Diffusion, aber es gibt auch andere Optionen. Selbst normales weißes Papier macht einen guten Job.

Schritt 1: Algorithmen 101

Viele Leute denken, dass Informatik im Wesentlichen das Studium der Programmierung ist. Aber das eigentliche Herz und die Seele dieses Gebiets sind Algorithmen: das Studium systematischer Verfahren zur Lösung von Problemen und ihrer Kosten (typischerweise wie lange sie dauern). Wegweisende Persönlichkeiten auf diesem Gebiet wie Alan Turing, Alonzo Church und Edsger Dijkstra dachten über diese Ideen nach, bevor es Computer, wie wir sie kennen, überhaupt gab.

Das Hauptmerkmal eines Algorithmus zur Lösung eines bestimmten Problems besteht darin, dass er detailliert und präzise ist, sodass jemand ihn verwenden kann, um eine Lösung zu finden, ohne zu verstehen, wie er funktioniert. Folgen Sie einfach den Schritten auf mechanische Weise und Sie erhalten die richtige Antwort. Sie können sehen, wie dies bei der Programmierung von Computern hilft, da diese diesen Detaillierungsgrad benötigen. Ein Computer kann fehlende Details nicht ergänzen oder Urteile fällen, wie es ein Mensch kann.

Wie lange wird es dauern?

Sobald wir ein detailliertes Verfahren haben, ist eine natürliche Frage, wie lange es dauert, bis wir die Antwort erhalten. Wir können keine gewöhnlichen Zeiteinheiten verwenden, da es davon abhängt, wer die Arbeit macht (vergleichen Sie, wie schnell eine Person etwas mit einem Supercomputer berechnen könnte). Außerdem hängt es davon ab, wie viele Daten wir haben. Offensichtlich dauert es länger, eine Liste mit einer Million Telefonnummern zu durchsuchen, als eine Liste mit hundert.

Um die Kosten eines Algorithmus zu beschreiben, wählen wir zunächst eine Operation in der Prozedur aus, die einen "Schritt" darstellt - normalerweise etwas Einfaches, wie das Vergleichen oder Addieren zweier Zahlen, das eine festgelegte Zeit in Anspruch nimmt. Dann entwickeln wir eine Formel, die beschreibt, wie viele Schritte der Algorithmus bei einer bestimmten Anzahl von Datenelementen ausführen wird. Aus historischen Gründen bezeichnen wir die Anzahl der Datenelemente fast immer mit einem großen N.

Das Durchsuchen einer Liste von N Telefonnummern erfordert beispielsweise N Schritte. Das zweimalige Durchsuchen der Liste erfordert 2N Schritte. Beide werden als lineare Zeitalgorithmen bezeichnet – die Gesamtzahl der Schritte ist ein Vielfaches der Eingabegröße. Andere Algorithmen sind quadratisch (N quadriert) oder kubisch (N kubisch) oder logarithmisch (log N) oder eine Kombination davon. Einige der schwierigsten Rechenprobleme erfordern exponentielle Zeitalgorithmen (2^N).

In Ordnung und jetzt?

Wenn die Anzahl von Datenelementen N klein ist, spielt dies keine große Rolle. Für N=10 ist beispielsweise 10N dieser Name als N zum Quadrat. Aber was ist mit N=1000? oder N=1000000? Eine Million zum Quadrat ist eine ziemlich große Zahl. Selbst auf einem sehr schnellen Computer kann ein quadratischer Algorithmus lange dauern, wenn die Eingabe groß genug ist. Exponentielle Algorithmen sind viel schwieriger: Für N = 50 würde ein exponentieller Algorithmus sogar auf einem Computer, bei dem jeder Schritt nur eine Nanosekunde (1 Milliardstel Sekunde) dauert, zwei Wochen brauchen, um fertig zu werden. Autsch!

Am anderen Ende der Skala haben wir logarithmische Zeitalgorithmen, die sehr schnell sind. Log-Zeit ist das Gegenteil von exponentieller Zeit: Bei gegebener Eingabegröße N ist die Anzahl der Schritte der Exponent T in der Formel 2^T = N. Wenn unsere Eingabegröße beispielsweise eine Milliarde beträgt, benötigt ein Log-Zeit-Algorithmus nur 30 Schritte, da 2^30 = 1, 000, 000, 000. Wie süß ist das denn?!??!

Sie fragen sich vielleicht, wen interessieren Inputgrößen von Millionen oder Milliarden? Denken Sie darüber nach: Wie viele Nutzer gibt es auf Facebook? Wie viele Webseiten werden von Google indexiert? Wie viele Basenpaare gibt es im menschlichen Genom? Wie viele Messungen gehen in eine Wettersimulation?

Schritt 2: Die Algorithmen

Die Algorithmus-Maschine implementiert derzeit die folgenden Algorithmen. Zwei davon sind Suchalgorithmen (finden Sie einen bestimmten Wert in der Liste), der Rest sind Sortieralgorithmen (sortieren Sie die Werte).

Lineare Suche

Durchsuchen Sie die Werteliste nacheinander, beginnend von vorne. Benötigt lineare Zeit.

Binäre Suche

Durchsuchen Sie eine Liste, indem Sie sie wiederholt in zwei Hälften teilen. Erfordert Protokollierungszeit, aber die Liste muss sortiert werden, damit sie funktioniert.

Blasensortierung

Sortieren Sie eine Liste, indem Sie wiederholt benachbarte Elemente austauschen, die nicht in der richtigen Reihenfolge sind. Benötigt quadratische Zeit.

Sortieren durch Einfügen

Sortieren Sie eine Liste, indem Sie jedes Element an der richtigen Stelle in der Liste der bereits sortierten Werte platzieren. Benötigt quadratische Zeit.

Schnelle Sorte

Sortieren Sie eine Liste, indem Sie die Liste wiederholt in zwei Hälften teilen und alle Werte unter dem Median in die erste Hälfte und alle Werte über dem Median in die zweite Hälfte verschieben. In der Praxis können wir den Median nicht effizient finden, daher wählen wir zufällig einen Wert aus. Als Ergebnis kann dieser Algorithmus im schlimmsten Fall quadratisch sein, benötigt aber typischerweise N * logN Zeit.

Zusammenführen, sortieren

Sortieren Sie eine Liste, indem Sie sie in zwei Hälften teilen, die beiden Hälften separat sortieren (mithilfe von Merge-Sortieren) und sie dann durch Verschachteln der Werte zusammenführen. Benötigt immer N * logN Zeit.

Haufen sortieren

Sortieren Sie eine Liste, indem Sie eine als Heap bezeichnete Datenstruktur erstellen, mit der Sie den kleinsten Wert in der Protokollzeit finden können. Benötigt immer N * logN Zeit.

Bitonische Sortierung

Ähnlich wie beim Zusammenführen von Sortierung und Schnellsortierung, teilen Sie eine Liste in zwei Hälften, sortieren Sie die Hälften und kombinieren Sie sie erneut. Dieser Algorithmus benötigt N * logN * logN Zeit, hat aber den Vorteil, dass er leicht parallelisiert werden kann.

Schritt 3: LED-Leiste: 3D-Druck der Maske

LED-Leiste: 3D-Druck der Maske
LED-Leiste: 3D-Druck der Maske
LED-Leiste: 3D-Druck der Maske
LED-Leiste: 3D-Druck der Maske

Der erste Schritt beim Bau der LED-Leiste besteht darin, die Maske, die den Lichtern ihre Form verleiht, in 3D zu drucken. Jedes Modul umfasst zehn Elemente des Arrays, 10 Werte (Kreise) und 10 Indikatoren (Dreiecke), sodass Sie insgesamt 10 Module benötigen. Die hier bereitgestellte STL-Datei enthält zwei Instanzen des Moduls, sodass Sie fünf Druckzyklen ausführen müssen. Ich habe nicht den besten 3D-Drucker, also musste ich sie mit einer Feile und Sandpapier manuell reinigen. Das Wichtigste ist, dass die kreisförmigen und dreieckigen Löcher sauber sind.

Auf den Fotos sehen Sie meinen Testaufbau: Ich habe die beiden LED-Streifen abgeklebt und mit einem Mikrocontroller an ein Steckbrett angeschlossen. Dieser Schritt ist nicht notwendig, aber ich wollte sehen, wie es aussehen würde, bevor ich mit dem Zusammenbau des Gehäuses begann. Ich habe die Maskenmodule auf den beiden LED-Streifen aufgereiht und eine einfache Skizze mit zufälligen Farben ausgeführt. Mit einem Streifen des Diffusionsmaterials kommen die Formen und Farben richtig zur Geltung.

Schritt 4: LED-Bar-Alternativen

Alternativen zu LED-Leisten
Alternativen zu LED-Leisten
Alternativen zu LED-Leisten
Alternativen zu LED-Leisten
Alternativen zu LED-Leisten
Alternativen zu LED-Leisten

Als ich dieses Projekt zum ersten Mal begann, experimentierte ich mit anderen Möglichkeiten, die LED-Maske herzustellen. Wenn Sie keinen 3D-Drucker haben, können Sie eine dieser Optionen in Betracht ziehen. Ich bin ehrlich: Es ist eine große Qual, diese Teile herzustellen.

Für die Kreise habe ich ein 13/32 Messingrohr gekauft, welches ziemlich genau 1cm im Durchmesser hat. Ich schneide es in einhundert 1cm-Segmente und sprühe sie dann weiß.

Für die Dreiecke habe ich schwere Aluminiumfolie verwendet, die aus einer Einwegbackform geschnitten wurde. Ich machte eine dreieckige Form aus Holz, wickelte dann kurze Folienstreifen um die Form und klebte sie fest. Auch hier werden Sie hundert dieser Dinge brauchen, also brauchen Sie etwas Zeit und Geduld.

Schritt 5: LED-Leistengehäuse

LED-Leistengehäuse
LED-Leistengehäuse
LED-Leistengehäuse
LED-Leistengehäuse
LED-Leistengehäuse
LED-Leistengehäuse

Mein Gehäuse ist ziemlich einfach: zwei Holzstreifen für die Seiten und zwei Plexiglasstreifen für die Ober- und Unterseite. Alle Teile sind ca. 102cm lang (1 Meter für die LEDs, plus ein kleines Extra für die Verkabelung). Die Seiten sollten etwas höher als 1cm sein, um Platz für die LED-Streifen zu schaffen. Nach dem Schneiden der Streifen habe ich die 3D-gedruckten Maskenstücke dazwischen gelegt, um die Breite für das Plexiglas zu messen. Schneiden Sie zwei Plexiglasstücke in Breite und Länge der Stange zu. Schließlich schneiden Sie einen Streifen des Diffusionsmaterials, um über die Maske zu passen.

Für die Diffusion mag ich Lee Filter #216 (vollweiße Diffusion). Es ist eine dünne Plastikfolie, die eine gleichmäßige Streuung ermöglicht, ohne viel Licht zu verlieren. Aber es ist teures Zeug. Manchmal können Sie kleinere Blätter online zum Verkauf finden, aber eine ganze Rolle kostet Sie etwa 125 US-Dollar. Einige andere Optionen sind weißes Papier oder jede andere Art von satiniertem oder mattiertem Kunststoff. Eine beliebte Wahl sind dünne Schneidematten aus Kunststoff.

Bevor Sie die LED-Leiste montieren, stellen Sie sicher, dass Sie die entsprechenden Anschlüsse an die LED-Streifen gelötet haben. Viele Streifen werden mit vorgelöteten Kabeln geliefert, sodass Sie diese einfach verwenden können.

Ich begann mit der Montage, indem ich das obere Plexiglasstück auf die Holzseiten schraubte (siehe Foto). Dann drehte ich es um und legte den Diffusionsstreifen hinein, gefolgt von den 10 Maskenstücken. Sobald ich mit dem Abstand zufrieden war, steckte ich sie mit ein paar Punkten Heißkleber fest.

Als nächstes legen Sie die beiden LED-Streifen nebeneinander auf die Masken. Stellen Sie sicher, dass die LEDs nach unten zeigen und stellen Sie sicher, dass jede LED mit dem entsprechenden Loch in der Maske ausgerichtet ist. Fügen Sie etwas Heißkleber oder Klebeband hinzu, um die LED-Streifen an Ort und Stelle zu halten. Zum Schluss das hintere Plexiglas anschrauben.

Führen Sie ein Testmuster aus. Gut gemacht! Sie haben den schwersten Teil getan!

Schritt 6: Systemsteuerung

Schalttafel
Schalttafel
Schalttafel
Schalttafel
Schalttafel
Schalttafel
Schalttafel
Schalttafel

Das Bedienfeld ist der Teil, der die größte kreative Freiheit bietet. Es muss nur alle Bedienelemente und Elektronik zusammen mit der LED-Leiste aufnehmen. Das einfachste Design ist eine rechteckige Platine: Bohren Sie Löcher für die Tasten und Bedienelemente und befestigen Sie die LED-Leiste. Ich kombiniere gerne Holz, Plexiglas und andere Materialien, um eine Art Steampunk / Retro-Modern-Look zu erzielen. In diesem Fall schneide ich ein Stück strapazierfähiges Plexiglas, um die Auswahltasten für den Hauptalgorithmus zu halten, und eine Holzstange, um den Rest der Elektronik zu halten. Ich bohrte Löcher, um der Größe der Arcade-Knöpfe zu entsprechen. Die Verkabelung zeigt auf der Rückseite, aber ich mag es!

Ich habe auch Platz für die 7-Segment-Anzeige, den Drehgeber und einen Teil der Verkabelung auf der Rückseite aufgebohrt. Ich schneide einen Dado in die Oberseite, um die LED-Leiste zu halten.

Schritt 7: Knopfgeschirr

Knopfgeschirr
Knopfgeschirr
Knopfgeschirr
Knopfgeschirr
Knopfgeschirr
Knopfgeschirr

Das Verdrahten vieler Tasten kann eine echte Qual sein. Glücklicherweise haben die Leute, die Arcade-Automaten herstellen, einige Standardanschlüsse entwickelt, die Sie verwenden können. Jedes Tasteranschlusskabel hat zwei Drähte, einen für VCC und einen für Masse. Ein Ende hat Flachstecker, die zu den Kabeln auf der Rückseite des Knopfes passen - verbinden Sie die Masse mit dem "normalerweise offenen" Kabel und VCC mit dem "gemeinsamen" Kabel. Wenn der Benutzer in dieser Konfiguration die Taste drückt, ist die Schaltung abgeschlossen und der Mikrocontroller liest HIGH am entsprechenden Eingangspin.

Das andere Ende des Kabels hat einen JST-Stecker (das kleine weiße Ding). Das Schöne an diesen Anschlüssen ist, dass sie nur auf eine Weise in die Buchse gehen, so dass es keine Möglichkeit gibt, VCC und Masse versehentlich umzukehren.

Was ich getan habe, ist, einen kleinen Kabelbaum für diese Anschlüsse zu bauen. Ich löte eine Reihe von JST-Buchsen auf ein Stück Protoboard und führe dann Drähte zurück zu Dupont-Anschlüssen, die ich in den Mikrocontroller stecke. Das rote Kabel ist die VCC-Leitung und wird an alle JST-Buchsen angeschlossen. Die blauen Drähte sind diejenigen, die für jede Taste separat sind.

Schritt 8: Drehgeber

Drehcodierer
Drehcodierer

Mit dem Drehgeber kann der Benutzer die Geschwindigkeit des Algorithmus steuern. Ich verwende ein Modul, das als Breakout-Board geliefert wird und Pull-up-Widerstände für die beiden Datenleitungen (gelbe Drähte) enthält. Dies ist zufällig auch eine Schaltfläche, aber ich verwende diese Funktion nicht. Die anderen beiden Drähte sind VCC und Masse. Ich habe auch einen schönen dicken Knopf.

Was ich an einem Drehgeber im Gegensatz zu einem Potentiometer mag, ist, dass er dem Mikrocontroller nur die Drehung (im Uhrzeigersinn vs. gegen den Uhrzeigersinn) signalisiert, sodass es einfach ist, die Interpretation des Werts zu ändern. Sie können ihm beispielsweise ein Gefühl der Beschleunigung geben (wie einer Maus), wenn der Benutzer es schnell dreht.

Schritt 9: 7-Segment-Anzeige

7-Segment-Anzeige
7-Segment-Anzeige

Hier gibt es nicht viel zu sagen. Diese Dinge sind überall. Die LEDs werden von einem Chip namens TM1637 gesteuert, der über ein einfaches serielles Protokoll mit dem Mikrocontroller kommuniziert. Ich verwende eine vorhandene Bibliothek, mit der ich angeben kann, welche Nummer ich anzeigen möchte, und sie erledigt den Rest.

Die Rückseite hat vier Pins: VCC, Masse und zwei Drähte für das serielle Protokoll. Ich habe ein 4-poliges Stück Header gelötet, das mit einem entsprechenden Dupont-Stecker verbunden ist, der mit dem Mikrocontroller verdrahtet ist.

Schritt 10: Hauptcontrollerplatine

Hauptcontrollerplatine
Hauptcontrollerplatine
Hauptcontrollerplatine
Hauptcontrollerplatine
Hauptcontrollerplatine
Hauptcontrollerplatine

Die Hauptplatine des Controllers beherbergt den Mikrocontroller selbst und alle Anschlüsse zu den Bedienelementen (Tasten, Display, LEDs). Der Mikrocontroller ist ein ESP32, der viel Rechenleistung und Speicher bereitstellt und viele Pins freilegt. Die Verkabelung ist ziemlich Standard, aber ich werde auf ein paar interessante Bits hinweisen.

HINWEIS: Vielleicht möchten Sie sich den Code (https://github.com/samguyer/AlgorithmMachine) ansehen, bevor Sie mit der Verdrahtung der Hauptplatine beginnen, damit Ihre Pin-Konfiguration mit meiner übereinstimmt.

Ich lötete eine Barrel-Buchse auf die Platine für die Stromversorgung und verband zwei bullige Kupferdrähte mit den Strom- und Erdungsschienen der Platine. Der Grund dafür ist, dass die LED-Leiste bei hoher Helligkeit viel Strom verbrauchen kann, und ich möchte nicht den gesamten Strom über den USB-Anschluss des Mikrocontrollers ziehen.

Um die Tastenverdrahtung zu vereinfachen, lötete ich einen Streifen von männlich-zu-weiblichen rechtwinkligen Headern entlang der gesamten Seite des Mikrocontrollers (obere Seite der Platine wie abgebildet). Die Dupont-Stecker vom Tastenkabelbaum werden direkt in diesen Header gesteckt.

WICHTIG: Die Stromversorgung für die Tasten (das rote Kabel) muss an die 3,3-V-Stromleitung des Mikrocontrollers angeschlossen werden. Der ESP32 ist ein 3,3-V-Chip, daher sollten immer nur 3,3-V-Quellen an die Datenpins angeschlossen werden.

Der Mikrocontroller zieht Strom (oder drückt Strom) an die Schienen (untere Seite der Platine wie abgebildet) über den 5V-USB-Pin und Masse. Alle anderen rot/schwarzen Drähte sind VCC und Masse.

Die beiden blauen Drähte sind die Datenleitungen für die LED-Streifen (die WS2812s). Das gelb/grüne Paar sind die Datenleitungen für den Drehgeber und das gelbe Paar ist die serielle Verbindung zur 7-Segment-Anzeige.

Schritt 11: Montage

Montage
Montage
Montage
Montage
Montage
Montage
Montage
Montage

Diese Fotoserie zeigt die Endmontage und Verkabelung. Ich habe auch die Hauptcontrollerplatine an der Rückseite oben befestigt.

Vor dem Einschalten habe ich ein paar Überprüfungen durchgeführt, um böse Überraschungen zu vermeiden. Insbesondere um sicherzustellen, dass ich keine Strom- / Masseanschlüsse nach hinten und keine Kurzschlüsse habe. Stellen Sie Ihr Multimeter auf Durchgangsprüfung ein – es piept, wenn ein elektrischer Pfad zwischen den beiden Leitungen besteht. Verbinden Sie eine Leitung mit der gemeinsamen VCC-Leitung zu den Tasten. Befestigen Sie dann das andere Kabel nacheinander an jedem Stift des Kabelbaums. Das Multimeter sollte nur piepsen, wenn Sie die Taste drücken. Wenn Sie weitere Signaltöne erhalten, bedeutet dies, dass Sie eine Umkehrung oder einen Kurzschluss haben. Spüren Sie es auf und beheben Sie es, bevor Sie den Strom einschalten!

Schritt 12: Code

Öffnen Sie zunächst Ihre Arduino IDE und stellen Sie sicher, dass die FastLED-Bibliothek installiert ist.

Laden Sie den Code der Algorithm Machine von GitHub herunter:

github.com/samguyer/AlgorithmMachine.git

Sie können es entweder direkt in Ihren Arduino-Ordner klonen oder von Hand kopieren.

Stellen Sie vor dem Hochladen sicher, dass die Pin-Einstellungen Ihrer Hardwarekonfiguration entsprechen. Ich habe alle Pin-Einstellungen oben in der Datei platziert.

Hochladen und genießen!

Schritt 13: Verwendung

Die Algorithmus-Maschine ist einfach zu bedienen und fast jede Tastenkombination ist in Ordnung!

Verwenden Sie zunächst die Datenschaltflächen, um die Werte im Array zu initialisieren. Es gibt drei Möglichkeiten: (1) randomisieren, (2) einen Zufallswert hinzufügen und (3) das Array umkehren. Beachten Sie, dass die Werte persistent sind. Sie können sie also zuerst sortieren, dann etwas Rauschen hinzufügen und dann einen anderen Sortier- oder Suchalgorithmus ausführen.

Wählen Sie einen Such- oder Sortieralgorithmus aus den anderen Schaltflächenoptionen aus. Derzeit gibt es kein Feedback, wenn Sie diese Wahl treffen (etwas für die zukünftige Arbeit). Dann drücke den "Play"-Button.

Der Drehknopf steuert die Geschwindigkeit. Sie können auch auf "Play" klicken, um den Algorithmus zu pausieren und aufzuheben.

Es stoppt automatisch, wenn es fertig ist. Sie können auch jederzeit einen anderen Algorithmus-Button drücken. Die Maschine stoppt den aktuellen Algorithmus und initialisiert den neuen, behält aber die Daten genau so bei, wie der vorherige Algorithmus sie verlassen hat.

MINT-Wettbewerb
MINT-Wettbewerb
MINT-Wettbewerb
MINT-Wettbewerb

Großer Preis beim MINT-Wettbewerb

Empfohlen: