Hallo,
ich arbeite gerade an einer Steuerung für eine automatische Hühner-Tür.
Ich habe das Problem, dass ich nicht die exakte Zeit für das Hochfahren und Runterfahren meiner Tür kenne.Deshalb habe ich einfach einen Endtaster so befestigt, dass ein Signal an den Arduino kommt, wenn die Tür hoch gefahren ist.
Nun weiß ich nicht wie ich das programmieren kann, dass mein Motor solange dreht bis der taster betätigt wird.
fleggie:
ja ich schalte ihn per lichtsensor ein. also wenn sich der wert ändert geht der motor an...
Ja, aber nur wenn er nicht schon zu ist. Also beides als Einschaltbedingung: Helligkeit und Klappenposition.
Außerdem würde ich noch eine Wartezeit einlegen, damit nicht ein Schatten oder ein Licht zB eines Autos die Klappe betätigt: die Helligkeit muß 5 Minuten unterhalb/oberhalb des gesetzten Grenzwerts liegen. Dazu noch eine Hysterese einbauen.
Grüße Uwe
ich habe nur ein schalter und es ist ja nicht so schlimm wenn sich der motor beim runter fahren ein bisschen zu lange dreht, hauptsache die zeitabweichungen summieren sich nicht...
das ist mein code, ich hoffe ihr versteht ihn
const int fotopin = 7;
const int motorl = 12;
const int motorr = 13;
int button = 8;
int fotostate = 0;
int lastfotostate = 0;
void setup()
{
pinMode(fotopin,INPUT);
pinMode(button, INPUT_PULLUP);
pinMode(motorr,OUTPUT);
pinMode(motorl,OUTPUT);
}
void loop()
{
fotostate = digitalRead(fotopin);
if (fotostate != lastfotostate)
{
if (fotostate > lastfotostate)
{
digitalWrite(motorr,HIGH);
while (button,HIGH);
{
motorr,HIGH;
}
digitalWrite(motorr,LOW);
}
if (fotostate < lastfotostate)
{
digitalWrite(motorl,HIGH);
delay(3000);
digitalWrite(motorl,LOW);
}
lastfotostate = fotostate;
}
}
Hallo,
ist der Fotopin ein ein Digitaler Ausgang des Sensors, dann sollte der eine vernünftige Hysterese haben, ansonsten fährt die Türe ständig auf und zu.
Die Abfrage ob sich der Zustand geändert hat ist eigendlich überflüssig. Lass die while schleife weg , die fällt Dir irgendwann auf die Füsse.
Auch wird (button,HIGH) wohl nicht ganz Das machen, was Du Dir gedacht hast.
Ein (button==HIGH); könnte klappen, wenn man button innerhalb der WHILE einliest (und zuvor auf HIGH gewesen ist).
Was spricht dagegen, per Helligkeit zu entscheiden, zu welchem Endschalter wir kommen wollen und die ganze Zeit NUR zu prüfen, ob wir in die gegebene Richtung nicht schon am Endanschlag sind?
Davon ab ginge Das komplett ohne Arduino
Schwellwertschalter sorgt für HIGH/LOW und somit für die Richtung (Polwender, DC-Motor)
Endschalter mit Diode über dem Kontakt können somit nur eine Richtung abschalten - die Gegenrichtung ist 'immer frei' - so kann der Motor aus der unteren Endlage nach Oben, aus der Oberen nach Unten starten.
Geht aber auch mit Arduino und dort sogar mit einstellbaren Helligkeitswerten, Zeitverzögerung und gelber Rundum-Flitze, damit der Fuchs auch weiß, wann man besser von der Tür weg bleibt.