Умная квартира (видео)

Всё, что не подходит под вышеперечисленные разделы

Модератор: immortal

Евгений
Сообщения: 42
Зарегистрирован: Пн авг 26, 2013 11:34 am
Благодарил (а): 0
Поблагодарили: 2 раза

Re: Умная квартира (видео)

Сообщение Евгений » Пт янв 17, 2014 12:51 pm

I_I_Imonder писал(а):какой блок питания подходит к мотору?
Любой на 12 вольт. Но лучше по мощнее, зависит еще от тяжести штор) у меня на 600 Ватт, но от него еще много всего питается. Ватт 50 хватит
Евгений
Сообщения: 42
Зарегистрирован: Пн авг 26, 2013 11:34 am
Благодарил (а): 0
Поблагодарили: 2 раза

Re: Умная квартира (видео)

Сообщение Евгений » Пт янв 17, 2014 12:53 pm

shemnik69 писал(а):Коллега! Спасибо за идеи!... молодец. Особенно на счет идеи привода штор...
Рад, что мои идеи стали полезны )
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Умная квартира (видео)

Сообщение sergejey » Пт янв 17, 2014 1:11 pm

Евгений писал(а):Вот примерный чертеж и схема крепления.
Точных размеров к сожалению нет, всё делалось на глаз. Диаметр катушки 40 мм. Прорезь для нити около 10 мм глубиной, но лучше сделать немного побольше. Но если сделать слишком большую, а то в крайних положениях натяжение нити будет слабое, а в середине слишком сильное.

Из мотора выходит квадрат - сверлим в нем отверстие и нарезаем резьбу на м4.
В катушке тоже делаем квадрат под размер моторного.
Одеваем катушку на квадрат и прикручиваем болтом - не оторвать)
Спасибо! Отличный вариант, возьму на вооружение. Эти стекло-подъёмники вещь в хозяйстве полезная -- у меня на них большие планы :)

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

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Евгений
Сообщения: 42
Зарегистрирован: Пн авг 26, 2013 11:34 am
Благодарил (а): 0
Поблагодарили: 2 раза

Re: Умная квартира (видео)

Сообщение Евгений » Пт янв 17, 2014 1:20 pm

sergejey писал(а):Эти стекло-подъёмники вещь в хозяйстве полезная -- у меня на них большие планы :)
Это точно, у меня помимо штор они двигают лифт с проектором и экран)
Спасибо за идею с питанием. Кажется понял, почему у меня в одном из проектов Ардуина глючит...
I_I_Imonder
Сообщения: 256
Зарегистрирован: Сб янв 11, 2014 2:54 pm
Благодарил (а): 12 раз
Поблагодарили: 14 раз

Re: Умная квартира (видео)

Сообщение I_I_Imonder » Пт янв 17, 2014 3:36 pm

как думаете подойдет вот этот контролер z-wave ZMR_FMBL для управления мотором?
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: Умная квартира (видео)

Сообщение Ivan » Пт янв 17, 2014 3:46 pm

I_I_Imonder писал(а):как думаете подойдет вот этот контролер z-wave ZMR_FMBL для управления мотором?
Ну он для того и нужен. Моторы до 1800 Вт. Та есть подключение на 220 и другое питание (Скорей всего стоит реле)

Тока будте осторожны. У меня димер прилично греется даже в выключенном состоянии (Думаю из-за импульсного блока питания на 220)
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
pdmitry2
Сообщения: 90
Зарегистрирован: Ср фев 06, 2013 1:12 pm
Откуда: Россия, Москва
Благодарил (а): 35 раз
Поблагодарили: 6 раз

Re: Умная квартира (видео)

Сообщение pdmitry2 » Пт янв 17, 2014 6:12 pm

Отлично! А скетч, можете выложить?
Евгений
Сообщения: 42
Зарегистрирован: Пн авг 26, 2013 11:34 am
Благодарил (а): 0
Поблагодарили: 2 раза

Re: Умная квартира (видео)

Сообщение Евгений » Пт янв 17, 2014 7:12 pm

pdmitry2 писал(а):Отлично! А скетч, можете выложить?

Код: Выделить всё

#include <SPI.h>
#include <Ethernet.h>

String command;

boolean RS5on = 0; //Для включения реле 5

boolean incoming = 0;
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };
IPAddress ip(192,168,1,11);
byte remote_ip[] = {192,168,1,10};
EthernetServer server(80);

//Переменные и порты для карнизов
int RELE_1_o = 53;
int RELE_1_z = 39;
int RELE_2_o = 37;  //51 был
int RELE_2_z = 49;
int Gerkon_1_o = 47;
int Gerkon_1_z = 45;
int Gerkon_2_o = 43;
int Gerkon_2_z = 41;

boolean sRele_1_o = false;
boolean sRele_1_z = false;
boolean sRele_2_o = false;
boolean sRele_2_z = false;

int ON = 0;
int OFF = 1;

//Для РелеШилд
int RS1 = 22;
int RS2 = 24;
int RS3 = 26;
int RS4 = 28;
int RS5 = 30;
int RS6 = 32;
int RS7 = 34;
int RS8 = 36;

//Для секундной задержки
long interval = 1000;
long MillisR1 = 0;
long MillisR2 = 0;
long MillisR3 = 0;
long MillisR4 = 0;
long MillisR5 = 0;
long MillisR6 = 0;
long MillisR7 = 0;
long MillisR8 = 0;

//Функции
void sendGet(String text) {
    EthernetClient client = server.available();
    if (client.connect(remote_ip, 80)) {
      Serial.println("connected. Send GET");
      // отправка GET
      client.print("GET ");
      client.print(text);
      client.print(""); // защитный код
      client.println(" HTTP/1.1");
      client.println("Host: localhost"); // почему то без этой строки сервер игнорит
      client.println("Connection: close");
      client.println();
      // рвем соединение
      client.stop();
    } 
    else {
      // почему то не удалось подключиться к серверу
      Serial.println("connection failed");
    }
} 

void setup()
{
  
  // запускаем Ethernet соединение и сервер:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
  
  //Для карнизов
  pinMode(RELE_1_o, OUTPUT);  
  pinMode(RELE_1_z, OUTPUT); 
  pinMode(RELE_2_o, OUTPUT);  
  pinMode(RELE_2_z, OUTPUT); 
  
  digitalWrite(RELE_1_o, OFF);
  digitalWrite(RELE_1_z, OFF);
  digitalWrite(RELE_2_o, OFF);
  digitalWrite(RELE_2_z, OFF);  

  pinMode(Gerkon_1_o, INPUT);  
  pinMode(Gerkon_1_z, INPUT); 
  pinMode(Gerkon_2_o, INPUT);  
  pinMode(Gerkon_2_z, INPUT); 
  
  //Для РелеШилд
  pinMode(RS1, OUTPUT);  
  pinMode(RS2, OUTPUT); 
  pinMode(RS3, OUTPUT);  
  pinMode(RS4, OUTPUT); 
  pinMode(RS5, OUTPUT);  
  pinMode(RS6, OUTPUT); 
  pinMode(RS7, OUTPUT);  
  pinMode(RS8, OUTPUT); 
  
  digitalWrite(RS1, OFF);
  digitalWrite(RS2, OFF);
  digitalWrite(RS3, OFF);
  digitalWrite(RS4, OFF);
  digitalWrite(RS5, OFF);
  digitalWrite(RS6, OFF);
  digitalWrite(RS7, OFF);
  digitalWrite(RS8, OFF); 
}

void openWindows()
{
  if (digitalRead(Gerkon_1_o) == HIGH) {
    digitalWrite(RELE_1_o, ON);
    sRele_1_o = true;
  }
  
  if (digitalRead(Gerkon_2_o) == HIGH) {
    digitalWrite(RELE_2_o, ON);
    sRele_2_o = true;
  }
}

void closeWindows()
{
  if (digitalRead(Gerkon_1_z) == HIGH) {
    digitalWrite(RELE_1_z, ON);
    sRele_1_z = true;
  }
  
  if (digitalRead(Gerkon_2_z) == HIGH) {
    digitalWrite(RELE_2_z, ON);
    sRele_2_z = true;
  }
}

 
void loop()
{
  // ожидание подключения клиентов
  EthernetClient client = server.available();
  if (client) {
    // Запрос HTTP заканчивается пустой строкой
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // считываем URL с символа "$" до первого пробела
        if(incoming && c == ' '){
          incoming = 0;
        }
        if(c == '$'){
          incoming = 1;
        }
 
        // Определяем что было в URL
        if(incoming == 1){
          Serial.println(c);
 
          if(c == 'o'){
            command = "open";
          }
          if(c == 'z'){
            command = "close";
          }
          if(c == '1'){
            command = "r1";
          }
          if(c == '2'){
            command = "r2";
          }
          if(c == '3'){
            command = "r3";
          }
          if(c == '4'){
            command = "r4";
          }
          if(c == '5'){
            command = "r5";
          }
          if(c == '6'){
            command = "r6";
          }
          if(c == '7'){
            command = "r7";
          }
          if(c == '8'){
            command = "r8";
          }
          if(c == 'a'){
            command = "vkl";
          }
          if(c == 'b'){
            command = "vykl";
          }
          
        }
 
        if (c == '\n') {
          // началась новая строка
          //Serial.println("Nachalas novaya stroka");
          currentLineIsBlank = true;
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.println("<html><head><title>Arduino</title></head><body>");
          client.println("</body><html>");
          break;
        }
        else if (c != '\r') {
          // в текущей строке ещё есть символы
          //Serial.println("V tekuschey stroke ect esche simvoly");
          currentLineIsBlank = false;
        }
      }
    }
    
    // даём время браузеру для получения данных
    delay(1);
    // закрываем соединение
    Serial.println("Client STOP");
    client.stop();
  }
  
  if (command == "open") {
    command = "";
    openWindows();
  }

  if (command == "close") {
    command = "";
    closeWindows();
  }
  
  if (command == "r1") {
    command = "";
    MillisR1 = millis();
    digitalWrite(RS1, ON);
  }

  if (command == "r2") {
    command = "";
    MillisR2 = millis();
    digitalWrite(RS2, ON);
  }
  
  if (command == "r3") {
    command = "";
    MillisR3 = millis();
    digitalWrite(RS3, ON);
  }

  if (command == "r4") {
    command = "";
    MillisR4 = millis();
    digitalWrite(RS4, ON);
  }

  if (command == "r5") {
    command = "";
    MillisR5 = millis();
    digitalWrite(RS5, ON);
  }

  if (command == "r6") {
    command = "";
    MillisR6 = millis();
    digitalWrite(RS6, ON);
  }

  if (command == "r7") {
    command = "";
    MillisR7 = millis();
    digitalWrite(RS7, ON);
  }

  if (command == "r8") {
    command = "";
    MillisR8 = millis();
    digitalWrite(RS8, ON);
  }

  if (command == "vkl") {
    command = "";
    RS5on = 1;
    digitalWrite(RS5, ON);
  }

  if (command == "vykl") {
    command = "";
    RS5on = 0;
    digitalWrite(RS5, OFF);
  }

//Выключаем реле, если прошла секунда
  unsigned long currentMillis = millis();
  
  if(currentMillis - MillisR1 > interval) {
    MillisR1 = 0;
    digitalWrite(RS1, OFF);
  }

  if(currentMillis - MillisR2 > interval) {
    MillisR2 = 0;
    digitalWrite(RS2, OFF);
  }

  if(currentMillis - MillisR3 > interval) {
    MillisR3 = 0;
    digitalWrite(RS3, OFF);
  }

  if(currentMillis - MillisR4 > interval) {
    MillisR4 = 0;
    digitalWrite(RS4, OFF);
  }

  if(currentMillis - MillisR5 > interval) {
    MillisR5 = 0;
    if (RS5on == 0) {
      digitalWrite(RS5, OFF);
    }
  }

  if(currentMillis - MillisR6 > interval) {
    MillisR6 = 0;
    digitalWrite(RS6, OFF);
  }

  if(currentMillis - MillisR7 > interval) {
    MillisR7 = 0;
    digitalWrite(RS7, OFF);
  }

  if(currentMillis - MillisR8 > interval) {
    MillisR8 = 0;
    digitalWrite(RS8, OFF);
  }
  

//Остановка моторов карнизов при сработке герконов

  if (digitalRead(Gerkon_1_o) == LOW && sRele_1_o == true) {
    digitalWrite(RELE_1_o, OFF);
    sRele_1_o = false;
    if (sRele_2_o == false) {
      sendGet("/objects/?script=ShadesOpen");
    }
  }
  
  if (digitalRead(Gerkon_2_o) == LOW && sRele_2_o == true) {
    digitalWrite(RELE_2_o, OFF);
    sRele_2_o = false;
    if (sRele_1_o == false) {
      sendGet("/objects/?script=ShadesOpen");
    }
  }
  
   if (digitalRead(Gerkon_1_z) == LOW && sRele_1_z == true) {
    digitalWrite(RELE_1_z, OFF);
    sRele_1_z = false;
    if (sRele_2_z == false) {
      sendGet("/objects/?script=ShadesClose");
    }
  }
  
  if (digitalRead(Gerkon_2_z) == LOW && sRele_2_z == true) {
    digitalWrite(RELE_2_z, OFF);
    sRele_2_z = false;
    if (sRele_1_z == false) {
      sendGet("/objects/?script=ShadesClose");
    }
  }
 

}

Вот последняя версия. Кроме карнизов еще Realy Shield 8 подключен. Принимает команды по Ethernet. Если призодит символ 'o' открывает обе шторы, если 'z' закрывает. Если цифра от 1 до 8 - включает на секунду реле. Может скетч сыроват, но в Ардуино у меня не большой опыт. Работает стабильно уже не первый месяц.
Евгений
Сообщения: 42
Зарегистрирован: Пн авг 26, 2013 11:34 am
Благодарил (а): 0
Поблагодарили: 2 раза

Re: Умная квартира (видео)

Сообщение Евгений » Пт янв 17, 2014 7:14 pm

I_I_Imonder писал(а):как думаете подойдет вот этот контролер z-wave ZMR_FMBL для управления мотором?
на сколько я понял он на 220в, а мотор на 12. Но подойдет любое беспроводное реле. Схему как обещал нарисую в ближайшее время
Евгений
Сообщения: 42
Зарегистрирован: Пн авг 26, 2013 11:34 am
Благодарил (а): 0
Поблагодарили: 2 раза

Re: Умная квартира (видео)

Сообщение Евгений » Пт янв 17, 2014 7:21 pm

Вот первый вариант скетча. Только шторы. Управлялся через serial. Отправляем в сериал символ o - открывает. Отправляем z - закрывает

Код: Выделить всё

int RELE_1_o = 53;
int RELE_1_z = 39;
int RELE_2_o = 37;  //51 был
int RELE_2_z = 49;
int Gerkon_1_o = 47;
int Gerkon_1_z = 45;
int Gerkon_2_o = 43;
int Gerkon_2_z = 41;

boolean sRele_1_o = false;
boolean sRele_1_z = false;
boolean sRele_2_o = false;
boolean sRele_2_z = false;

int ON = 0;
int OFF = 1;

char serialread;
	 
void setup() {               
  pinMode(RELE_1_o, OUTPUT);  
  pinMode(RELE_1_z, OUTPUT); 
  pinMode(RELE_2_o, OUTPUT);  
  pinMode(RELE_2_z, OUTPUT); 
  
  digitalWrite(RELE_1_o, OFF);
  digitalWrite(RELE_1_z, OFF);
  digitalWrite(RELE_2_o, OFF);
  digitalWrite(RELE_2_z, OFF);  

  pinMode(Gerkon_1_o, INPUT);  
  pinMode(Gerkon_1_z, INPUT); 
  pinMode(Gerkon_2_o, INPUT);  
  pinMode(Gerkon_2_z, INPUT); 
  
  Serial.begin(9600);
}

void openWindows()
{
  if (digitalRead(Gerkon_1_o) == HIGH) {
    digitalWrite(RELE_1_o, ON);
    sRele_1_o = true;
  }
  
  if (digitalRead(Gerkon_2_o) == HIGH) {
    digitalWrite(RELE_2_o, ON);
    sRele_2_o = true;
  }
}

void closeWindows()
{
  if (digitalRead(Gerkon_1_z) == HIGH) {
    digitalWrite(RELE_1_z, ON);
    sRele_1_z = true;
  }
  
  if (digitalRead(Gerkon_2_z) == HIGH) {
    digitalWrite(RELE_2_z, ON);
    sRele_2_z = true;
  }
}

void loop()
{
  
  if (Serial.available() > 0)
  {
    serialread=Serial.read();
    if(serialread=='o'){
      serialread='0';
      openWindows();
    }
    
    if(serialread=='z'){
      serialread='0';
      closeWindows();
    }
  }  
  
  if (digitalRead(Gerkon_1_o) == LOW && sRele_1_o == true) {
    digitalWrite(RELE_1_o, OFF);
    sRele_1_o = false;
    if (sRele_2_o == false) {
      Serial.println("Shtory otkyty");
    }
  }
  
  if (digitalRead(Gerkon_2_o) == LOW && sRele_2_o == true) {
    digitalWrite(RELE_2_o, OFF);
    sRele_2_o = false;
    if (sRele_1_o == false) {
      Serial.println("Shtory otkyty");
    }
  }
  
   if (digitalRead(Gerkon_1_z) == LOW && sRele_1_z == true) {
    digitalWrite(RELE_1_z, OFF);
    sRele_1_z = false;
    if (sRele_2_z == false) {
      Serial.println("Shtory zakryty");
    }
  }
  
  if (digitalRead(Gerkon_2_z) == LOW && sRele_2_z == true) {
    digitalWrite(RELE_2_z, OFF);
    sRele_2_z = false;
    if (sRele_1_z == false) {
      Serial.println("Shtory zakryty");
    }
  }
  
  
}
Ответить