// die Bibliothek Servo.h wird eingebunden, sie steuert den Motor
#include "Servo.h"
// der Servomotor erhält den Namen Servomotor
Servo Servomotor;
int Sensor = 7;
int Wert;
int Servomotor = 6;
void setup()
{
// dem Servomotor wird der Pin D1 zugeordnet
Servomotor.attach(D1);
pinMode(Sensor, INPUT);
pinMode(Servomotor, OUTPUT);
}
void loop()
{
// der write-Befehl steuert den Servomotor
// Zwischen den einzelnen Positionen gibt es eine Pause
// Position 1 ansteuern mit dem Winkel 0°
Wert = digitalRead(Sensor);
if (Wert == 0)
{
Servomotor.write(0); // Position 1 ansteuern mit dem Winkel 0°
}
// Position 2 mit dem Winkel 90° ansteuern
else
{
Servomotor.write(90);
}
}
Hm...
Wenn der reinkommt und über den Endschalter fährt, geht die Klappe auf.
Dann steht er auf dem Endschalter.
a) Wie geht die Klappe zu?
b) Wie geht sie wieder auf?
Das bedeutet, Du brauchst 2 Schalter.
Einen VOR der Klappe, damit die auf geht beim rein fahren und einen am Anschlag hinten, damit die zu geht.
Löst sich der Roboter fürs rausfahren, löst der sich öffnende Endschalter den Öffnungsprozess aus und der aussen liegende Schalter den Schliessprozess.
-> und dann das selbe von vorn.
Oder Variante 2:
Nur einen Endschalter an der Rückwand.
Saugroboter fährt raus - Klappe geht auf.
Saugroboter fährt rein und schlägt hinten an - Klappe geht zu.
Beides machbbar.
Das Stichwort heisst in jedem Fall Schrittkette.
Ups, jetzt bin ich etwas verwirrt. Ich hatte eigentlich Deine Variante 2 vor Augen. Roboter ist bereits drin und deshalb liegt der Schalter an, ist also geschlossen. Bewegt er sich dann nach draußen, wird der Schalter entlastet, also geöffnet. Habe ich das mit dem Code nicht so gelöst? Mit Schrittkette kann ich leider nichts anfangen. Muss ich da noch mal ganz neu ran oder lässt sich mein Code ohne viel Aufwand retten, so dass er funktioniert?
Das geht.
Wenn variante 2, ist das nicht ganz so problematisch.
Wenn Du in Dein Ausgangspost gehst und dort den Code markierst und dann auf den Button <code> drückst und dann speicherst, ist das auch verwendbar.
Ich vermute mal, dass Du den Microschalter nicht noch extern weiter mit Widerständen bescalten willst, dann muss aus dem INPUT ein INPUT_PULLUP gemacht werden und evtl. die Logik angepasst - aber das seht man erst, wennd er code sicher ist.
Danke für den Tipp. Was ich da gefunden habe, ist leider viel zu kompliziert für mich als Arduino-Nixkenner ohne Programmierkenntnisse. Es sind aber auch etwas andere Bedarfsfälle als meiner. Ich dachte an eine simple Schaltung (an/aus = hoch/runter) mit einem einzigen Endschalter.
Türkontakte sind normalerweise NC, schalten also im Kühlschrank das Licht an, wenn der Kontakt nicht betätigt ist. Außerdem hängt es davon ab, wie du den Schalter am Arduino anschließt.(Bei pinMode(Sensor, INPUT_PULLUP); bräuchtest du keinen Pulldown-Widerstand und die Logik wäre wieder andersrum.
Aber bist du sicher, dass der Roboter, wenn er schlafen geht, den Kontakt sicher gedrückt hält?
Und willst du 24h am Tag den Servo unter Strom halten?
Der Endschalter würde einen längeren Hebel bekommen, so dass er den Schalter sicher trifft, auch wenn er nicht ganz exakt die Parkposition anfährt, und ihn auf jeden Fall andrückt. Und nein, das wäre noch meine weitere Frage gewesen. Wie verhindere ich, dass der Servo dauerhaft unter Strom steht?
Hast Du vielleicht noch einen Tipp für mich, wie ich mit der Stromversorgung umgehen, also was ich tun muss, um zu verhindern, dass der Servo dauerhaft unter Strom steht?