Lichtverfolgung Roboter: Unterschied zwischen den Versionen
(19 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Kategorie:Projekte]] | [[Kategorie:Projekte]] | ||
[[Kategorie:ProjekteET MTR BSE WS2020]] | [[Kategorie:ProjekteET MTR BSE WS2020]] | ||
[[Datei:2021 01 17 22 01 IMG 1384.JPG|400px|thumb|right|Werbeplakat des Lichtverfolgung Roboters <ref> Eigenes Dokument </ref>]] | |||
'''Autoren:'''[[Benutzer:Mohamed Soliman| Mohamed Soliman]] , [[Jasmin Tewo Watio]], <br/> | '''Autoren:'''[[Benutzer:Mohamed Soliman| Mohamed Soliman]] , [[Jasmin Tewo Watio]], <br/> | ||
'''Betreuer:''' | '''Betreuer:''' Marc Ebmeyer<br/> | ||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
== Einleitung == | == Einleitung == | ||
Zeile 14: | Zeile 25: | ||
== Anforderungen == | == Anforderungen == | ||
* Sofortige Erkennung der Lichtquelle | |||
* Zuverlässige Definierung der Richtung der Lichtquelle | |||
* Die Ansteuerung der Motoren in der Richtung des Lichts | |||
* Genaue Lenkweise, um die Lichtquelle zu folgen | |||
* Stoppen der Motoren, sobald keine Lichtquelle zu erkennen ist | |||
== | == Funktionaler Systementwurf== | ||
Der Roboter wird durch 2 Motoren betrieben, die über ein Motortreiber funktionieren und angesteuert werden. Durch die 2 Fotowiderstände werden die Lichtquellen erkannt und die Daten erfasst. | |||
Die 2 Widerstände werden an der Vorderseite des Roboters angebracht. | |||
Das System, das den Roboter antreibt, liest den Analogwert der beiden Sensoren, führt einen Vergleich durch und trifft eine Entscheidung über die zu ergreifenden Maßnahmen, um die Lichtquelle zu erreichen. | Das System, das den Roboter antreibt, liest den Analogwert der beiden Sensoren, führt einen Vergleich durch und trifft eine Entscheidung über die zu ergreifenden Maßnahmen, um die Lichtquelle zu erreichen. | ||
Der | Der Widerstand, der das meiste Licht empfängt, gibt die Richtung vor, die der Roboter einschlagen soll. | ||
Wenn der linke Fotowiderstand mehr Licht empfängt als der rechte Fotowiderstand, sollte der Roboter nach links drehen oder zielen. | Wenn der linke Fotowiderstand mehr Licht empfängt als der rechte Fotowiderstand, sollte der Roboter nach links drehen oder zielen. | ||
Wenn beide Sensoren den gleichen Wert liefern, d. h. die gleiche Lichtmenge empfangen, sollte der Roboter geradeaus fahren. | Wenn beide Sensoren den gleichen Wert liefern, d. h. die gleiche Lichtmenge empfangen, sollte der Roboter geradeaus fahren. | ||
Das Step-Down Modul ist für Reglung der Versorgungspannung verantwortlich. Über das Modul wird die die Eingangsspannung von den Akkus gedrosselt und an die passende Spannung für den Roboter angepasst. | |||
[[Datei:Konzeptionsentwurf des Lichtverfolgungsroboter.jpg|600px|thumb|links|Konzeptionsentwurf des Lichtverfolgungsroboter:https://www.slideshare.net/divay_khatri/report-light-sensing-robot?next_slideshow=1 <ref> Eigenes Dokument </ref>]] | |||
[[Datei:Konzeptionsentwurf des Lichtverfolgungsroboter.JPG|600px|thumb|rechts|Konzeptionsentwurf_des_Lichtverfolgungsroboter <ref> Eigenes Dokument </ref>]] | |||
[[Datei:Stromversorgungskonzept.JPG|600px|thumb|links|Stromversorgungskonzept_des_Lichtverfolgungsroboter <ref> Eigenes Dokument </ref>]] | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
== Komponentenspezifikation == | == Komponentenspezifikation == | ||
Zeile 65: | Zeile 117: | ||
== Umsetzung (HW/SW) == | == Umsetzung (HW/SW) == | ||
'''Hardware''' <br/> | |||
Durch das intensive Recherchieren konnte entschieden werden, welche Hardware Teile für das Projekt benötigt sind. Die Regulierung der Versorgungsspannung erfolgt durch das Step-Down Modul, um das Arduino Modul und die Motoren vor einer hohen Spannung einen Kurzschluss zu schützen. Durch das Step-Down Modul kann immer kontrolliert werden, wie viel die Einganagsspannung betragen soll. | |||
Die 2 DC Motoren werden an dem Motor Shield Modul angeschlossen und auch dadurch angesteuert. | |||
Das Verbinden von dem Arduino Modul und das Motor Shield Modul erfolgt über das zusammenstecken von den beiden Teilen. Das Motor Shield Modul hat dann auch die gleichen Pins wie bei dem Arduino bzw. digitalen und analogen Pins. | |||
[[Datei:Motor Shield Modul .JPG|600px|thumb|links|Motor Shield Modul <ref> Eigenes Dokument </ref>]] | |||
[[Datei:Schaltung der Photowiderstände .JPG|600px|thumb|rechts|Schaltung der Photowiderstände <ref> Eigenes Dokument </ref>]] | |||
== | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
<br/> | |||
'''Software''' <br/> | |||
In unserem Projekt wurde die Software mit der Arduino IDE umgesetzt. Die Software besteht dabei aus den Standard-Blöcken „setup“ und „loop“. Beim Starten des Microcontrollers werden jedoch zuerst die Bibliotheken und Variablen geladen. Nachdem der Microcontroller gestartet ist und die „setup“-Routine durchlaufen wurde, startet die Endlosschleife „loop“. <br> | |||
==== Definierung von den DC_Motoren und die analogen Pins ==== | |||
<pre> | |||
//including the libraries | |||
#include <AFMotor.h> | |||
//defining pins and variables | |||
#define lefts A0 | |||
#define rights A1 | |||
//defining motors | |||
AF_DCMotor motor1(1, MOTOR12_1KHZ); | |||
AF_DCMotor motor2(2, MOTOR12_1KHZ); | |||
</pre> | |||
====Setup==== | |||
Das Setup wird bei jedem Neustart oder Reset des Arduinos aufgerufen. | |||
In der Konfiguration werden die Motoren gestartet, sowie das Empfangen von Daten von den Photowiderständen. Hier werden die Pins initialisiert, wodurch festgelegt wird, ob ein Pin als Eingang oder Ausgang verwendet wird. Außerdem wird dem Servo der Pin für das Steuerungssignal und dem Schrittmotor die Geschwindigkeit zugeordnet. | |||
<pre> | |||
void setup() { | |||
//Setting the motor speed | |||
motor1.setSpeed(150); | |||
motor2.setSpeed(150); | |||
//Declaring PIN input types | |||
pinMode(lefts,INPUT); | |||
pinMode(rights,INPUT); | |||
//Begin serial communication | |||
Serial.begin(9600); | |||
} | |||
</pre> | |||
====Hauptprogramm==== | |||
Mit der Arduino Software wurde das Programm mit einer weiterlaufende If Schleife mit den verschiedenen Bedingungen umgesetzt. Bei dem Programm geht's darum, bei jedem Mal, wo eine Lichtquelle erkannt wird , eine Anfrage zu schicken und kontrollieren welche If Bedingung zum Einsatz kommt. Daraufhin werden die Motoren angesteuert und es folgt eine Verfolgung hinter der Lichtquelle her. | |||
Um eine reibungslose Lenkung zu schaffen, werden die Motoren bei der Lenkung einzeln angesteuert. Es wird bei der Lenkung zu einer bestimmten Richtung ein Motor für 30 Millisekunden durch die Funktion 'Delay' gestoppt, während der andere Motor weiter fährt. | |||
Sobald kein Licht zu erkennen ist, kommt die 'Release' Funktion zum EInsatz und die Motoren werden gestoppt, bis eine weitere Lichtquelle erkannt wird. | |||
<pre> | |||
Serial.println(analogRead(lefts)); | |||
Serial.println(analogRead(rights)); | |||
//Licht wird von beiden Widerständen erkannt | |||
if(analogRead(lefts)<=350 && analogRead(rights)<=350){ | |||
//Forward | |||
motor1.run(FORWARD); | |||
motor2.run(BACKWARD); | |||
} | |||
//Licht kommt von der linken Seite | |||
else if(analogRead(lefts)<=350 && analogRead(rights)>=350){ | |||
//turn left | |||
motor2.run(BACKWARD); | |||
motor1.run(RELEASE); | |||
delay(30); | |||
motor1.run(FORWARD); | |||
motor2.run(BACKWARD); | |||
} | |||
//Licht kommt von der rechten Seite | |||
else if(analogRead(lefts)>=350 && analogRead(rights)<=350){ | |||
//turn right | |||
motor1.run(FORWARD); | |||
motor2.run(RELEASE); | |||
delay(30); | |||
motor1.run(FORWARD); | |||
motor2.run(BACKWARD); | |||
} | |||
//Es wird kein Licht erkannt | |||
else if(!analogRead(lefts)<=350 && !analogRead(rights)<=350){ | |||
//stop | |||
motor1.run(RELEASE); | |||
motor2.run(RELEASE); | |||
</pre> | |||
== Ergebnis == | == Ergebnis == | ||
Der Roboter | Der Roboter erfüllt seine Funktion und erkennt das Licht sobald eine Lichtquelle auf ihn gerichtet wird. Durch die beiden Photoresistors kann die Lichtquelle von Links und Rechts erkannt werden. | ||
Alle Anforderungen wurde auch erfüllt | |||
== Zusammenfassung == | == Zusammenfassung == | ||
Am Ende dieser Arbeit konnten wir unser durch die GET-Praktika und die verschiedene Uni Module erworbenes Wissen in dem Projekt umsetzten, um einen funktionsfähigen Roboter zu erhalten.Die Aufgabe des Projekts ist es, einen Lichtverfolgungsroboter mit dem Arduino-Board zu realisieren. Nach Erhalt der notwendigen Hardware konnten diese montiert und mit den elektrischen Komponenten verbunden werden. Nachdem das Programm fertiggestellt war, musste der Lichtverfolgungsroboter gründlich getestet werden, um sicherzustellen, dass er auch den Anforderungen der Aufgabe gerecht wird. Schließlich wurde ein Video über den Lichtverfolgungsroboter erstellt und auf der Plattform Youtube veröffentlicht. Damit wurden die Anforderungen der Projektaufgabe erfüllt. | |||
== Lessons Learned == | == Lessons Learned == | ||
Dieses Projekt hat uns ermöglicht, mehr Wissen über Robotik und Elektronik zu erlangen. Wir haben auch gelernt, wie man auf Arduino programmiert, was sehr angenehm war. Schließlich haben uns die Probleme, die während dieses Projekts aufgetreten sind, geholfen, noch selbständiger zu arbeiten, aber auch zu wissen, wie man sich gemeinsam Situationen stellt, die für ein Projekt beängstigend erscheinen könnten, und erfinderisch zu sein, wenn es darum geht, Lösungen für sie zu finden. | |||
== Projektunterlagen == | == Projektunterlagen == | ||
=== Projektplan === | |||
[[Datei:Projektplan1.PNG]] | |||
== YouTube Video == | == YouTube Video == | ||
https://www.youtube.com/watch?v=TMNkOM5votc | |||
== Weblinks == | == Weblinks == | ||
== Literatur == | == Literatur == | ||
https://www.slideshare.net/divay_khatri/report-light-sensing-robot?next_slideshow=1 |
Aktuelle Version vom 21. Januar 2021, 13:01 Uhr
Autoren: Mohamed Soliman , Jasmin Tewo Watio,
Betreuer: Marc Ebmeyer
Einleitung
Dieses Projekt ist Teil des GET-Praktikums des Bachelor-Studiengangs Mechatronik im 5. Semester und wird hier näher beschrieben. Unser grundlegendes Ziel ist es, einen Roboter zu bauen, der sich in die Richtung bewegt, in der die größte Lichtintensität herrscht. Unser Roboter (Auto) würde zwei LDRs haben, einen auf der linken und einen auf der rechten Seite, so dass die Lichtintensität auf jeder Seite gemessen werden kann. Anhand dieser Messwerte kann die Richtung unseres Fahrkorbs geändert werden. Die Hauptkomponente des Roboters ist das Arduino-System, das die Daten von den lichtempfindlichen Widerständen und Sensoren empfängt und verarbeitet und dann die Motoren steuert. In diesem Projekt werden bestimmte Fähigkeiten benötigt, z. B :
.Kenntnisse über Elektrizität .Programmierkenntnisse
Anforderungen
- Sofortige Erkennung der Lichtquelle
- Zuverlässige Definierung der Richtung der Lichtquelle
- Die Ansteuerung der Motoren in der Richtung des Lichts
- Genaue Lenkweise, um die Lichtquelle zu folgen
- Stoppen der Motoren, sobald keine Lichtquelle zu erkennen ist
Funktionaler Systementwurf
Der Roboter wird durch 2 Motoren betrieben, die über ein Motortreiber funktionieren und angesteuert werden. Durch die 2 Fotowiderstände werden die Lichtquellen erkannt und die Daten erfasst.
Die 2 Widerstände werden an der Vorderseite des Roboters angebracht. Das System, das den Roboter antreibt, liest den Analogwert der beiden Sensoren, führt einen Vergleich durch und trifft eine Entscheidung über die zu ergreifenden Maßnahmen, um die Lichtquelle zu erreichen.
Der Widerstand, der das meiste Licht empfängt, gibt die Richtung vor, die der Roboter einschlagen soll. Wenn der linke Fotowiderstand mehr Licht empfängt als der rechte Fotowiderstand, sollte der Roboter nach links drehen oder zielen. Wenn beide Sensoren den gleichen Wert liefern, d. h. die gleiche Lichtmenge empfangen, sollte der Roboter geradeaus fahren.
Das Step-Down Modul ist für Reglung der Versorgungspannung verantwortlich. Über das Modul wird die die Eingangsspannung von den Akkus gedrosselt und an die passende Spannung für den Roboter angepasst.
Komponentenspezifikation
Komponente | Beschreibung | Bild |
---|---|---|
Arduino UNO R3 | Der Arduino UNO ist der Hauptcontroller in diesem Projekt. Die Daten von den Sensoren (LDR) werden an den Arduino gegeben und dieser gibt entsprechende Signale an den Motortreiber. | |
Motor Drive Shield Dual L293D | L293D ist ein typischer Motortreiber oder Motortreiber-IC, der den Antrieb von DC-Motoren in beiden Richtungen ermöglicht. L293D ist ein 16-Pin-IC, der einen Satz von zwei DC-Motoren gleichzeitig in jeder Richtung steuern kann. Es bedeutet, dass Sie zwei DC-Motor mit einem einzigen L293D IC.In einem einzigen L293D-Chip gibt es zwei h-Brücke Schaltung im Inneren des IC, die zwei DC-Motor unabhängig drehen kann.H-Brücke ist eine Schaltung, die die Spannung in jede Richtung geflogen werden kann.H-Brücke IC sind ideal für den Antrieb eines DC motor.Due seiner Größe ist es sehr viel in Robotik-Anwendung zur Steuerung von DC-Motoren verwendet. | |
Gear Motor | Wir haben zwei Getriebemotoren an der Rückseite des Linienverfolgungsroboters verwendet. Diese Motoren bieten mehr Drehmoment als normale Motoren und können auch zum Tragen einer gewissen Last verwendet werden. | |
Fotowiderstand(LDR) | Wir haben für unser Projekt lichtabhängige Widerstände, LDRs oder Fotowiderstände verwendet. Das sind elektronische Bauteile, die zur Erkennung von Licht verwendet werden und den Betrieb eines Schaltkreises entsprechend der Lichtpegel ändern. | |
Komplettes 2WD Car Chassis mit Motoren und Rädern | Das Gehäuse ist aus stabilem Acryl gefertigt und hat viele Bohrungen zur sicheren Befestigung von Komponenten. Er besteht aus 2 Getriebemotoren, die mit einer Spannung zwischen 3 und 9 V betrieben werden, einer in einem Kugelgelenk befestigten Metallkugel, die als drittes Rad dient und es dem zukünftigen Roboter ermöglichen wird, praktisch auf der Stelle zu drehen, 2 Rädern und Zusätzlich ist ein Ein-/Ausschalter für die Spannungsversorgung integriert. Ein Batteriehalter ist ebenfalls im Lieferumfang enthalten. | |
Step-Down Modul | Automatischer Schutz gegen thermische Überlastungen und Überströme. Dieses Modell hat einen elektronischen Schutzschalter. Dies funktioniert nicht durch die Begrenzung des Ausgangsstroms, sondern durch die Anpassung der Ausgangsspannung auf ihren Minimalwert jedes Mal, wenn der Ausgangsstrom den Schwellenwert (500 Hz Aktualisierungsrate) überschreitet. |
Umsetzung (HW/SW)
Hardware
Durch das intensive Recherchieren konnte entschieden werden, welche Hardware Teile für das Projekt benötigt sind. Die Regulierung der Versorgungsspannung erfolgt durch das Step-Down Modul, um das Arduino Modul und die Motoren vor einer hohen Spannung einen Kurzschluss zu schützen. Durch das Step-Down Modul kann immer kontrolliert werden, wie viel die Einganagsspannung betragen soll.
Die 2 DC Motoren werden an dem Motor Shield Modul angeschlossen und auch dadurch angesteuert.
Das Verbinden von dem Arduino Modul und das Motor Shield Modul erfolgt über das zusammenstecken von den beiden Teilen. Das Motor Shield Modul hat dann auch die gleichen Pins wie bei dem Arduino bzw. digitalen und analogen Pins.
Software
In unserem Projekt wurde die Software mit der Arduino IDE umgesetzt. Die Software besteht dabei aus den Standard-Blöcken „setup“ und „loop“. Beim Starten des Microcontrollers werden jedoch zuerst die Bibliotheken und Variablen geladen. Nachdem der Microcontroller gestartet ist und die „setup“-Routine durchlaufen wurde, startet die Endlosschleife „loop“.
Definierung von den DC_Motoren und die analogen Pins
//including the libraries #include <AFMotor.h> //defining pins and variables #define lefts A0 #define rights A1 //defining motors AF_DCMotor motor1(1, MOTOR12_1KHZ); AF_DCMotor motor2(2, MOTOR12_1KHZ);
Setup
Das Setup wird bei jedem Neustart oder Reset des Arduinos aufgerufen. In der Konfiguration werden die Motoren gestartet, sowie das Empfangen von Daten von den Photowiderständen. Hier werden die Pins initialisiert, wodurch festgelegt wird, ob ein Pin als Eingang oder Ausgang verwendet wird. Außerdem wird dem Servo der Pin für das Steuerungssignal und dem Schrittmotor die Geschwindigkeit zugeordnet.
void setup() { //Setting the motor speed motor1.setSpeed(150); motor2.setSpeed(150); //Declaring PIN input types pinMode(lefts,INPUT); pinMode(rights,INPUT); //Begin serial communication Serial.begin(9600); }
Hauptprogramm
Mit der Arduino Software wurde das Programm mit einer weiterlaufende If Schleife mit den verschiedenen Bedingungen umgesetzt. Bei dem Programm geht's darum, bei jedem Mal, wo eine Lichtquelle erkannt wird , eine Anfrage zu schicken und kontrollieren welche If Bedingung zum Einsatz kommt. Daraufhin werden die Motoren angesteuert und es folgt eine Verfolgung hinter der Lichtquelle her. Um eine reibungslose Lenkung zu schaffen, werden die Motoren bei der Lenkung einzeln angesteuert. Es wird bei der Lenkung zu einer bestimmten Richtung ein Motor für 30 Millisekunden durch die Funktion 'Delay' gestoppt, während der andere Motor weiter fährt. Sobald kein Licht zu erkennen ist, kommt die 'Release' Funktion zum EInsatz und die Motoren werden gestoppt, bis eine weitere Lichtquelle erkannt wird.
Serial.println(analogRead(lefts)); Serial.println(analogRead(rights)); //Licht wird von beiden Widerständen erkannt if(analogRead(lefts)<=350 && analogRead(rights)<=350){ //Forward motor1.run(FORWARD); motor2.run(BACKWARD); } //Licht kommt von der linken Seite else if(analogRead(lefts)<=350 && analogRead(rights)>=350){ //turn left motor2.run(BACKWARD); motor1.run(RELEASE); delay(30); motor1.run(FORWARD); motor2.run(BACKWARD); } //Licht kommt von der rechten Seite else if(analogRead(lefts)>=350 && analogRead(rights)<=350){ //turn right motor1.run(FORWARD); motor2.run(RELEASE); delay(30); motor1.run(FORWARD); motor2.run(BACKWARD); } //Es wird kein Licht erkannt else if(!analogRead(lefts)<=350 && !analogRead(rights)<=350){ //stop motor1.run(RELEASE); motor2.run(RELEASE);
Ergebnis
Der Roboter erfüllt seine Funktion und erkennt das Licht sobald eine Lichtquelle auf ihn gerichtet wird. Durch die beiden Photoresistors kann die Lichtquelle von Links und Rechts erkannt werden. Alle Anforderungen wurde auch erfüllt
Zusammenfassung
Am Ende dieser Arbeit konnten wir unser durch die GET-Praktika und die verschiedene Uni Module erworbenes Wissen in dem Projekt umsetzten, um einen funktionsfähigen Roboter zu erhalten.Die Aufgabe des Projekts ist es, einen Lichtverfolgungsroboter mit dem Arduino-Board zu realisieren. Nach Erhalt der notwendigen Hardware konnten diese montiert und mit den elektrischen Komponenten verbunden werden. Nachdem das Programm fertiggestellt war, musste der Lichtverfolgungsroboter gründlich getestet werden, um sicherzustellen, dass er auch den Anforderungen der Aufgabe gerecht wird. Schließlich wurde ein Video über den Lichtverfolgungsroboter erstellt und auf der Plattform Youtube veröffentlicht. Damit wurden die Anforderungen der Projektaufgabe erfüllt.
Lessons Learned
Dieses Projekt hat uns ermöglicht, mehr Wissen über Robotik und Elektronik zu erlangen. Wir haben auch gelernt, wie man auf Arduino programmiert, was sehr angenehm war. Schließlich haben uns die Probleme, die während dieses Projekts aufgetreten sind, geholfen, noch selbständiger zu arbeiten, aber auch zu wissen, wie man sich gemeinsam Situationen stellt, die für ein Projekt beängstigend erscheinen könnten, und erfinderisch zu sein, wenn es darum geht, Lösungen für sie zu finden.
Projektunterlagen
Projektplan
YouTube Video
https://www.youtube.com/watch?v=TMNkOM5votc
Weblinks
Literatur
https://www.slideshare.net/divay_khatri/report-light-sensing-robot?next_slideshow=1