Мазмуну:

EF230 Smart Home долбоору: 7 кадам
EF230 Smart Home долбоору: 7 кадам

Video: EF230 Smart Home долбоору: 7 кадам

Video: EF230 Smart Home долбоору: 7 кадам
Video: EF 230 Roomba Project 2024, Июль
Anonim
EF230 Smart Home долбоору
EF230 Smart Home долбоору

Керектүү тетиктер жана материалдар:

  • 1 Arduino MKR 1000
  • 3 Breadboards
  • 2 Mini Photocells
  • 1 NPN транзистору
  • 1 Mini Power Switch
  • 1 LED - RGB (4 тиштүү)
  • 1 LED (сиз тандаган түс)
  • 1 диод 1N4148
  • 1 10K Ом резисторлору
  • 5 100 Ом резистору
  • 1 температура сенсору TMP36
  • 1 DAGU 48: 1 катыш редуктору
  • 25 Jumper Wires
  • USB кабели
  • MATLAB программасы
  • SIK Experiment Guide for Arduino 101/Genuino 101 Board - SIK Experiment Guide Link

Бул долбоор үй ээлерине энергияны колдонууну жана коопсуздукту оптималдаштырууга жардам берүү үчүн маалыматтарды колдоно турган акылдуу үй системасынын концептуалдык дизайнын деталдаштырат. Бул түнкүсүн сырткы жарыктарды күйгүзүү үчүн жарык сенсорун, коопсуздук үчүн жарык сенсорун, жана температура сенсорун жана үй температурасын көзөмөлдөөчү желдеткичти камтыйт.

1 -кадам: Light Sensitive LED

  • Жарык сезгич LED орнотуу түнкүсүн келе жаткан үйдүн сырткы жарыктарын чагылдырууга арналган.
  • Кичи фотоэлементтер жарыктын азайганын сезгенде, LED күйөт.
  • Акылдуу үй үчүн бул энергия жана коопсуздукка таасирин тийгизет. Күндүз жарыкты өчүрүү менен энергияны үнөмдөйт жана түнкүсүн коопсуздукту күчөтөт.
  • Долбоордун бул бөлүгүнүн так өткөргүчтөрүн жана орнотууларын SIK Experiment Guideдеги 7 -эксперимент боюнча тапса болот.

2 -кадам: Mini Power Switch

  • Коммутатор - акылдуу үйдүн коопсуздук процессиндеги биринчи кадам.
  • Күйгүзүлгөндө, которуштуруучу колдонуучудан "Үй" же "Алыс" режимине кирүүнү каалаарын сураган жоопту баштайт.
  • Эгер "Үй" режими тандалса, коопсуздук куралсыз деп эсептелет, бирок "Алыс" режимин тандоо коопсуздук системасын куралдандырат.
  • Долбоордун бул бөлүгү үчүн өткөргүчтөрдү Эксперимент боюнча 6 -эксперимент боюнча тапса болот. Акылдуу үйдүн максаттары үчүн, 6 -экспериментте табылган светодиоддорду жана алардын туташтыруучу зымдарын кошуунун кажети жок.

3 -кадам: Экинчи Photocell

Экинчи фотоэлемент
Экинчи фотоэлемент
  • Экинчи фотоэлемент акылдуу үйдүн коопсуздук системасы үчүн кыймыл сенсору катары кызмат кылат.
  • Сенсор мурунку кадамда сүрөттөлгөндөй система "Away" режимине коюлганда гана колдонулат.
  • Эгерде фотоэлементте жарыктын көлөмү азайса, ал муну үйдүн ичиндеги кыймыл катары тааныйт.
  • Долбоордун бул бөлүгү үчүн орнотууну SIK Experiment Guide 7 -эксперимент боюнча тапса болот. Бирок зымдарга фотоцеллди жана аны туташтыруучу зымдарды гана кошуу керек.

4 -кадам: RGB LED

  • RGB LED акылдуу үйдүн коопсуздук системасы үчүн кичи кубат которгуч жана экинчи фотоэлемент менен бирге колдонулат.
  • Үч түрдүү түс акылдуу үйдүн тургуну үчүн индикатор катары колдонулат.
  • Система "Үй" режимине жайгаштырылганда, LED көк түскө айланат. Система "Алыс" режимине жайгаштырылганда, LED жашыл болуп калат. Кыймыл сенсору катары колдонулган фотоэлемент өчүрүлгөндө, жарык кызыл болуп жаркырайт.
  • RGB LED'инин зымдарын SIK Experiment Guide 3 экспериментинен тапса болот.

5 -кадам: Температура сенсору

  • Температура сенсору акылдуу үйдө энергияны үнөмдөөнүн негизги бөлүгү.
  • Акылдуу үй колдонулганда тургун үйүнө керектүү температураны киргизе алат.
  • Температура сенсору - бул система чыныгы температуранын каалаган температурадан канчалык алыс экенин билет.
  • Температура сенсорун орнотууну SIK Experiment Guide 9 экспериментинен тапса болот.

6 -кадам: DAGU редуктору

DAGU редуктору
DAGU редуктору
  • Мотор акылдуу үйгө каалаган температуранын жана температура сенсорунун көрсөткүчтөрүнүн негизинде үйдөгү температураны жөнгө салууга мүмкүндүк берет.
  • Үйдө AC бирдиги катары иштеп, мотор иш жүзүндөгү температуранын каалаган температурадан канчалык жогору экендигине жараша ар кандай ылдамдыкта айланат. Айырмасы канчалык жогору болсо, ал моторду тезирээк айлантат.
  • Кыймылдаткычтын зымдарын 11 -эксперименттин алдындагы Эксперимент Колдонмосунан тапса болот.

7 -кадам: Код

  • Акылдуу үйдүн коду бир нече колдонуучу интерфейстерин камтыйт, ал резидентке анын кантип иштээрин оңой түшүнүүгө жана орнотууларды оңой өзгөртүүгө мүмкүндүк берет.
  • Акылдуу үй тутуму менен, жашоочу алар жокто кыймыл сенсору өчүрүлгөн болсо, эскертүү алат жана электрондук кат алат.
  • Киргизилиши керек болгон жалгыз өзгөрүү - бул жөнөтүүчүнүн электрондук почтасы жана алуучунун электрондук почтасынын маалыматын киргизүү.

ачык а; ачык с; ачык м; clc; баарын жап; % Ардуино жана серво өзгөрмөлөрүн тазалаңыз, ошондо алар кодду эффективдүү иштетиши үчүн ар бир жолу кайра аныкталышы мүмкүн ("циклдердин бири туура иштеши үчүн" clear m "керек) a = arduino (); % Arduino өзгөрмөсүн коюңуз

s = servo (a, 'D6'); % Серво өзгөрмөсүн коюңуз

% Коопсуздук тутумунун эскертүүчү каты үчүн электрондук почта өзгөрмөлөрүн баштоо

emails = {'алуучунун дарегин киргизүү'}; % Коопсуздук почтасы жөнөтүлө турган электрондук каттар

% Почта жөнөтүү үчүн Gmailди колдонуу үчүн зарыл болгон электрондук почтанын тандоосу

setpref ('Интернет', 'E_mail', 'жөнөтүүчүнүн электрондук почта дареги');

setpref ('Интернет', 'SMTP_Username', 'жөнөтүүчүнүн колдонуучу аты');

setpref ('Интернет', 'SMTP_Password', 'жөнөтүүчүнүн сырсөзү');

реквизиттер = java.lang. System.getProperties;

props.setProperty ('mail.smtp.auth', 'true');

props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465');

% Электрондук почта темасы жана текст өзгөрмөлөрү

subj = 'Үйүңүзгө кирүүчүлөрдүн эскертүүсү';

text = 'Саламатсызбы, бул сиздин Smart Home коопсуздук тутумуңуз, сиздин үйүңүздүн сыртында кыймыл аныкталганын билдирет. Биз керектүү чараларды көрдүк жана сиздер үчүн бийликке кайрылдык. Коопсуз болуңуз. ';

чын болсо

prompt = {'Каалаган үй температурасын киргизиңиз (65F менен 85F ортосунда):'}; % Колдонуучунун кирүү менюсу

dlgtitle = 'Температураны тандоо'; % Колдонуучунун киргизүү менюсу үчүн аталышы

dims = [1 30]; % Колдонуучунун киргизүү менюсу үчүн өлчөмдөр

definput = {'72'}; % Меню биринчи ачылганда көрсөтүлүүчү демейки киргизүү

tempsel_array = inputdlg (ыкчам, dlgtitle, dims, definput); % Калкып чыгуучу колдонуучу киргизүү менюсу, киргизилген номерди массивге сактайт

if ~ isempty (tempsel_array) % Эгерде массив бош ЭМЕС

tempsel_char = cell2mat (tempsel_array); % Массивди символдор сапына айландырыңыз

tempsel = str2double (tempsel_char); % Белги сабын сандарга айландырыңыз

thingSpeakWrite (chID, tempsel, 'WriteKey', writeKey, 'Fields', 1); % Тандалган температураны ThingSpeak каналына жазыңыз

break % while циклинен ажыратыңыз, андыктан меню бир нече жолу чыкпайт

else % Эгерде колдонуучу температураны киргизүүнүн ордуна жокко чыгарса

msg1 = msgbox ('Температура тандалган жок, демейки 85F', 'Эскертүү!'); % Жокко чыгарууну баскандан кийин колдонуучуга билдирүү көрсөтүлөт

күтүү (msg1); % Улантуудан мурун билдирүү кутусунун жабылышын күтө туруңуз

tempsel = 85; % Температураны билдирүү кутучасында айтылгандай коюңуз

thingSpeakWrite (chID, tempsel, 'WriteKey', writeKey, 'Fields', 1); % Тандалган температураны ThingSpeak каналына жазыңыз

break % while циклинен ажыратыңыз, андыктан меню бир нече жолу чыкпайт

аяктоо

аяктоо

чын болсо

chID = 745517; % ThingSpeak каналынын идентификатору

writeKey = 'G9XOQTP8KOVSCT0N'; ThingSpeak каналына кирүү үчүн % ачкычы

% Маалыматтарды алуу үчүн сенсорлорду баштаңыз

tempread = readVoltage (a, 'A3'); % Температура сенсорунун чыңалуусун окуңуз

lightl1 = readVoltage (a, 'A2'); % Жарык деңгээли фоторезистор үчүн кызыл LEDга барат

lightl2 = readVoltage (a, 'A5'); Коопсуздук системасына бара турган фоторезистор үчүн жарыктын деңгээли

switchv = readVoltage (a, 'A0'); Которгучтун % мааниси

% Температура маалыматын чыңалуудан Фаренгейт градусына айландырыңыз

tempC = (темп - 0,5) * 100; % Чыңалууну Цельсий боюнча температурага айландыруу

tempF = (tempC * 9/5) + 32; % Цельсиядагы температураны Фаренгейт температурасына которуу

% Көп түстүү LED үчүн пин сандарын баштаңыз

redp = 'D9'; LEDдан кызыл жарык үчүн % пин

greenp = 'D10'; LEDден жашыл жарык үчүн % Pin

план = 'D11'; LEDден көк жарык үчүн % пин

if tempsel <tempF % Эгерде тандалган температура бөлмө температурасынан чоң болсо

writePosition (s, 1); % Servo кыймылдай баштайт

тыныгуу (10) % Серво 10 секундга чейин айланууну уланта берет, бул AC белгилүү бир убакыттан кийин өчүп калаарын билдирет

writePosition (s, 0); % Желдеткичти күйгүзбөстөн кодду улантуу үчүн желдеткичти өчүрүңүз

tempsel = 150; % Желдеткич өчкөндөн кийин, кайра эле кодду улантуу үчүн, температуранын маанисин өзгөртүңүз

аяктоо

if lightl1 <= 3 % Эгерде биринчи фоторезистор жарыктын төмөн деңгээлин аныктаса

writeDigitalPin (a, 'A1', 1); % Сырттагы жарыктарды билдирген кызыл LEDди күйгүзүңүз

башка % Эгерде жарыктын деңгээли кайрадан жогору болсо

writeDigitalPin (a, 'A1', 0); Жарыктын деңгээли кайрадан жетишерлик жогору болгондо кызыл LED өчүрүлсүн

аяктоо

эгер switchv> 3 % Эгерде которгуч күйгүзүлгөн болсо

A = бар ('m', 'var'); % 'M' өзгөрмөсүнүн бар экендигин текшериңиз, бул убактылуу циклди инициализациялайт жана меню пункту тандалганда аны бузууга мүмкүндүк берет (мунун себеби коддун башында так м жасалышы керек)

ал эми A == 0 % Loop 'm' өзгөрмөсү бар болгонго чейин аткарылат

menutext = 'Кайсы коопсуздук режимине киргиңиз келет?'; % Коопсуздук калкыма менюсу үчүн текст

choices = {'Үйдө', 'Сыртта'}; % Коопсуздук калкыма менюсу үчүн тандоолор

m = меню (меню тексти, тандоолор); % Коопсуздук системасынын режимдери үчүн калкыма меню

break % while цикли үзүлгөнүн камсыз кылат, андыктан меню бир нече жолу чыкпайт

аяктоо

if m == 1 % If 'Home' режими тандалган

writeDigitalPin (а, план, 1); Түсүн өзгөртүүчү LEDде жөн эле көк жарыкты күйгүзүңүз

writeDigitalPin (a, redp, 0);

writeDigitalPin (a, greenp, 0);

elseif m == 2 % Эгерде 'Away' режими тандалса

writeDigitalPin (a, bluep, 0);

writeDigitalPin (a, redp, 0);

writeDigitalPin (a, greenp, 1); Түсүн өзгөртүүчү LEDдеги жашыл жарыкты күйгүзүңүз

if lightl2 <= 3 % Экинчи фоторезистордо жарыктын деңгээли төмөн болсо, коопсуздук системасы тарабынан аныкталган кыймылды билдирет

sendmail (электрондук каттар, subj, текст); % Алдын ала аныкталган электрондук почта касиеттери бар электрондук кат жөнөтүү writeDigitalPin (a, greenp, 0); % Flash кызыл түсү 2 жолу күйүп жана өчөт

writeDigitalPin (a, redp, 1);

тындыруу (0.3)

writeDigitalPin (a, redp, 0);

тындыруу (0.3)

writeDigitalPin (a, redp, 1);

тындыруу (0.3)

writeDigitalPin (a, redp, 0);

тындыруу (0.3)

writeDigitalPin (a, redp, 1); Жарыктын деңгээли кайра көтөрүлмөйүнчө кыймыл бар экенин көрсөтүү үчүн жаркырап күйгөндөн кийин катуу кызыл менен бүтүрүңүз

msg2 = msgbox ('Коопсуздук тутуму тарабынан кирген адам аныкталды, үй ээлерине кабар берүү үчүн электрондук кат жөнөтүлдү.', 'ЭСКЕРТҮҮ!'); Колдонуучуга кыймыл жөнүндө кабарлоо үчүн % билдирүү кутусу жана жөнөтүлгөн электрондук кат жөнүндө кабарлоо үчүн күтүү (msg2) % Улантуудан мурун билдирүү кутусунун жабылышын күтүңүз.

башка

writeDigitalPin (a, greenp, 1); % Жарыктын деңгээли кайра көтөрүлгөндөн кийин кайра жашыл түскө айланат

аяктоо

аяктоо

elseif switchv <3.3 % Эгерде которгуч өчүрүлгөн болсо

writeDigitalPin (a, bluep, 0); % Коопсуздук тутуму өчүрүлгөнүн көрсөтүү үчүн LEDди толугу менен өчүрүңүз

writeDigitalPin (a, redp, 0);

writeDigitalPin (a, greenp, 0);

аяктоо

аяктоо

Сунушталууда: