УМНЫЙ ДОМ Проект Система Умного дома (Smart Home) на arduino

Nikolay Aweiros

✩✩✩✩✩✩✩
28 Окт 2020
4
0
Кхм. Так вот. Тут вообще зарегистрировался год назад для поиска решения одного вопроса (Вроде бы решение проблемы с питанием чего-то там но не важно) Недавно решил начать новый проект и тут преподаватель подсказал начать типа свой "блог" как на ютубе ваши АлексГайверы и так далее. Но так как тут новичок то немного познакомлюсь с вами.

Меня звать Николай, 14 лет. Живу на Сахалине, Корсаков, разглашать подробности, тобишь улица, квартира не буду :)

Вообще, проектами ардуино познакомился от того же АлексГайвера, и досих пор заел на его канале. Тогда лет мне было 12. В школе начали преподавание "робототехники" с помощью конструктора ЛЕГО. Тут начались мои азы в робототехники. Узнал, что такое блочное программирование...

Далее в нашей залу... в нашем городе появился центр по робототехнике, лодостроению, автостроению, аэростроению и робототехнике как Техносфера. Туда я и пошёл, где обитаю по сей день.

Теперь ближе к тематике моего проекта. Мой умный дом реализован на одной пока что ардуино нано. (Есть идея подключить ардуино уно как вспомогательную ну или вторую в выполнении каких-либо целей, например освещение или ещё что либо что скорее всего будет реализовано из-за малого кол-ва портов на нано если не найду шилд, увеличивающий кол-во портов)

Система умного дома будет состоять из:

Сигнализация:
-Ключ доступа
-Лог файл каждого кто заходил через карту доступа
-Открытие двери и окон
-Датчик движения
-Сигналирование светом(Красный) и Звуковой (Зуммер)
-Полное отключение срабатывании других систем(Кроме пожарки), когда сигнализация заблокирована, включение когда сигнализация дала "Добро"

-Освещение
-Освещение в коридоре при срабатывании датчика движения, но при одобрении сигнализацией
-Освещение при посылании сигнала от кнопки
-Освещение туалета при срабатывании датчика движения

-Датчики Углекислого газа, температуры.
-Опрос датчиков каждые 2 минуты
-Срабатывание сигнализационной системы при критических отметках температуры или углекислого газа.
-Уведомление пользователя о критических отметках с датчиков.
-Аварийное отключение всех систем, кроме сигнализации, всё освещение сразу включать.

-Пожарная сигнализация
-Срабатывание системы сигнализировании о пожаре
-Уведомление пользователя о пожареe
-Аварийное отключение света, датчики на постоянный опрос (Каждую секунду)

-Посылка сообщений (Скорее всего через интернет, т.к. GSM модуля на руках нема)

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

P.S. Надеюсь вы примите меня так сказать в свою "семью", и укажите на мои ошибки (Как и в блоге так и в проекте) которые я обязательно приму и буду исправлять.

День 1-8

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

Третий день ушёл на изучение модуля RFID RF-522, который будет выполнять роль считывателя карт, и его библиотеки MRFC522.
Четвёртый день ушёл на написание логики и первой версии программы. По логики, первая версия программы будет мигать Зелёным светодиодом при правильной поднесённой карте, а красным когда карты в памяти нет.
Код:
C++:
#include <SPI.h>
#include <MFRC522.h>

const int SS_PIN = 10;      // SS вывод модуля RC522
const int RST_PIN = 9;      // RST вывод модуля RC522
const int SVET_RED = 5;
const int SVET_GREEN = 7;
const int BUZZER = 6;




char* keys[]={"146 122 32 55"}; // ,

MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.

void setup()
{
  Serial.begin(9600);       // Initiate a serial communication
  SPI.begin();              // Initiate  SPI bus
  mfrc522.PCD_Init();       // Initiate MFRC522
  pinMode(SVET_RED, OUTPUT);
  pinMode(SVET_GREEN, OUTPUT);
  pinMode(BUZZER, OUTPUT);

        for(int b=0; b < 20; b++) {
        digitalWrite(SVET_RED, HIGH);
        digitalWrite(SVET_GREEN, HIGH);
        delay(100);
        digitalWrite(SVET_GREEN, LOW);
        digitalWrite(SVET_RED, LOW);
        Serial.println("LOADING...");
        delay(100);
      }
     
      delay(1000);
      digitalWrite(BUZZER, HIGH);
      Serial.println("LOADING COMPLETED");
      delay(550);
       digitalWrite(SVET_RED, HIGH);
       digitalWrite(BUZZER, LOW);
     
  Serial.println("Поднесите карту к считывателю");
}
void loop()
{
  if ( ! mfrc522.PICC_IsNewCardPresent()){
    return;
  }
  if ( ! mfrc522.PICC_ReadCardSerial()){
    return;
  }

  Serial.print("UID:");
  String content= "";
  byte letter;
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
     Serial.print(mfrc522.uid.uidByte[i], DEC);
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     content.concat(String(mfrc522.uid.uidByte[i], DEC));
  }
  Serial.println();
  content.toUpperCase();

int x=1;
  for (int i = 0; i < sizeof(keys) / sizeof(char *); i++){
  if (content.substring(1) == keys[i]){
    Serial.println("ACCESS IS ALLOWED");
   
      for(int b=0; b < 20; b++) {
        digitalWrite(SVET_RED, LOW);
        digitalWrite(SVET_GREEN, HIGH);
        digitalWrite(BUZZER, HIGH);
        delay(100);
        digitalWrite(SVET_GREEN, LOW);
        digitalWrite(BUZZER, LOW);
        delay(100);
       
      }
      digitalWrite(SVET_RED, HIGH);
    delay(5000);
    Serial.println("Поднесите карту к считывателю");
    digitalWrite(SVET_GREEN, HIGH);
  delay(100);
  digitalWrite(SVET_GREEN, LOW);
  for(int j=0; j < 10; j++) {
    digitalWrite(SVET_GREEN, HIGH);
    delay(100);
    digitalWrite(SVET_GREEN, LOW);
    delay(100);
  }
    return;
  }
  else  x=0;
}

if(x==0){
    Serial.println("ACCESS DENIED");
       digitalWrite(BUZZER, HIGH);
        delay(5000);
        digitalWrite(BUZZER, LOW);
      for(int b=0; b < 20; b++) {
   
        digitalWrite(SVET_GREEN, LOW);
        digitalWrite(SVET_RED, HIGH);
        delay(100);
        digitalWrite(SVET_RED, LOW);
        delay(100);
      }
      digitalWrite(SVET_RED, HIGH);

    delay(5000);
    Serial.println("Поднесите карту к считывателю");
      for(int j=0; j < 10; j++) {
    digitalWrite(SVET_GREEN, HIGH);
    delay(100);
    digitalWrite(SVET_GREEN, LOW);
    delay(100);
  }
}
   

}
Продолжение будет в следующем сообщении, так как работа всё ещё идёт, а фоток мало. Всем спасибо, пишите свои предложения по улучшению проекта и блога) Всем Добра)

Продолжение:
Часть 2
 
Изменено:

Nikolay Aweiros

✩✩✩✩✩✩✩
28 Окт 2020
4
0
Продолжение:
Где-то 10 и 11 октября занимался подготовкой считывателя, ну там проводки паял и тд. Проверку прошёл успешно, сделал отдельную плату с двумя индикаторами и пищалкой. (Фото сделать не успел, телефон сел, завтра сделаю фотки и принесу вам))
Поправил логику и пошёл пилить корпус... из фанеры... У этого человека явно шизофрения
Делал я делал, получилось как у рукожопа, делал до сегодняшнего дня. Сегодня подхожу к директору насчёт сломанного станка. Он мне говорит про лазерный станок. Я такой (Что?)
Оказывается на этом станке можно вырезать отдельно запчасти из фанеры, а я как полный просто дебил делал всё вручную... 3 дня...
Пока шли в его кабинет чтобы он показал как делать программу для этого сея чуда, он задал мне вопрос "Почему не сделал на 3D принтере?" И таким вопросом я сам задался...
За 5 минут он сделал мне примерную схему корпуса для считывателя, коробка с отверстиями под винты и т.п. И я был приятно удивлён, что пол коллектива училось по роликом Гайвера, и он сказал что я могу посмотреть его тутор по Чего-то там фьюжн.
Я реально был удивлён, что весь коллектив центра смотрит гайвера, даже наш ### ##### который успел побывать и дальнобоем, программистом в 3-ёх областях. (Да, он дедуля, но весёлый))
Так вот...

Сегодня ночь с кружкой вкусного чая и с тарелкой маминых пирожков с капустой буду смотреть туториал и тренироваться "пахать" в Автодеск Фьюжн (Во, вспомнил)
Всем спасибо за чтение этих каракулей с куча ошибок, поливайте в меня грязью в виде объяснений что я не так делаю, всем удачи, добра и позитива)
P.S. Фото буду делать завтра, и выложу их сюда, скорее всего провода, идущие к считывателю буду менять. И да, зелёный светодиод ###но
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,281
947
58
Марий-Эл
Да не, мне с ними простне везёт, очень тусклые получаютсЯ
С этим всё просто. У зелёных светодиодов очень большой ток потребления. Поэтому токоограничивающие резисторы, которые обычно рисуются в схемах имеют для них слишком большое сопротивление. Что бы этого не было. Нужно взять регулируемый блок питания, выставить выход в ноль. Подключить светодиод через мультиметр включенный на измерение тока (миллиамперы). И начинать потихоньку прибавлять напряжение. Сначала светодиод начнёт чуть чуть светиться, ток будет плавно увеличиваться. Прибавляем дальше. Здесь осторожнее, можно спалить. Как только ток начнёт увеличиваться более резко, пора остановиться. Чуть чуть убавить напряжение и принять текущее значение тока за базу для этого типа светодиода. Так же замеряем напряжение при котором светодиод светится с точностью 1 знак после запятой. Таким образом у тебя получится значение тока и напряжения при котором светится данный светодиод. А дальше уже по закону Ома рассчитываешь сопротивление токоограничивающего резистора. Обычно оно получается раза в три меньше, чем для красных.
 

AndreyD

✩✩✩✩✩✩✩
30 Июн 2020
1
0
Ни в коем случае) а вот айпи у меня прокси) жду несколько плат ардуино зеро, и пару модулей и датчиков)
А почему именно зеро?
Между собой ардуинки как будут "общаться", по проводам?

Думаю, лучше поставить одну по мощнее в качестве главной (типa due), а уже подчинёнными типа нанок (полуавтономных). На due можно будет потом ещё и веб-интерфейс сделать.
У меня много проблем решилось, когда я в качестве главного девайса стал использовать одноплатник с установленным на него MajorDoMo - https://mjdm.ru/ . Внизу странички есть демонстрации. А уже по комнатам у меня нанки стоят. Связь у меня по Ethernet, протокол MQTT. Кабель - витая пара, 4-е жилы на связь, 2-е на питание. К датчикам тоже витая пара.

Ещё полезно вычисление времени закатов и рассветов, не круглые же сутки в коридоре будет свет загораться по датчику движения. Ну или день можно будет по датчику интенсивности света определять. И на главном девайсе полезен будет модуль времени.

Модуль времени DS3231 - ссыль.

Для нанки рекомендую (для зеро не подойдут):
1. Винтовые зажимы - ссыль
2. Ethernet - ссыль

Релюшки для управления светом использую твердотельные - ссыль, но подключённые через опторазвязку - ссыль. Так же желательно через опторазвязку подключать цифровые датчики.

Для температуры/влажности/давления использую BME280
Для интенсивности света BH1750 - ссыль
 
Изменено: