Smart-Home am Beispiel der Präsenzerkennung im Raum Projektarbeit Lennart Heimbs, Johannes Krug, Sebastian Dohle und Kevin Holzschuh bei Prof. Oliver Hofmann SS2019
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ZweiBewegungsmelder.ino 3.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. //HC-SR501 als Bewegungsmelder, vergleicht alten PIR-wert mit neuem PIR-wert und lässt bei HIGH Phase LED leuchten
  2. //Einstellung *repeatable Trigger||single Trigger* hier egal
  3. //Single Trigger:Bei Bewegung läuft ein festgelegtes Zeitfenster HIGH ab (LINKER POTI, 3sec bis 5min)
  4. //Repeatable Trigger: Bei Bewegung läuft HIGH Zeitfester ab, wenn darin wieder Bewegung erkannt wird, wird das zeitfenster wieder neu gestartet und verlängert.
  5. //Nach diesen HIGH signal folgt in beiden fällen ein 3 sekündiges LOW Fenster, hier wird keine bewegung erkannt
  6. //Hier zwei Bewegungsmelder
  7. int ledPin = D1; // LED on Pin 1 of ESP
  8. int pirPin1 = D0; // Input for HC-SR501
  9. int pirPin2 = D2;
  10. int pirValueNeu1; // Place to read PIR Value
  11. int pirValueAlt1 = 0; //Place to store read PIR Value
  12. int pirAn1;
  13. int pirValueNeu2; // Place to read PIR Value
  14. int pirValueAlt2 = 0; //Place to store read PIR Value
  15. int pirAn2;
  16. void setup() {
  17. Serial.begin(9600);
  18. pinMode(ledPin, OUTPUT);
  19. pinMode(pirPin1, INPUT);
  20. pinMode(pirPin2, INPUT);
  21. digitalWrite(ledPin, LOW);
  22. }
  23. void loop() {
  24. pirValueNeu1 = digitalRead(pirPin1);
  25. pirValueNeu2 = digitalRead(pirPin2);
  26. pirAn1= ((pirValueNeu1==1)&&(pirValueAlt1==0));
  27. pirAn2= ((pirValueNeu2==1)&&(pirValueAlt2==0));
  28. /* Serial.print(pirAn1);
  29. Serial.println(pirAn2);
  30. if(pirAn1)
  31. delay(2000);*/
  32. if(pirAn1&&(!pirValueNeu2)){ //Case1.1:Flanke von PIR 1, PIR 2 auf 0
  33. digitalWrite(ledPin, pirValueNeu1);
  34. Serial.println("Motion from PIR1!");
  35. }
  36. if(pirAn2&&(!pirValueNeu1)){ //Case1.2:Flanke von PIR 2, PIR 1 auf 0
  37. digitalWrite(ledPin, pirValueNeu2);
  38. Serial.println("Motion from PIR2!");
  39. }
  40. if(pirAn1&&pirValueNeu2){ //Case2.1:Flanke von PIR 1, PIR 2 schon auf 1; Zustand von PIR 1 wird angenommen
  41. digitalWrite(ledPin, pirValueNeu1);
  42. Serial.println("Motion from PIR 1, while PIR 2 was already triggered!");
  43. }
  44. if(pirAn2&&pirValueNeu1){ //Case2.1:Flanke von PIR 2, PIR 1 schon auf 1; Zustand von PIR 2 wird angenommen
  45. digitalWrite(ledPin, pirValueNeu2);
  46. Serial.println("Motion from PIR 2, while PIR 1 was already triggered!");
  47. }
  48. if(pirAn1&&pirAn2){ //Case3:Beide PIR sensoren gleichzeit geriggert, unwahrscheinlich
  49. digitalWrite(ledPin, pirValueNeu1);
  50. Serial.println("Motion from PIR 1 and PIR 2!");
  51. }
  52. pirValueAlt1=pirValueNeu1;
  53. pirValueAlt2=pirValueNeu2;
  54. /* if((pirValueNeu1==1)&&(pirValueNeu2==1)){
  55. Serial.println("Motion from PIR1 & PIR2! Level:HIGH");
  56. digitalWrite(ledPin, pirValueNeu1);
  57. }
  58. else if((pirValueNeu1==0)&&(pirValueNeu2==1)){
  59. Serial.println("Motion from PIR2! Level:HIGH");
  60. digitalWrite(ledPin, pirValueNeu2);
  61. }
  62. else if((pirValueNeu1==1)&&(pirValueNeu2==0)){
  63. Serial.println("Motion from PIR1! Level:HIGH");
  64. digitalWrite(ledPin, pirValueNeu1);
  65. } */
  66. /*else{
  67. //Serial.println("Ruhemodus 3 Sekunden! Level:LOW");
  68. //delay(3000);
  69. Serial.println("No motion so far! Level:LOW");
  70. }*/
  71. }