Управление реле на растояние 5-15 метров.

Dima85
Offline
Зарегистрирован: 07.01.2013

Посоветуйте пожалуйста какой-то простой пример удаленного управления через Arduino чем-то подобным: http://arduino.ru/sites/default/files/u3938/414-undzqol._sl500_aa300_.jpg

Другими словами. Появилась затея управлять светом в доме. Тянуть провода к каждой лампочке не хочется, ищю компактную альтертаниву.

maksim
Offline
Зарегистрирован: 12.02.2012

Dima85
Offline
Зарегистрирован: 07.01.2013

Да я читал об етом. Но есть ли еще какието решения?

gena
Offline
Зарегистрирован: 04.11.2012

 А как называется радиомодуль что на фото выше?

 

Dima85
Offline
Зарегистрирован: 07.01.2013

Это  NRF24L01 - 2.4GHz Wireless Transceiver Module он позволяет соеденить 2 arduino.

maksim
Offline
Зарегистрирован: 12.02.2012

nRF24L01 может соединить сколько угодно дуин, если организовать сетевой протокол, аппаратно эти модули поддерживают до 6 передатчиков на один приемник.

paf
Offline
Зарегистрирован: 25.01.2013

Dima85 пишет:

Посоветуйте пожалуйста какой-то простой пример удаленного управления через Arduino чем-то подобным: http://arduino.ru/sites/default/files/u3938/414-undzqol._sl500_aa300_.jpg

Другими словами. Появилась затея управлять светом в доме. Тянуть провода к каждой лампочке не хочется, ищю компактную альтертаниву.

Вот это уже не смешно. Дима, поручите эту работу специалистам. Как бы чего не вышло...

Без проводов лампочки светят только у магов! А маги не спрашивают как в таком случае им зажигать эти лампочки. 

Или это такой развод? На внимательность?

Если на внимательность, то - "ищю" и "альтертаниву" :)

maksim
Offline
Зарегистрирован: 12.02.2012

Купите что-то типа этого, разберите пульт и оптроном или транзистором "нажимайте" кнопку пульта.

paf
Offline
Зарегистрирован: 25.01.2013

Maksim, все, что Вы предлогаете получает ПИТАНИЕ по проводам... 

Dima85 писал, что ему не хочется этого делать! Наука тут бессильна! :(

maksim
Offline
Зарегистрирован: 12.02.2012

Я думаю, что имелось ввиду, что не хочется тянуть провода именно для управлеия светом, а не для питания.

Dima85
Offline
Зарегистрирован: 07.01.2013

maksim, интересное решение я рассматривал его ранее.

 

paf
Offline
Зарегистрирован: 25.01.2013

Ок! Итак, это не развод и это по настоящему. И как бы схему мы себе обычной проводки представляем достаточно ясно? Распаечная коробка, к ней 220, от нее а) к освещению, б) выключателю, в) розеткам, если они не на отдельной шине. 

Я тоже когда-то задумался о дистанционке. Но следующие размышления заставили усомниться в целесообразности, и я оставил эту идею. 

Итак, провода и выключатели это в прошлом. Допустим. Невзирая на расходы у нас имеется дистанционное включение. Схема. Питание от шины сразу к месту крепления светильника(ов)? Где-то рядом, вариант, "черный ящик с ардуиной" (без разницы, что в нем, главное оно работает включает и выключает и диммирует пусть. Необходимо, думаю, иметь гарантии от перепадов и сверхнапряжений. По питанию. Кстати, о питании! Ардуин тоже без питания лапой не пошевелит. Пять вольт. Поскольку изначально вопрос стал о применении китайских модулей, то о 100% надежности мы не помышляем. Рано или поздно сюрприз после слова "Свет!" или другого управляющего сигнала заложен. Причем сюрприз он всегда сюрприз. И я или хуже домашние в потьмах поминают изобретателя. Приходим к резерву оборудования. Сюрприз один не приходит. Но это как бы личный опыт. И не очевидно для других.  Иначе говоря, изобретатель оправдывается невозможностью сделать это тот час же. Кулибину это идет в минус... И это поначалу не напрягает...поначалу.  Значит, не вариант.  Что же остается? Отказ от ширпотреба и переход на качественные и дорогие вещи или дубляж проводами. От чего ... к тому и пришел. Так в чем же фишка? А-а, да! В моем случае пять, не более, метров провода и дурацкое устройство из прошлого века которое крепится на стенку и висит там постоянно в одном и том же месте... :) Его даже не возможно засунуть и забыть где оно, ему не нужны управляющие сигналы кроме легкого прикосновения. Почти тоже что и каменный топор. Потом я забыл для чего я хотел дистанционку. Не вспоминалось. Вот вспомнилось. :) Многа букав написано без желания повыделываться и поумничать. Личный опыт. 

Great_BAO
Offline
Зарегистрирован: 25.02.2013

maksim пишет:

Купите что-то типа этого, разберите пульт и оптроном или транзистором "нажимайте" кнопку пульта.

а случаем нет у кого-либо схем такого девайса ?

тоже интересует дистанционное управление светом, точнее даже не само управление, а компактное питание микроэлектронники

я думаю в этом цоколе однозначно стоит преобразователь 220-5/9 вольт + мозги

Dima85
Offline
Зарегистрирован: 07.01.2013

Я остановиля на вот таком решение, ранее я уже поднимал подобную тему

Я преобрел вот такой 315Mhz RF transmitter and receiver link kit for Arduino http://www.ebay.com/itm/261086921764?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649

Благо в интернете достаточно много написано библиотек для этого под разные пульты.

И купил E27 Wireless Remote Control Lamp Holders Set with Remote Controller - White  http://dx.com/p/e27-wireless-remote-control-lamp-holders-set-with-remote-controller-white-115461

Все замечательно работает. А пульт положил в долекий комод.

 

Great_BAO
Offline
Зарегистрирован: 25.02.2013

есть возможность сфоткать и выложить схематику самого цоколя ?

maksim
Offline
Зарегистрирован: 12.02.2012

Great_BAO пишет:

... интересует компактное питание микроэлектронники

я думаю в этом цоколе однозначно стоит преобразователь 220-5/9 вольт + мозги

Гуглите "конденсаторный блок питания"

Danila52
Offline
Зарегистрирован: 13.12.2012

Проект в разработке передатчик

#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#include "SoftwareSerial.h"
SoftwareSerial port(12,13);
#else // Arduino 0022 - use modified NewSoftSerial
#include "WProgram.h"
#include "NewSoftSerial.h"
NewSoftSerial port(12,13);
#endif
int led3 = 3;
int led4 = 4;
int led5 = 5;
int led6= 6;
int led7= 7;

#include "EasyVR.h"
EasyVR easyvr(port);

//Groups and Commands
enum Groups
{
  GROUP_0  = 0,
  GROUP_1  = 1,
};

enum Group0 
{
  G0_VASY = 0,
};

enum Group1 
{
  G1_1 = 0,
  G1_2 = 1,
  G1_3 = 2,
  G1_4 = 3,
  G1_5 = 4,
  G1_6 = 5,
  G1_7 = 6,
  G1_8 = 7,
  G1_9 = 8,
  G1_10 = 9,
  G1_11 = 10,
};


EasyVRBridge bridge;
int val = 0;                    // переменная, куда будет считываться
int8_t group, idx;
#include <VirtualWire.h>
void setup()
{                
  //Serial.begin(9600);	  // Debugging only
  // Serial.println("setup");
  // Initialise the IO and ISR
  vw_set_tx_pin(9);
  vw_set_ptt_inverted(true); // Required for DR3100
  vw_setup(200);	 // Bits per sec
  // initialize the digital pin as an output.
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
  pinMode(led7, OUTPUT);
  int inputPin3 = 3;               // выбор входного пина (для кнопки)
  int inputPin4 = 4;               // выбор входного пина (для кнопки)
  int inputPin5 = 5;               // выбор входного пина (для кнопки)
  int inputPin6 = 6;               // выбор входного пина (для кнопки)
  int val = 0;                    // переменная, куда будет считываться
  digitalWrite(10, LOW); // устанавливем начальное значение состояния передатчика
  // bridge mode?
  if (bridge.check())
  {
    cli();
    bridge.loop(0, 1, 12, 13);
  }
  // run normally
  Serial.begin(9600);
  port.begin(9600);

  if (!easyvr.detect())
  {
    Serial.println("EasyVR not detected!");
    for (;;);
  }

  easyvr.setPinOutput(EasyVR::IO1, LOW);
  Serial.println("EasyVR detected!");
  easyvr.setTimeout(5);
  easyvr.setLanguage(0);

  group = EasyVR::TRIGGER; //<-- start group (customize)
}

void action();

void loop()
{
  easyvr.setPinOutput(EasyVR::IO1, HIGH); // LED on (listening)

  Serial.print("Say a command in Group ");
  Serial.println(group);
  easyvr.recognizeCommand(group);

  do
  {
    // can do some processing while waiting for a spoken command
  }
  while (!easyvr.hasFinished());

  easyvr.setPinOutput(EasyVR::IO1, LOW); // LED off

  idx = easyvr.getWord();
  if (idx >= 0)
  {
    // built-in trigger (ROBOT)
    // group = GROUP_X; <-- jump to another group X
    return;
  }
  idx = easyvr.getCommand();
  if (idx >= 0)
  {
    // print debug message
    uint8_t train = 0;
    char name[32];
    Serial.print("Command: ");
    Serial.print(idx);
    if (easyvr.dumpCommand(group, idx, name, train))
    {
      Serial.print(" = ");
      Serial.println(name);
    }
    else
      Serial.println();
    easyvr.playSound(0, EasyVR::VOL_FULL);
    // perform some action
    action();
  }
  else // errors or timeout
  {
    if (easyvr.isTimeout())
      Serial.println("Timed out, try again...");
    int16_t err = easyvr.getError();
    if (err >= 11)
    {
      easyvr.playSound(12, EasyVR::VOL_FULL); 
      Serial.print("Error ");
      Serial.println(err, HEX);
    }
  }
}

void action()
{
const int transmit_pin = 9;
const int transmit_en_pin = 10;
int inputPin3 = 3;               // выбор входного пина (для кнопки)
int inputPin4 = 4;               // выбор входного пина (для кнопки)
int inputPin5 = 5;               // выбор входного пина (для кнопки)
int inputPin6 = 6;               // выбор входного пина (для кнопки)
int val = 0;                    // переменная, куда будет считываться
byte count = 1;
{
  switch (group)
  {
  case GROUP_0:
    switch (idx)
    {
    case G0_VASY:
      digitalWrite(led7, HIGH);   // turn the LED on (HIGH is the voltage level)easyvr.playSound(9, EasyVR::VOL_FULL);
      easyvr.playSound(9, EasyVR::VOL_FULL); 
      easyvr.playSound(11, EasyVR::VOL_FULL); 
      group = GROUP_1; //<-- or jump to another group X for composite commands
      break;
    }
    break;
  case GROUP_1:
    switch (idx)
    {
    case G1_1:
      easyvr.playSound(14, EasyVR::VOL_FULL);
      easyvr.playSound(1, EasyVR::VOL_FULL);
      digitalWrite(led3, HIGH);   // turn the LED on (HIGH is the voltage level)
     delay(200);
      group = GROUP_1; //<-- or jump to another group X for composite commands
      val = digitalRead(inputPin3);  // считать значение на входе если на входе HIGH
      if (val == HIGH) 
      {            
       char msg[4] = {'1'}; //
       msg[4] = count;
       vw_send((uint8_t *)msg, 4);
       digitalWrite(transmit_en_pin, HIGH); // Flash a light to show transmitting
       vw_wait_tx(); // Wait until the whole message is gone
       digitalWrite(transmit_en_pin, LOW);
       delay(200);
     } 
    break;
      case G1_2:
      digitalWrite(led4, HIGH);   // turn the LED on (HIGH is the voltage level)
      easyvr.playSound(14, EasyVR::VOL_FULL);
      easyvr.playSound(2, EasyVR::VOL_FULL);
      group = GROUP_1; // <-- or jump to another group X for composite commands
       val = digitalRead(inputPin4);  // считать значение на входе если на входе HIGH
      if (val == HIGH) 
      {            
       char msg[4] = {'2'}; //
       msg[4] = count;
       vw_send((uint8_t *)msg, 4);
       digitalWrite(transmit_en_pin, HIGH); // Flash a light to show transmitting
       vw_wait_tx(); // Wait until the whole message is gone
       digitalWrite(transmit_en_pin, LOW);
       delay(200);
     } 
      break;
    case G1_3:
      digitalWrite(led5, HIGH);   // turn the LED on (HIGH is the voltage level)
      easyvr.playSound(14, EasyVR::VOL_FULL);
      easyvr.playSound(3, EasyVR::VOL_FULL);
      group = GROUP_1; // <-- or jump to another group X for composite commands
      val = digitalRead(inputPin5);  // считать значение на входе если на входе HIGH
      if (val == HIGH) 
      {            
       char msg[4] = {'3'}; //
       msg[4] = count;
       vw_send((uint8_t *)msg, 4);
       digitalWrite(transmit_en_pin, HIGH); // Flash a light to show transmitting
       vw_wait_tx(); // Wait until the whole message is gone
       digitalWrite(transmit_en_pin, LOW);
       delay(200);
     } 
      break;
    case G1_4:
      digitalWrite(led6, HIGH);   // turn the LED on (HIGH is the voltage level)
      easyvr.playSound(14, EasyVR::VOL_FULL);
      easyvr.playSound(4, EasyVR::VOL_FULL);
      val = digitalRead(inputPin6);  // считать значение на входе если на входе HIGH
      if (val == HIGH) 
      {            
       char msg[4] = {'4'}; //
       msg[4] = count;
       vw_send((uint8_t *)msg, 4);
       digitalWrite(transmit_en_pin, HIGH); // Flash a light to show transmitting
       vw_wait_tx(); // Wait until the whole message is gone
       digitalWrite(transmit_en_pin, LOW);
       delay(200);
     group = GROUP_1; // <-- or jump to another group X for composite commands
      }
      break;
    case G1_5:
      easyvr.playSound(14, EasyVR::VOL_FULL);
      easyvr.playSound(5, EasyVR::VOL_FULL);
      digitalWrite(led3, LOW);   // turn the LED on (HIGH is the voltage level)
      group = GROUP_1; // <-- or jump to another group X for composite commands
      val = digitalRead(3);  // считать значение на входе
      if (val == LOW) // если на входе LOW
      {            
       const char *msg = "5";
      digitalWrite(10, HIGH); // Flash a light to show transmitting
      vw_send((uint8_t *)msg, strlen(msg));  // Send '5' every 400ms.
      delay(200);
      digitalWrite(10, LOW);
      }  
      break;
    case G1_6:
      digitalWrite(led4, LOW);   // turn the LED on (LOW is the voltage level) 
      easyvr.playSound(14, EasyVR::VOL_FULL);
      easyvr.playSound(6, EasyVR::VOL_FULL);
      group = GROUP_1; // <-- or jump to another group X for composite commands
      val = digitalRead(inputPin6);  // считать значение на входе если на входе HIGH
      if (val == LOW) 
      {            
       char msg[4] = {'6'}; //
       msg[4] = count;
       vw_send((uint8_t *)msg, 4);
       digitalWrite(transmit_en_pin, HIGH); // Flash a light to show transmitting
       vw_wait_tx(); // Wait until the whole message is gone
       digitalWrite(transmit_en_pin, LOW);
          val = digitalRead(inputPin4);  // считать значение на входе если на входе HIGH
      if (val == HIGH) 
      {            
       char msg[4] = {'2'}; //
       msg[4] = count;
       vw_send((uint8_t *)msg, 4);
       digitalWrite(transmit_en_pin, HIGH); // Flash a light to show transmitting
       vw_wait_tx(); // Wait until the whole message is gone
       digitalWrite(transmit_en_pin, LOW);
       delay(200);
     } 
       delay(200);
     } 
      break;
    case G1_7:
      digitalWrite(led5, LOW);   // turn the LED on (LOW is the voltage level)      
      easyvr.playSound(14, EasyVR::VOL_FULL);
      easyvr.playSound(7, EasyVR::VOL_FULL);
      val = digitalRead(inputPin5);  // считать значение на входе если на входе HIGH
      if (val == LOW) 
      {            
       char msg[4] = {'7'}; //
       msg[4] = count;
       vw_send((uint8_t *)msg, 4);
       digitalWrite(transmit_en_pin, HIGH); // Flash a light to show transmitting
       vw_wait_tx(); // Wait until the whole message is gone
       digitalWrite(transmit_en_pin, LOW);
       delay(200);
     } 
      group = GROUP_1; // <-- or jump to another group X for composite commands
      break;
    case G1_8:
      digitalWrite(led6, LOW);   // turn the LED on (LOW is the voltage level) 
      easyvr.playSound(14, EasyVR::VOL_FULL);
      easyvr.playSound(8, EasyVR::VOL_FULL);
      group = GROUP_1; // <-- or jump to another group X for composite commands
         val = digitalRead(inputPin6);  // считать значение на входе если на входе HIGH
      if (val == LOW) 
      {            
       char msg[4] = {'8'}; //
       msg[4] = count;
       vw_send((uint8_t *)msg, 4);
       digitalWrite(transmit_en_pin, HIGH); // Flash a light to show transmitting
       vw_wait_tx(); // Wait until the whole message is gone
       digitalWrite(transmit_en_pin, LOW);
       delay(200);
     } 
      break;
    case G1_9:
      // easyvr.playSound(14, EasyVR::VOL_FULL);
      easyvr.playSound(10, EasyVR::VOL_FULL);
      group = GROUP_1; // <-- or jump to another group X for composite commands
      break;
      //case G1_10:
      //easyvr.playSound(14, EasyVR::VOL_FULL);
      //group = GROUP_1; // <-- or jump to another group X for composite commands
      break;
    case G1_11:
      digitalWrite(led7, LOW);  
      easyvr.playSound(13, EasyVR::VOL_FULL);
      group = GROUP_0; // <-- or jump to another group X for composite commands
      break;
    }
    break;
  }
}
}






Danila52
Offline
Зарегистрирован: 13.12.2012

Приемник

#include <VirtualWire.h>

//const int led_pin = 6;
const int receive_pin = 9;
const int transmit_en_pin = 10;
int led4 = 4;
int led5 = 5;
int led6 = 6;
int led7=  7;

void setup()
{
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
  pinMode(led7, OUTPUT);

  delay(1000);
  Serial.begin(9600);	// Debugging only
  Serial.println("setup");

  // Initialise the IO and ISR
  vw_set_rx_pin(receive_pin);
  vw_set_ptt_pin(transmit_en_pin);
  vw_set_ptt_inverted(true); // Required for DR3100
  vw_setup(200);	 // Bits per sec
  vw_rx_start();       // Start the receiver PLL running
}

void loop()
{
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;

  if (vw_get_message(buf, &buflen)) // Non-blocking
  {
    int i;
    digitalWrite(transmit_en_pin, HIGH); // Flash a light to show received good message
    delay(200);
    // Message with a good checksum received, print it.
    //Serial.print(" ");
    for (i = 0; i < buflen; i++)
    {
      if(buf[i] == '1') 
      {
        digitalWrite(led4, HIGH); 
      }
      if(buf[i] == '5') 
      {
        digitalWrite(led4, LOW); 
      } 
      if(buf[i] == '2')       {
        digitalWrite(led5, HIGH); 
      } 
      if(buf[i] == '6') 
      {
        digitalWrite(led5, LOW); 
      } 
      if(buf[i] == '3')       {
        digitalWrite(led6, HIGH); 
      } 
      if(buf[i] == '7') 
      {
        digitalWrite(led6, LOW);  
      } 
      if(buf[i] == '4')       {
        digitalWrite(led7, HIGH); 
      } 
      if(buf[i] == '8') 
      {
        digitalWrite(led7, LOW); 
      } 
      Serial.print((char)buf[i]);
      Serial.print(" ");
    }
    Serial.println("");
    digitalWrite(10, false);
  }

}




 

На макетках все работает

Dima85
Offline
Зарегистрирован: 07.01.2013

Great_BAO пишет:

есть возможность сфоткать и выложить схематику самого цоколя ?

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

 

Сейчас еще подумываю о вот такой схеме, можно преобрести такой прикуриватель: http://www.ebay.com/itm/160579455210?ssPageName=STRK:MEWAX:IT&_trksid=p3984.m1438.l2649

Всего $1.73 он выдает 12v - 500mA. Его можно разобрать выбрать круглый железный вход и поставить вместо него такое реле: http://www.ebay.com/itm/DC-12V-RF-Wireless-Remote-Control-Switch-Receiver-Transmitter-2-CH-4-CH-/180959861843?pt=Garage_Doors_Openers&var=&hash=item2a220c5c53

Стоит так же около 2$. Есть другие, маньше. В итоге получается достаточно истетический гаджет за очень маленькую цену.