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?
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 ?
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
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).
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.
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.
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
#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?
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)
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.
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?