Inhaltsverzeichnis:
- Schritt 1: Schritt 1: Bauen Sie Ihren Basisroboter auf
- Schritt 2: Schritt 2: Finden und bestellen Sie Ihr OLED-Display
- Schritt 3: Schritt 3: Verbinden Sie das OLED mit dem Arduino Nano
- Schritt 4: Schritt 4: Testen Sie Ihr Display
- Schritt 5: Schritt 5: Fügen Sie Ihre OLED zum Roboter hinzu
- Schritt 6: Schritt 6: Roboterparameter anzeigen
- Schritt 7: Schritt 7: Zeichnen Sie einige Gesichter
- Schritt 8: Schritt 8: Anpassen
Video: FaceBot - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:15
In dieser Anleitung erfahren Sie, wie Sie einen kostengünstigen (39 US-Dollar) Roboter zur Kollisionsvermeidung mit einem Gesicht auf der Schriftart erstellen. Wir tun dies, indem wir ein neues kostengünstiges, helles OLED-Display verwenden. Unsere Schüler lieben es, ihren Robotern Gesichter hinzuzufügen. Sie zeichnen gerne Smileys, die sich je nach dem, was der Roboter tut, ändern.
Es gibt mehrere kleine, kostengünstige Roboter für unter 25 US-Dollar, mit denen Sie die Grundlagen der Informatik lehren können. Eines der Probleme bei diesen Robotern besteht darin, dass sie keine Transparenz darüber bieten, was im Inneren des Roboters vor sich geht, während Sie ihn bauen. Im Jahr 2018 begann sich dies mit der Verfügbarkeit von kostengünstigen, hochwertigen OLED-Displays zu ändern. Diese Displays haben folgende Vorteile:
- Sie sind sehr hell und haben einen hohen Kontrast. Selbst in einem hellen Raum sind sie aus vielen Blickwinkeln gut lesbar.
- Sie haben eine gute Auflösung. Die von mir verwendeten sind 168x64 Pixel. Dies ist fast das Vierfache der vorherigen Displays, die wir verwendet haben.
- Sie sind stromsparend und arbeiten konstant, selbst wenn die Leistung Ihres Roboters nachlässt.
- Sie sind relativ günstig (jeweils etwa 16 US-Dollar) und die Preise sinken.
In der Vergangenheit waren sie schwierig zu programmieren und würden zu viel Speicher verbrauchen, um mit kostengünstigen Arduino Nanos verwendet zu werden. Der Nano hat nur 2K oder dynamischen RAM. Diese Anleitung zeigt Ihnen, wie Sie diese Probleme umgehen und einen Roboter bauen, den Kinder gerne programmieren.
Schritt 1: Schritt 1: Bauen Sie Ihren Basisroboter auf
Um einen FaceBot zu bauen, beginnen wir normalerweise mit einem Basisroboter. Ein Beispiel ist der hier beschriebene CoderDojo-Roboter für 25 US-Dollar. Dieser Roboter verwendet den kostengünstigen und beliebten Arduino Nano, eine einfache Motorsteuerung, 2 DC-Motoren und 4 oder 6 AA-Batterien. Die meisten Schüler beginnen mit der Verwendung des Ping-Sensors, um einen Roboter zur Kollisionsvermeidung zu bauen. Da es ein 5-V-Stromversorgungssystem bietet, ist es perfekt für den FaceBot. Um die Kosten gering zu halten, lasse ich meine Studenten die Teile in der Regel online bei e-Bay bestellen. Es dauert oft 2-3 Wochen, bis die Teile ankommen und erfordern ein geringes Löten für die Motoren und den Netzschalter. Der Rest der Verbindungen wird mit einem 400-Tie-Steckbrett hergestellt. Die Schüler kleben die Drähte häufig heiß ein, damit sie nicht herausrutschen.
Es gibt eine Änderung, die wir am Standarddesign zur Kollisionsvermeidung vornehmen. Wir bewegen den Ping-Sensor von der Oberseite des Chassis unter das Chassis. Dadurch bleibt Platz für das Display oben auf dem Roboter.
Sobald Sie Ihre Kollisionsvermeidungsprogrammierung haben, können Sie ein Gesicht hinzufügen!
Schritt 2: Schritt 2: Finden und bestellen Sie Ihr OLED-Display
Als OLED-Displays auf den Markt kamen, waren die kostengünstigen für Uhren oder Fitnessmonitore konzipiert. Als Ergebnis waren sie klein, normalerweise etwa 1 Zoll im Durchmesser. Die gute Nachricht ist, dass sie mit etwa 3 US-Dollar günstig waren. Wir haben ein paar Roboter mit diesen Displays gebaut, aber da die Größe der Displays begrenzt war, konnten wir auf dem Bildschirm etwas tun. Im Jahr 2018 sahen wir dann, dass die Kosten für die größeren 2,42-Zoll-OLED-Bildschirme im Preis sinken. Im Januar 2019 sind die Preise auf etwa 16 US-Dollar gesunken. Endlich hatten wir ein tolles Display, das wir für unsere Robotergesichter verwenden konnten.
Hier sind die Spezifikationen dieser Displays:
- 2,42 Zoll (Diagonalmessung)
- 128 Pixel breit (x-Dimension)
- 64 Pixel hoch (y-Dimension)
- Geringer Stromverbrauch (typischerweise 10 mA)
- Monochrom (sie sind in Gelb, Grün, Blau und Weiß erhältlich)
- Standard-SPI-Schnittstelle, obwohl Sie sie auf I2C ändern können, wenn Sie möchten
- SSD1309-Treiber (ein sehr verbreiteter Bildschirmtreiber)
Die SPI-Schnittstelle hat sieben Drähte. Hier sind die typischen Beschriftungen auf der Schnittstelle:
- CS - Chipauswahl
- DC - Daten/Befehl
- RES - Zurücksetzen
- SDA - Daten - dies sollte an den Arduino Nano Pin 11. angeschlossen werden
- SCL - Clock - sollte mit dem Arduino Nano Pin 13. verbunden werden
- VCC - +5 Volt
- GND - Masse
Sie benötigen auch ein Kabel, um das Display mit dem Steckbrett zu verbinden. Die Displays werden normalerweise mit einem 7-poligen Header geliefert, den Sie an das Display löten. Ich benutzte 7 Stecker-zu-Stecker 20mc Dupont-Anschlüsse und lötete sie so, dass die Drähte an der Rückseite des Displays herauskamen.
Schritt 3: Schritt 3: Verbinden Sie das OLED mit dem Arduino Nano
Jetzt können Sie Ihre OLED testen. Ich verwende einen anderen Arduino Nano, um zu testen, ob jedes Display, das ich bekomme, funktioniert. Sobald die Tests funktionieren, verbinde ich es mit dem Roboter. Der Schaltplan für den Tester ist in der obigen Abbildung dargestellt. Beachten Sie, dass Sie die OLED-Verbindungen auf andere Pins verschieben können, die digitale Ausgänge unterstützen, aber wenn Sie sicherstellen, dass SCL (Takt) auf Arduino Nano-Pin 13 und SDA (Daten) auf Arduino Nano-Pin 11 ist, können Sie die Standardeinstellungen in verwenden die Software. Dadurch wird Ihr Code etwas einfacher.
Schritt 4: Schritt 4: Testen Sie Ihr Display
Um Ihr Display zu testen, verwenden wir die u8g2-Bibliothek. Es gibt andere Bibliotheken, die Sie verwenden können, aber meiner Erfahrung nach ist keine davon so gut in der u8g2-Bibliothek. Ein kritischer Faktor ist, wie viel RAM innerhalb des Arduino vom Display verwendet wird. Die u8g2 ist die einzige Bibliothek, die ich gefunden habe, die einen "Seitenmodus" verwendet, der mit dem Arduino Nano funktioniert.
Sie können diese Bibliothek zu Ihrem Arduino IED hinzufügen, indem Sie im Menü "Bibliotheken verwalten" nach "u8g2" suchen. Sie können den Code auch direkt von gethub herunterladen.
github.com/olikraus/u8g2
Der von mir verwendete Testcode ist hier:
github.com/dmccreary/coderdojo-robots/blob…
Es gibt ein paar Dinge zu beachten. Die SCL- und SDA-Pin-Nummern sind auskommentiert, da sie die Standard-Pins des Nano sind. Der Konstruktor für u8g2 ist die Schlüsselzeile:
// Wir verwenden SSD1306, 128x64, Single-Page, unbenannt, 4-Draht, Hardware, SPI ohne Rotation, die nur 27% des dynamischen Speichers verwendetU8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, CS_PIN, DC_PIN, RDS_PIN);
Wir verwenden den Single-Page-Modus, da dieser Modus nur minimalen RAM verwendet. Wir verwenden die 4-Draht-Hardwareschnittstelle und das OLED wird standardmäßig mit SPI geliefert.
Schritt 5: Schritt 5: Fügen Sie Ihre OLED zum Roboter hinzu
Nachdem wir nun eine funktionierende OLED haben und wissen, wie die u8g2-Bibliotheken initialisiert werden, können wir die OLED in unseren Basisroboter integrieren. Es gibt ein paar Dinge zu beachten. In unserem OLED-Test haben wir die Pins verwendet, die alle nebeneinander lagen, um die Verdrahtung zu erleichtern. Leider benötigen wir Pin 9, um unseren Roboter anzusteuern, da dies einer der PWM-Pins ist, die wir benötigen, um ein analoges Signal an den Motortreiber zu senden. Die Lösung besteht darin, den Draht, der sich auf Pin 9 befindet, auf einen anderen freien Pin zu verschieben und dann die #define-Anweisung auf diesen neuen Pin zu ändern sie zum Chassis. Ich verwende immer gerne etwas grobes Schleifpapier, um die Oberfläche des Plexiglases aufzurauen, bevor ich die Teile heiß zusammenklebe, damit sie nicht zu leicht auseinanderfallen.
Als nächstes holen wir uns einige Daten zu unserem OLED und zeichnen ein paar Gesichter auf den Roboter!
Schritt 6: Schritt 6: Roboterparameter anzeigen
Eines der schönen Dinge an einem Display ist, dass es wirklich beim Debuggen hilft, was in unserem Roboter vor sich geht, während er herumfährt. Es ist nicht ungewöhnlich, dass Entwickler eine Funktion auf dem Desktop haben, wenn Sie mit Ihrem Computer verbunden sind, nur damit sie NICHT funktioniert, wenn der Roboter herumfährt. Die Anzeige eines Wertes wie der vom Ping-Sensor gemessenen Entfernung ist ein gutes Beispiel für die Anzeige eines Roboterparameters.
Auf dem Foto oben zeigt die erste Zeile (Echo Time) die Verzögerungszeit zwischen dem Verlassen des Ultraschalllautsprechers und dem Empfang durch das Mikrofon. Diese Zahl wird dann in der zweiten Zeile in Zentimeter umgerechnet (Distanz in cm). Der Zähler wird in der Sekunde aktualisiert, um anzuzeigen, dass die Anzeige aktualisiert wird. Das „Turning…“wird nur angezeigt, wenn die Entfernung unter einer bestimmten Zahl liegt, die als Wendeschwelle bezeichnet wird. Beide Räder bewegen sich vorwärts, wenn die Ping-Distanz über dieser Zahl liegt. Wenn die Zahl unter der Drehschwelle liegt, kehren wir die Motoren um (Rückwärts) und ändern dann die Richtung.
Hier ist ein Beispielcode, der Ihnen zeigt, wie Sie die Werte vom Ping-Sensor übernehmen und die Werte auf Ihrem OLED-Bildschirm anzeigen.
Hier ein Beispiel, das drei Ping-Sensoren (links, Mitte und rechts) testet und die Werte auf dem Display anzeigt:
github.com/dmccreary/coderdojo-robots/blob…
Schritt 7: Schritt 7: Zeichnen Sie einige Gesichter
Jetzt haben wir alle Teile, um einige Gesichter zu zeichnen. Unsere Studenten denken normalerweise, dass der Roboter ein glückliches Gesicht haben sollte, wenn er vorwärts fährt. Wenn es etwas vor sich sieht, registriert es ein Gefühl der Überraschung. Dann fährt es zurück und sieht sich um, vielleicht mit bewegten Augen, um zu signalisieren, in welche Richtung es sich drehen wird.
Der Zeichenbefehl zum Zeichnen eines Gesichts ist ziemlich einfach. Wir können einen Kreis für den Umriss des Gesichts zeichnen und Kreise für jedes Auge ausfüllen. Der Mund kann ein Halbkreis für ein Lächeln und ein gefüllter runder Kreis für ein Überraschungsgefühl sein. Hier können die Kinder ihrer Kreativität freien Lauf lassen, um die Ausdrücke zu personalisieren. Manchmal zeichne ich absichtlich schlechte Gesichter und bitte die Schüler, mir zu helfen, sie besser zu machen.
Sie können die Funktionen display.height() und display.width() verwenden, um die Größe der Anzeige zu ermitteln. Im folgenden Code richten wir Variablen ein
half_width = display.width()/2;half_height = display.height()/2;
Wenn Sie diese Berechnungen mehrmals durchführen, ist der Code etwas schneller, wenn sie einmal berechnet und in einer Variablen gespeichert werden. Hier sind einige Beispiele dafür, wie die obige langweilige gerade Fläche gezeichnet wird:
//Wir machen das am Anfang jeder Schleife
display.clearDisplay(); // zeichne ein helles Gesicht für den backgrounddisplay.fillCircle(half_width, half_height, 31, WHITE); // rechtes Auge dunkel display.fillCircle(half_width - 10, display.height()/3, 4, BLACK); // linkes Auge darkdisplay.fillCircle (half_width + 10, display.height () / 3, 4, BLACK); // eine gerade Linie für den Mund zeichnen display.drawLine(half_width - 10, display.height()/3 * 2, half_width + 10, display.height()/3 * 2, BLACK); // diese Zeile sendet unser neues Gesicht an das OLED-Display display.display();
Schritt 8: Schritt 8: Anpassen
Das Zeichnen des Grundgesichts ist nur der Anfang. Die Schüler können viele Variationen erstellen. Viele Schüler haben einen kleinen Lautsprecher hinzugefügt, der beim Bewegen Töne oder Geräusche abspielt.
Sie können auch kleinere Testprogramme erstellen, die Ihren Schülern helfen, die Motoren richtig zu verdrahten. Zum Beispiel zeigt ein Pfeil (Dreieck) auf dem Bildschirm dem Schüler an, in welche Richtung sich das Rad drehen soll, wenn Sie die Motoren anschließen. Das Testprogramm durchläuft jede der Motorrichtungen:
- Rechts nach vorne
- Rechts rückwärts
- Links nach vorne
- Links rückwärts
Für jeden Modus wird der Bildschirm mit einer neuen Anzeige aktualisiert, um anzuzeigen, welches Rad sich in welche Richtung drehen sollte.
Ein Beispiel für dieses Programm ist hier
github.com/dmccreary/coderdojo-robots/blob…
Es gibt viele zusätzliche Beispiele und Programmierdetails auf der CoderDojo Robots GitHub FaceBot-Seite.
Es gibt auch eine Version des FaceBot-Roboters, mit der die Schüler alle Parameter zur Kollisionsvermeidung (Vorwärtsgeschwindigkeit, Abbiegedistanz, Abbiegezeit, Abbiegegeschwindigkeit) direkt über das Display ändern können. Es ist kein Computer erforderlich, um diese Roboter zu "programmieren"! Diese Versionen sind ideal für MakerFairs und Events, bei denen Sie keine Computer herumschleppen möchten.
Bitte lassen Sie uns wissen, welche neuen Gesichter Sie und Ihre Schüler haben!
Viel Spaß beim Codieren!