- Erforderliche Materialien:
- Konzept des Roboters zur Vermeidung von Hindernissen:
- Schaltplan und Erklärung:
- Programmierung Ihres PIC-Mikrocontrollers:
- Hindernisvermeidungsroboter in Aktion:
Obstacle Avoider Robot ist ein weiterer berühmter Roboter, der eingebettete Projekte aufpeppt. Für diejenigen, die neue Hindernisvermeidungsroboter sind, ist es nur ein normaler Roboter mit Rädern, der seinen Weg navigieren kann, ohne auf Hindernisse zu stoßen. Es gibt viele Möglichkeiten, einen Hindernisvermeidungsroboter im Projekt zu bauen. Wir werden einen Ultraschallsensor (vorne) und zwei IR-Sensoren (links / rechts) verwenden, damit unser Roboter Augen in alle drei Richtungen hat. Auf diese Weise können Sie es viel intelligenter und schneller machen, indem Sie Objekte auf allen drei Seiten erkennen und entsprechend manövrieren. Hier verklagen wir den PIC Microcontroller PIC16F877A wegen dieses Hindernisses zur Vermeidung von Robotern.
Der Betrieb eines Roboters zur Vermeidung von Hindernissen kann von einem Echtzeitprodukt aus beobachtet werden, das als Reinigungsroboter für zu Hause bezeichnet wird. Obwohl die Technologie und die Sensoren, die in diesen verwendet werden, sehr kompliziert sind, bleibt das Konzept das gleiche. Lassen Sie uns sehen, wie viel wir mit unseren normalen Sensoren und PIC-Mikrocontrollern erreichen können.
Überprüfen Sie auch unsere anderen Roboter zur Vermeidung von Hindernissen:
- Himbeer-Pi-basierter Roboter zur Vermeidung von Hindernissen
- DIY Smart Staubsauger Roboter mit Arduino
Erforderliche Materialien:
- PIC16F877A
- IR-Sensor (2Nos)
- Ultraschallsensor (1Nos)
- DC-Getriebemotor (2Nos)
- L293D Motortreiber
- Chaises (Sie können auch Ihre eigenen mit Pappe bauen)
- Power Bank (Jede verfügbare Stromquelle)
Konzept des Roboters zur Vermeidung von Hindernissen:
Das Konzept des Hindernisvermeidungsroboters ist sehr einfach. Wir verwenden Sensoren, um das Vorhandensein von Objekten um den Roboter herum zu erfassen, und verwenden diese Daten, um den Roboter nicht über diesen Objekten zu kollidieren. Um ein Objekt zu erkennen, können wir Sensoren wie IR-Sensor und Ultraschallsensor verwenden.
In unserem Roboter haben wir den US-Sensor als Frontsensor und zwei IR-Sensoren für links und rechts verwendet. Der Roboter bewegt sich vorwärts, wenn sich kein Objekt vor ihm befindet. Der Roboter bewegt sich also vorwärts, bis der Ultraschallsensor (US) ein Objekt erkennt.
Wenn ein Objekt vom US-Sensor erkannt wird, ist es Zeit, die Richtung des Roboters zu ändern. Wir können entweder nach links oder rechts abbiegen, um die Drehrichtung zu bestimmen. Mit Hilfe des IR-Sensors prüfen wir, ob sich in der Nähe der linken oder rechten Seite des Roboters ein Objekt befindet.
Wenn auf der Vorder- und rechten Seite des Roboters ein Objekt erkannt wird, kommt der Roboter zurück und dreht sich nach links. Wir lassen den Roboter eine bestimmte Strecke rückwärts laufen, damit er beim Abbiegen nicht mit dem Objekt kollidiert.
Wenn auf der Vorder- und linken Seite des Roboters ein Objekt erkannt wird, kommt der Roboter zurück und biegt nach rechts ab.
Wenn der Roboter eine Ecke des Raums erreicht, erkennt er das in allen vier Objekten vorhandene Objekt. In diesem Fall müssen wir den Roboter rückwärts fahren, bis eine Seite frei wird.
Ein anderer möglicher Fall ist, dass sich ein Objekt vor Ihnen befindet , aber möglicherweise weder auf der linken noch auf der rechten Seite ein Objekt vorhanden ist. In diesem Fall müssen wir uns zufällig in eine der Richtungen drehen.
Ich hoffe, dies hätte eine ungefähre Vorstellung davon gegeben, wie ein Hindernisvermeider funktioniert. Fahren wir nun mit dem Schaltplan fort, um diesen Bot zu erstellen und ihn in Aktion zu genießen.
Schaltplan und Erklärung:
Das vollständige Schaltbild dieses PIC-basierten Roboters zur Vermeidung von Hindernissen ist im obigen Bild dargestellt. Wie Sie sehen können, haben wir zwei IR-Sensoren verwendet, um Objekte links und rechts vom Roboter zu erfassen, und einen Ultraschallsensor, um die Entfernung des Objekts zu messen, das sich vor dem Roboter befindet. Wir haben auch ein L293D-Motortreibermodul verwendet, um die beiden in diesem Projekt vorhandenen Motoren anzutreiben. Dies sind nur gewöhnliche Gleichstromgetriebemotoren für Räder und können daher sehr leicht abgeleitet werden. Die folgende Tabelle hilft Ihnen bei Verbindungen.
S.No. |
Verbunden von |
Verbunden |
1 |
IR-Sensor Pin weggelassen |
RD2 (Pin 21) |
2 |
IR-Sensor Pin rechts heraus |
RD3 (Pin 22) |
4 |
Motor 1 Kanal A Pin |
RC4 (Pin 23) |
5 |
Motor 1 Kanal B Pin |
RC5 (Pin 25) |
6 |
Motor 2 Kanal A Pin |
RC6 (Pin 26) |
7 |
Motor 2 Kanal B Pin |
RC7 (Pin 27) |
8 |
US Trigger Pin |
RB1 (Pin 34) |
9 |
US Echo Pin |
RB2 (Pin 35) |
Ein Motortreibermodul wie L293D ist obligatorisch, da die zum Betreiben des Gleichstrommotors erforderliche Strommenge nicht über den E / A-Pin des PIC-Mikrocontrollers bezogen werden kann. Die Sensoren und das Modul werden von der + 5V-Versorgung gespeist, die vom 7805 geregelt wird. Das Motortreibermodul kann sogar mit +12 V versorgt werden, aber für dieses Projekt habe ich mich nur an die verfügbaren + 5V gehalten.
Der komplette Roboter wird in meinem Fall von einer Power Bank angetrieben. Sie können auch eine normale Powerbank verwenden und den Reglerabschnitt umgehen oder die obige Schaltung verwenden und eine beliebige 9-V- oder 12-V-Batterie für den Roboter verwenden, wie im obigen Schaltplan gezeigt. Sobald Ihre Verbindungen hergestellt sind, sieht es unten ungefähr so aus
Programmierung Ihres PIC-Mikrocontrollers:
Das Programmieren Ihres PIC für die Arbeit mit einem Hindernisvermeider ist wirklich einfach. Wir müssen nur den Wert dieser drei Sensoren ablesen und die Motoren entsprechend antreiben. In diesem Projekt verwenden wir einen Ultraschallsensor. Wir haben bereits gelernt, wie man Ultraschall mit PIC-Mikrocontrollern verbindet. Wenn Sie neu hier sind, greifen Sie bitte auf dieses Tutorial zurück, um zu verstehen, wie ein US-Sensor mit einem PIC funktioniert, da ich hier die Details überspringen werde, um Wiederholungen zu vermeiden.
Das vollständige Programm oder dieser Roboter finden Sie am Ende dieser Seite. Ich habe die wichtigen Teile des Programms weiter unten erläutert.
Wie wir wissen, beginnen alle Programme mit den Pin-Deklarationen für Eingabe und Ausgabe. Hier sind die vier Pins des Motortreibermoduls und die Trigger-Pins die Ausgangspins, während der Echo-Pin und zwei IR-Ausgangspins eingegeben werden. Wir sollten das Timer 1-Modul initialisieren, um es mit dem Ultraschallsensor zu verwenden.
TRISD = 0x00; // PORTD als Ausgang für die Schnittstelle zum LCD deklariert TRISB1 = 0; // Der Trigger-Pin des US-Sensors wird als Ausgangs-Pin gesendet. TRISB2 = 1; // Der Echo-Pin des US-Sensors wird als Eingangspin gesetzt. TRISB3 = 0; // RB3 ist Ausgangspin für LED TRISD2 = 1; TRISD3 = 1; // Beide IR-Sensorpins werden als Eingang deklariert. TRISC4 = 0; TRISC5 = 0; // Motor 1 Pins als Ausgang deklariert TRISC6 = 0; TRISC7 = 0; // Motor 2 Pins als Ausgang deklariert T1CON = 0x20;
In diesem Programm müssten wir ziemlich oft nach dem Abstand zwischen dem Sensor und dem Objekt suchen, daher haben wir eine Funktion namens berechne_distanz () erstellt, in der wir den Abstand mit der im Tutorial zur US-Sensorschnittstelle beschriebenen Methode messen. Der Code wird unten angezeigt
void berechne_distanz () // Funktion zum Berechnen der Entfernung von US {TMR1H = 0; TMR1L = 0; // Timer-Bits löschen Trigger = 1; __delay_us (10); Trigger = 0; while (Echo == 0); TMR1ON = 1; while (Echo == 1); TMR1ON = 0; time_taken = (TMR1L - (TMR1H << 8)); Entfernung = (0,0272 * Zeitaufwand) / 2; }}
Der nächste Schritt wäre, die Werte des Ultraschallsensors und des IR-Sensors zu vergleichen und den Roboter entsprechend zu bewegen. Hier In diesem Programm habe ich einen Wert von cm als kritischen Abstand verwendet, unterhalb dessen der Roboter beginnen sollte, Änderungen an der Richtung vorzunehmen. Sie können Ihre bevorzugten Werte verwenden. Wenn kein Objekt vorhanden ist, bewegt sich der Roboter einfach vorwärts
if (Abstand> 5) {RC4 = 0; RC5 = 1; // Motor 1 vorwärts RC6 = 1; RC7 = 0; // Motor 2 vorwärts}
Wenn ein Objekt erkannt wird, liegt der Abstand unter cm. In diesem Fall betrachten wir die Werte des linken und rechten Ultraschallsensors. Basierend auf diesem Wert entscheiden wir uns, entweder links oder rechts abzubiegen. Eine Verzögerung von ms wird verwendet, damit die Richtungsänderung sichtbar ist.
if (RD2 == 0 && RD3 == 1 && distance <= 5) // Linker Sensor ist blockiert {back_off (); RC4 = 1; RC5 = 1; // Motor 1 stoppt RC6 = 1; RC7 = 0; // Motor 2 vorwärts __delay_ms (500); } berechne_distanz (); if (RD2 == 1 && RD3 == 0 && distance <= 5) // Rechter Sensor ist blockiert {back_off (); RC4 = 0; RC5 = 1; // Motor 1 vorwärts RC6 = 1; RC7 = 1; // Motor 2 stoppt __delay_ms (500); }}
Manchmal erkannte der Ultraschallsensor ein Objekt, aber es wurde kein Objekt von den IR-Sensoren erkannt. In diesem Fall dreht sich der Roboter standardmäßig nach links. Sie können es auch nach rechts oder in zufälliger Richtung drehen, je nach Ihren Vorlieben. Wenn sich auf beiden Seiten Objekte befinden, gehen wir rückwärts. Der Code dafür ist unten dargestellt.
berechne_abstand (); if (RD2 == 0 && RD3 == 0 && distance <= 5) // Beide Sensoren sind offen {back_off (); RC4 = 0; RC5 = 1; // Motor 1 vorwärts RC6 = 1; RC7 = 1; // Motor 2 stoppt __delay_ms (500); } berechne_distanz (); if (RD2 == 1 && RD3 == 1 && distance <= 5) // Beide Sensoren sind blockiert {back_off (); RC4 = 1; RC5 = 0; // Motor 1 rückwärts RC6 = 1; RC7 = 1; // Motor 2 stoppt __delay_ms (1000); }}
Hindernisvermeidungsroboter in Aktion:
Die Arbeit des Projekts ist sehr interessant und macht Spaß. Sobald Sie mit Ihrer Schaltung und Ihrem Code fertig sind, schalten Sie einfach Ihren Bot ein und lassen Sie ihn auf dem Boden liegen. Es sollte in der Lage sein, Hindernisse zu identifizieren und sie intelligent zu vermeiden. Aber hier kommt der lustige Teil. Sie können den Code ändern und ihn dazu bringen, eine Treppe zu meiden, ihn intelligenter zu machen, indem Sie wertvolle Kurven speichern, und was nicht?
Dieser Roboter hilft Ihnen dabei, die Grundlagen der Programmierung zu verstehen und zu erfahren, wie eine tatsächliche Hardware auf Ihren Code reagiert. Es macht immer Spaß, diesen Roboter zu programmieren und zu beobachten, wie er sich in der realen Welt für den Code verhält.
Hier haben wir dieselbe PIC-Perf-Karte verwendet, die wir zum Blinken von LED mit einem PIC-Mikrocontroller hergestellt haben, und diese Karte in anderen Projekten der PIC-Tutorial-Serie verwendet.
Ihr Roboter sollte ähnlich aussehen wie im obigen Bild. Die vollständige Arbeitsweise dieses Projekts ist im folgenden Video dargestellt.
Ich hoffe, Sie haben das Projekt verstanden und es genossen, eines zu bauen. Wenn Sie irgendwelche Zweifel haben oder stecken bleiben, können Sie den Kommentarbereich verwenden, um Ihre Fragen zu posten, und ich werde mein Bestes geben, um sie zu beantworten.