Dieser Artikel ist eine Halbfolge der Arbeit von
Love, Death and Robots: „Die vom Android-Gerät über Bluetooth gesteuerte Arduino-basierte Maschine ist ein vollständiger Zyklus“, der aus zwei Teilen besteht (
einer ,
zwei ). Die dort beschriebenen Dinge wurden leicht modifiziert, überarbeitet und der Roboter selbst von einer Reisemaschine in einen Fußballspieler verwandelt. Im Allgemeinen gibt es interessantes Material dazu.
Die vorherige Anweisung war in zwei Teile unterteilt: Software und physische. Es gab nicht so viele Änderungen in beide Richtungen, also ist diesmal alles in einer Kopie. Ich werde Sie kurz daran erinnern, warum der beschriebene Teil benötigt wird, aber für ein vollständiges Verständnis ist es besser, die ersten beiden Teile durchzugehen.
Physischer Teil
Basierend auf denselben Prinzipien, die im ersten Artikel beschrieben wurden:
- Sandwich von Arduino Uno und Motor Shield.
- zwei Motoren mit dem Motorschild verbunden.
Und hier sind die Änderungen:
- Seltsamerweise war der Schockteil dafür verantwortlich, den Ball zu treffen.
- Der Fall ist jetzt ganz mein, gedruckt auf einem 3D-Drucker.
Gehäuse
Eine Form ist ein Kreis, in den sowohl ein Brett als auch zwei Räder passen. Verlängerung für den Teil, an dem die Aufprallkraft stehen wird.

Beachten Sie bei der Gestaltung Folgendes:
- Hohe Seiten. Roboter kollidieren während des Spiels, die Seiten schützen nicht nur Ihre Drähte, sondern auch Ihre Rivalen vor Ihren Drähten.
- Schwerpunkt und Stabilität. Der Schwerpunkt liegt natürlich dort, wo sich das Brett befindet. Die Räder befinden sich in der Nähe, damit sie nicht verrutschen. Außerdem befindet sich oben auf der Platine eine Batterie.
- Um zu verhindern, dass der Roboter seine Nase oder seinen Rücken pickt, setzen wir hier und da Bälle aus den Ampere in das Kit ein (wenn sie nicht vorhanden sind, können Sie sie durch ein anderes Gleitdesign ersetzen).
- Starrheit eines Designs. Die Plattform darf nicht unter dem Gewicht von Leiterplatten und Motoren durchhängen. Verwenden Sie keine harten Materialien (Sperrholz) und verstärken Sie die Kunststoffstruktur nicht mit Gestellen

Und jetzt der Hauptquatsch
Bälle, die mangels "Picken" hinzugefügt wurden, hoben die Plattform an, so dass die Räder den Boden nicht erreichten. Um dies zu vermeiden, verwenden wir entweder Räder mit größerem Durchmesser oder kürzen die Tragstrukturen. In der Regel berechnen wir dies im Voraus!
Schockteil. Sie schlägt nicht. Beats, aber nicht cool genug. In unserem ersten Modell gab es eine Servomaschine, an die ein Teil ähnlich einem Schneepflugschaufel angeschlossen war. Durch Ändern der Position des Servos (von 0 auf 30 Grad) können Sie einen Schlag simulieren. Aber die Servos erwiesen sich als langsam, so dass der Schlag auf die Zwei geht.
Es gibt zwei Möglichkeiten: Beim Aufprall einen Ruck hinzufügen oder Servos durch Magnetspulen ersetzen. Die erste Möglichkeit besteht darin, den Impuls zu erhöhen, indem die Räder während eines Hubs mit Geschwindigkeit versorgt werden. In der Praxis ist dies wie folgt: Der Benutzer drückt die Treffer-Taste, der Roboter startet von der Stelle (leicht) und schlägt gleichzeitig zu.
Die zweite Option - die Magnete drücken auf den Stoßdämpfer, und hier hängt alles von der Leistung (Geschwindigkeit) des Stoßdämpfers ab, was wiederum von den Eigenschaften des Magneten abhängt.

Software-Teil
Nach einer guten Tradition, die bereits ein Artikel ist, werden wir diesen Abschnitt in zwei Teile teilen. Zuerst eine Android-App, dann eine Arduino-Skizze.
Android
Ich möchte Sie daran erinnern, dass die Bewerbung von mir von Grund auf neu geschrieben wurde. In den letzten sechs Monaten habe ich in dieser Angelegenheit etwas mehr verstanden, daher werde ich beschreiben, woran
Doper gedacht hat.
Lassen Sie uns zunächst zur Vereinfachung gehen. Das Kommunikationsprotokoll lautet nun wie folgt: "Eröffnungszeichen" + "Wert" + "Schließzeichen" (Um zu verstehen, wie ich diese Werte erhalte und worum es geht, lesen Sie die vollständige Analyse der Anwendung
hier ). Dies funktioniert sowohl für Geschwindigkeit als auch für Winkel. Da es nur eine Art von Streik gibt, braucht er keine solche Weisheit, daher besteht das Team aus einem „/“ -Zeichen (über das Treffer-Team durch den Absatz).
private void sendCommand(String speed, String angle) { String speedCommand = "#" + speed + "#";
Ein typischer Befehl würde folgendermaßen aussehen: # 125 # @ 180 @, wobei 125 Geschwindigkeit und 180 Winkel ist. Natürlich kann dies noch vereinfacht werden, aber eine der Aufgaben bestand darin, die Leichtigkeit und Lesbarkeit aufrechtzuerhalten, damit es später auch für Kinder leicht erklärt werden kann.
Ein neuer sendHit () -Befehl wurde angezeigt, der ausgelöst wird, wenn die Taste „Hit“ gedrückt wird. Sie sendet ein einzelnes "/". Da gewöhnliches Bluetooth 2.0+ nicht unter gleichzeitig empfangenen Daten leidet, das heißt, es weiß, wie man sie in die Warteschlange stellt und nicht verliert, müssen wir dies nicht kontrollieren. Wenn Sie mit Bluetooth Low Energy 4.0+ arbeiten möchten (nun, plötzlich), muss die Warteschlange bereits manuell organisiert werden, da sonst die Daten verloren gehen.
... bHit = findViewById(R.id.b_high_hit);
Arduino
Das Protokoll zum Senden von Befehlen hat sich also geändert, und auch der Empfangsalgorithmus hat sich geändert. Er vereinfachte. Ein, wenn Tracking-Kick hinzugefügt wurde. Eine vollständige Analyse der Skizze finden Sie
hier .
bt.read () liest ein Zeichen. Wenn es "#" ist, beginnen die Geschwindigkeitssymbole. Wir lesen sie, bis das schließende Zeichen "#" erscheint. Die for-Schleife kann hier nicht verwendet werden, da die Geschwindigkeitslänge nicht im Voraus bekannt ist (es kann sich um eine einstellige, zweistellige oder dreistellige Zahl handeln). Der resultierende Wert wird in die Variable geschrieben.
Das gleiche passiert mit einer Wende. Nachdem sowohl Geschwindigkeit als auch Winkel gelesen wurden, übergeben wir alles an die Funktion turn (int speed, int angle).
void loop() { if(BTSerial.available() > 0) {
Die Funktion turn () bestimmt, in welche Richtung (vorwärts, rückwärts) und wohin (rechts, links, gerade) gedreht werden soll. Die Einschränkung if (Geschwindigkeit> 0 && Geschwindigkeit <70) ist erforderlich, damit der Roboter nicht langsamer wird, wenn Bytes verloren gehen. Angesichts dessen, als ich die Übertragungsgeschwindigkeit erhöhte (gespielt mit Verzögerungen von 100-300 ms zwischen den Teams) - manchmal erreichte der Geschwindigkeitswert nicht und wurde zu 0, 40 (obwohl zum Beispiel 240 tatsächlich gesendet wurde). Krücke, aber es funktioniert.
Es kann als "Schutz vor unkontrollierbaren Faktoren" bezeichnet werden.
void turn(int angle, int speed) { if(speed >= 0 && speed < 70) return; if(speed > 0) { digitalWrite(dirLeft, HIGH); digitalWrite(dirRight, HIGH); } else if (sp < 0) { digitalWrite(dirLeft, LOW); digitalWrite(dirRight, LOW); } if(angle > 149) { analogWrite(speedLeft, speed); analogWrite(speedRight, speed - 65);
Wettbewerbe bei MIPT statt insgesamt
Mit unserem Roboter gingen wir zum Roboter-Fußballwettbewerb, der am 14.04.2019 am Moskauer Institut für Physik und Technologie, Dolgoprudny, veranstaltet wurde. Wir haben das 1: 4-Finale erreicht, sind aber nicht weiter vorangekommen.

Der Prozess selbst war für uns interessant, aber hier werde ich die Schlussfolgerungen beschreiben, die wir durch einen Blick auf den Roboter vor Ort gezogen haben:
- brauche mächtiger. Wünschenswert sind vier Räder oder stärkere Motoren und andere Räder. Obwohl es natürlich vierrädrige Modelle waren, die vorteilhafter aussahen
- Management ist nicht hoch. Es ist notwendig, den Roboter in eine Panzerkurve zu versetzen (an einer Stelle drehen, da sich die Räder in entgegengesetzte Richtungen drehen), da sonst der Kurvenradius zu groß ist. Im Allgemeinen ist die Option mit vier Pfeilen anstelle eines Kreises mit proportionaler Geschwindigkeit für den Fußball vorzuziehen. Die beschriebene Option eignet sich besser für Rennen, bei denen Sie ununterbrochen fahren und hier Klarheit benötigen (ich habe mich um 10 Grad um meine Achse gedreht, auf den Ball gerichtet und den Knopf nach vorne gedrückt. Aber wenn ich den Ball bereits gepackt habe, möchte ich flexibel manövrieren, aber hier müssen Sie proportional sein Geschwindigkeit ... du musst dieses Ding irgendwie kombinieren).
Kommentare und Vorschläge werden sehr glücklich sein. In früheren Artikeln sind Kommentare manchmal interessanter als der Artikel selbst. Danke,
Sasha und
Dana für die Arbeit .