RCWL-0516. Mikrofalowy sensor ruchu człowieka

RCWL-0516 to alternatywa dla czujnika PIR. Sprawdzę jak silna.

RCWL-0516 wierzch
RCWL-0516 spód

SPECYFIKACJA

RCWL-0516 microwave radar sensor module Human body induction switch module Intelligent sensor

  • Napięcie robocze: 4-28V
  • Prąd operacyjny: 2,8 mA (typowy); 3 mA (maks.)
  • Odległość wykrywania: 5-9 m
  • Moc transmisyjna: 20 mW (typowa); 30 mW (maks.)
  • Napięcie wejściowe: 3,2-3,4V
  • Prąd zasilania: 100 mA
  • Kontrola wstępna poziom niski: 0V
  • Kontrola wstępna wysoki poziom: 3.3V.
  • Temperatura pracy: -20 ~ 80 stopni Celsjusza

Uwaga! Stan logiczny HIGH wysyła napięcie 3.3V przy zasilaniu 5V (sprawdziłem osobiście multimetrem). Jest zatem bezpieczny dla wejść ESP8266. Natomiast przy zasilaniu z NodeMCU 3.3V nie pracuje (prąd zasilania 100 mA).

ŁĄCZENIE

Łączenie jest banalnie proste.



KARTA KATALOGOWA:


KODY:

/*
    RCWL-0516 czujnik ruchu pin 2 //arduino nano
    Po ustaniu ruchu program odlicza czas ustawiony w zmiennej "zwloka"
    i miga diodą na pinie 6

    Written by Jarogniew Milewski for "Arduino dla strasznych lamerów"
    http://arduino.net.pl
    Licensed under the MIT license.
    All text above must be included in any redistribution.

*/


#include "millisDelay.h"
millisDelay outMillisDelay, flashingMillisDelay;

#define motionSensor 2 //D2 nano
#define outLed 5
#define flashingLed 6

long sensorDelay = 15000; // zwłoka po ustaniu ruchu
int flashingSpeed = 500;  // tempo migania diody

bool isDark = true;
bool moveStatus = false;  // blokada pętli
bool ledOn = false;


void setup() {
  Serial.begin(9600);
  pinMode(outLed, OUTPUT);
  digitalWrite(outLed, LOW);
  pinMode(flashingLed, OUTPUT);
  digitalWrite(flashingLed, LOW);

  outMillisDelay.start(sensorDelay); // inicjowanie akcji biblioteki millisDelay
}

void loop() {

  if (isDark) {

    if (outMillisDelay.isFinished()) {  // jeśli zakończone odliczanie
      digitalWrite(outLed, LOW);
      Serial.println("Wyłączam światło");
      flashingMillisDelay.stop(); // zakończ miganie diody i wyświetlanie czasu
      digitalWrite(flashingLed, LOW); // dioda migająca zgaszona
      ledOn = false;
    }


    // ================ dioda migająca ========================

    if (!moveStatus)  // jeśli brak ruchu wyświetl pozostający czas i migaj diodą
    {
      if (flashingMillisDelay.isFinished())
      {
        flashingMillisDelay.repeat(); // powtarzaj z ustawioną wcześniej zwłoką
        Serial.println(outMillisDelay.remaining());

        if (outMillisDelay.remaining() <= 10000) // migaj diodą w ostatnich 10 sekundach 
        {

          ledOn = !ledOn;   // toggle led
          if (ledOn) {
            digitalWrite(flashingLed, HIGH);
          } else {
            digitalWrite(flashingLed, LOW);
          }
        }
      }
    }

    czujnik_ruchu();
  }
}


// ==================   FUNKCJE   ========================

void czujnik_ruchu()
{
  bool IsMove = digitalRead(motionSensor); // stan sensora ruchu

  switch (moveStatus)
  {
    case 0:
      if (IsMove) // wykryto ruch
      {
        Serial.println("Wykryto ruch");
        //analogWrite(outLed, data2);  // sterowanie jasnością paska led
        digitalWrite(outLed, HIGH); // zapalenie diody
        Serial.println("Włączam światło");
        outMillisDelay.stop();
        digitalWrite(flashingLed, LOW); // zgaszenie ledy odliczającej przy wykryciu ruchu
        moveStatus = true;
      }
      break;

    case 1:
      if (!IsMove) // ruch ustał
      {
        outMillisDelay.start(sensorDelay);  // inicjowanie akcji biblioteki millisDelay
        flashingMillisDelay.start(flashingSpeed); // włączenie diody migającej z ustawioną częstotliwością
        Serial.print("Brak ruchu, zaczynam odliczanie ustalonej zwłoki - ");
        Serial.print(outMillisDelay.delay() / 1000);
        Serial.println(" sekund:");
        moveStatus = false;
      }
      break;
  }

}

LINKI

Dodano 15-11-2019

Dodaj komentarz