Ich möchte einen Snack Automat mit 4 Servos, 1 LCD Display, 4 Tastern und eine Bewegungssensor für die Münze einbauen. Das Ziel ist es die Münze einzuwerfen, welcher der Sensor erkennt und den Taster drücken und anschliessend soll der Servo das gewünschte Produkt rausdrehen. Nun habe ich ein Problem beim Programmieren. Beiliegend meinen Code der leider nocht nicht wunschgemäss funktioniert. Wäre froh um eine Antwort. Vielen Dank.
Hallo
Ich habe ein Änderungen eingebaut. Es fehlten ein paar {} eingebaut damit die Logik stimmt und die Bedienung der Servos angepasst. Was noch fehlt ist der PIR Sensor. Aber so kannst du erstmal weitermachen.
Vielen Dank. Es funktioniert leider noch nicht ganz. Wenn ich den Push Button drücke und der Bewegungssensor aktiv ist dreht der Servo 180 Grad. Anschliessend dreht der Servo wieder unendlich in die entgegengesetzte Richtung. ( Es ist ein 360 Grad Servo) Dass Ziel wäre es nun : Wenn der Taster 1 gedrückt wird und zudem der Bewegungssensor aktiv ist soll der Servo sich drehen so das die Süssigkeit im Snackautomat hinausfällt. Wenn die Süssigkeit hinunter gefallen ist soll der Servo aufhören zu drehen ( Ich werde es mit der Grad anzeige ändern bis es passt mit der Drehung). Danach soll der Servo nicht mehr drehen . ( Da wenn eine Münze eingeworfen wird (Bewegungssensor Signal) soll der Servo einmal drehen weil es ja ein Snackautomat ist und nicht jeder unbeliebig Süssigkeiten hinauslassen soll. Ich wünsche euch einen schönen Abend und vielen Dank für die Antwort(en).
Wenn Du Dauerdrehservo hast, mußt Du andere Sensoren (optische, magnetische oder Endschalter) einbauen die die Drehbewegung zu stoppen. Bei einem Dauerdrehservo weißt Du nie in welcher Position er sich befindet.
Bei meinem Sensor handelt es sich um einen Infrarot Sensor welcher auch Objekte erkennen kann. Es ist ein Schulprojekt und ich werde den Automaten in mein Zimmer stellen.
Ok, Der Sensor ist kein PIR sondern eine Infrarot Reflektionslichtschranke. Ein Infrarotled beleuchtete und wenn ein Gegenstand in einigen mm Abstand da steuert das reflektierte Infrarotlicht den Fototransistor durch. Der Opimale Abstand ist 2,5mm.
Mit dem Servo wirst Du was bewegen. Du kannst die Position des bewegten Teiles kontrollieren.
Wenn Du nur 180° brauchst dann wäre ein normales 180° Servo die bessere Wahl.
Hast Du schon die Mechanik fertig oder Ideen zur Mechanik?
Ich habe schon eine Idee zur Mechanik. Ich werde mit einem Mettaldraht eine Spirale formen und diese am Servo befestigen. So kann ich die Snacks hinein legen und sie sollen den rausgedreht werden. (Venduino, Arduino Vending Machine - YouTube) wie bei dem Video abgebildet etwa bei 6:20 Minuten habe ich mir das vorgestellt. Den Code habe ich nochmals selber versucht zu verändern. Ich habe in der IF schlaufe am Schluss ein Servo1.detach(); eingebaut damit der Servo nicht unendlich dreht. Nun ist das Problem das wenn ich den Taster und den Bewegungssensor aktiviere, dass der Servo zwar die anzahl grad dreht aber wenn ich es nochmals drücken möchte passiert leider nichts. (Servo dreht nicht) Könnte mir da jemand weiterhelfen ?
Jetzt hab ich's verstanden wie die Mechanik funktioniert.
Am Teller wo die Spirale befestigt ist baust Du eine Nase für einen Endschalter oder eine Fahne oder ein Loch für eine Gabellichtschranke oder auf der Rückseite Bemalst Du sie halb schwarz und halb weis für einen Reflektionslichtschranke.
So kannst Du eine bestimmte Position erkennen und den Servo stoppen. Im Video wird der Servo s meiner Ansicht nach nur für eine bestimmte Zeit gedreht. Das ist ungenau.
Wenn ich richtig verstanden habe hast Du ein Dauerrotationsservo. Da ist der Winkel nicht mehr von der Ansteuerung bestimmt sondern die Ansteuerung beeinflußt die Drehrichtung und je nach Servo vieleicht die Drehgeschwindigkeit. .
Servo1.write(360); ist falsch. Die Funktion akzeptiert Werte zwischen 0 und 180. 90 müßte der Servo still stehen
Servo1.detach();
Da trennst Du den servo vom Pin. Er kann ohne
Servo1.attach(22);
nie mehr angesteuert werden.
besser Du nimmst
Servo1.write(90);
Du solltest die linke Vorderseite des Automaten als Tür zum Aufmachen realisieren damit Du den Automaten leicht beschicken kannst. Die rechte Seite mit der Elektronik kann fest verschraubt bleiben.
Hallo ich habe kurz den ungefähren Aufbau des Automaten in ein Word gezeichnet damit du vielleicht eine bessere Vorstellungen davon bekommts wie ich es mir überlegt habe. Der Sensor soll nur erkennen ob eine Münze vorne durch geht. Wenn ja soll der Servo drehen wenn der Taster auch gedrückt wird. Wenn nur der Taster gedrückt ist soll nichts passieren. Wie du es beschrieben hast im untersten Abschnitt hatte ich es so auch vor.
Leider verstehe ich noch nicht ganz in welcher Reihenfolge unter dem if ((digitalRead(T1) == HIGH) || digitalRead(pirPin) == HIGH) { Abschnitt ich welche Befehle einbauen soll (wie Servo1.attach oder Servo1.write(90) und was ich sonst noch im Code einbauen soll. Ich habe noch keine grosse Erfahrungen von Arduino und deshalb verstehe ich es noch nicht ganz aber danke für deine bisherige Hilfe.