Hallo, hätte jemand ein Code für eine Hinderniserkennung mit Servo?

Rc1515

12.06.23 10:32

Hallo RC1515,


programmierst du dein Joy-Car über MakeCode? Hier kannst du in der Joy-Car Erweiterung im Bereich "Smart-Funktionen" die Intelligente Hinderniserkennung auswählen. Diese kombiniert die Hinderniserkennung mit dem Servomotor. 🙂


Liebe Grüße
Jens

Jens

13.06.23 08:45

Hallo Jens,


danke für deine Antwort. Ja ich programmiere über MakeCode. Da ich noch Anfänger bin komme ich noch nicht ganz zurecht. Hättest du vielleicht ein fertiges Programm dazu?

Rc1515

13.06.23 10:36

Hallo RC1515,


natürlich, gerne helfe ich dir weiter. 🙂


Probiere es mal mit dem folgenden Code. Das wäre die simpelste Möglichkeit:


basic.forever(function() {
if (JoyCar.collisionDetection() == 0) {
JoyCar.drive(FRDirection.Forward, 100)
} else {
JoyCar.turn(FRDirection.Reverse, LRDirection.Left, 60, 1)
}
})

Das ganze entspricht dem folgenden in der Blockansicht:



Die Intelligente Hinderniserkennung bewegt den auf dem Servomotor montierten Ultraschallsensor automatisch und gibt als Wert eine 0 zurück, wenn kein Hindernis erkannt wurde. Eine 1 bedeutet, dass auf der linken Seite ein Hindernis erkannt wurde, eine 2, dass sich in der Mitte ein Hindernis befindet und eine 3 auf der rechten Seite.


Auf diese Weise kannst du auf Hindernisse in verschiedenen Positionen reagieren. Hilft dir das weiter? 🙂


Liebe Grüße
Jens

Jens

14.06.23 08:33

Danke für deine Antwort Jens . Leider bekomme ich das immer noch nicht hin. Könntest du mir vielleicht das komplette Programm schicken? Ich möchte das er genau so wie auf eurem YouTube Video (Intelligente Hindernis- [&] Kollisionserkennung via Ultraschall) fährt.

Rc1515

14.06.23 10:34

Wo genau hängt es denn bei dir?


Du könntest es nochmal mit diesem Code versuchen. 🙂


let collisionDetection = 0
basic.forever(function () {
collisionDetection = JoyCar.collisionDetection()
if (collisionDetection == 0) {
JoyCar.drive(FRDirection.Forward, 100)
} else {
JoyCar.stop(StopIntensity.Intense)
if (collisionDetection == 1) {
JoyCar.turn(FRDirection.Reverse, LRDirection.Left, 50, 0)
basic.pause(1000)
}
else if(collisionDetection == 2) {
JoyCar.turn(FRDirection.Reverse, LRDirection.Left, 50, 0)
basic.pause(2000)
}
else if (collisionDetection == 3) {
JoyCar.turn(FRDirection.Reverse, LRDirection.Right, 50, 0)
basic.pause(1000)
}
}
})

Liebe Grüße
Jens

Jens

15.06.23 08:37

Mein Problem ist das er immer gegen ein Hindernis fährt und danach erst zurück.


[nbsp]

Rc1515

16.06.23 07:42

Hallo RC1515,


dadurch, dass der Ultraschallsensor natürlich immer alle Richtungen abfahren und prüfen muss, kann es natürlich zu Verzögerungen bei der Erkennung kommen.
Hierfür kannst du noch zusätzlich die verbauten Hindernissensoren nutzen und so besser auf sich nähernde Hindernisse reagieren. 🙂


Liebe Grüße
Jens

Jens

19.06.23 08:35