Проект по робототехнике "Модель «Умный дом»"
Индивидуальный исследовательский проект по робототехнике "Модель «Умный дом»" содержит справочные сведения о системе "умный дом", а также автор представляет свою разработку модуля системы «умный дом», разработку и исследование алгоритмов системы, позволяющих увеличить экономию ресурсов.
Подробнее о проекте:
Творческая работа учащегося 9 класса о создании программы управления "умным домом" содержит обзор систем управления зданиями и готовых программных решений, а также описывает выбор аппаратных средств, определяет нюансы, на которые стоит обратить внимание при внедрении программы "умный дом" и ее эксплуатации.
Готовая творческая работа по робототехнике на тему "Модель «Умный дом»" демонстрирует создание учащимся архитектуры аппаратных средств «умного дома» и разработку требований к многофункциональному программно-аппаратному стенду, а также описывает разработку его структуры. Коды для написания программы управления системой "умный дом" представлены в приложении к проекту.
Оглавление
Введение
1. Технологическая часть.
2. Разработка устройства.
Выводы
Список литературы
Приложение
Введение
Само понятие "умный" дом (англ. smart house) не такое уж молодое. Оно возникло в США в начале 70-х годов прошлого века, в недрах "Института интеллектуальных зданий". На тот момент под умным домом подразумевалось "здание, обеспечивающее продуктивное и эффективное использование рабочего пространства…".
Однако годом рождения современного "умного" дома можно считать 1978-й год. В этом году в США компании Х10 USA и Leviton разработали и внедрили в производство технологию управления бытовыми приборами по проводам бытовой электросети.
Распространение эти разработки получили в то время лишь на территории Северной Америки, ибо были рассчитаны на работу при напряжении 110 В и частоту сети 60 Гц. Тем не менее, именно этим фирмам человечество обязано появлением "невероятных чудес прогресса" - автоматически открывающихся дверей, включающегося по хлопку света и прочих "фокусов", которыми состоятельные американцы удивляли своих гостей, а голливудские фильмы - весь остальной мир.
Для конца 70-х годов технология X10 (именно такое название закрепилось и сохранилось за ней и поныне) являлась, конечно, революционной. Однако она была рассчитана на поддержку всего шести управленческих команд и, в основном, использовалась для управления электроосвещением. Но людям хотелось большего. "Умный" дом должен был становиться все "умнее".
С начала нового тысячелетия человечество шагает в эпоху новых технологических открытий, одним из которых является бытовая автоматизация. Время современного человека имеет огромную ценность и такие системы автоматизации как «умный дом» существенно экономят этот жизненно-важный ресурс.
Включить кондиционер, выключить свет в прихожей, активировать ночную сигнализацию - это лишь маленький перечень действий, которые можно возложить на систему «умного дома». Но такие устройства имеют один минус - большую рыночную стоимость. Поэтому разработка относительно дешевой системы, с аналогичными возможностями получает все большую актуальность.
Целью работы является разработка модуля системы «умный дом», а так же разработка и исследование алгоритмов системы, позволяющих увеличить экономию ресурсов.
Задачи проекта
- Создание архитектуры аппаратных средств «умного дома»
- Анализ программно-аппаратных систем управления «умным домом»
- Отладка стенда
Содержание работы
- Обзор систем управления зданиями
- Обзор готовых программных решений
- Выбор аппаратных средств
- Создание архитектуры аппаратных средств «умного дома»
- Разработка требований к многофункциональному программно-аппаратному стенду
- Разработка структуры программно-аппаратного стенда
Экспериментальная часть
- Отладка стенда
Технологическая часть
Arduino — это электронный конструктор и удобная платформа быстрой разработки электронных устройств для новичков и профессионалов. Платформа пользуется огромной популярностью во всем мире благодаря удобству и простоте языка программирования, а также открытой архитектуре и программному коду. Устройство программируется через USB без использования программаторов.
Arduino позволяет компьютеру выйти за рамки виртуального мира в физический и взаимодействовать с ним. Устройства на базе Arduino могут получать информацию об окружающей среде посредством различных датчиков, а также могут управлять различными исполнительными устройствами.
Микроконтроллер на плате программируется при помощи языка С++ и среды разработки Arduino. Проекты устройств, основанные на Arduino, могут работать самостоятельно, либо же взаимодействовать с программным обеспечением на компьютере (напр.: Flash, Processing, MaxMSP). Платы могут быть собраны пользователем самостоятельно или куплены в сборе. Программное обеспечение доступно для бесплатного скачивания. Исходные чертежи схем (файлы CAD) являются общедоступными, пользователи могут применять их по своему усмотрению.
В 2006 Arduino получила признание в категории Digital Communities на фестивале Ars Electronica Prix .
Аппаратная часть платформы Arduino
Существует несколько версий платформ Arduino. Последняя версия Leonardo базируется на микроконтроллере ATmega32u4.
Uno, как и предыдущая версия Duemilanove построены на микроконтроллере Atmel ATmega328.
Старые версии платформы Diecimila и первая рабочая Duemilanoves были разработаны на основе Atmel ATmega168 ,более ранние версии использовали ATmega8.
Arduino Mega2560, в свою очередь, построена на микроконтроллере ATmega2560.
Язык Arduino можно разделить на три раздела:
Операторы · setup() · loop() Управляющиеоператоры · if · if...else · for · switch case · while · do... while · break · continue · return · goto Синтаксис · ; (semicolon) · {} (curly braces) · // (single line comment) · /* */ (multi-line comment) Арифметическиеоператоры · = (assignment) · + (addition) - (subtraction) · (multiplication) · / (division) · % (modulo) Операторысравнения · == (equal to) · != (not equal to) · < (less than) · > (greater than) · <= (less than or equal to) · >= (greater than or equal to) · Логические операторы · && (И) · || (ИЛИ) · ! (Отрицание) Унарныеоператоры · ++ (increment) · -- (decrement) · += (compound addition) · -= (compound subtraction) · *= (compound multiplication) · /= (compound division) |
Данные Константы · HIGH | LOW · INPUT | OUTPUT · true | false · Целочисленные константы · Константы с плавающей запятой Типыданных · boolean · char · byte · int · unsigned int · word · long · unsigned long · float · double · string - массив символов · String - объект класса · массив (array) · void Преобразование типов данных · char() · byte() · int() · long() · float() Область видимости переменных и квалификаторы · Область видимости · static · volatile · const |
Функции Цифровой ввод/вывод · pinMode() · digitalWrite() · digitalRead() · Аналоговый ввод/вывод · analogRead() · analogReference() · analogWrite() Дополнительные фунции ввода/вывода · tone() · noTone() · shiftOut() · pulseIn() · Работа со временем · millis() · micros() · delay() · delayMicroseconds() Математические функции · min() · max() · abs() · constrain() · map() · pow() · sq() · sqrt() Тригонометрические функции · sin() · cos() · tan() Генераторы случайных значений · randomSeed() · random() Внешние прерывания · attachInterrupt() · detachInterrupt() Функции передачи данных · Serial |
Разработка устройства
Проектирование системы можно разделить на 2 части: аппаратную и программную.
Аппаратная часть системы представлена платформой Arduino (рис.1) с расширениями и физическими модулями. Arduino – это инструмент для проектирования электронных устройств, более тесно взаимодействующих с окружающей физической средой, чем стандартные персональные компьютеры.
В данной работе будет использована версия платформы Arduino UNO – самая популярная версия базовой платформы Arduino с USB-интерфейсом и возможностью подключения большого разнообразия плат расширения. Эта платформа предназначена для физических расчетов (physical computing) с открытым программным кодом, построенная на простой печатной плате с современной средой для разработки программного обеспечения .
Arduino использует микроконтроллер Atmega328, который имеет 32 Кб флеш памяти. Этого будет вполне достаточно для выполнения возложенной на платформу задачи. Остальная обработка будет распределена на веб-ресурс.
Микроконтроллеры Arduino отличаются наличием предварительно прошитого в них загрузчика. С помощью этого загрузчика пользователь загружает свою программу в микроконтроллер без использования традиционных отдельных аппаратных программаторов и соединяется с компьютером через USB-интерфейс.
Программная часть системы представлена в программном коде микроконтроллера (Arduino скетч) (см. Приложение 1)
- Модуль управления кроватью
- Модуль управления вентилятором
- Модуль управления светом
Выводы
Разрабатываемая система управления исключит вероятность того, что неиспользуемые в данный момент приборы будут потреблять электроэнергию. Это позволит улучшить энергосбережение используемого помещения и получить экономическую выгоду.
В данный момент работа не окончена. Идет стадия аппаратного проектирования системы «умный дом».
Список литературы
- В. Архипов «Системы для «интеллектуального» здания» - "СтройМаркет", № 45 1999 г.
- Mike Riley «Programming Your Home Automate with Arduino, Android, and Your Computer» - «The Pragmatic Bookshelf Dallas, Texas • Raleigh, North Carolina», 2012 г.
- Интернет-ресурсы.
Приложение 1
#include <Keypad.h>
#include <Servo.h>
const int
pin = 8,
DotDelay = 200;
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {31,33,35,37}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {39,41,43,45}; //connect to the column pinouts of the keypad
int a;
//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
char text[]="sos";
Servo servo; //объявляем переменную servo типа Servo
void setup()
{
Serial.begin(9600);
pinMode(pin, OUTPUT);
servo.attach(9);
}
void dot()
{
digitalWrite(pin,HIGH);
delay(DotDelay);
digitalWrite(pin,LOW);
delay(DotDelay);
}
void dash()
{
digitalWrite(pin,HIGH);
delay(DotDelay * 3);
digitalWrite(pin,LOW);
delay(DotDelay);
}
void A()
{
dot();
dash();
}
void B()
{
dash();
dot();
dot();
dot();
}
void C()
{
dash();
dot();
dash();
dot();
}
void D()
{
dash();
dot();
dot();
}
void E()
{
dot();
}
void f()
{
dot();
dot();
dash();
dot();
}
void G()
{
dash();
dash();
dot();
}
void H()
{
dot();
dot();
dot();
dot();
}
void I()
{
dot();
dot();
}
void J()
{
dot();
dash();
dash();
dash();
}
void K()
{
dash();
dot();
dash();
}
void L()
{
dot();
dash();
dot();
}
void M()
{
dash();
dash();
}
void N()
{
dash();
dot();
}
void O()
{
dash();
dash();
dash();
}
void P()
{
dot();
dash();
dot();
}
void Q()
{
dash();
dash();
dot();
dash();
}
void R()
{
dot();
dash();
dot();
}
void S()
{
dot();
dot();
dot();
}
void T()
{
dash();
}
void U()
{
dot();
dot();
dash();
}
void V()
{
dot();
dot();
dot();
dash();
}
void W()
{
dot();
dash();
dash();
}
void X()
{
dash();
dot();
dot();
dash();
}
void Y()
{
dash();
dot();
dash();
dash();
}
void Z()
{
dash();
dash();
dot();
dot();
}
void loop()
{
char customKey = customKeypad.getKey();
char customKey1 = customKeypad.getKey();
if (customKey)
{
Serial.println(customKey);
if (customKey == '5')
{
int a=0;
servo.write(180);
analogWrite(pin, 0);
delay(2000);
}
else
{
int a=1;
Serial.println(a);
servo.write(90);
analogWrite(pin, 400);
delay(1000);
morseText(text);
analogWrite(pin, 400);
delay(5000);
morseText(text);
analogWrite(pin, 400);
delay(10000);
morseText(text);
analogWrite(pin, 400);
delay(15000);
morseText(text);
analogWrite(pin, 400);
delay(20000);
morseText(text);
analogWrite(pin, 0);
delay(2000);
morseText(text);
}
}
}
void morseText(char text[])
{
int l=strlen(text);
for (int i=0; i<l; i++)
{
morseLetter(text[i]);
Serial.print(text[i]);
}
Serial.println();
}
void morseLetter(char letter)
{
if (letter==' ') delay(DotDelay * 6);
if (letter=='a') A();
if (letter=='b') B();
if (letter=='c') C();
if (letter=='d') D();
if (letter=='e') E();
if (letter=='f') f();
if (letter=='g') G();
if (letter=='h') H();
if (letter=='i') I();
if (letter=='g') G();
if (letter=='k') K();
if (letter=='l') L();
if (letter=='m') M();
if (letter=='n') N();
if (letter=='o') O();
if (letter=='p') P();
if (letter=='q') Q();
if (letter=='r') R();
if (letter=='s') S();
if (letter=='t') T();
if (letter=='u') U();
if (letter=='v') V();
if (letter=='w') W();
if (letter=='x') X();
if (letter=='y') Y();
if (letter=='z') Z();
}
Свет
#define led_pin1 13
#define led_pin2 12
#define led_pin3 11
#define led_pin4 10
#define led_pin5 9
#define ldr_pin A0
#define pot_pin A1
void setup()
{
pinMode(led_pin1, OUTPUT);
pinMode(led_pin2, OUTPUT);
pinMode(led_pin3, OUTPUT);
pinMode(led_pin4, OUTPUT);
pinMode(led_pin5, OUTPUT);
}
void loop()
{
int lightness = analogRead(ldr_pin);
int threshold = analogRead(pot_pin);
boolean tooDark = (lightness < threshold);
if (tooDark)
{
digitalWrite(led_pin1, HIGH);
digitalWrite(led_pin2, HIGH);
digitalWrite(led_pin3, HIGH);
digitalWrite(led_pin4, HIGH);
digitalWrite(led_pin5, HIGH);
}
else
{
digitalWrite(led_pin1, LOW);
digitalWrite(led_pin2, LOW);
digitalWrite(led_pin3, LOW);
digitalWrite(led_pin4, LOW);
digitalWrite(led_pin5, LOW);
}
}