Motoren - Hochschule Mannheim

Werbung
Fakultät für Informatik, Institut für Robotik
Laborpraktikum II
Legorobotik in JAVA – EV3
Ute Ihme
Hochschule Mannheim | Ute Ihme
DAS LEGO® MINDSTORMS® System
Standardsensoren
Ultraschallsensor
Berührungssensor
Tastsenor
Gyrosensor
Farbsensor
Mannheim University of Applied Sciences | Ute Ihme
March 4,. 2013
2
Zur Wiederholung
Das erste Labor liegt schon etwas zurück, daher eine kurze
Wiederholung der wichtigsten Inhalte aus dem Labor I,
die für das folgende Labor benötigt werden.
Für das Labor II wird benötigt
- Benutzung Eclipse für Lego
- Displayanzeige
- Motorensteuerung
- Ultraschallsensor
Hochschule Mannheim| Ute Ihme
März 2013
3
1. Start der Entwicklungsumgebung
Starten von Eclipse
1. Starten der 32-bit Version von Eclipse (Eclipse Luna)
2. Auswahl des Arbeitsbereiches
Standardeinstellungen übernehmen
auf OK-Button drücken
Hochschule Mannheim| Ute Ihme
März 2013
4
Start der Entwicklungsumgebung
Starten von Eclipse
3. Programmierumgebung
Eclipse wird gestartet
Navigationsleiste
Dateinavigator
Feld für
Programmentwicklung
Informationsfeld
Mannheim University of Applied Sciences | Ute Ihme
March 4,. 2013
5
Start der Entwicklungsumgebung
Starten von Eclipse
3. Programmierung vorbereiten
Datei wählen
Mannheim University of Applied Sciences | Ute Ihme
March 4,. 2013
6
Start der Entwicklungsumgebung
Starten von Eclipse
3. Programmierung vorbereiten
- Neu und
- Projekt…
auswählen
Mannheim University of Applied Sciences | Ute Ihme
- LeJOS EV3 Projekt wählen
- auf Weiter> drücken
March 4,. 2013
7
Start der Entwicklungsumgebung
Starten von Eclipse
3. Programmierung vorbereiten
Projektname eingeben
Fertigstellen drücken
Mannheim University of Applied Sciences | Ute Ihme
March 4,. 2013
8
Start der Entwicklungsumgebung
Starten von Eclipse
3. Programmierung vorbereiten
- Datei
- neu
- Klasse
wählen
Mannheim University of Applied Sciences | Ute Ihme
March 4,. 2013
9
Start der Entwicklungsumgebung
Starten von Eclipse
3. Programmierung vorbereiten
1. Klassennamen eingeben
2. Hier zusätzlich
public static void main
ankreuzen, wenn Klasse
main Methode enthalten
soll.
3. Fertigstellen drücken
Mannheim University of Applied Sciences | Ute Ihme
March 4,. 2013
10
Start der Entwicklungsumgebung
Starten von Eclipse
3. Programmierung vorbereiten
Nun kann das
Programmieren beginnen!
Mannheim University of Applied Sciences | Ute Ihme
March 4,. 2013
11
JAVA Code
Realisierung eines Pausenbefehls
1. Warten darauf, dass ein Knopf des NXT Steins gedrückt wird
Button.waitForAnyPress();
2. Nutzung eines leJos Pausen - Befehls
Delay.msDelay(2000);
Hochschule Mannheim| Ute Ihme
März 2013
12
JAVA Code
Displayanzeige
Syntax:
1. Nutzung des Standard JAVA Befehls
System.out.println("Hello World!")
2. Nutzung des lejos Befehls
a) für Strings LCD.drawString(“string", Spalte, Zeile))
LCD.drawString("Hello World 1", 0, 2);
b) Für Zahlen LCD.drawInt(Zahl, Spalte, Zeile);
LCD.drawInt(7, 0, 4);
3. Löschen des Displays
LCD.clearDisplay();
Hochschule Mannheim| Ute Ihme
März 2013
13
JAVA Code
Programmbeispiel: Bildschirmanzeige / Hello World
// Importieren von LejosBibliotheken
import lejos.hardware.Button;
import lejos.hardware.lcd.LCD;
import lejos.utility.Delay;
public class HelloWorld {
public static void main(String[] args) {
// TODO Automatisch generierter Methodenstub
// Nutzung der JAVA Syntax für die Ausgabe eines Strings
System.out.println("Hello World!");
Button.waitForAnyPress();
// Bildschirmlöschen
LCD.clear();
Hochschule Mannheim| Ute Ihme
März 2013
14
JAVA Code
Programmbeispiel: Bildschirmanzeige / Hello World
// Ausgabe eines Strings mit dem LejosBefehl
LCD.drawString("Hello", 0, 2);
// Warten für 2000ms
Delay.msDelay(2000);
// Ausgabe einer Zahl mit dem LejosBefehl
LCD.drawInt(7, 0, 4);
Delay.msDelay(2000);
}
}
Hochschule Mannheim| Ute Ihme
März 2013
15
JAVA Code
Übertragen von Programmen vom Rechner auf den EV3
Datei speichern bzw. alle Dateien speichern drücken
Hochschule Mannheim| Ute Ihme
März 2013
16
JAVA Code
Übertragen von Programmen vom Rechner auf den EV3
1.
2.
3.
• Ausführen als LeJOS EV3 Programm wählen,
zuvor NXT Stein einschalten
Hochschule Mannheim| Ute Ihme
März 2013
17
DAS LEGO® MINDSTORMS® System
Motoren
Servomotor
 Verfügt über integrierten
Rotationssensor
 misst Geschwindigkeit und Abstand
 Leitet Ergebnisse an NXT Stein
weiter
 Motor kann auf einen Grad genau
gesteuert werden
Quelle: Lego
 Kombinationen mehrerer Motoren
möglich
 arbeiten ggf. mit gleicher
Geschwindigkeit
Hochschule Mannheim| Ute Ihme
März 2013
18
JAVA Code
Die Klasse Motor – Allgemeine Befehle
Verwendung folgender import - Funktionen
import lejos.hardware.motor.Motor;
Wichtige Methoden
der Klasse Motor
Vorwärtsfahren:
Motor.A.forward();
Rückwärtsfahren:
Motor.A.backward();
Verwendung der Portbezeichnung
(A, B, C oder D),
An den der Sensor angeschlossen
Ist bzw. wird.
Anhalten:
Motor.A.stop();
oder
Motor.A.flt();
Hochschule Mannheim| Ute Ihme
März 2013
19
JAVA Code
Motorensteuerung für 2 Motoren
- zeitgesteuert Syntax:
Vorwärtsfahren:
Motor.A.forward();
Motor.B.forward();
Kurve
Motor.A.forward();
Motor.B.backward();
Rückwärtsfahren:
Motor.A.backward();
Motor.B.backward();
oder
Motor.A.backward();
Motor.B.forward();
Anhalten mit Bremsen:
Motor.A.stop();
Motor.B.stop();
Mannheim University of Applied Sciences | Ute Ihme
Anhalten mit Auslaufen:
Motor.A.flt();
Motor.B.flt();
March 4,. 2013
20
JAVA Code
Motorensteuerung import lejos.hardware.motor.Motor;
import lejos.utility.Delay;
- zeitgesteuert Programmbeispiel:
public class Motoren {
public static void main(String[] args) {
// Vorwärtsfahren
Motor.A.forward();
Motor.B.forward();
// Zeit in ms
Delay.msDelay(2000);
Motor.A.stop();
Motor.B.stop();
}
}
Mannheim University of Applied Sciences | Ute Ihme
March 4,. 2013
21
JAVA Code
Motorensteuerung - zeitgesteuert Programmelemente:
// Rückwärtsfahren
Motor.A.backward();
Motor.B.backward();
// Zeit in ms
Delay.msDelay(2000);
Motor.A.stop();
Motor.B.stop();
Mannheim University of Applied Sciences | Ute Ihme
// Kurve mit einem Motor
Motor.A.forward();
// Zeit in ms
Delay.msDelay(2000);
Motor.A.stop();
//Kurve mit 2 Motoren
Motor.A.forward();
Motor.B.backward();
// Zeit in ms
Delay.msDelay(2000);
Motor.A.stop();
Motor.B.stop();
March
März
4,. 2013
22
JAVA Code
Arbeiten mit Sensoren
Verwendung folgender import - Funktionen
import lejos.hardware.port.SensorPort;
import lejos.hardware.sensor.*;
import lejos.robotics.*;
Hinweis:
Die Initialisierung der Sensoren und die Abfrage der Messwerte erfolgt
bei allen Sensoren nach dem gleichen Prinzip.
Wichtig ist, dass stets der Port (S1, S2, S3 bzw. S4) in der Initialisierung
verwendet wird, an dem der Sensor tatsächlich angeschlossen ist.
Mannheim University of Applied Sciences | Ute Ihme
March 4,. 2013
23
DAS LEGO® MINDSTORMS® System
Berührungssensor / Tastsensor
• Abfrage, ob Sensor gedrückt
• Werte des Sensors
• 0: Sensor nicht gedrückt
• 1: Sensor gedrückt
Hochschule Mannheim| Ute Ihme
März 2013
24
JAVA Code
Berührungssensor / Tastsensor
Initialisierung:
SensorModes sensor1 = new EV3TouchSensor(SensorPort.S1);
SampleProvider touch = sensor1.getMode("Touch");
Abfrage der Messwerte:
Jeweiligen Anschlußport
angeben (S1, S2, S3 oder S4)
// Initialisierung der Messwerte
float pressed =0;
float sample[] = new float[touch.sampleSize()];
// Abfrage der Sensorwerte
touch.fetchSample(sample, 0);
pressed = sample[0];
Mannheim University of Applied Sciences | Ute Ihme
March 4,. 2013
25
JAVA Code
Berührungssensor / Tastsensor
Programmbeispiel:
import
import
import
import
lejos.hardware.motor.Motor;
lejos.hardware.port.SensorPort;
lejos.hardware.sensor.*;
lejos.robotics.*;
public class Tastsensor {
public static void main(String[] args) {
// TODO Automatisch generierter Methodenstub
- Programmcode nächste Folien
}
}
Mannheim University of Applied Sciences | Ute Ihme
March
März
4,. 2013
26
JAVA Code
Berührungssensor / Tastsensor
Programmcode für public static void main:
// Initialisierung des Sensors
SensorModes sensor1 = new EV3TouchSensor(SensorPort.S1);
SampleProvider touch = sensor1.getMode("Touch");
// Initialisierung der Messwerte
float pressed =0;
float sample[] = new float[touch.sampleSize()];
Mannheim University of Applied Sciences | Ute Ihme
March 4,. 2013
27
JAVA Code Berührungssensor / Tastsensor
Programmcode für public static void main:
// Einschalten der Motoren
Motor.A.forward();
Motor.B.forward();
// Abfrage der Sensorwerte bis Sensor gedrückt wird
while(pressed ==0){
touch.fetchSample(sample, 0);
pressed = sample[0];
}
// Ausschalten der Motoren
Motor.A.stop();
Motor.B.stop();
Mannheim University of Applied Sciences | Ute Ihme
March 4,. 2013
28
DAS LEGO® MINDSTORMS® System
Ultraschallsensor
• Sensor sendet Ultraschall aus
• Schall wird von Hindernis reflektiert
• Reflektierter Schall wird vom Empfänger
registriert
• Aus Laufzeit des Schalls kann auf die
Entfernung geschlussfolgert werden
• Messwerte werden in Meter ausgegeben
Hochschule Mannheim| Ute Ihme
März 2013
29
JAVA Code
Ultraschallsensor
Initialisierung:
SensorModes sensor4 = new EV3UltrasonicSensor(SensorPort.S4);
SampleProvider us = sensor4.getMode("Distance");
Jeweiligen Anschlußport
angeben (S1, S2, S3 oder S4)
Abfrage der Messwerte:
// Initialisierung der Messwerte
float distanz=10;
float sample[] = new float[us.sampleSize()];
// Abfrage der Messwerte
us.fetchSample(sample, 0);
distanz = sample[0];
Mannheim University of Applied Sciences | Ute Ihme
March 4,. 2013
30
JAVA Code
Ultraschallsensor
Programmbeispiel:
import
import
import
import
lejos.hardware.motor.Motor;
lejos.hardware.port.SensorPort;
lejos.hardware.sensor.*;
lejos.robotics.*;
public class Ultraschall {
public static void main(String[] args) {
// TODO Automatisch generierter Methodenstub
- Programmcode nächste Folien
}
}
Hochschule Mannheim| Ute Ihme
März 2013
31
JAVA Code
Ultraschallsensor
Programmcode für public static void main:
// Initialisierung Ultraschallsensor
SensorModes sensor4 = new EV3UltrasonicSensor(SensorPort.S4);
SampleProvider us = sensor4.getMode("Distance");
// Initialisierung der Messwerte
float distanz=10;
float sample[] = new float[us.sampleSize()];
// Einschalten der Motoren
Motor.A.forward();
Motor.B.forward();
Hochschule Mannheim| Ute Ihme
März 2013
32
JAVA Code
Ultraschallsensor
Programmcode für public static void main:
// Abfrage der Messwerte,
// bis eine Entfernung unterschritten ist
while(distanz >=0.05){
us.fetchSample(sample, 0);
distanz = sample[0];
}
// Ausschalten der Motoren
Motor.A.stop();
Motor.B.stop();
Hochschule Mannheim| Ute Ihme
März 2013
33
DAS LEGO® MINDSTORMS® System
Colorsensor
• Verfügt über mehrere Moden, z. B.
 Bestimmung des Farbwertes (ColorID)
 Bestimmung der reflektierten Helligkeit
• Zur Ausleuchtung kann eine LED eingeschaltet
werden
Hochschule Mannheim| Ute Ihme
März 2013
34
Wert Farbe
DAS LEGO® MINDSTORMS® System
Colorsensor – ColorID Mode
• Bestimmung der Farbe
• Jede Farbe hat einen Wert
• Werte für EV3 Colorsensor
Hochschule Mannheim| Ute Ihme
-1
keine
0
Rot
1
Grün
2
Blau
3
Gelb
4
Magenta
5
Orange
6
Weiß
7
Schwarz
8
Pink
9
Grau
10
Hellgrau
11
Dunkelgrau
12
Zyan
13
Braun
März 2013
35
JAVA Code
Colorsensor – ColorID Mode
Initialisierung:
SensorModes colorSensor = new EV3ColorSensor(SensorPort.S1);
SampleProvider col = colorSensor.getMode("ColorID");
Jeweiligen Anschlußport
angeben (S1, S2, S3 oder S4)
Abfrage der Messwerte:
// Intialisierung der Messwerte
int sampleSize = colorSensor.sampleSize();
float[] sample = new float[sampleSize];
int farbe;
// Abfrage der Messwerte
col.fetchSample(sample, 0);
// Umrechung float in integer
farbe = (int)sample[0];
Hochschule Mannheim| Ute Ihme
März 2013
37
JAVA Code
Colorsensor – ColorID Mode
Programmbeispiel:
import
import
import
import
import
import
import
lejos.hardware.Button;
lejos.hardware.lcd.LCD;
lejos.hardware.motor.*;
lejos.hardware.port.SensorPort;
lejos.hardware.sensor.*;
lejos.robotics.*;
lejos.utility.Delay;
public class EVColorFarbe {
public static void main(String[] args) {
// TODO Automatisch generierter Methodenstub
- Programmcode nächste Folien
}
}Hochschule Mannheim| Ute Ihme
März 2013
38
JAVA Code Colorsensor – ColorID Mode
Programmcode für public static void main:
//Initialisierung
SensorModes colorSensor = new
EV3ColorSensor(SensorPort.S1);
SampleProvider col = colorSensor.getMode("ColorID");
// Intialisierung der Messwerte
int sampleSize = colorSensor.sampleSize();
float[] sample = new float[sampleSize];
int farbe;
Hochschule Mannheim| Ute Ihme
März 2013
39
JAVA Code Colorsensor – ColorID Mode
Programmcode für public static void main:
while(true)
{
// Abfrage der Messwerte
col.fetchSample(sample, 0);
// Umrechung float in integer
farbe = (int)sample[0];
LCD.drawInt(farbe, 3, 3);
Button.waitForAnyPress();
LCD.clearDisplay();
}
Hochschule Mannheim| Ute Ihme
März 2013
40
Neue Inhalte
Für das Labor II werden folgende neue Inhalte benötigt
- Geschwindigkeitsfestlegung für Motoren
- Nutzung des NXT - Lichtsensors
Hochschule Mannheim| Ute Ihme
März 2013
41
Aufgabe
Der Roboter soll einer Linie mit Hilfe von
zwei NXT Lichtsensoren
folgen.
Einem auf der Linie stehenden Hindernis soll
der Roboter ausweichen. Dieses ist mit
einem Ultraschallsensor zu detektieren.
Der Roboter soll selbstständig auf der schwarzen
Kachel am Ende der Linie anhalten.
Hochschule Mannheim| Ute Ihme
März 2013
42
DAS LEGO® MINDSTORMS® System
NXT Lichtsensor
• Messung der Helligkeit mittels Fotodiode
• Helle Fläche reflektiert mehr Licht als dunkle
• Messbereich:
• 0: dunkel
• 100: hell
• Zur Ausleuchtung kann eine rote LED eingeschaltet
werden
Hochschule Mannheim| Ute Ihme
März 2013
43
JAVA Code
NXT Lichtsensor
Initialisierung für Nutzung der LED:
SensorModes sensor1 = new NXTLightSensor(SensorPort.S1);
SampleProvider licht1 = sensor1.getMode("Red");
Abfrage der Messwerte:
Jeweiligen Anschlußport
angeben (S1, S2, S3 oder S4)
//Intialisierung der Messwerte
float wert_licht1;
float sample[] = new float[licht1.sampleSize()];
//Abfrage der Messwerte
licht1.fetchSample(sample, 0);
wert_licht1=sample[0]*100;
Hochschule Mannheim| Ute Ihme
März 2013
44
JAVA Code
NXT Lichtsensor
Programmbeispiel:
import
import
import
import
import
import
lejos.hardware.lcd.LCD;
lejos.hardware.motor.Motor;
lejos.hardware.port.*;
lejos.hardware.sensor.*;
lejos.robotics.*;
lejos.utility.Delay;
public class Anzeige {
public static void main(String[] args) {
// TODO Automatisch generierter Methodenstub
- Programmcode nächste Folien
}
}
Hochschule Mannheim| Ute Ihme
März 2013
45
JAVA Code
NXT Lichtsensor
Programmcode für public static void main:
//Initialisierung
SensorModes sensor2 = new NXTLightSensor(SensorPort.S2);
SampleProvider licht1 = sensor2.getMode("Red");
float sample[] = new float[licht1.sampleSize()];
float wert_licht1;
while(true){
//Abfrage des Messwertes
licht1.fetchSample(sample, 0);
//Umrechnung des Messwertes
wert_licht1=sample[0]*100;
//Anzeige des umgerechneten Wertes
LCD.drawInt((int)wert_licht1, 0, 1);
Hochschule Mannheim| Ute Ihme
März 2013
46
JAVA Code
NXT Lichtsensor
Programmcode für public static void main:
//Abfrage ob Hell oder Dunkel
if(wert_licht1<50){
LCD.drawString("schwarz", 1, 3);
}
else{
LCD.drawString("weiß", 1, 3);
}
Delay.msDelay(1000);
}
Hochschule Mannheim| Ute Ihme
März 2013
47
JAVA Code
Setzen eines Geschwindigkeitswertes für die
Motoren
Motor.A.setSpeed(Geschwindigkeit);
Geschwindigkeit
- Angabe in Grad/sec
- Maximaler Wert ca. Batteriespannung*100
- Daher Maximum bei ca. 720
Beispiel:
Motor.A.setSpeed(400);
Hochschule Mannheim| Ute Ihme
März 2013
48
JAVA Code
Abfrage mehrerer Sensoren
// Initialisierung von Variablen
float wert_licht1;
float wert_licht2;
// Initialisierung der Sensoren
SensorModes sensor1 = new NXTLightSensor(SensorPort.S1);
SensorModes sensor2 = new NXTLightSensor(SensorPort.S2);
SampleProvider licht1 = sensor1.getMode("Red");
float sample[] = new float[licht1.sampleSize()];
SampleProvider licht2 = sensor2.getMode("Red");
float sample1[] = new float[licht2.sampleSize()];
Hochschule Mannheim| Ute Ihme
März 2013
49
JAVA Code
Abfrage mehrerer Sensoren
// Abfrage der Sensoren
licht1.fetchSample(sample, 0);
licht2.fetchSample(sample1, 0);
// Anzeige der Werte und Casten der Werte auf integer
LCD.drawInt((int) wert_licht1, 0, 1);
LCD.drawInt((int) wert_licht2, 0, 2);
Hochschule Mannheim| Ute Ihme
März 2013
50
Herunterladen