Da der T1 nun vollständig zusammengebaut ist und du weißt, wie man die beiden verschiedenen Motoren ansteuert, können wir damit beginnen, deren Ansteuerung in unser Programm mit aufzunehmen. 

Als erstes wollen wir die Ansteuerung der Lenkung programmieren:


1. Ansteuerung Servomotor


Wie wir bereits wissen, verfolgt Pixy2 mithilfe des Pan/Tilt-Kits Objekte, die in sein Blickfeld gelangen. Die Ansteuerung des Pan- und des Tilt- Servomotors ist in der Pan/Tilt-Demo der Pixy2 Library vorhanden. 

In dem Programmcode der Demo sieht die Ansteuerung so aus: 

pixy.setServos(panLoop.m_command, tiltLoop.m_command);


In dem Attribut m_command ist für die Objekte panLoop und tiltLoop jeweils ein Wert gespeichert, mit dem der Pan- und der Tilt-Servo des Pixy2 angesteuert werden. Da für uns nicht die vertikale, sondern nur die horizontale Bewegung des Objekts, dem Pixy2 folgen soll, interessant ist, werden wir zur Ansteuerung unserer Lenkung panLoop.m_command verwenden. 

Das Attribut m_command kann je nach horizontaler Lage des Objekts im Blickfeld von Pixy2 Werte von 0 bis 1000 annehmen. Wenn das Objekt horizontal genau in der Mitte vor Pixy2 liegt, hat panLoop.m_command den Wert 500.

Diese Informationen sind für die Ansteuerung später wichtig. 




Um die Lenkung des T1 mithilfe eines Servomotors umsetzen zu können, müssen wir erstmal gucken, wie weit und in welchem Radius sich der Servomotor mit verbundener Lenkachse bewegen kann. Generell kann sich ein Servo in einem Radius von 0 Grad bis 180 Grad bewegen. An unserem T1 kann sich der Servo jedoch nur in einem Radius von insgesamt etwa 50 Grad bewegen. Durch das Lenkgestell wird die Bewegung des Servomotors eingeschränkt. An unserem T1, den wir zum Erstellen dieses Kurses verwendet haben, kann der Servomotor Winkel von etwa 65 Grad bis 115 Grad einstellen. Die Mitte, und damit eine gerade Fahrtrichtung befindet sich bei 90 Grad. 

Die Winkel, zwischen denen sich der Servomotor an deinem T1 bewegen kann, lassen sich durch folgendes Programm ermitteln:

#include <ESP32Servo.h>

Servo lenkungServo;

#define Lenkwinkel 90

void setup() 
{
  //Den Servo für den ESP32 bereit machen                        
  lenkungServo.setPeriodHertz(50);
  lenkungServo.attach(14, 500, 2500);
}

void loop() 
{
  lenkungServo.write(Lenkwinkel);
  delay(1000);
}


Über den Befehl lenkungServo.write() wird ein Lenkwinkel auf dem Servo eingestellt, der oben am Anfang des Programms festgelegt werden kann. Hinter #define Lenkwinkel kannst du einen beliebigen Winkel zwischen 0 und 180 Grad eintragen und so die Mitte und die linke und rechte Grenze für deine Lenkung ermitteln. 

Notiere dir diese Winkel gut. 




Um nun die Lenkung mithilfe des Servos programmieren zu können. muss zunächst ein Objekt für den Servo angelegt werden. Außerdem müssen ein paar Grundeinstellungen für den Servomotor im setup() festgelegt werden.

#include <ESP32Servo.h>//muss eingebunden werden
Servo Servolenkung;//muss definiert werden

void setup()
{
 //Servo für die Lenkung bereit machen
  Servolenkung.setPeriodHertz(50);
  Servolenkung.attach(14, 500, 2500);
}



Um nun das Attribut panLoop.m_command für unsere Lenkung verwenden zu können, müssen wir die in m_command gespeicherten Werte von 0 bis 1000 auf den Winkelbereich anpassen, in dem unser Servo sich bewegen kann.

Durch den Befehl map() werden die Positionen des Pixy2 auf die passende Position des Servo-Motors übertragen. Zuerst wird die Mitte des Pixy2 (500) auf die Mitte des Servos (90) gesetzt. In den nächsten Zeilen werden dann jeweils der Schwenk nach rechts und der Schwenk nach links definiert. 

if(panLoop.m_command == 500)
     {
      Servolenkung.write(90);
     }
     else if((panLoop.m_command > 500) && (panLoop.m_command <= 1000))
     {
      Servolenkung.write((map(panLoop.m_command, 501, 1000, 91, 115)));
     }
     else if((panLoop.m_command < 500) && (panLoop.m_command >= 0))
     {
      Servolenkung.write((map(panLoop.m_command, 0, 499, 65, 89)));
     }


Die Lenkung soll nur ausgeführt werden, wenn Pixy2 ein Objekt erkennt.


Zuletzt geändert: Samstag, 3. Oktober 2020, 14:59