Страница 3 из 6

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

Добавлено: Пт янв 17, 2014 12:51 pm
Евгений
I_I_Imonder писал(а):какой блок питания подходит к мотору?
Любой на 12 вольт. Но лучше по мощнее, зависит еще от тяжести штор) у меня на 600 Ватт, но от него еще много всего питается. Ватт 50 хватит

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

Добавлено: Пт янв 17, 2014 12:53 pm
Евгений
shemnik69 писал(а):Коллега! Спасибо за идеи!... молодец. Особенно на счет идеи привода штор...
Рад, что мои идеи стали полезны )

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

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

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

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

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

Добавлено: Пт янв 17, 2014 1:20 pm
Евгений
sergejey писал(а):Эти стекло-подъёмники вещь в хозяйстве полезная -- у меня на них большие планы :)
Это точно, у меня помимо штор они двигают лифт с проектором и экран)
Спасибо за идею с питанием. Кажется понял, почему у меня в одном из проектов Ардуина глючит...

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

Добавлено: Пт янв 17, 2014 3:36 pm
I_I_Imonder
как думаете подойдет вот этот контролер z-wave ZMR_FMBL для управления мотором?

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

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

Тока будте осторожны. У меня димер прилично греется даже в выключенном состоянии (Думаю из-за импульсного блока питания на 220)

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

Добавлено: Пт янв 17, 2014 6:12 pm
pdmitry2
Отлично! А скетч, можете выложить?

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 - включает на секунду реле. Может скетч сыроват, но в Ардуино у меня не большой опыт. Работает стабильно уже не первый месяц.

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

Добавлено: Пт янв 17, 2014 7:14 pm
Евгений
I_I_Imonder писал(а):как думаете подойдет вот этот контролер z-wave ZMR_FMBL для управления мотором?
на сколько я понял он на 220в, а мотор на 12. Но подойдет любое беспроводное реле. Схему как обещал нарисую в ближайшее время

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");
    }
  }
  
  
}