Муниципальное бюджетное образовательное учреждение «СОШ №2»

Исследование возможностей контроллера Arduino

для создания макета «Умного дома»

Автор:

,

ученик 3 А класса

МБОУ СОШ №2

Научный руководитель:

,

учитель начальных классов

МБОУ СОШ №2

Чебоксары – 2016

Содержание работы:

Введение. Цели и задачи работы.  Гипотезы. Методы исследования. Актуальность темы. Что такое система «Умный дом», её возможности. Что такое контроллер Arduino и что он умеет. Физические опыты. Проектирование макета системы «Умный дом».

6.1. Управление освещением дома.

6.2. Управление температурой в доме.

6.3. Сигнализация.

Программирование. Тестирование и монтаж. Результаты исследования.

Список литературы.

Приложение 1. Опросный лист.

Приложение 2. Фотография дома.

Приложение 3. Электрические схемы.

Приложение 4. Код программы.


Введение.

Как и все мальчишки, я люблю всё, что связано с техникой и компьютерами, поэтому система «Умный дом», то есть возможность управлять обычными ежедневными домашними делами при помощи компьютера, для меня невероятно интересна. Было бы здорово узнать, как работает эта система, что она умеет, действительно ли дом становится «умным»?

Поэтому я был счастлив, когда папа подарил мне бытовой контроллер Arduino и объяснил, что с его помощью мы сможем сами создать макет «Умного дома», который потом можно будет реализовать уже в настоящей квартире или на даче.

Конечно, я люблю сидеть за компьютером, но мои родители, как обычно, ограничивают меня – по их мнению, это потерянное зря время. Моя работа докажет в том числе и то, что время, проведённое за компьютером, может принести пользу не только мне, но и всей семье, ведь у нас получился настоящий семейный проект.

НЕ нашли? Не то? Что вы ищете?

Может быть, вы думаете, что это очень дорогое хобби? Тогда я докажу заодно, что это вовсе не так.


Цели и задачи работы. Гипотезы. Методы исследования. Актуальность темы.

Цель моей работы – создать макет системы «Умный дом» как своеобразную «репетицию» внедрения подобной системы у себя дома. А также провести время с интересом и пользой и получить новые знания и навыки из области физики,  программирования и схемотехники.

Для этого всей нашей команде пришлось много поработать и выполнить следующие задачи:

Узнать, что такое «Умный дом» и выяснить, насколько он нужен нам в повседневной жизни. Изучить возможности бытового контроллера Arduino и узнать, как он работает, чтобы понять, как мы сможем использовать его для построения системы «Умный дом». Научиться собирать электрические схемы и попутно познакомиться с такими физическими величинами, как сила тока, напряжение и сопротивление, потому что без этого невозможно понять, как работает контроллер. Познакомиться с языком программирования, применяемым для контроллера, и научиться писать самые простые программы-«скетчи». Изготовить макет домика и вмонтировать в него изготовленную систему «Умный дом». Продумать возможности развития проекта в своей квартире или на даче.

В начале работы мы выдвинули такие гипотезы:

Система «Умный дом» в наше время интересна многим, поэтому моя работа так актуальна. С помощью контроллера Arduino можно построить макет системы «Умный дом» в игрушечном домике. С помощью  контроллера Arduino можно построить настоящую систему «Умный дом», которую можно использовать к квартире, в доме или на даче. Использование контроллера Arduino  в моей работе – всего лишь первая ступень к открытию интересного и увлекательного мира прикладного программирования, схемотехники и некоторых законов физики, с помощью которых мы познаём мир. Время, проведённое за компьютером, можно провести с пользой.

В своей работе мы использовали следующие методы исследования:

изучение литературы в Интернете; опрос; опыты и наблюдение; анализ результатов.

Актуальность темы подтвердилась при проведении простого опроса моих одноклассников (всего 30 опрошенных):

87% не знают о системе «Умный дом» или знают приблизительно, только 27% имеют дома какие-либо элементы интеллектуальных систем, и при этом 83% хотели бы иметь дома такую систему. Таким образом, опрос подтвердил правильность первой гипотезы.

Что такое система «Умный дом», её возможности.

Изучив литературу в Интернете, я узнал, что «умными» называют дома, в которых за безопасностью, энергосбережением и комфортом следит программное обеспечение, объединяющее бытовые приборы в единую систему с помощью различных технологий.

Эта система действительно умна: она умеет сама распознавать различные ситуации и автоматически реагировать на них по заданному сценарию.

Допустим, вы любите, чтобы температура в доме была 22°С, а влажность 40%. Один раз установив нужные параметры, вы можете больше не заботиться о своём комфорте: «Умный дом» сам будет следить за температурой и влажностью, и регулировать их автоматическим включением и отключением отопления, кондиционера и увлажнителя.

Или другой пример: вы часто уезжаете в отпуск и переживаете за безопасность квартиры. С системой «Умный дом» можно отдыхать спокойно: она сама проконтролирует все датчики движения и открывания окон и дверей, будет отправлять вам отчёты, а при попытке проникновения в дом включит сигнализацию и вызовет вневедомственную охрану.

Конечно, во многом это технологии будущего, но уже ближайшего, ведь со многими элементами этой системы мы уже знакомы, например, с датчиками движения в системе освещения подъездов или с простейшими пожарно-охранными сигнализациями.

       

Что такое контроллер Arduino и что он умеет.

К сожалению, пока установка системы «Умный дом» очень дорога, но при желании её можно сделать своими руками, например, при помощи бытового контроллера Arduino. Что же это такое?

Пришлось обратиться к специальной литературе. Итак, знакомьтесь: бытовой контроллер Arduino – это конструктор для разработки электронных систем с возможностью приёма сигнала от различных датчиков и управления различными электронными устройствами. Этот универсальный конструктор состоит из контроллера, макетной платы, различных устройств ввода (датчики, кнопки и т. д.) и вывода (светодиоды, двигатели, динамики, реле). Контроллер подключается к компьютеру, с которого программируются все процессы.

Задача контроллера в этой схеме – измерять электрическое напряжение на входах и подавать напряжение на выходы в соответствии с программой.

Звучит это очень сложно, поэтому приведу простой пример: подключаем к Arduino датчик температуры и вентилятор, программируем температурные значения, при которых вентилятор должен включаться и выключаться. Когда становится жарко – вентилятор включается, становится прохладнее – выключается. Это, конечно, самый простой пример, а вообще на базе Arduino можно создавать даже сложнейших роботов.


Физические опыты.

Пришло время познакомиться с основными понятиями электрической цепи с точки зрения физики.

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

Эксперимент 1: на входе – датчик освещения (фоторезистор), на выходе – светодиоды.

Наблюдения: при изменении уровня освещения меняется внутреннее сопротивление датчика и, соответственно, меняется напряжение на нём. Когда датчик получает много света, на входе будет высокое напряжение, а когда мало света – напряжение будет низким. Контроллер анализирует эти значения напряжения на входе, к которому подключен датчик, и управляет яркостью светодиода так, как указано в программе.

Выводы:

- чем меньше освещение, тем ярче горит светодиод, и наоборот

- чем больше сопротивление на датчике, тем больше и напряжение.

Итак, в этом процессе задействованы такие физические величины, как напряжение и сопротивление.


Проектирование макета системы «Умный дом».

Теперь мы знаем, что такое «Умный дом» и чем нам может помочь Arduino для его построения. Мы решили начать с установки системы в игрушечном домике, и для начала использовать всего несколько функций:

- датчик освещения для автоматического включения «ламп» (светодиодов) при наступлении темноты;

- датчик температуры для автоматического включения вентилятора и «камина» (светодиодов) при изменении температуры, и электронное табло для отображения значений температуры и влажности;

- звуковую сигнализация, срабатывающую при открывании двери.

Мы построили домик из старых обувных коробок и прочего подручного материала.

Следующий этап: сборка электрических схем, написание программ и тестирование системы (электрические схемы и код программы приведены в Приложениях 3 и 4).


Управление освещением дома.

Чтобы управлять освещением, нам нужно:

а) измерять уровень освещения (для этого используются датчик освещения (фоторезистор) и вспомогательный резистор);

б) менять уровень освещения (для этого используются светодиоды (4 шт.) и вспомогательный резистор).

С этими элементами собирается электрическая схема (см. Приложение 3). Алгоритм для программы следующий: если датчик освещения определяет уровень внешнего освещения как низкий, то включаются светодиоды или меняется их яркость, и наоборот. Текст программы приведён в Приложении 4.

По ссылке можно посмотреть видеоролик с демонстрацией системы освещения: https://drive. /file/d/0Bwl1K82tWjFCXzlfdHo5Y2dsSUU/view? usp=sharing


Управление температурой в доме.

Чтобы управлять температурой в доме, нам нужно:

а) измерять температуру и влажность (используется датчик температуры и влажности);

б) включать  вентилятор при t >= 25°С и выключать его при t <25°С  (требуется вентилятор и вспомогательный диод);

в) включать «камин» при t <=23 °С и выключить при темп > 23°С (требуются светодиоды (2 шт.) и вспомогательный резистор);

г) отображать  значения температуры и влажности при помощи дисплея (LCD дисплей I2C).

По ссылке можно посмотреть видеоролик с демонстрацией системы управления температурой: https://drive. /file/d/0Bwl1K82tWjFCc19iVndkYWg4Qm8/view? usp=sharing


Сигнализация.

Чтобы установить  сигнализацию в доме, нам нужно:

а) зуммер (для звуковой сигнализации);

б) индикатор активности сигнализации (светодиод и вспомогательный резистор);

в) кнопка для включения и отключения сигнализации;

г) датчик открывания двери и вспомогательные резисторы (2 шт.)

При включенной сигнализации (она включается нажатием и удержанием в течение 1 с кнопки сигнализации) загорается светодиод – индикатор активности. При открывании  двери срабатывает датчик, и зуммер начинает издавать звуковой сигнал.

Сигнализация отключается нажатием и удержанием в течение 1 с той же кнопки.

По ссылке можно посмотреть видеоролик с демонстрацией системы сигнализации: https://drive. /file/d/0Bwl1K82tWjFCeklpZ3ZZbmR1c0E/view? usp=sharing

Программирование.

Для освоения программирования мы использовали уроки из учебника «Быстрый старт. Первые шаги по освоению Arduino», а также «Cправочник по программированию Arduino». Конечно, здесь мне во многом помогал папа, но и мне удалось попробовать свои силы.

Программа для Arduino – это текстовый файл, в котором есть компьютерный код, т. е. команды, для написания которых используется специальный язык, и комментарии, которые объясняют, что делает этот код. Благодаря этим комментариям легко «читать» программу. Программа может состоять из блоков, т. е. универсальных наборов команд, и многие такие функции для Arduino уже написаны и их можно использовать в готовом виде.

Полный текст нашей программы можно увидеть в Приложении 4.


Тестирование и монтаж.

Таким образом, мы собрали все схемы, написали программу и протестировали нашу систему. Дальше пришлось повозиться, чтобы установить всю систему в домик. И вот, наконец, он стал «умным»! Подтвердилась наша вторая гипотеза: Arduino можно использовать для построения макета «Умного дома».


Результаты исследования.

Итак, цель моей работы достигнута – мы построили макет самой настоящей, работающей системы «Умный дом», а я получил огромное количество новых знаний и навыков: научился собирать электрические схемы, познакомился с такими физическими величинами, как напряжение и сопротивление, попробовал свои силы в программировании и получил массу позитивных впечатлений от интересной командной работы.

Подтвердилось и большинство наших гипотез: тема доказала свою актуальность, мы также  доказали возможность использования контроллера Arduino для построения макета «Умного дома», и знакомство с этим конструктором открыло мне двери в мир схемотехники и программирования.

А как же будущее? Подтвердилась ли моя гипотеза о том, что при помощи Arduino мы сможем построить интеллектуальную систему у нас дома?  Я уверен, что да, но для этого придётся потрудиться ещё больше, ведь, как оказалось, даже такой простой макет требует много знаний, умений и сил.

Кстати, ещё я обещал доказать, что моё увлечение вполне бюджетное! Расходы на проект составили не более 1 000 руб. – это гораздо меньше средней стоимости популярного конструктора Lego.

Я обязательно буду и дальше развивать свои знания в области технологий «Умного дома». Я уверен, что в будущем нас ждут умная школа, умный магазин, умный город!

Список литературы:

- http://postnauka. ru/tv/44586

- http://arduino. ru/

- http://lesson. iarduino. ru/

- www. amperka. ru 

- https://www. arduino. cc

- Статья «Ардуино всемогущий» в журнале «Популярная механика» (№ 000, сентябрь 2012).

- http://edurobots. ru/kurs-arduino-dlya-nachinayushhix/

- http:///arduino_dlya_nachinayushchikh-0

- http://adne. info/umnyj-dom-na-arduino/

-  Учебник «Быстрый старт. Первые шаги по освоению Arduino» на сайте www. maxkit. ru

- Справочник по программированию Arduino на сайте http://arduino. ru/Reference

Приложение 1. Опросный лист.

Опросный лист

К научно-исследовательской работе

Строим «Умный дом»: Исследование возможностей бытового контроллера Arduino для создания макета «Умного дома»

Автор Колпаков Антон, 3 А кл. СОШ №2

Цель опроса: выявить актуальность темы.

Пожалуйста, ответьте на вопросы и обведите нужный вариант ответа.

Вопрос 1.

Знаете ли вы, что такое система «Умный дом»?

А. да

Б. нет

В. приблизительно

Вопрос 2.

Есть ли у вас дома элементы системы «Умный дом»?

А. да

Б. нет

Вопрос 3.

Хотели бы вы иметь дома систему, которая автоматически управляла бы освещением, температурой, безопасностью, бытовыми приборами и т. д.?

А. да

Б. нет

В. не знаю.

Приложение 2. Фотография «Умного дома».

Приложение 3. Электрические схемы.

Схема 1. Освещение.

Схема 2. Температура.

Схема 3. Сигнализация.

Приложение 4. Код программы.

// Включаем дополнительную библиотеку для работы с датчиком влажности и температуры

#include "DHT. h"

// Включаем дополнительные библиотеки для работы с LCD дисплеем

#include <Wire. h>

#include <LiquidCrystal_I2C. h>

#define DHTPIN 2 // задаем номер пина, к которому подсоединен датчик температуры и влажности

// Объявляем LCD дисплей

LiquidCrystal_I2C lcd(0x27,16,2);

// Инициируем датчик температуры и влажности

DHT dht(DHTPIN, DHT11);

// Объявляем пины для датчика освещения и светодиодов освещения

const int sensorPin = 0;

const int ledPin = 9;

// Объявляем верхний и нижний порог значений датчика освещения

int lightLevel, high = 0, low = 1023;

// Объявляем пины вентилятора и светодиода камина

const int FanPin = 8;

const int HeatPin = 7;

// Объявляем флаг для поочередного отображения значения температуры

// или влажности на LCD

int tDf = 0;

// Объявляем пины кнопки активации сигнализации, сенсора открывания двери,

// пин зуммера, пин светодиода статуса активности сигнализации

  const int alarmButPin = 6;

  const int alarmSensorPin = 5;

  const int alarmBuzPin = 4;

  const int alarmLedPin=12;

// Инициализируем переменные состояния кнопки активации сигнализации,

// состояния датчика открывания двери,

// состояния активности сигнализации

  int alarmButState;

  int alarmSensState;

  int alarmActStat;

void setup()

{

// Инициализируем LCD

  lcd. init();

  lcd. backlight();

// Задаем выходы для светодидов освещения, вентилятора, и светодиодов камина

  pinMode(ledPin, OUTPUT);

  pinMode(FanPin, OUTPUT);

  pinMode(HeatPin, OUTPUT);

// Задаем входы для кнопки активации сигнал. и датчика открывания двери.

pinMode(alarmButPin, INPUT);

pinMode(alarmSensorPin, INPUT);

// Задаем выходы для зуммера и светодиода активности сигн.

pinMode(alarmBuzPin, OUTPUT);

pinMode(alarmLedPin, OUTPUT);

alarmActStat=0;

// Активируем датчик температуры

  dht. begin();

Serial. begin(9600); // для отладки, чтобы увидеть показания датчиков на консоли в среде разработки

}

void loop()

{

// Запускаем функцию работы освещения

  lightTreat();

// Запускаем функцию управления температурой

  temperatureTreat();

// Запускаем функцию управления сигнализацией

  alarmCheck();

delay(1000);  // пауза

}

void autoTune()

// Функция преобразования значения уровня датчика освещения в значение уровня

// освещения светодиодов, калибровка

{

  if (lightLevel < low)  // если уровень "lightLevel" меньше 1023, то присвоим

  {  // константе "low" новое значение, которое и будет

  low = lightLevel;  // теперь самым "низким" ~ 800

  }

  if (lightLevel > high)

  {

  high = lightLevel;

  }

  lightLevel = map(lightLevel, low+20, high-30, 0, 255);

  lightLevel = constrain(lightLevel, 0, 255);

}

void lightTreat ()

{

// Функция логики освещения

// Считываем значение датчика освещения

  lightLevel = analogRead(sensorPin);

// Здесь и далее выводим значение датчиков в консоль разработки

  Serial. println("*********** Light Part ***********");

  Serial. print("Value from sensor: ");

  Serial. println(lightLevel);

  autoTune();  // вызов функции преобр. знач датчика в знач освещения

  Serial. print("Low limit: ");

  Serial. println(low); 

  Serial. print("High limit: ");

  Serial. println(high); 

// Задаем значение светодиодов освещения

  analogWrite(ledPin, lightLevel);

  Serial. print("Value to LED:");

  Serial. println(lightLevel); 

  Serial. println("");

}

void temperatureTreat ()

{

// Часть логики температуры

  //Считываем влажность

  float h = dht. readHumidity();

  // Считываем температуру

  float t = dht. readTemperature();

// Проверяем доступность значений и в случае недоступности выводим ошибку

  if (isnan(h) || isnan(t))

  {

  Serial. println("Can't read the values");

  return;

  }

  Serial. println("*********** Temperature Part ***********");

  Serial. print("Humidity %: ");

  Serial. println(h);

  Serial. print("Temperature *C: ");

  Serial. println(t);

  //Логика управления вентилятором и камином

  if (t >= 25) 

  {

  digitalWrite(FanPin, HIGH);

  digitalWrite(HeatPin, LOW);

  }

  else if  (t <= 23)

  {

  digitalWrite(FanPin, LOW);

  digitalWrite(HeatPin, HIGH);

  }

  else

  {

  digitalWrite(FanPin, LOW);

  digitalWrite(HeatPin, LOW);

  //lcd. init();

  }

//Логика поочередного отображения значения темп и влаж на LCD

  if (tDf == 0)

  {

  lcd. clear();

  lcd. setCursor(0, 0);

  lcd. print("Temperature:");

  lcd. setCursor(0, 1);

  lcd. print(t);

  lcd. print((char)223);

  lcd. print("C ");

  tDf = 1;

  }

  else

  {

  lcd. clear();

  lcd. setCursor(0, 0);

  lcd. print("Humidity:");

  lcd. setCursor(0, 1);

  lcd. print(h);

  lcd. print((char)37);

  tDf = 0;

  }

}

void alarmCheck ()

{

// Объявляем длительность зучания зумера

int duration=150;

// Считываем значение состояния кнопки сигнализации и статус датчика открывания двери

  alarmButState = digitalRead(alarmButPin);

  alarmSensState = digitalRead(alarmSensorPin);

  Serial. print("AlarmBut state: ");

  Serial. println(alarmButState);  //

  Serial. print("alarm sense state: ");

  Serial. println(alarmSensState);  //

  Serial. print("alarm act state: ");

  Serial. println(alarmActStat);  //

// Логика работы сигнализации

// Если кнопка нажата и статус сигнализации неактивен то активируем сигн и включаем светодиод

if ((alarmButState==LOW) && (alarmActStat==0))

{

  alarmActStat=1;

  digitalWrite(alarmLedPin, HIGH);

}

// Иначе если  кнопка нажата и статус сигнализации активен то выключаем сигн и выключаем светодиод

else if ((alarmButState==LOW) && (alarmActStat==1))

{

  alarmActStat=0;

  digitalWrite(alarmLedPin, LOW);

  }

// Если датчик открывания двери разомкнут(дверь открыта) и сигнал активна включить зумер

  if ((alarmSensState==HIGH) && (alarmActStat==1))

  {

  Serial. print("alarm sense state: ");

  Serial. println(alarmSensState);  //

  Serial. print("alarm act state: ");

  Serial. println(alarmActStat);

// Включить зумер с частотой 454 Гц и определенной длительностью

  tone(alarmBuzPin, 454, duration);

// Ожидание воспроизведения зумера

  delay(duration);}