Schrittmotor mit LDR steuern - Sortierroboter

Hallo,

Ich stehe vor dem Problem, dass ich einen Sortierroboter programmieren muss. Dabei will ich den Greifarm mit einem Schrittmotor nach links und rechts bewegen. Der LDR soll dabei erkennen ob es sich um eine weiße oder eine schwarze Kugel handelt und diese dann sortieren. Kann mir hierbei jemand bei der Programmierung helfen?

Liebe Grüße

Hier gibts eine Hausübung mit ähnlichem Wortlaut:

Hallo,
hast Du , Ihr denn schon mal probiert ob der LDR eine weiße von einer schwarzen Kugel schnell genug unterscheiden kann.

Heinz

Probiert ja , es wird mir allerdings immer wieder ein Fehler angezeigt. Hätte jemand zufällig eine gute und passende Programmierung für diesen Vorgang

Silas

Das wäre der genaue Auftrag

Hallo,
ich hab noch nicht verstanden warum du zur Erkennung mit dem LDR einen Sketch brauchst und was für eine Fehlermeldung Du wann , womit bekommst ?

Ihr könntet es mal mit einem LIniensensor versuchen
z.B ARD LINE FINDER1: Arduino - IR-Linienfinder bei reichelt elektronik

der liefert ein digitales Signal und damit kann man einen Servo sicher schnell genug verfahren um die Bälle zu vereinzeln.
Aber das ist Euer Projekt, macht was draus :wink:

Heinz

Dass wir einen LDR verwenden ist bei uns leider vorgeschrieben. Ich bräuchte einfach bestenfalls einen Code für die Farberkennung des Balles und anschließend einen Code für das Ansteuern des Schrittmotor 5V 1/64 (28BYJ-48).

Liebe Grüße

Na ja ich zweifele noch. Wie man einen LDR anschließen und einlesen kann hängt von dem LDR ab. Es gibt fertige LDR Module für Arduino mit einem passende Widerstand als Spannungsteiler. Bei einen nackten LDR muss man halt den passenden Widerstand dazu nehmen. Damit ergibt sich bei Hell oder Dunkel eine andere Spannung am Ausgang des Teilers. Die kann man mit einem Analogeingang des Arduino messen. Mittels eines Schwellwertes kann man dann den Schrittmotor auf eine festgelegte Position fahren um die Bälle zu vereinzeln. Nach einer gewissen Zeit fährt der Motor dann wieder in die Startposition.
In der Stepper lib gibt es Beispiele wie man den Motor verfahren kann

dann solltet Ihr versuchen den Programmablauf verbal zu beschreiben, Wenn man das vernünftig macht kann man aus jeder Textzeile fast eine Codezeile schreiben, und Zack fertig ist das Programm.

Hi @silas_fabian ,

es dauert nicht mehr lange, dann kann man solche Aufgaben an chat gpt abgeben... :wink:

Dann müssen sich die Ausbilder etwas Neues ausdenken, um dafür zu sorgen, dass die Auszubildenden Kenntnisse und Fähigkeiten selbst entwickeln.

Im Ernst: Wie wäre es, wenn Du (oder Ihr) Euch erst einmal selbst ein paar Gedanken macht, anstatt gleich die komplette Lösung abgreifen zu wollen?

Wir helfen gerne ...
ec2021

Selbst die Aufgabenstellung bei ChatGpt einstellen und wenn diese Lösung kommt, die mit 6 setzen bewerten.
Die Fragenden sollten auch davon ausgehen, dass ihre Lehrer/Dozenten/... in den einschlägigen Foren mitlesen und dadurch wissen, welche Lösungen nicht auf dem Mist des Prüflings gewachsen sind. Wenn sie dann nicht klar als Fremdleistung deklariert sind, ist das Betrug ==> durchgefallen.

Gruß Tommy

Wenn ich einen weißen Ball anleuchte, kommt wesentlich mehr Licht zurück, als bei einem Schwarzen. Diese unterschiedliche Lichtintensität muß ich nur noch mit einem LDR erkennen. Was soll das werden, wenn man auschließlich das Hirn anderer benutzt? Das was ich hier schreiben ist erste Klasse logisches denken. Warum probiert ihr nicht selber so einfache Aufgaben zu lösen. Wie man Schrittmotoren ansteuert ist alleine in dem Forum hier, schon 1000x erklärt. Im Netz gibts wahrscheinlich ein paar Millionen Erkärungen. Die immer aufs gleiche rausgehen. Die Lib die bei uns wohl am meistens beschrieben ist, ist MobaTools.
VCC 5V ------LDR------A0Pin--------2kOhm-------GND
Den Analogpin auslesen ist jetzt auch nicht sooo schwer. Die Ausgelesenen Werte bei jedem auslesen mit Serialprintln() auf den PC ausgeben, und die ausgegebenen Werte anschauen, wenn ein weißer Ball im Licht steht und wenn ein schwarzer Ball im LIcht steht.
Eine LED auf den Ball richten, den LDR auch parallel drauf richten.
Schwarz verschluckt das Licht. weiß reflektiert es. Wie gesagt, Logik aus der 1. Klasse, oder sogar Kindergarten.

Wir haben uns tatsächlich schon sehr lange damit beschäftigt aber kommen leider nicht weiter . Aus diesem Grund würde ich eure Hilfe sehr gut gebrauchen können

Hallo,
Würde dieser Code hier funktionieren ?


#include <Stepper.h> //Schrittmotor-Library einbinden

const int stepsPerRevolution = 64; //Schritte pro Umdrehung des Schrittmotors
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11); //Schrittmotor am Pin 8, 9, 10 und 11 anschließen

const int sensorPin = A0; //Analogeingangspin für den Farbsensor
const int blackThreshold = 800; //Schwellenwert für den schwarzen Ball
const int whiteThreshold = 400; //Schwellenwert für den weißen Ball

void setup() {
  Serial.begin(9600); //Serielle Verbindung öffnen
  myStepper.setSpeed(20); //Schrittmotor-Geschwindigkeit auf 20 Umdrehungen pro Minute festlegen
}

void loop() {
  int sensorValue = analogRead(sensorPin); //Farbsensor auslesen
  Serial.print("Sensorwert: ");
  Serial.println(sensorValue);

  if (sensorValue > blackThreshold) { //Wenn der Ball schwarz ist
    myStepper.step(stepsPerRevolution / 2); //Schrittmotor um 180 Grad drehen (halbe Umdrehung)
    delay(1000); //Eine Sekunde warten
    myStepper.step(-stepsPerRevolution / 2); //Schrittmotor um -180 Grad zurückdrehen
  }
  else if (sensorValue < whiteThreshold) { //Wenn der Ball weiß ist
    myStepper.step(-stepsPerRevolution / 2); //Schrittmotor um -180 Grad drehen
    delay(1000); //Eine Sekunde warten
    myStepper.step(stepsPerRevolution / 2); //Schrittmotor um 180 Grad zurückdrehen
  }
}

So, das ist schon mal der richtige Ansatz, um hier im Forum Unterstützung zu bekommen!!!

Da ist sicher schon mal ein Kern erkennbar:

  • Auslesen des Sensors
  • Auswerten des Ergebnisses:
    • Falls der Wert "Dunkel" aussagt,
      • den Schrittmotor mit einem positiven Wert ansteuern,
      • 1 Sekunde warten
    • Falls der Wert "Hell" aussagt,
      • den Schrittmotor mit einem negativen Wert ansteuern
      • 1 Sekunde warten
    • Falls der Wert zwischen den beiden Grenzen liegt, passiert nichts (der Stepper-Arm bleibt dort, wo er vorher war
  • Weiter mit "Auslesen des Sensors"

Das sieht (formal) ja nicht ganz schlecht aus ...

Ohne den mechanischen Aufbau zu kennen, drängen sich folgende Fragen auf:

  • In welcher Grundstellung befindet sich der Stepper-Arm beim Start des Controllers?
  • Wo/wie muss er stehen, damit ein Ball sicher mitgenommen wird?
  • Wie werden die Bälle separiert (vereinzelt), so dass
    • deren Farbe sicher gemessen werden kann
    • der Ball durch den Sortier-(Stepper)-Arm zur richtigen Richtung gelenkt wird
  • Erfolgen Messung und/oder Sortierung mit einem "quasi-statischen" oder mit einem sich bewegenden Ball?
  • Braucht es zum Sortieren eine 180°-Bewegung des Armes oder genügt ein kleinerer Richtungsgeber (Prinzip "Weiche" bei der Eisenbahn)?

Davon hängt es ab, wie der Sketch weiter zu entwickeln ist.

Es empfiehlt sich im Übrigen, die einzelnen Funktionen zunächst auch getrennt zu programmieren und - wenn sie sicher funktionieren - zusammenzuführen (zu integrieren).

P.S.: Wann müsst Ihr denn Euer Ergebnis vorstellen?

Gruß
ec2021

Keine Ahnung.
Hängt davon ab, wie der LDR angeschlossen ist, ob ein weißer Ball einen höheren oder einen niedrigeren analoRead Wert liefert.

Kann auch ein Wert zwischen 400 und 800 gemessen werden? Aktuell wird einfach solange gemessen, bis der Wert unter 400 oder über 800 ist.

Nachdem der Stepper zurück ist, geht das Ritsch-Ratsch evtl. sofort ohne Pause wieder los. Ist das OK? Ist sicher, dass analoRead einen Mittelwert liefert bis der nächste Ball bereit liegt? (Zweifel)

Trennt die Aufgabe in zwei Teile

  • Ball erkennen
  • per Stepper Ball verschieben.

Hallo,
anbei sende ich dir ein Bild von der Grundplatte. Dort kannst du erkennen, wo die weißen und die schwarzen Bälle jeweils sortiert werden sollen. Außerdem kannst du den Motor erkenne. Du musst es dir jetzt so vorstellen, dass ein Arm von dem Motor aus geht, der den Ball vom Start in das jeweilige Loch schiebt. An diesem Arm ist dann auch der LDR verbaut.

Aha, interessantes Design ...

  • Der zu sortierende Ball wird demnach jeweils einzeln (manuell?) in der Bohrung "Start" platziert?
  • Ist das Design eine Vorgabe oder habt Ihr Euch das ausgedacht?

ec2021

Das Design ist eine Vorgabe. Am Anfang legt man den Ball manuell auf den Startpunkt.

Dann fehlt vermutlich ein Startsignal an den Arduino ("Ball ist da, rate mal, welche Farbe er hat")

Bei einer Konstruktion so ähnlich wie ich sie mir hier vorstelle, ist die Reaktion

  • nichts
  • dreh 30° links und wieder zurück
  • dreh 30° rechts und wieder zurück

relativ einfach, aber die Entscheidungslogik eine Tüftel-Aufgabe.

Viel Spaß

Sehe ich auch so, ergibt wahrscheinlich einen Hebelarm von 9 cm (Annahme Durchmesser Steppermotor ca. 3 cm). Vermutlich muss der Mitnehmer noch so gestaltet werden, dass er den Ball sicher mitnimmt (oder dahinter eine gekrümmte Führungsschiene, um ungewolltes Herausrollen nach hinten zu verhindern ... ).

@silas_fabian: Wie soll der Sortiervorgang denn gestartet werden? Soll die Maschine selbst erkennen, dass ein Ball abgelegt wurde oder per Knopfdruck?

ec2021