Erfahrung bei der Entwicklung des ersten Roboters auf Arduino (Roboter „Jäger“)

Guten Tag.

In diesem Artikel möchte ich den Prozess des Zusammenbaus meines ersten Roboters mit Arduino beschreiben. Das Material wird für andere Anfänger wie mich nützlich sein, die eine Art „selbstfahrenden Wagen“ bauen möchten. Der Artikel beschreibt die Phasen der Arbeit mit meinen Ergänzungen in verschiedenen Nuancen. Am Ende des Artikels finden Sie einen Link zum endgültigen Code (höchstwahrscheinlich nicht der idealste).

Erfahrung bei der Entwicklung des ersten Roboters auf Arduino (Roboter „Jäger“)

Wann immer es möglich war, habe ich meinen Sohn (8 Jahre alt) in die Teilnahme einbezogen. Was genau damit funktioniert hat und was nicht – ich habe diesem Thema einen Teil des Artikels gewidmet, vielleicht ist es für jemanden nützlich.

Allgemeine Beschreibung des Roboters

Zunächst ein paar Worte zum Roboter selbst (идея). Eigentlich wollte ich am Anfang nichts Standardmäßiges zusammenbauen. Gleichzeitig war der Komponentensatz recht standardisiert – Chassis, Motoren, Ultraschallsensor, Zeilensensor, LEDs, Hochtöner. Aus diesem „Suppenservice“ wurde zunächst ein Roboter erfunden, der sein Revier bewacht. Er fährt auf den Täter zu, der die Kreislinie überschritten hat, und kehrt dann in die Mitte zurück. Allerdings erforderte diese Version eine gezeichnete Linie und zusätzliche Mathematik, um jederzeit im Kreis zu bleiben.

Daher änderte ich nach einigem Überlegen die Idee etwas und beschloss, einen „Jäger“-Roboter zu bauen. Zu Beginn dreht es sich um seine Achse und wählt ein nahegelegenes Ziel (eine Person). Wird die „Beute“ entdeckt, schaltet der „Jäger“ das Blinklicht und die Sirene ein und beginnt, darauf zuzufahren. Wenn sich die Person wegbewegt/wegläuft, wählt der Roboter ein neues Ziel aus und verfolgt es und so weiter. Ein solcher Roboter benötigt keinen begrenzten Kreis und kann in offenen Bereichen arbeiten.

Wie Sie sehen, ähnelt dies einem Aufholspiel. Obwohl sich der Roboter am Ende als nicht schnell genug herausstellte, interagiert er ehrlich mit den Menschen um ihn herum. Vor allem Kinder mögen es (manchmal scheint es jedoch so, als würden sie es gleich zertrampeln, ihr Herz setzt einen Schlag aus ...). Ich denke, das ist eine gute Lösung, um technisches Design populär zu machen.

Roboterstruktur

Wir haben uns also für die Idee entschieden, machen wir weiter Layout. Die Liste der Elemente ergibt sich daraus, was der Roboter können soll. Hier ist alles ganz offensichtlich, schauen wir uns also gleich die Nummerierung an:

Erfahrung bei der Entwicklung des ersten Roboters auf Arduino (Roboter „Jäger“)

Das „Gehirn“ des Roboters ist ein Arduino-Uno-Board (1); War in einem Set, das aus China bestellt wurde. Für unsere Zwecke ist es völlig ausreichend (wir konzentrieren uns auf die Anzahl der verwendeten Pins). Aus dem gleichen Bausatz haben wir ein fertiges Fahrgestell (2) genommen, an dem zwei Antriebsräder (3) und ein hinteres (frei drehbares) (4) befestigt sind. Im Bausatz war auch ein vorgefertigtes Batteriefach (5) enthalten. Vor dem Roboter befindet sich ein Ultraschallsensor (HC-SR04) (6), hinten ein Motortreiber (L298N) (7), in der Mitte ein LED-Blinker (8) und etwas dazu Seitlich befindet sich ein Hochtöner (9).

In der Layoutphase schauen wir uns Folgendes an:

- damit alles passt
- ausgeglichen sein
- rational platziert werden

Unsere chinesischen Kollegen haben dies teilweise bereits für uns erledigt. So ist das schwere Batteriefach in der Mitte platziert und die Antriebsräder befinden sich etwa darunter. Alle anderen Boards sind leicht und können am Rand platziert werden.

Nuancen:

  1. Das Chassis aus dem Bausatz hat viele werkseitige Löcher, aber ich habe immer noch nicht herausgefunden, was die Logik darin ist. Die Motoren und das Batteriepaket wurden ohne Probleme befestigt, dann begann die „Anpassung“ mit dem Bohren neuer Löcher, um diese oder jene Platine zu befestigen.
  2. Die Messingregale und andere Befestigungselemente aus den Lagerräumen waren eine große Hilfe (manchmal mussten wir sie herausholen).
  3. Ich habe die Stromschienen von jeder Platine durch die Klemmen geführt (ich habe sie wiederum im Lager gefunden). Sehr praktisch, alle Drähte liegen gut und hängen nicht herum.

Einzelne Blöcke

Jetzt werde ich durchgehen Blöcke und ich erzähle Ihnen persönlich von jedem einzelnen.

Batteriefach

Es ist klar, dass der Roboter über eine gute Energiequelle verfügen muss. Die Optionen können variieren, ich habe mich für die Option mit 4 AA-Batterien entschieden. Insgesamt liefern sie etwa 5 V, und diese Spannung kann direkt an den 5-V-Pin der Arduino-Platine angelegt werden (unter Umgehung des Stabilisators).

Natürlich war ich etwas vorsichtig, aber diese Lösung ist durchaus praktikabel.

Da überall Strom benötigt wird, habe ich der Einfachheit halber zwei Anschlüsse in der Mitte des Roboters angebracht: einer „verteilt“ die Masse (rechts) und der zweite - 5 V (links).

Erfahrung bei der Entwicklung des ersten Roboters auf Arduino (Roboter „Jäger“)

Motoren und Fahrer

Zunächst zur Montage der Motoren. Die Halterung ist werkseitig gefertigt, allerdings mit großen Toleranzen. Mit anderen Worten: Die Motoren können nach links und rechts um einige Millimeter wackeln. Für unsere Aufgabe ist das nicht kritisch, aber an manchen Stellen kann es Auswirkungen haben (der Roboter beginnt, sich zur Seite zu bewegen). Für alle Fälle habe ich die Motoren streng parallel gestellt und mit Kleber fixiert.

Erfahrung bei der Entwicklung des ersten Roboters auf Arduino (Roboter „Jäger“)

Zur Steuerung der Motoren wird, wie ich oben geschrieben habe, der L298N-Treiber verwendet. Laut Dokumentation verfügt es über drei Pins für jeden Motor: einen zum Ändern der Geschwindigkeit und ein Paar Pins für die Drehrichtung. Hier gibt es einen wichtigen Punkt. Es stellt sich heraus, dass bei einer Versorgungsspannung von 5 V die Geschwindigkeitsregelung einfach nicht funktioniert! Das heißt, entweder dreht er sich überhaupt nicht oder er dreht maximal. Dies ist die Funktion, die mich dazu veranlasst hat, ein paar Abende zu „killen“. Am Ende habe ich irgendwo in einem der Foren eine Erwähnung gefunden.

Generell brauchte ich beim Drehen des Roboters eine niedrige Drehzahl, damit er Zeit hatte, den Raum abzusuchen. Da aber aus dieser Idee nichts wurde, musste ich es anders machen: eine kleine Drehung – Stopp – Drehung – Stopp usw. Auch hier nicht so elegant, aber machbar.

Ich füge hier auch hinzu, dass der Roboter nach jeder Verfolgung eine zufällige Richtung für eine neue Runde wählt (im oder gegen den Uhrzeigersinn).

Ultraschallsensor

Erfahrung bei der Entwicklung des ersten Roboters auf Arduino (Roboter „Jäger“)

Ein weiteres Stück Hardware, bei dem wir nach einer Kompromisslösung suchen mussten. Der Ultraschallsensor erzeugt bei realen Hindernissen instabile Zahlen. Eigentlich war das zu erwarten. Idealerweise funktioniert es irgendwo bei Wettbewerben, wo es glatte, ebene und senkrechte Oberflächen gibt, aber wenn jemandes Beine davor „blitzen“, muss eine zusätzliche Verarbeitung eingeführt werden.

Als solche Verarbeitung habe ich eingestellt Medianfilter für drei Punkte. Basierend auf Tests an echten Kindern (bei den Tests kamen keine Kinder zu Schaden!) erwies es sich als völlig ausreichend, die Daten zu normalisieren. Die Physik hier ist einfach: Wir haben Signale, die von reflektiert werden notwendig Objekte (die den erforderlichen Abstand angeben) und von weiter entfernten Objekten, beispielsweise Wänden, reflektiert werden. Letztere sind zufällige Emissionen bei Messungen der Form 45, 46, 230, 46, 46, 45, 45, 310, 46... Diese werden vom Medianfilter abgeschnitten.

Nach der gesamten Verarbeitung erhalten wir die Entfernung zum nächstgelegenen Objekt. Unterschreitet er einen bestimmten Schwellenwert, dann schalten wir den Alarm ein und fahren direkt auf den „Eindringling“ zu.

Blinker und Sirene

Vielleicht die einfachsten Elemente von allen oben genannten. Sie sind auf den Fotos oben zu sehen. Über Hardware gibt es hier nichts zu schreiben, also machen wir jetzt weiter Code.

Steuerprogramm

Ich sehe keinen Sinn darin, den Code im Detail zu beschreiben, wer braucht ihn? Der Link befindet sich am Ende des Artikels, dort ist alles gut lesbar. Aber es wäre schön, den allgemeinen Aufbau zu erklären.

Das erste, was wir verstehen mussten, war, dass ein Roboter ein Echtzeitgerät ist. Genauer gesagt, um mich zu erinnern, denn sowohl früher als auch heute arbeite ich immer noch in der Elektronik. So vergessen wir die Herausforderung sofort delay (), das sie gerne in Beispielskizzen verwenden und das Programm einfach für einen bestimmten Zeitraum „einfriert“. Stattdessen führen wir, wie erfahrene Leute raten, Timer für jeden Block ein. Das erforderliche Intervall ist abgelaufen – die Aktion wurde ausgeführt (Helligkeit der LED erhöht, Motor eingeschaltet usw.).

Timer können miteinander verbunden werden. Beispielsweise arbeitet der Hochtöner synchron mit dem Blinker. Dies vereinfacht das Programm ein wenig.

Natürlich zerlegen wir alles in einzelne Funktionen (Blinklicht, Ton, Drehen, Vorwärtsbewegen usw.). Wenn Sie dies nicht tun, können Sie nicht herausfinden, was von wo und wo kommt.

Nuancen der Pädagogik

Alles oben Beschriebene habe ich abends in meiner Freizeit gemacht. In aller Ruhe verbrachte ich etwa drei Wochen am Roboter. Das hätte hier enden können, aber ich habe auch versprochen, Ihnen von der Arbeit mit einem Kind zu erzählen. Was kann man in diesem Alter tun?

Arbeiten Sie nach Anleitung

Wir haben zunächst jedes Detail einzeln geprüft – LEDs, Hochtöner, Motoren, Sensoren usw. Es gibt eine Vielzahl vorgefertigter Beispiele – einige direkt in der Entwicklungsumgebung, andere sind im Internet zu finden. Das macht mich auf jeden Fall glücklich. Wir nehmen den Code, verbinden das Teil, stellen sicher, dass es funktioniert, und beginnen dann, ihn an unsere Aufgabe anzupassen. Das Kind stellt die Verbindungen gemäß der Abbildung und unter einiger meiner Aufsicht her. Das ist gut. Sie müssen außerdem in der Lage sein, strikt nach Anweisungen zu arbeiten.

Reihenfolge der Arbeit („vom Besonderen zum Allgemeinen“)

Das ist ein schwieriger Punkt. Sie müssen lernen, dass ein großes Projekt („einen Roboter bauen“) aus kleinen Aufgaben besteht („einen Sensor anschließen“, „Motoren anschließen“ ...) und diese wiederum aus noch kleineren Schritten bestehen („einen finden“) Programm“, „Karte anschließen“, „Firmware herunterladen“...). Indem wir mehr oder weniger verständliche Aufgaben der unteren Ebene erledigen, „schließen“ wir die Aufgaben der mittleren Ebene und daraus wird das Gesamtergebnis gebildet. Ich habe es erklärt, aber ich denke, die Erkenntnis wird nicht so schnell kommen. Irgendwo, wahrscheinlich im Jugendalter.

Montage

Bohren, Gewinde, Schrauben, Muttern, Löten und der Geruch von Kolophonium – was wären wir ohne ihn? Das Kind erhielt die Grundfertigkeit „Arbeiten mit einem Lötkolben“ – es gelang ihm, mehrere Verbindungen zu löten (ich habe ein wenig geholfen, ich werde es nicht verheimlichen). Vergessen Sie nicht die Sicherheitserklärung.

Computerarbeit

Ich habe das Programm für den Roboter geschrieben, konnte aber dennoch einige positive Ergebnisse erzielen.

Erstens: Englisch. Sie hatten gerade erst in der Schule damit angefangen, also hatten wir Mühe, herauszufinden, was Pishalka, Migalka, Yarkost und andere Transliterationen waren. Zumindest haben wir das verstanden. Ich habe bewusst auf die Verwendung muttersprachlicher englischer Wörter verzichtet, da wir dieses Niveau noch nicht erreicht haben.

Zweitens: effizientes Arbeiten. Wir haben Hotkey-Kombinationen und die schnelle Ausführung von Standardoperationen beigebracht. Während wir das Programm schrieben, tauschten mein Sohn und ich regelmäßig die Plätze und ich sagte, was zu tun war (Austausch, Suche usw.). Ich musste es immer wieder wiederholen: „Auswahl doppelklicken“, „Umschalttaste gedrückt halten“, „Strg gedrückt halten“ und so weiter. Der Lernprozess ist hier nicht schnell, aber ich denke, dass die Fähigkeiten nach und nach „im Subkortex“ abgelegt werden.

Versteckter TextMan kann sagen, dass das oben Genannte fast offensichtlich ist. Aber ehrlich gesagt hatte ich diesen Herbst die Gelegenheit, in der 9. Klasse an einer Schule Informatik zu unterrichten. Das ist schrecklich. Die Schüler beherrschen keine so grundlegenden Dinge wie Strg + Z, Strg + C und Strg + V, das Auswählen von Text bei gedrückter Umschalttaste oder das Doppelklicken auf ein Wort usw. Und das, obwohl sie sich im dritten Jahr ihres Informatikstudiums befanden ... Ziehen Sie Ihr eigenes Fazit.

Drittens: Touch-Eingabe. Ich habe dem Kind die Kommentare im Code zum Tippen anvertraut (lassen Sie es üben). Wir platzierten unsere Hände sofort richtig, sodass sich unsere Finger nach und nach an die Position der Tasten erinnerten.

Wie Sie sehen, stehen wir noch ganz am Anfang. Wir werden unsere Fähigkeiten und Kenntnisse weiter verbessern; sie werden uns im Leben nützlich sein.

Übrigens, über die Zukunft...

Weiterentwicklung der

Der Roboter ist gebaut, fährt, blinkt und piept. Was jetzt? Inspiriert von dem, was wir erreicht haben, planen wir, es weiter zu verfeinern. Es gibt die Idee, eine Fernbedienung zu bauen – wie einen Mondrover. Es wäre interessant, an einer Fernbedienung sitzend die Bewegung eines Roboters zu steuern, der an einem ganz anderen Ort fährt. Aber das wird eine andere Geschichte sein...

Und am Ende tatsächlich die Helden dieses Artikels (Video per Klick):

Erfahrung bei der Entwicklung des ersten Roboters auf Arduino (Roboter „Jäger“)

Danke!

Code-Link

Source: habr.com

Kommentar hinzufügen