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:
  • 1 Bewertungen - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
3 Bewegungsmelder, Lichtsensor und Relay Frage !
15.11.2015, 08:29 (Dieser Beitrag wurde zuletzt bearbeitet: 15.11.2015 10:35 von b3ta.)
Beitrag #1
3 Bewegungsmelder, Lichtsensor und Relay Frage !
Hallo Leute,

bräuchte mal Hilfestellung, bin kein Profi und relativ frisch in Arduino.

Ich würde mir gerne aus 3 Bewegungsmelder einen Licht Sensor und einem relay eine Schaltung bauen.

Plan ist das der lichtsenor bei dunkelhalt das 5v Signal gibt. Dann soll abgefragt werden ob gerade einer der 3 Bewegungsmelder aktiv ist (5v input). wenn ja soll das relay schalten (5v output).

Wie kann ich das umsetzen if und else ist klar aber das wäre ja if if und else.

OK glaube soweit hab ich es doch hinbekommen bis auf die Tatsache das sobald jetzt der Lichtsensor auf high schaltet das Relais ganz schnell flattert obwohl es ja aus sein sollte ! wenn ich die Taster (Simulation für die Bewegungsmelder) drücke bleibt es an wie es soll !

Code:
int Bew1 = 2;        // weist der Variable den Pin 2 zu
int Bew2 = 3;        // weist der Variable den Pin 3 zu
int Bew3 = 4;        // weist der Variable den Pin 4 zu
int Licht = 5;       // weist der Variable den Pin 5 zu
int Relai = 6;       // weist der Variable den Pin 6 zu

int Bewegung1 = 0;   //Variable, die den Zustand des Bewegungsmelders speichert (0=keine Bewegung, 1=Bewegung)
int Bewegung2 = 0;   //Variable, die den Zustand des Bewegungsmelders speichert (0=keine Bewegung, 1=Bewegung)
int Bewegung3 = 0;   //Variable, die den Zustand des Bewegungsmelders speichert (0=keine Bewegung, 1=Bewegung)
int Lichtwert = 0;   //Variable, die die den Zustand des Lichtsensors speichert (0=Hell, 1=Dunkel)


void setup() {
  pinMode(Bew1, INPUT);   // deklariert Bewegungsmelder 1 zu einem Eingang
  pinMode(Bew2, INPUT);   // deklariert Bewegungsmelder 1 zu einem Eingang
  pinMode(Bew3, INPUT);   // deklariert Bewegungsmelder 1 zu einem Eingang
  pinMode(Licht, INPUT);  // deklariert Lichtsensor zu einem Eingang
  pinMode(Relai, OUTPUT); // deklariert Relay zu einem Ausgang

}

void loop() {
  Lichtwert = digitalRead(Licht);         //Lichtsensor einlesen
  Bewegung1 = digitalRead(Bew1);         //Zustand des Bewegungsmelders1 auslesen
  Bewegung2 = digitalRead(Bew2);         //Zustand des Bewegungsmelders2 auslesen
  Bewegung3 = digitalRead(Bew3);         //Zustand des Bewegungsmelders3 auslesen

int bewegung = Bewegung1+Bewegung2+Bewegung3;
  
  if (Lichtwert == HIGH&&bewegung>0) {
    digitalWrite(Relai, HIGH);                 //wird das Relay eingeschaltet...
  }
  else {
  digitalWrite(Relai, LOW);                  //wird das Relay ausgeschaltet
  }

}


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.11.2015, 10:45
Beitrag #2
RE: 3 Bewegungsmelder, Lichtsensor und Relay Frage !
vielleicht fehlende Pull Down Widerstände an den Tastern?

Gruß Bob

Elektronische Torwand
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.11.2015, 10:57
Beitrag #3
RE: 3 Bewegungsmelder, Lichtsensor und Relay Frage !
Das macht er ja wenn kein Taster gedrückt wird sondern wenn der lichtsensor schaltet !
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.11.2015, 11:01
Beitrag #4
RE: 3 Bewegungsmelder, Lichtsensor und Relay Frage !
https://www.arduino.cc/en/Tutorial/DigitalReadSerial
Zitat:if you disconnect the digital i/o pin from everything, the LED may blink erratically. This is because the input is "floating" - that is, it doesn't have a solid connection to voltage or ground, and it will randomly return either HIGH or LOW. That's why you need a pull-down resistor in the circuit.

Gruß Bob

Elektronische Torwand
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.11.2015, 11:20
Beitrag #5
RE: 3 Bewegungsmelder, Lichtsensor und Relay Frage !
Da hat MeisterBob schon recht.
Es fehlen die PullDown-Widerstände.

Mich wundert allerdings, das du auf HIGH prüfst.
Die PIR haben doch einen OK-Ausgang und sollten selber bei aktiv auf LOW schalten, dann müsste ein PullUp-Widerstand rein.

Und diese Widerstände sind absolut wichtig. PullUpskannst du allerdings auch schon im Atmega aktivieren.

Noch ein Tipp. Warum testest du nicht erst mal mit einem PIR, das ist einfacher und wenn das funktioniert kannst du erweitern.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.11.2015, 11:29
Beitrag #6
RE: 3 Bewegungsmelder, Lichtsensor und Relay Frage !
moin, ich denke dir "fehlt" ein 10kohm widerstand, zudem solltest du die photozelle auf analog setzen.

wenn man dann den wert ausliest, kann man eine schwelle einsetzen...

wenn ich das richtig verstehe, soll es bei dunkelheit losgehen...
also setze einen wert gegen null zum auslösen.

denke daran, das wenn das licht angeht durch deine schaltung, auch die zelle uu wieder mit licht bestrahlt wird, ich kenne deinen aufbau nicht, dies nur als tip, das klingt so als wenn deine schaltung zieht und somit die zelle hell/dunkel/hell/dunkel geschalten wird, ich hoffe du verstehst was ich meine...

Code:
int Bew1 = 2;        // weist der Variable den Pin 2 zu
int Bew2 = 3;        // weist der Variable den Pin 3 zu
int Bew3 = 4;        // weist der Variable den Pin 4 zu
int Licht = 5;       // weist der Variable den Pin 5 zu --!!! Setze auf ANALOG! + 10kohm!!!
int Relai = 6;       // weist der Variable den Pin 6 zu

int Bewegung1 = 0;   //Variable, die den Zustand des Bewegungsmelders speichert (0=keine Bewegung, 1=Bewegung)
int Bewegung2 = 0;   //Variable, die den Zustand des Bewegungsmelders speichert (0=keine Bewegung, 1=Bewegung)
int Bewegung3 = 0;   //Variable, die den Zustand des Bewegungsmelders speichert (0=keine Bewegung, 1=Bewegung)
int Lichtwert = 0;   //Variable, die die den Zustand des Lichtsensors speichert (0=Hell, 1=Dunkel)


void setup()
{
  pinMode(Bew1, INPUT);   // deklariert Bewegungsmelder 1 zu einem Eingang
  pinMode(Bew2, INPUT);   // deklariert Bewegungsmelder 1 zu einem Eingang
  pinMode(Bew3, INPUT);   // deklariert Bewegungsmelder 1 zu einem Eingang
  // pinMode(Licht, INPUT);  // deklariert Lichtsensor zu einem Eingang -- Arbeite lieber mit dem analogen!
  pinMode(Relai, OUTPUT); // deklariert Relay zu einem Ausgang
}

void loop()
{
  Lichtwert = analogRead(Licht);         //Lichtsensor einlesen
  Bewegung1 = digitalRead(Bew1);         //Zustand des Bewegungsmelders1 auslesen
  Bewegung2 = digitalRead(Bew2);         //Zustand des Bewegungsmelders2 auslesen
  Bewegung3 = digitalRead(Bew3);         //Zustand des Bewegungsmelders3 auslesen

  int bewegung = Bewegung1+Bewegung2+Bewegung3;
  
  if ( ( Lichtwert < 50 ) && ( bewegung > 0 ) )    // "50" ist ein geschätzter wert, bitte anpassen
  {
    digitalWrite(Relai, HIGH);                 //wird das Relay eingeschaltet...
  }
  
  else
  {
  digitalWrite(Relai, LOW);                  //wird das Relay ausgeschaltet
  }

}


desweiteren lässt man normalerweise den pir erst mal calibrieren.. dazu mal ein beispielsketch:


Code:
/*
* //////////////////////////////////////////////////
* //making sense of the Parallax PIR sensor's output
* //////////////////////////////////////////////////
*
* Switches a LED according to the state of the sensors output pin.
* Determines the beginning and end of continuous motion sequences.
*
* @author: Kristian Gohlke / krigoo (_) gmail (_) com / http://krx.at
* @date:   3. September 2006
*
* kr1 (cleft) 2006
* released under a creative commons "Attribution-NonCommercial-ShareAlike 2.0" license
* http://creativecommons.org/licenses/by-nc-sa/2.0/de/
*
*
* The Parallax PIR Sensor is an easy to use digital infrared motion sensor module.
* (http://www.parallax.com/detail.asp?product_id=555-28027)
*
* The sensor's output pin goes to HIGH if motion is present.
* However, even if motion is present it goes to LOW from time to time,
* which might give the impression no motion is present.
* This program deals with this issue by ignoring LOW-phases shorter than a given time,
* assuming continuous motion is present during these phases.
*  
*/

/////////////////////////////
//VARS
//the time we give the sensor to calibrate (10-60 secs according to the datasheet)
int calibrationTime = 30;        

//the time when the sensor outputs a low impulse
long unsigned int lowIn;        

//the amount of milliseconds the sensor has to be low
//before we assume all motion has stopped
long unsigned int pause = 5000;  

boolean lockLow = true;
boolean takeLowTime;  

int pirPin = 7;    //the digital pin connected to the PIR sensor's output
int ledPin = 8;


/////////////////////////////
//SETUP
void setup(){
  Serial.begin(9600);
  pinMode(pirPin, INPUT);
  pinMode(ledPin, OUTPUT);
  digitalWrite(pirPin, LOW);

  //give the sensor some time to calibrate
  Serial.print("calibrating sensor ");
    for(int i = 0; i < calibrationTime; i++){
      Serial.print(".");
      delay(1000);
      }
    Serial.println(" done");
    Serial.println("SENSOR ACTIVE");
    delay(50);
  }

////////////////////////////
//LOOP
void loop()
{

     if(digitalRead(pirPin) == HIGH)
     {
       digitalWrite(ledPin, HIGH);   //the led visualizes the sensors output pin state
       if(lockLow)
       {  
         //makes sure we wait for a transition to LOW before any further output is made:
         lockLow = false;            
         Serial.println("---");
         Serial.print("motion detected at ");
         Serial.print(millis()/1000);
         Serial.println(" sec");
         delay(50);
         }        
         takeLowTime = true;
       }

     if(digitalRead(pirPin) == LOW)
     {      
       digitalWrite(ledPin, LOW);  //the led visualizes the sensors output pin state

       if(takeLowTime)
       {
        lowIn = millis();          //save the time of the transition from high to LOW
        takeLowTime = false;       //make sure this is only done at the start of a LOW phase
        }
       //if the sensor is low for more than the given pause,
       //we assume that no more motion is going to happen
       if(!lockLow && millis() - lowIn > pause)
       {  
           //makes sure this block of code is only executed again after
           //a new motion sequence has been detected
           lockLow = true;                        
           Serial.print("motion ended at ");      //output
           Serial.print((millis() - pause)/1000);
           Serial.println(" sec");
           delay(50);
           }
       }
  }


weitere infos zum thema zelle und pir:


Adafruit photocell
Arduino pir


so weit voel erfolg Wink

gruss hilgi

Nicht denken,...
...nachdenken... Rolleyes
http://capsicum-felicitas.de.tl
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.11.2015, 11:35 (Dieser Beitrag wurde zuletzt bearbeitet: 15.11.2015 11:38 von b3ta.)
Beitrag #7
RE: 3 Bewegungsmelder, Lichtsensor und Relay Frage !
Hmm habe jetzt weder taster oder noch was gleichen drann nur das relai und es flattert dennoch.

Also mein Photosensor ist so einer der mir halt 5v ausgibt !


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.11.2015, 11:39
Beitrag #8
RE: 3 Bewegungsmelder, Lichtsensor und Relay Frage !
ok, dann empfehle ich dir den "50 wert gegen 0 laufen zu lassen, hast du den 10kohm widerstand dran? hast du die zelle auf den analogen anschluss umgelegt?

bitte poste einmal deinen aufbau, hierzu gibt es geniale software (gut auch um projekte zu archivieren) zb mein liebling:

Fritzing


ansonsten wäre eine andere art schaltplan / aufbau gut, weil so wird es schwer den fehler zu finden



gruss, hilgi

Nicht denken,...
...nachdenken... Rolleyes
http://capsicum-felicitas.de.tl
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  ESP8266 ESP12-E Webserver-Frage Claus_M 8 248 14.11.2016 22:02
Letzter Beitrag: Claus_M
  NRF24L01 Packet / Msg Frage Marc2014 5 123 07.11.2016 18:08
Letzter Beitrag: hotsystems
  Frage zur Programmierung eines Ultraschallsensors jalu4601 10 348 21.09.2016 15:06
Letzter Beitrag: Bitklopfer
  Frage zu One Button in Kombination mit Fast LED Wolfgang_2801 3 239 26.06.2016 22:11
Letzter Beitrag: hotsystems
  Frage zu FastLed First Light Wolfgang_2801 1 228 19.06.2016 16:57
Letzter Beitrag: hotsystems
  Frage zu Serial SMoTH 3 463 09.03.2016 18:13
Letzter Beitrag: SMoTH
  Frage zum Arduino Studio Compiler avoid 1 484 27.02.2016 09:15
Letzter Beitrag: amithlon
  Brauche Hilfe HC-SR501 als Bewegungsmelder für Heimautomatisierung renmet 6 542 25.02.2016 10:22
Letzter Beitrag: hotsystems
  html, client , NODEMCULUA, Wifi, match request , Frage Marc2014 2 363 15.02.2016 18:41
Letzter Beitrag: Marc2014
  Generelle Frage bn320 19 1.022 03.02.2016 21:50
Letzter Beitrag: bn320

Gehe zu:


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