INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Hilfe für Hühnerstall
16.11.2015, 11:38 (Dieser Beitrag wurde zuletzt bearbeitet: 16.11.2015 12:31 von Uli-UNO.)
Beitrag #1
Hilfe für Hühnerstall
Hi Leute.
Ich bin gerade fleißig an der Programmierung meiner Hühnerstallsteuerung.
Zur Motoransteuerung verwende ich ein Arduino Motorshield das ganz einfach mittels 2 Pins angesteuert wird (Motor ein, Recht-/ Linkslauf)
Das Programm an sich läuft.
Jetzt wollte ich noch zur Sicherheit eine Zeitüberwachung einbauen, dass wenn bei Ansteuern des Motors nach einer gewissen Zeit der jeweilige Endschalter nicht erreicht wird, der Motor ausgeschaltet wird und ich mir eine Variable "Zeitueberlauf" setze.
Hier stecke ich leider fest. Ich hoffe ihr könnt mir weiterhelfen.

Danke im Vorraus,
Gruß Uli

int MotorStopp = 3;
int Motor = 12;
int ldr = 15;
int Endschalter_oben = 22;
int Endschalter_unten = 23;
int Betriebsart = 24;
int Taster_AUF = 25;
int Taster_ZU = 26;
int LED_gelb = 40; //Anzeige Handbetrieb
int LED_gruen = 41; //Anzeige Automatikbetrieb
int Daemmerungsschalter = 50; //Nur Platzhalter!
int analogwert;
int LED_rot = 42; //Anzeige Zufahren durch Dämmerungsschalter
int LED_Auf = 43; //Anzeige Tür geöffnet
int LED_Zu = 44; //Anzeige Tür geschlossen
unsigned long prev;
int interval = 5000; //Wert für Zeitüberwachung
int Zeitueberlauf;
int state = LOW;
int laststate = LOW;


void setup() {
pinMode(3, OUTPUT);
pinMode(12, OUTPUT);
pinMode(15, INPUT);
pinMode(22, INPUT_PULLUP);
pinMode(23, INPUT_PULLUP);
pinMode(24, INPUT_PULLUP);
pinMode(25, INPUT_PULLUP);
pinMode(26, INPUT_PULLUP);
pinMode(40, OUTPUT);
pinMode(41, OUTPUT);
pinMode(42, OUTPUT);
pinMode(43, OUTPUT);
pinMode(44, OUTPUT);
pinMode(50, OUTPUT);


Serial.begin(9600);
prev = millis(); //jetzigen Zeitstempel merken

}

void loop() {

//Betriebsart wählen

if (digitalRead (Betriebsart) == HIGH)

{

//Handbetrieb Tor Auf/ ZU

if (digitalRead (Taster_AUF) == LOW && digitalRead(Taster_ZU) == HIGH && digitalRead(Endschalter_oben) == HIGH) //Zum Auffahren
{ digitalWrite(MotorStopp, HIGH);
digitalWrite(Motor, HIGH);
}

else if (digitalRead (Taster_ZU) == LOW && digitalRead (Taster_AUF) == HIGH && digitalRead(Endschalter_unten) == HIGH ) //Zum Zufahren
{ digitalWrite(MotorStopp, HIGH);
digitalWrite(Motor, LOW);
}
else digitalWrite(MotorStopp, LOW);
}

//Analogwert einlesen/ auswerten

analogwert = analogRead(ldr);
if (analogwert < 100)
digitalWrite(Daemmerungsschalter, LOW);
else
digitalWrite(Daemmerungsschalter, HIGH);


//Automatikbetrieb Tor Auf/ ZU

if (digitalRead (Betriebsart) == LOW)
{

if (digitalRead (Daemmerungsschalter) == HIGH && digitalRead(Endschalter_oben) == HIGH) //Zum Auffahren

{ digitalWrite(MotorStopp, HIGH);
digitalWrite(Motor, HIGH);
}
else if (digitalRead (Daemmerungsschalter) == LOW && digitalRead(Endschalter_unten) == HIGH ) //Zum Zufahren
{ digitalWrite(MotorStopp, HIGH);
digitalWrite(Motor, LOW);
}
else digitalWrite(MotorStopp, LOW);
}
;

//Flankenauswertung von Motoransteuerung
state = digitalRead (MotorStopp);
if (laststate == LOW && state == HIGH)
prev = millis();

//Zeitüberwachung Schließvorgang

if ( Betriebsart == LOW && MotorStopp == HIGH && Motor == HIGH && millis() - prev > interval && Endschalter_oben == HIGH )
{ digitalWrite(MotorStopp, LOW);
digitalWrite(Zeitueberlauf, HIGH);
}

else digitalWrite(Zeitueberlauf, LOW);



//Zeitüberwachung Öffnungsvorgang

if (Betriebsart == LOW && MotorStopp == HIGH && Motor == HIGH && millis() - prev > interval && Endschalter_unten == HIGH )
{ digitalWrite(MotorStopp, LOW);
digitalWrite(Zeitueberlauf, HIGH);
}

else digitalWrite(Zeitueberlauf, LOW);



// LEDS ansteuern

if (digitalRead (Betriebsart) == HIGH)

{ digitalWrite(LED_gelb, HIGH); //Betriebsart Hand anzeigen
digitalWrite(LED_gruen, LOW);
}

else
{ digitalWrite(LED_gelb, LOW); //Betriebsart Automatik anzeigen
digitalWrite(LED_gruen, HIGH);
}


if (digitalRead (Daemmerungsschalter) == LOW) //Schließung durch Dämmerungsschalter anzeigen
digitalWrite(LED_rot, HIGH);
else
digitalWrite(LED_rot, LOW);


if (digitalRead ( Endschalter_unten) == LOW) //Türe geschlossen anzeigen
digitalWrite(LED_Zu, HIGH);

else
digitalWrite(LED_Zu, LOW);



if (digitalRead ( Endschalter_oben) == LOW) //Türe geöffnet anzeigen
digitalWrite(LED_Auf, HIGH);

else
digitalWrite(LED_Auf, LOW);


//if (digitalRead ( Zeitueberlauf) == HIGH) //Fehler durch Zeitüberlauf anzeigen
// { digitalWrite(LED_Zu, HIGH);
// digitalWrite(LED_Auf, HIGH);
// }


//letzten Zustand für Flankenauswertung merken
laststate = state;




//Variablen beobachten
Serial.println(prev);



}

Ich habe meinen Sketch nochmal ein wenig abgeändert.
Leider klappt das mit dem Zeitüberlauf so aber auch nicht.

int MotorStopp = 3;
int Motor = 12;
int ldr = 15;
int Endschalter_oben = 22;
int Endschalter_unten = 23;
int Betriebsart = 24;
int Taster_AUF = 25;
int Taster_ZU = 26;
int LED_gelb = 40; //Anzeige Handbetrieb
int LED_gruen = 41; //Anzeige Automatikbetrieb
int Daemmerungsschalter = 50; //Nur Platzhalter!
int analogwert;
int LED_rot = 42; //Anzeige Zufahren durch Dämmerungsschalter
int LED_Auf = 43; //Anzeige Tür geöffnet
int LED_Zu = 44; //Anzeige Tür geschlossen
unsigned long prev;
int interval = 5000; //Wert für Zeitüberwachung
int Zeitueberlauf;
int state = LOW;
int laststate = LOW;


void setup() {
pinMode(3, OUTPUT);
pinMode(12, OUTPUT);
pinMode(15, INPUT);
pinMode(22, INPUT_PULLUP);
pinMode(23, INPUT_PULLUP);
pinMode(24, INPUT_PULLUP);
pinMode(25, INPUT_PULLUP);
pinMode(26, INPUT_PULLUP);
pinMode(40, OUTPUT);
pinMode(41, OUTPUT);
pinMode(42, OUTPUT);
pinMode(43, OUTPUT);
pinMode(44, OUTPUT);
pinMode(50, OUTPUT);


Serial.begin(9600);
digitalWrite(Zeitueberlauf, LOW); //Variable vorbelegen
prev = millis();

}

void loop() {

//Betriebsart wählen

if (digitalRead (Betriebsart) == HIGH)

{

//Handbetrieb Tor Auf/ ZU

if (digitalRead (Taster_AUF) == LOW && digitalRead(Taster_ZU) == HIGH && digitalRead(Endschalter_oben) == HIGH) //Zum Auffahren
{ digitalWrite(MotorStopp, HIGH);
digitalWrite(Motor, HIGH);
}

else if (digitalRead (Taster_ZU) == LOW && digitalRead (Taster_AUF) == HIGH && digitalRead(Endschalter_unten) == HIGH ) //Zum Zufahren
{ digitalWrite(MotorStopp, HIGH);
digitalWrite(Motor, LOW);
}
else digitalWrite(MotorStopp, LOW);
}

//Analogwert einlesen/ auswerten

analogwert = analogRead(ldr);
if (analogwert < 100)
digitalWrite(Daemmerungsschalter, LOW);
else
digitalWrite(Daemmerungsschalter, HIGH);


//Automatikbetrieb Tor Auf/ ZU

if (digitalRead (Betriebsart) == LOW)
{

if (digitalRead (Daemmerungsschalter) == HIGH && digitalRead(Endschalter_oben) == HIGH && Zeitueberlauf == LOW) //Zum Auffahren

{ digitalWrite(MotorStopp, HIGH);
digitalWrite(Motor, HIGH);
}
else if (digitalRead (Daemmerungsschalter) == LOW && digitalRead(Endschalter_unten) == HIGH && Zeitueberlauf == LOW) //Zum Zufahren
{ digitalWrite(MotorStopp, HIGH);
digitalWrite(Motor, LOW);
}
else digitalWrite(MotorStopp, LOW);
}
;

//Flankenauswertung von Motoransteuerung

state = digitalRead (MotorStopp);
if (laststate == LOW && state == HIGH)
{
prev = millis();

//Zeitüberwachung

if ( (millis() - prev) > interval && digitalRead (Endschalter_oben) == HIGH && digitalRead (Motor) == LOW && digitalRead (MotorStopp) == HIGH || (millis() - prev) > interval && digitalRead (Endschalter_unten) == HIGH && digitalRead (Motor) == HIGH && digitalRead (MotorStopp) == HIGH)
digitalWrite(Zeitueberlauf, HIGH);

else digitalWrite(Zeitueberlauf, LOW);
}

// LEDS ansteuern

if (digitalRead (Betriebsart) == HIGH)

{ digitalWrite(LED_gelb, HIGH); //Betriebsart Hand anzeigen
digitalWrite(LED_gruen, LOW);
}

else
{ digitalWrite(LED_gelb, LOW); //Betriebsart Automatik anzeigen
digitalWrite(LED_gruen, HIGH);
}


if (digitalRead (Daemmerungsschalter) == LOW) //Schließung durch Dämmerungsschalter anzeigen
digitalWrite(LED_rot, HIGH);
else
digitalWrite(LED_rot, LOW);


if (digitalRead ( Endschalter_unten) == LOW) //Türe geschlossen anzeigen
digitalWrite(LED_Zu, HIGH);

else
digitalWrite(LED_Zu, LOW);



if (digitalRead ( Endschalter_oben) == LOW) //Türe geöffnet anzeigen
digitalWrite(LED_Auf, HIGH);

else
digitalWrite(LED_Auf, LOW);



//letzten Zustand für Flankenauswertung merken
laststate = state;




//Variablen beobachten
Serial.println(Zeitueberlauf);



}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.11.2015, 17:33
Beitrag #2
RE: Hilfe für Hühnerstall
Nur ein Tipp:
Damit wir uns auch deinen Sketch ansehen, setze diesen bitte hier in Code-Tags (Schaltfläche #) rein.
So wie jetzt ist dieser einfach nicht lesbar.
Danach gibt es sicher einige die dir helfen können.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.11.2015, 15:44
Beitrag #3
RE: Hilfe für Hühnerstall
ich finds auch so schwer zu lesen, hast du das selber programmiert?

ich habe etwas ähnliches schonmal realisiert... müsste da noch n code rum liegen haben....

Nicht denken,...
...nachdenken... Rolleyes
http://capsicum-felicitas.de.tl
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.11.2015, 16:39
Beitrag #4
RE: Hilfe für Hühnerstall
Hallo,
ja ist selbst programmiert.
Tutu mir leid, wenn ihr es so nicht lesen könnt. Wusste ich nicht, da das hier im Forum erst mein 2. Beitrag ist.
Wie genau muss ich den Sketch dann einfügen? Code-Tags sagt mir nichts.
Ich habe den Sketch einfach rauskopiert und eingefügt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.11.2015, 16:52
Beitrag #5
RE: Hilfe für Hühnerstall
(19.11.2015 16:39)Uli-UNO schrieb:  Hallo,
ja ist selbst programmiert.
Tutu mir leid, wenn ihr es so nicht lesen könnt. Wusste ich nicht, da das hier im Forum erst mein 2. Beitrag ist.
Wie genau muss ich den Sketch dann einfügen? Code-Tags sagt mir nichts.
Ich habe den Sketch einfach rauskopiert und eingefügt.

Code-Tags ist eine Schaltfläche (#) im Editor.
Dann wird es formatiert eingefügt. Steht aber alles in einer Forumsanleitung.

Lösch doch das alte raus und füge es so erneut ein. Das liest so keiner.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.11.2015, 21:19
Beitrag #6
RE: Hilfe für Hühnerstall
Ich hoffe so ist es besser Smile
Code:
int MotorStopp = 3;
int Motor = 12;
int ldr = 15;
int Endschalter_oben = 22;
int Endschalter_unten = 23;
int Betriebsart = 24;
int Taster_AUF = 25;
int Taster_ZU = 26;
int LED_gelb = 40; //Anzeige Handbetrieb
int LED_gruen = 41; //Anzeige Automatikbetrieb
int Daemmerungsschalter = 50; //Nur Platzhalter!
int analogwert;
int LED_rot = 42; //Anzeige Zufahren durch Dämmerungsschalter
int LED_Auf = 43; //Anzeige Tür geöffnet
int LED_Zu = 44; //Anzeige Tür geschlossen
unsigned long prev;
int interval = 5000; //Wert für Zeitüberwachung
int Zeitueberlauf;
int state = LOW;
int laststate = LOW;


void setup() {
  pinMode(3, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(15, INPUT);
  pinMode(22, INPUT_PULLUP);
  pinMode(23, INPUT_PULLUP);
  pinMode(24, INPUT_PULLUP);
  pinMode(25, INPUT_PULLUP);
  pinMode(26, INPUT_PULLUP);
  pinMode(40, OUTPUT);
  pinMode(41, OUTPUT);
  pinMode(42, OUTPUT);
  pinMode(43, OUTPUT);
  pinMode(44, OUTPUT);
  pinMode(50, OUTPUT);


  Serial.begin(9600);
  digitalWrite(Zeitueberlauf, LOW); //Variable vorbelegen
  prev = millis();

}

void loop() {

  //Betriebsart wählen

  if (digitalRead (Betriebsart) == HIGH)

  {

    //Handbetrieb Tor Auf/ ZU

    if (digitalRead (Taster_AUF) == LOW && digitalRead(Taster_ZU) == HIGH && digitalRead(Endschalter_oben) == HIGH) //Zum Auffahren
    { digitalWrite(MotorStopp, HIGH);
      digitalWrite(Motor, HIGH);
    }

    else if (digitalRead (Taster_ZU) == LOW && digitalRead (Taster_AUF) == HIGH && digitalRead(Endschalter_unten) == HIGH ) //Zum Zufahren
    { digitalWrite(MotorStopp, HIGH);
      digitalWrite(Motor, LOW);
    }
    else digitalWrite(MotorStopp, LOW);
  }

  //Analogwert einlesen/ auswerten

  analogwert = analogRead(ldr);
  if (analogwert < 100)
    digitalWrite(Daemmerungsschalter, LOW);
  else
    digitalWrite(Daemmerungsschalter, HIGH);


  //Automatikbetrieb Tor Auf/ ZU

  if (digitalRead (Betriebsart) == LOW)
  {

    if (digitalRead (Daemmerungsschalter) == HIGH && digitalRead(Endschalter_oben) == HIGH && Zeitueberlauf == LOW) //Zum Auffahren

    { digitalWrite(MotorStopp, HIGH);
      digitalWrite(Motor, HIGH);
    }
    else if (digitalRead (Daemmerungsschalter) == LOW && digitalRead(Endschalter_unten) == HIGH && Zeitueberlauf == LOW) //Zum Zufahren
    { digitalWrite(MotorStopp, HIGH);
      digitalWrite(Motor, LOW);
    }
    else digitalWrite(MotorStopp, LOW);
  }
  ;

  //Flankenauswertung von Motoransteuerung
  
  state = digitalRead (MotorStopp);
  if (laststate == LOW && state == HIGH)
    {
      prev = millis();

  //Zeitüberwachung

  if ( (millis() - prev) > interval && digitalRead (Endschalter_oben) == HIGH && digitalRead (Motor) == LOW && digitalRead (MotorStopp) == HIGH || (millis() - prev) > interval && digitalRead (Endschalter_unten) == HIGH && digitalRead (Motor) == HIGH && digitalRead (MotorStopp) == HIGH)
    digitalWrite(Zeitueberlauf, HIGH);

  else digitalWrite(Zeitueberlauf, LOW);
}

  // LEDS ansteuern

  if (digitalRead (Betriebsart) == HIGH)

  { digitalWrite(LED_gelb, HIGH); //Betriebsart Hand anzeigen
    digitalWrite(LED_gruen, LOW);
  }

  else
  { digitalWrite(LED_gelb, LOW); //Betriebsart Automatik anzeigen
    digitalWrite(LED_gruen, HIGH);
  }


  if (digitalRead (Daemmerungsschalter) == LOW) //Schließung durch Dämmerungsschalter anzeigen
    digitalWrite(LED_rot, HIGH);
  else
    digitalWrite(LED_rot, LOW);


  if (digitalRead ( Endschalter_unten) == LOW) //Türe geschlossen anzeigen
    digitalWrite(LED_Zu, HIGH);

  else
    digitalWrite(LED_Zu, LOW);



  if (digitalRead ( Endschalter_oben) == LOW) //Türe geöffnet anzeigen
    digitalWrite(LED_Auf, HIGH);

  else
    digitalWrite(LED_Auf, LOW);



  //letzten Zustand für Flankenauswertung merken
  laststate = state;




  //Variablen beobachten
  Serial.println(Zeitueberlauf);



}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.11.2015, 23:37
Beitrag #7
RE: Hilfe für Hühnerstall
Bevor ich mich weiter mit deinem Code beschäftige, zuvor die Frage, wird der bei dir fehlerfrei kompiliert?

Mir erscheint die Klammersetzung in den If-Anweisungen nicht richtig zu sein.
Auch finde ich es seltsam mit der "else if"-Anweisung. So kenne ich es nicht.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.11.2015, 11:59
Beitrag #8
RE: Hilfe für Hühnerstall
(19.11.2015 23:37)hotsystems schrieb:  Mir erscheint die Klammersetzung in den If-Anweisungen nicht richtig zu sein.
Wo siehst Du da das Problem?

Zitat:Auch finde ich es seltsam mit der "else if"-Anweisung. So kenne ich es nicht.
Nach einem else kann ein beliebiges Statement kommen. Ein "if( )..." ist ein Statement. Daher ist das ok.

Gruss,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Hilfe: IR Remote Steuerung, MSGEQ7 + RGB-LED Streifen dastob 1 122 14.10.2016 21:40
Letzter Beitrag: hotsystems
Sad Ich brauche Hilfe Prosac 4 235 09.10.2016 18:39
Letzter Beitrag: Prosac
  at24c256 Hilfe Gandalf 6 249 29.08.2016 18:59
Letzter Beitrag: MKc
Smile Progammier Neuling Codeschloss bittet um Hilfe Donalonso 2 287 27.08.2016 18:23
Letzter Beitrag: Binatone
  Hilfe gesucht. Webserver Statsiche und Dynamische HTMl Seite b3ta 11 452 22.08.2016 08:07
Letzter Beitrag: b3ta
  Hilfe: Mega2560 - ENC 28J60 - MYSQL Gandalf 1 181 28.07.2016 16:30
Letzter Beitrag: Gandalf
  Selbstfahrender Roboter Programm änderung hilfe ? arekklone 11 543 06.07.2016 14:59
Letzter Beitrag: Binatone
  Hilfe beim Arduino Shield reimundko 6 459 05.06.2016 11:28
Letzter Beitrag: rpt007
  Brauche etwas Hilfe bei der Umsetzung einer Idee raspido 3 534 23.04.2016 10:26
Letzter Beitrag: rkuehle
  Hilfe bei RTC und SD baron007 21 1.590 13.03.2016 17:36
Letzter Beitrag: hotsystems

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste