Automatische Codeanalyse im Folgemodus
I. Funktionsprinzip
An der Vorderseite des Fahrzeugs sind 3 Vorwärts-Infrarot-Hindernisvermeidungsmodule installiert, die jeweils in einem Winkel von etwa 45 Grad eingestellt sind. Das Mittelinfrarot-Hindernisvermeidungsmodul wird verwendet, um den Abstand zwischen dem Controller vor ihm zu beurteilen und zu verhindern, dass der Abstand zu gering ist, um Personen zu treffen. Die beiden linken und rechten Infrarot-Hindernisvermeidungsmodule sind eigentlich die „umgekehrte Anwendung“ von „Hindernisvermeidung“, was der „Hindernissuche“ entspricht, und sind für die Erkennung der beiden Beine des Controllers verantwortlich. Wenn sich die Steuerung vor der rechten Seite des Autos befindet, kann der Sensor des Roboters feststellen, dass das Signal auf der rechten Seite 0 und das Signal auf der linken Seite 1 ist, und führt daher die Rechtskurvenlogik aus, um die Richtung zu korrigieren von dem Auto. Wenn der mittlere Sensor nicht ausgelöst wird, bedeutet dies, dass der Abstand zwischen Roboter und Bediener ausreichend ist und die geradlinige Logik zu diesem Zeitpunkt ausgeführt werden kann.
II. Die Hardware-Verbindung
Wie in der Abbildung gezeigt, wählen wir die drei E/A der Haupttreiberplatine P21, P33 und P37 als linke, mittlere und rechte Infrarot-Erkennungsmodulschnittstelle. Passen Sie dann die Empfindlichkeit des Moduls so an, dass der Triggerabstand P21 = Triggerabstand P37 ≈ 25 cm beträgt; Das mittlere IR-Modul passt den Abstand um etwa 15 cm an, um sicherzustellen, dass es den Bediener nicht trifft.
III. Das Software-Schreiben
Öffnen Sie das untere Programmprojekt mit keil C V4, suchen Sie die Konfigurationsdatei config.h und fügen Sie die IO-Pin-Konfiguration des Patrouillenliniensensors in die Konfigurationsdatei ein:
- /* Follow-Modus-Pin-Konfiguration */
- sbit Input_Detect0=P3^7; //Rechte Sonde
- sbit Input_Detect1=P3^3; //Entfernungserkennung
- sbit Input_Detect2=P2^1; //Linke Sonde
Code kopieren
Öffnen Sie dann die Datei motor.c und fügen Sie der Datei den Code für die Patrouillenlinie hinzu. Als Erstes sollten Sie eine Variable definieren, um den Bewegungszustand des Roboters zu speichern, damit der Roboter immer eine Richtungskorrektur durchführt, nachdem er vom Kurs abweicht und bevor er in die richtige Richtung zurückkehrt.
uchar Robots_Run_Status;
Code kopieren
- Fügen Sie dann die Logikfunktion für die Auto-Follow-Funktion hinzu, um die Logik der Auto-Follow-Funktion zu erreichen.
- //Folgemodus
- void Follow_Track(void)
- {
- switch(Robots_Run_Status)
- {
- Fall 0x01:MOTOR_GO_RIGHT; brechen;
- Fall 0x02:MOTOR_GO_LEFT; brechen;
- Fall 0x03:MOTOR_GO_FORWARD; brechen;
- Fall 0x04:MOTOR_GO_STOP; brechen;
- }
- if(Input_Detect1 == 1) //Dies ist eine wichtige Voraussetzung. Wenn der mittlere Sensor nicht ausgelöst wird, bedeutet dies, dass der Roboter noch 15 cm von der Steuerung entfernt ist, was ein sicherer Abstand ist, andernfalls führt er den Stoppbefehl direkt aus
- {
- if((Input_Detect0 == 0)&& (Input_Detect2 == 0)) //Linker und rechter Sensor erkennen gleichzeitig den linken und rechten Fuß des Controllers
- {
- Robots_Run_Status=0x04;//Führen Sie den Stoppbefehl aus
- }
- if((Input_Detect0 == 0)&& (Input_Detect2 == 1))//Der linke Sensor erkennt den Controller nicht, der rechte Sensor erkennt ihn, was anzeigt, dass sich der Controller auf der rechten Seite des Roboters befindet und der Roboter ausführt ein Rechtsabbiegebefehl, um den Kopf des Autos zu korrigieren. {
- Robots_Run_Status=0x01;//rechts abbiegen
- }
- if((Input_Detect0 == 1)&& (Input_Detect2 == 0))//Der rechte Sensor erkennt den Controller nicht, aber der linke Sensor erkennt ihn, was darauf hinweist, dass sich der Controller auf der linken Seite des Roboters und des Roboters befindet führt den Befehl zum Abbiegen nach links aus, um den Kopf des Fahrzeugs zu korrigieren
- {
- Robots_Run_Status=0x02;//links abbiegen
- }
- if((Input_Detect0 == 1)&& (Input_Detect2 == 1))//Der linke und der rechte Infrarot-Hindernisvermeidungssensor werden nicht ausgelöst, was darauf hinweist, dass sich vor dem Auto kein Hindernis befindet und vorwärts bewegt werden kann
- {
- Robots_Run_Status=0x03;//Gehe geradeaus }
- }
- anders
- {
- Robots_Run_Status=0x04;
- }
- }
Code kopieren
Aufrufen der geschriebenen Line-Walk-Funktion.
Suchen Sie in der Hauptfunktion main.c nach der while(1)-Totschleife und fügen Sie die Patrol-Funktion hinzu, die Sie gerade geschrieben habenwhile(1)
- {
- Follow_Track();//Linienpatrouille ausführen
- }
Code kopieren
Diese folgende Demo weist Einschränkungen auf. Dies bedeutet, dass die Personen die Richtung des Roboters „lenken“ müssen, wenn während der Fahrt die Personen, die sich vor dem Roboterauto befinden, plötzlich weglaufen. Tut mir leid, der Roboter verliert das Ziel und fährt geradeaus, bis in der Mitte die Antikollisions-Infrarotsensoren ausgelöst werden