Данный радиоконструктор представляет собой модель световой сигнализации на основе инфракрасного датчика движения с дополнительным выводом информации на двустрочный дисплей.
Состав конструктора:
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();
}
}
|