Воскресенье, 16.12.2018, 11:42
Приветствую Вас Гость

Пайки.NET

Главное меню
Категории раздела
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » Статьи » Инструкции к конструкторам » Сигнализация с PIR датчиком движения

Arduino конструктор выпуск #3 Модель сигнализации с инфракрасным датчиком движения

Данный радиоконструктор представляет собой модель световой сигнализации на основе инфракрасного датчика движения с дополнительным выводом информации на двустрочный дисплей. 


Состав конструктора:

 

1.Плата RobotDyn UNO R3 (1 шт.)

2.Макетная плата на 400 точек (1 шт.)

3.LCD дисплей формата 1602 с установленным I2C адаптером (1 шт.)

4.Инфракрасный датчик движения (1 шт.)

5.Соединительные провода «штекер-штекер» (10 шт.)

6.Соединительные провода «штекер-гнездо» (10 шт.)

7.Красные светодиоды (3 шт.)

8.Синие светодиоды (3 шт.)

9.Зеленый светодиод (1 шт.)

10.Кабель MicroUSB (1 шт.)

11.Резисторы 220 Ом (6 шт.)

12.Инструкция (1 шт.)


Схема сборки:


Порядок сборки:

1.Извлеките элементы конструктора из упаковки.

2.Расположите макетную плату перед собой.

3.Соедините проводами «штекер-штекер» контакты на плате RobotDyn UNO R3 GND(1) и 5V(2) с дорожками «-» и «+» макетной платы соответственно.

4.Установите резисторы (3) одним концом на дорожку «-» макетной платы, а другим в рабочую область с шагом приблизительно 4 точки.

5.Установите светодиоды (4) на рабочую область макетной платы, подключив их короткие ноги к резисторам.

6.Цифровые выходы 2, 3, 4 платы RobotDyn UNO R3 подключите проводами «штекер-штекер» к длинным ногам красных светодиодов (5), а выходы 5, 6, 7 к длинным ногам синих светодиодов (6).

7.Установите зеленый светодиод (7) на плату RobotDyn UNO R3, подключив его длинную ногу к цифровому выходу 13, а короткую к контакту GND около него.

8.Соедините проводами «штекер-гнездо» выход GND (8) на I2C адаптере c дорожкой, отмеченной как «-», а выход VCC (9) с дорожкой, отмеченной как «+».

9.Очень осторожно снимите линзу с датчика движения, чтобы увидеть обозначения выходов.

10.Соедините проводами «штекер-гнездо» выход GND (10) на модуле с датчиком движения c дорожкой, отмеченной как «-», выход VCC (11) с дорожкой, отмеченной как «+», выход OUT (12) с цифровым выходом 8 платы RobotDyn UNO R3.

11.Установите линзу обратно на датчик движения.

12.Установите переключатель режима работы, а также регуляторы чувствительности и задержки датчика движения в положение, указанное на рисунках ниже.

13.Соедините проводами «штекер-гнездо» выход SDA (13) на I2C адаптере c аналоговым выходом A4 на плате RobotDyn UNO R3, а выход SCL (14) с аналоговым выходом A5.

14.Подключите плату RobotDyn UNO R3 к сети с помощью Micro USB кабеля и дождитесь окончания калибровки.

15.Настройте контрастность дисплея с помощью потенциометра, установленного на I2C адаптере.

 

Примечание: По своему усмотрению, Вы можете подключать не все синие и красные светодиоды, например, по одному или по два, а то и вовсе, использовать только дисплей. Так же, можно подключать только светодиоды, без использования дисплея. В этом случае вы не увидите сообщения о калибровке, сигналом о ее завершении будет мигание зеленого светодиода. Обратите внимание, что цифровые выходы 2, 3, 4 управляют одной группой светодиодов (красными, согласно схеме), а выходы 5, 6, 7 управляют второй группой (синими).


Используемые библиотеки:

I2C LCD.


Определение I2C адреса подключенных устройств


Код скетча для конструктора:

//Подключение необходимых библиотек и объявление констант

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

//Задержка в миллисекундах для мигалки в режиме тревоги
#define delAlarm 200

 

//Номер выхода к которому подключен датчик
#define pirPin 8

//Переменная хранящая состояние датчика движения
int pirValue;

//Задаем параметры дисплея: I2C адрес, число столбцов, число строк
LiquidCrystal_I2C lcd(0x3f, 16, 2);

//Так как наш дисплей не поддерживает русский алфавит, создаем вручную недостающие символы
//Память генератора знаков допускает создания до 8 пользовательских символов
//В нашем случае это "д","в","и","я","ж","н","ь","т"
//Для удобства можно воспользоваться сервисом https://omerk.github.io/lcdchargen/

// д
byte d[8] = {
  0b00000,
  0b00000,
  0b00110,
  0b01010,
  0b01010,
  0b11111,
  0b10001,
  0b00000
};

// в
byte v[8] = {
  0b00000,
  0b00000,
  0b11100,
  0b10010,
  0b11110,
  0b10001,
  0b11111,
  0b00000
};

// и
byte i[8] = {
  0b00000,
  0b00000,
  0b10001,
  0b10011,
  0b10101,
  0b11001,
  0b10001,
  0b00000
};

// я
byte ya[8] = {
  0b00000,
  0b00000,
  0b01111,
  0b10001,
  0b10001,
  0b01111,
  0b10001,
  0b00000
};

// ж
byte j[8] = {
  0b00000,
  0b00000,
  0b10101,
  0b10101,
  0b01110,
  0b10101,
  0b10101,
  0b00000
};

// н
byte n[8] = {
  0b00000,
  0b00000,
  0b10001,
  0b10001,
  0b11111,
  0b10001,
  0b10001,
  0b00000
};

//ь
byte mz[8] = {
  0b00000,
  0b00000,
  0b10000,
  0b10000,
  0b11110,
  0b10001,
  0b11110,
  0b00000
};

// т
byte t[8] = {
  0b00000,
  0b00000,
  0b11111,
  0b00100,
  0b00100,
  0b00100,
  0b00100,
  0b00000
};

 

//Метод setup выполняет первичную настройку, обьявляет переменные, инициализирует устройства

void setup() 

//Обозначим пины, к которым подключены светодиоды, как выходы
{
    for (int i = 2; i < 8; i++)
  {
    pinMode(i, OUTPUT);
  }
  pinMode(13, OUTPUT);

//Обозначим пин датчика движения как вход
  pinMode(pirPin, INPUT);
  digitalWrite(pirPin, LOW);

//Инициализация дисплея и включение подсветки
  lcd.init();
  lcd.backlight();

 //Добавляем в память знакосинтезатора дисплея созданные буквы
  //Индексы символов могут иметь значения от 0 до 7, всего 8
  lcd.createChar(1, d);
  lcd.createChar(2, v);
  lcd.createChar(3, i);
  lcd.createChar(4, ya);
  lcd.createChar(5, j);
  lcd.createChar(6, n);
  lcd.createChar(7, mz);
  lcd.createChar(0, t);

//Вывод сообщения приветствия и процесса калибровки
  lcd.setCursor(0, 0);
  lcd.print("RADIOPROFILE.RU");
  delay(3000);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("  calibration");
  lcd.setCursor(0, 1);
  for (int i = 0; i < 16; i++) 
  {
    lcd.setCursor(i, 1);
    lcd.print(".");
    delay(2000);
  }
  lcd.setCursor(6, 1);
  lcd.print("done");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("     sensor");
    lcd.setCursor(0, 1);
  lcd.print("     active");
  delay(2000);
}

 

//Метод, выполняемый во время ожидания движения - мигание зеленым светодиодом

void standbyblink()
{
  digitalWrite(13, HIGH);
  delay (200);
  digitalWrite(13, LOW);
  delay (1500);
}

//Метод, выполняемый во время старта тревоги - выключение зеленого светодиода и вывод сообщения на экран

void alarmstart()
{
  digitalWrite(13, LOW);
  lcd.clear();
  lcd.setCursor(1, 1);
  lcd.print("Ec \7 \1\2\3\5e\6\3e!");
  lcd.setCursor(3, 1);
  lcd.write(0);

}

//Метод, выполняемый во время окончания тревоги - выключение красно-синей мигалки и вывод сообщения на экран

void alarmend()
{
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("  He  \1\2\3\5e\6\3\4");
  lcd.setCursor(4, 0);
  lcd.write(0);
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);

}

//Метод, выполняемый во время тревоги - включение красно-синей мигалки

void alarmblink()
{

  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  delay(delAlarm);
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  delay(delAlarm);
}

//Метод loop выполняется в бесконечном цикле после работы метода setup
//Именно в этом методе происходят все главные действия программы
void loop()

//Чтение состояния датчика
{
  pirValue = digitalRead(pirPin);

//Если есть сигнал с датчика, то выполняется метод старта тревоги и метод самой тревоги
  if (pirValue == HIGH)
  {
    alarmstart();
    alarmblink();
  }

//Если нет сигнала, либо сигнал прекратился, выполняется метод окончания тревоги и метод режима ожидания
  else
  {
    alarmend();
    standbyblink();
  }
}

 

Категория: Сигнализация с PIR датчиком движения | Добавил: tisha (24.12.2016)
Просмотров: 525
Всего комментариев: 0
Вход на сайт
Поиск
Полезные ссылки