Введем светодиодную индикацию и звуковую сигнализацию, чтобы информировать вас о наступлении неблагоприятных климатических условиях или условиях, представляющих опасность для дома (пожар, утечка газов). Для светодиодной индикации будем использовать обычные светодиоды, которые подсоединим к цифровым выводам (26-32) Arduino Mega (используем ограничительные резисторы номиналом 220 Ом). Для звуковой индикации будем использовать небольшой динамик (рис. 5.5). При подключении динамика к выводу Arduino Mega используем npn-транзистор и резистор номиналом 510 Ом. Схема соединений для подключения светодиодов и динамика к плате Arduino Mega показана на рис. 5.6.
Рис. 5.5. Динамик для звуковой сигнализации
Рис. 5.6. Схема подключения светодиодов и динамика к плате Arduino Mega
Внесем дополнительный функционал в наш скетч. Создадим константы граничных значений датчиков. В файл defines.h добавим:
// параметры датчиков для срабатывания
// светодиодной индикации и звуковой сигнализации
#define LIMIT_DHT22MIN 18 // влажность воздуха низкая
#define LIMIT_DHT22MAX 90 // влажность воздуха высокая
#define LIMIT_DS18B20MIN 15 // температура низкая
#define LIMIT_DS18B20MAX 30 // температура высокая
#define LIMIT_SOILMOISTUREMIN 300 // влажность почвы - чрезмерная влажность
#define LIMIT_SOILMOISTUREMAX 600 // влажность почвы - сухость
#define LIMIT_LEVELWATER 100 // вода
#define LIMIT_FAIR 100 // огонь
#define LIMIT_MQ2P 30 // пропан
#define LIMIT_MQ2M 30 // метан
#define LIMIT_MQ2S 30 // дым
#define LIMIT_MQ7 30 // CO
А также пин подключения динамика
// пин, к которому подключен динамик
#define SOUNDPIN 42
Далее в файле 05_03.ino создадим массивы пинов для подключения светодиодов, а также частот для звуковых оповещений:
// массив для хранения данных пинов светодиодов
int pinleds[]={26,28,30,32,34,36,38};
// массив для хранения частот и длительностей
// для звуковых оповещений
int freq[]={293,329,349,370,392,440,494};
int durations[]={3000,3000,3000,4000,4000,4000,4000};
в цикле loop() после получения данных с датчика делаем обращение к процедуре проверке данных датчиков на критические значения:
// проверка данных на критичность
void control_data_limit(int par) {
float val;
switch(par) {
case 0: // DHT22
val=datasensors[0];
if((val<LIMIT_DHT22MIN || val>LIMIT_DHT22MAX)
&& aktivesensors[0]==1) {
set_status_leds(0,HIGH);
set_status_sound(0);
}
else
set_status_leds(0,LOW);
break;
case 1: // DS18B20
val=datasensors[1];
if((val<LIMIT_DS18B20MIN || val>LIMIT_DS18B20MAX)
&& aktivesensors[1]==1) {
set_status_leds(1,HIGH);
set_status_sound(1);
}
else
set_status_leds(1,LOW);
break;
case 2: // SoilMoisture
val=datasensors[2];
if((val<LIMIT_SOILMOISTUREMIN
|| val>LIMIT_SOILMOISTUREMAX)
&& aktivesensors[2]==1) {
set_status_leds(2,HIGH);
set_status_sound(2);
}
else
set_status_leds(2,LOW);
break;
case 3: // waterlevel
val=datasensors[3];
if(val>LIMIT_LEVELWATER && aktivesensors[3]==1) {
set_status_leds(3,HIGH);
set_status_sound(3);
}
else
set_status_leds(3,LOW);
break;
case 4: // fire
val=datasensors[4];
if(val>LIMIT_FAIR && aktivesensors[4]==1) {
set_status_leds(4,HIGH);
set_status_sound(4);
}
else
set_status_leds(4,LOW);
break;
case 5: // mq2
val=datasensors[5];
if((datasensors[5]>LIMIT_MQ2P
|| datasensors[6]>LIMIT_MQ2M
|| datasensors[7]>LIMIT_MQ2S)
&& aktivesensors[5]==1) {
set_status_leds(5,HIGH);
set_status_sound(5);
}
else
set_status_leds(5,LOW);
break;
case 6: // mq7
val=datasensors[8];
if(val>LIMIT_MQ7 && aktivesensors[6]==1) {
set_status_leds(6,HIGH);
set_status_sound(6);
}
else
set_status_leds(6,LOW);
break;
default:
break;
}
}
Функции set_status_leds() и set_status_sound() отвечают за свечение светодиода и вывод на динамик звука с помощью встроенной функции tone().
// индикация на светодиоды
void set_status_leds(int par,int val) {
digitalWrite(pinleds[par],val);
}
// звуковая сигнализация
void set_status_sound(int par) {
tone(SOUNDPIN,freq[par],durations[par]);
}
Для каждого датчика в случае критических значений выводится звук частотой и длительностью, определенной в массивах
int freq[]={293,329,349,370,392,440,494};
int durations[]={3000,3000,3000,4000,4000,4000,4000};
Скачать данный скетч можно на сайте www.arduino-kit.ru по ссылке .