Arduino:Примеры/Гайд по использованию датчика движения с Arduino

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Cat poo.png Черновик


Гайд по использованию датчика движения с Arduino[1]

В этом проекте мы создадим простую цепь с платой Arduino и датчиком движения типа PIR (означает «passive infrared», что переводится как «пассивный инфракрасный»). Ниже показано, как этот датчик работает вживую:

Видео

Описание

Датчик движения типа PIR измеряет инфракрасный свет, идущий от объектов, расположенных рядом с ним. Таким образом, он определяет движение, беря за основу данные об изменении инфракрасного света в окружающем пространстве. Это делает его идеальным датчиком для определения, к примеру, людей или животных, находящихся в пределах измеряемого диапазона.

Pir 1.jpg

Датчик на рисунке выше оснащен двумя потенциометрами, с помощью которых настраивается время задержки (это потенциометр слева) и чувствительность датчика (это потенциометр справа).

Распиновка

В подключении датчика к плате Arduino нет ничего сложного (у датчика всего три контакта):

  • Контакт GND на датчике – к контакту GND на Arduino
  • Контакт OUT на датчике – к цифровому контакту на Arduino
  • Контакт 5V – к контакту 5V на Arduino

Необходимые компоненты

1parts Arduino with PIR Motion Sensor.jpg

Схема

Подключите друг к другу все эти компоненты, как показано на картинке ниже:

Arduino-with-PIR-motion-sensor-schematics.jpg

Код

Загрузите в IDE Arduino следующий код:

/*  
  *  Использование датчика движения типа PIR с платой Arduino.
  *  Более подробно о проекте на:  randomnerdtutorials.com/pirsensor
  *  Модифицирован Руи Сантосом (Rui Santos)
     на основе скетча Лимор Фрид (Limor Fried)
*/
 
int led = 13;                // контакт для светодиода
int sensor = 2;              // контакт для датчика
int state = LOW;             // по умолчанию никакого движения 
                             // не определено
int val = 0;                 // переменная для хранения 
                             // статуса датчика

void setup() {
  pinMode(led, OUTPUT);      // контакт для светодиода 
                             // ставим в режим OUTPUT 
  pinMode(sensor, INPUT);    // контакт для датчика 
                             // ставим в режим INPUT 
  Serial.begin(9600);        // инициализируем последовательную 
                             // коммуникацию
}

void loop(){
  val = digitalRead(sensor);   // считываем данные от датчика
  if (val == HIGH) {           // проверяем, находится ли датчик
                               // в состоянии HIGH 
    digitalWrite(led, HIGH);   // включаем светодиод
    delay(100);                // задержка в 100 миллисекунд
    
    if (state == LOW) {
      Serial.println("Motion detected!");  //  "Замечено движение!"
      state = HIGH;       // обновляем состояние переменной на HIGH 
    }
  } 
  else {
      digitalWrite(led, LOW); // выключаем светодиод
      delay(200);             // задержка в 200 миллисекунд 
      
      if (state == HIGH){
        Serial.println("Motion stopped!"); //  "Движение прекращено!"
        state = LOW;       // обновляем состояние переменной на LOW
    }
  }
}

См.также

Внешние ссылки