HSEV3
16.04.2019, 10:20

LEGO EV3 - Programm für Greifarm

Hallo liebe Forenmitglieder,

in Form einer Schularbeit haben wir die Aufgabe einen LEGO EV3 mithilfe von Java zu programmieren.
Unser Projekt soll später ein Greifarm werden. Da unser Lehrer derzeit krank ist und wir unser Projekt zeitnah abgeben müssen brauchen wir eure Unterstützung.
Verwendet haben wir folgende Sensoren und Motoren:
Großer Motor auf A
Großer Motor auf B
Mittlerer Motor auf C
Farbsensor auf 1
Drucksensor auf 2

Hat schon einmal jemand von euch solch ein Programm geschrieben und könnte uns helfen?

Vielen Dank für eure Unterstützung



9 vorhergehende Beiträge sind ausgeblendet

Alle anzeigen Immer alle anzeigen Beitragsbaum

HSEV3
07.05.2019, 09:55

Als Antwort auf den Beitrag von Lok24

Re: LEGO EV3 - Programm für Greifarm

Hallo,

ja das Problem mit dem Farbsensor haben wir auch schon erkannt, wir werden ihn noch umbauen und zwar direkt an den Greifer

Welchen "Ablauf" gibt es für den Greifer?
1.) Greifer auf
2.) Arm nach unten
3.) Greifer zu
4.) Arm hoch
5.) Arm zur Seite (über den Korb)
6.) Greifer auf (Gegenstand in den Korb fallen lassen)
7.) In Ausgangsposition zurückfahren

Das was wir schreiben ist die Vorgabe unseres Lehrers.

Grüße

HSEV3-Team



Lok24
07.05.2019, 09:59

Als Antwort auf den Beitrag von HSEV3

Editiert von
Lok24
07.05.2019, 10:00

Re: LEGO EV3 - Programm für Greifarm

Moin,

Ah, der Lehrer.

Nun, das wird so nicht funktionieren

Bitte: denkt nochmal drüber nach, was der Sensor im Original für eine äußerst wichtige Funktion hat.
Dann müssen wir uns überlegen, wie wir das mit den Anforderungen des Lehrers in Einklang bringen.

Nur wenn ihr wirklich verstanden habt, was das Ding mechanisch macht könnt ihr ein gutes Programm schreiben.



HSEV3
07.05.2019, 10:06

Als Antwort auf den Beitrag von Lok24

Re: LEGO EV3 - Programm für Greifarm

Hallo,

leider wissen wir nicht was der Sensor für eine Funktion hat, kannst du uns dieses bitte mitteilen?

Die Vorgabe unseres Lehrers ist das der Roboter nachher funktioniert.



Lok24
07.05.2019, 10:26

Als Antwort auf den Beitrag von HSEV3

Editiert von
Lok24
07.05.2019, 10:28

Re: LEGO EV3 - Programm für Greifarm

Hallo,

so, es wird ja Zeit mal was zu programmieren.
Wie wir gleich sehen werden bekommt das Programm durch die geplante Änderung auch auch plötzlich eine andere Programmstruktur.

Wir werden also mal mit dem Drehen des Arms anfangen.

Generell kann man die Motoren in verschiedenen Modi betreiben:
Drehen bis Stop-Befehl kommt....
Drehen für n sec ....
Drehen der Achse um x°

So: Batterien einlegen, der Roboter steht irgendwo, drehen um 847°, das kann das komplette Ding zerlegen, weil es nicht aufhört, wenn es am Ende der mechanisch vorgegeben Möglichkeiten ist.
Ebenso bei x Sekunden

Wir müssen also beim Einschalten(=Starten des Programms) langsam bis zum Anschlag drehen.
Das kommt also in den Konstruktor.

Wir bauen uns also eine Klasse, die Drehmotor und Touch-Sensor beinhaltet. Als Parameter übergeben wir ... Was meint ihr? ich komme auf vier Parameter .
Außerdem hat sie einen Konstruktor und eine Methode "drehe um x°.
Und merkt sich die vier Parameter in Variablen.

public class xxx {

public xxx() { // Konstruktor
Drehe Motor bis Schalter geschlossen wird
merke die Übergeben Parameter
}

Public yyyy
{
drehe um motor um x °
}
}

Am Ende sollte ihr eine Klasse haben, deren Konstruktor vier(?) Parameter liest, und ein Main-Programm, das aus zwei Zeilen besteht:

ein neues Objekt der Klasse erzeugen
mit dem Objekt eine Drehung um x° ausführen.

Ihr könnt den Code hier posten.
Und bevor ihr den EV3 einschaltet:
Was müsst ihr bei den Parametern bedenken (Werte)?
Und immer den Finger auf dem Knopf links oben haben, um das Programm sofort zu unterbrechen.


Grüße

Werner



Lok24
07.05.2019, 10:33

Als Antwort auf den Beitrag von HSEV3

Editiert von
Lok24
07.05.2019, 10:36

Re: LEGO EV3 - Programm für Greifarm

Aloha,

zusammen mit dem weißen Winkel oben in dem Arm (das Teil bei 64):
Der schiebt sich immer näher an den Sensor und meldet wenn der Arm seinen oberen Punkt erreicht hat, er sorgt also, wie der Touch-Sensor beim Drehmotor, für eine Normierung der Bewegung des Arms!
Er wird hier nicht als Farb-, sondern als Abstandsensor eingesetzt.
Das ist nicht meine Interpetation, es gibt zu dem Modell auch ein Programm von LEGO, da kann man das ablesen.

Wie sollte man sonst wissen, wo der Arm gerade steht?

Auf dem Viedo sieht man das ganz gut.

Da denken wir nachher drüber nach.
Baut erstmal die Klasse zum Drehen, dann kommen noch zwei, aber das ist Copy & Paste



HSEV3
07.05.2019, 10:41

Als Antwort auf den Beitrag von Lok24

Re: LEGO EV3 - Programm für Greifarm

Hallo,

dann hier mal unser Versuch.

package org.lejos.ev3.projects.gruppe4;
import java.awt.Color;

import lejos.hardware.BrickFinder;
import lejos.hardware.Button;
import lejos.hardware.Sound;
import lejos.hardware.lcd.Font;
import lejos.hardware.lcd.GraphicsLCD;
import lejos.utility.Delay;
import lejos.hardware.motor.*;
import lejos.hardware.port.MotorPort;
import lejos.hardware.port.SensorPort;
import lejos.hardware.port.UARTPort;
import lejos.hardware.sensor.EV3ColorSensor;
import lejos.robotics.RegulatedMotor;

public class EV3HelloWorld
{
public static void main(String[] args)
{
RegulatedMotor motor3 = new EV3LargeRegulatedMotor(MotorPort.A); //Hoch- und Runter
RegulatedMotor motor4 = new EV3LargeRegulatedMotor(MotorPort.D); //links rechts
EV3TouchSensor sensor1 = new EV3TouchSensor (SensorPort.S1); //Farbsensor 1
motor3.backward();
Delay.msDelay(1000);
motor4.backward();
Delay.msDelay(150);
motor3.stop();
motor4.stop();
Delay.msDelay(1000);
motor4.forward();
Delay.msDelay(200);
motor3.forward();
Delay.msDelay(1250);
motor3.close();
motor4.close();

}
}



Mit diesem Code lässt sich der Greifarm bereits drehen und auf- und abbewegen.
Leider wissen wir nicht wie wir den Sensor ansteuern können.



Lok24
07.05.2019, 10:56

Als Antwort auf den Beitrag von HSEV3

Editiert von
Lok24
07.05.2019, 11:23

Re: LEGO EV3 - Programm für Greifarm

Hallo,

Danke.

Aber elegant ist das nicht
Schreibt bitte eine Klasse "Drehen" für den Drehmotor+Touch-Sensor.

Und mit dem Delay bewegt ihr den Motor für ein bestimmte Zeit, die schwankt aber evtl ja nach Batteriestand?!?

Daher:

Im Konstuktor der Klasse "Drehen" dreht ihr den Motor langsam(!) bis der Touch Sensor anspricht.
Mit der Methode "Drehen.Grad" könnt ihr den dann drehen.

Ich kenne mich leider in Java so gar nicht aus, aber das geht ungefähr so:

import lejos.nxt.SensorPort;
import lejos.nxt.TouchSensor;

public class TouchTest {
public static void main(String[] args) throws Exception {
TouchSensor touch = new TouchSensor(SensorPort.S1);
--> Motor starten
while (!touch.isPressed()) { // prüfen ob gedrückt
// try again
}
--> Motor stoppen
}


}

nee, das ist für den NXT.
Bei EV3 ist das anders.



HSEV3
07.05.2019, 11:23

Als Antwort auf den Beitrag von Lok24

Re: LEGO EV3 - Programm für Greifarm

Hallo,

stimmt das dann so?



import lejos.hardware.sensor.*;
public class Drehen
{
public static void main(String[] args)
{
RegulatedMotor motor3 = new EV3LargeRegulatedMotor(MotorPort.A); //Hoch- und Runter
RegulatedMotor motor4 = new EV3LargeRegulatedMotor(MotorPort.D); //links rechts
EV3ColorSensor sensor1 = new EV3ColorSensor (SensorPort.S1); //TouchSensor


motor3.setSpeed(50);
motor4.setSpeed(50);

while (!sensor1.isPressed())
{
motor3.forward();
motor4.forward();
}

motor3.close();
motor4.close();

}
}



Lok24
07.05.2019, 11:38

Als Antwort auf den Beitrag von HSEV3

Editiert von
Lok24
07.05.2019, 11:45

Re: LEGO EV3 - Hilfe bei LEJOS/JAVA dringend gesucht

Hallo,

sorry, mein Beispiel war für NXT.

Ich denke es muss so ähnlich aussehen:


public class Drehen
{
public static void Drehen(String[] args)
{

RegulatedMotor motor4 = new EV3LargeRegulatedMotor(MotorPort.D);
EV3TouchSensor touchSensor = new EV3TouchSensor(SensorPort.S1);

SensorMode touch = touchSensor.getTouchMode();
float[] sample = new float[touch.sampleSize()];

// Start

motor4.setSpeed(50);
motor4.forward();

do{
touch.fetchSample(sample, 0);
} while (sample[0] == 0);

motor4.stop();

}
}

Das ist nur die Klasse "Drehen"!
Die läuft los, wenn man in Main (hier nicht gezeigt) ein Objekt der Klasse "Drehen" erzeugt.
Ein Konstruktor ist es weil die Methode genauso(!) heißt wie die Klasse.

Und das ruft das auf:
public class MainClass {
public static void main(String[] args){
Drehen D=new Drehen();
// d.Grad(90) <- da muss noch progarmmiert werden
}
}



Lok24
07.05.2019, 12:43

Als Antwort auf den Beitrag von Lok24

Editiert von
Lok24
07.05.2019, 12:51

Re: LEGO EV3 - Programm für Greifarm

Die Argumente müssen da noch weggemacht oder angepasst werden....
Sie müssen natürlich in Main und Drehen übereinstimmen,
Ich würde da die Geschwindigkeit mitgeben.



Gesamter Thread: