Управление реле на растояние 5-15 метров.
- Войдите на сайт для отправки комментариев
Вс, 24/02/2013 - 02:44
Посоветуйте пожалуйста какой-то простой пример удаленного управления через Arduino чем-то подобным: http://arduino.ru/sites/default/files/u3938/414-undzqol._sl500_aa300_.jpg
Другими словами. Появилась затея управлять светом в доме. Тянуть провода к каждой лампочке не хочется, ищю компактную альтертаниву.
Да я читал об етом. Но есть ли еще какието решения?
А как называется радиомодуль что на фото выше?
Это NRF24L01 - 2.4GHz Wireless Transceiver Module он позволяет соеденить 2 arduino.
nRF24L01 может соединить сколько угодно дуин, если организовать сетевой протокол, аппаратно эти модули поддерживают до 6 передатчиков на один приемник.
Посоветуйте пожалуйста какой-то простой пример удаленного управления через Arduino чем-то подобным: http://arduino.ru/sites/default/files/u3938/414-undzqol._sl500_aa300_.jpg
Другими словами. Появилась затея управлять светом в доме. Тянуть провода к каждой лампочке не хочется, ищю компактную альтертаниву.
Вот это уже не смешно. Дима, поручите эту работу специалистам. Как бы чего не вышло...
Без проводов лампочки светят только у магов! А маги не спрашивают как в таком случае им зажигать эти лампочки.
Или это такой развод? На внимательность?
Если на внимательность, то - "ищю" и "альтертаниву" :)
Купите что-то типа этого, разберите пульт и оптроном или транзистором "нажимайте" кнопку пульта.

Maksim, все, что Вы предлогаете получает ПИТАНИЕ по проводам...
Dima85 писал, что ему не хочется этого делать! Наука тут бессильна! :(
Я думаю, что имелось ввиду, что не хочется тянуть провода именно для управлеия светом, а не для питания.
maksim, интересное решение я рассматривал его ранее.
Ок! Итак, это не развод и это по настоящему. И как бы схему мы себе обычной проводки представляем достаточно ясно? Распаечная коробка, к ней 220, от нее а) к освещению, б) выключателю, в) розеткам, если они не на отдельной шине.
Я тоже когда-то задумался о дистанционке. Но следующие размышления заставили усомниться в целесообразности, и я оставил эту идею.
Итак, провода и выключатели это в прошлом. Допустим. Невзирая на расходы у нас имеется дистанционное включение. Схема. Питание от шины сразу к месту крепления светильника(ов)? Где-то рядом, вариант, "черный ящик с ардуиной" (без разницы, что в нем, главное оно работает включает и выключает и диммирует пусть. Необходимо, думаю, иметь гарантии от перепадов и сверхнапряжений. По питанию. Кстати, о питании! Ардуин тоже без питания лапой не пошевелит. Пять вольт. Поскольку изначально вопрос стал о применении китайских модулей, то о 100% надежности мы не помышляем. Рано или поздно сюрприз после слова "Свет!" или другого управляющего сигнала заложен. Причем сюрприз он всегда сюрприз. И я или хуже домашние в потьмах поминают изобретателя. Приходим к резерву оборудования. Сюрприз один не приходит. Но это как бы личный опыт. И не очевидно для других. Иначе говоря, изобретатель оправдывается невозможностью сделать это тот час же. Кулибину это идет в минус... И это поначалу не напрягает...поначалу. Значит, не вариант. Что же остается? Отказ от ширпотреба и переход на качественные и дорогие вещи или дубляж проводами. От чего ... к тому и пришел. Так в чем же фишка? А-а, да! В моем случае пять, не более, метров провода и дурацкое устройство из прошлого века которое крепится на стенку и висит там постоянно в одном и том же месте... :) Его даже не возможно засунуть и забыть где оно, ему не нужны управляющие сигналы кроме легкого прикосновения. Почти тоже что и каменный топор. Потом я забыл для чего я хотел дистанционку. Не вспоминалось. Вот вспомнилось. :) Многа букав написано без желания повыделываться и поумничать. Личный опыт.
Купите что-то типа этого, разберите пульт и оптроном или транзистором "нажимайте" кнопку пульта.
а случаем нет у кого-либо схем такого девайса ?
тоже интересует дистанционное управление светом, точнее даже не само управление, а компактное питание микроэлектронники
я думаю в этом цоколе однозначно стоит преобразователь 220-5/9 вольт + мозги
Я остановиля на вот таком решение, ранее я уже поднимал подобную тему
Я преобрел вот такой 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
Все замечательно работает. А пульт положил в долекий комод.
есть возможность сфоткать и выложить схематику самого цоколя ?
... интересует компактное питание микроэлектронники
я думаю в этом цоколе однозначно стоит преобразователь 220-5/9 вольт + мозги
Проект в разработке передатчик
#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; } } }Приемник
#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); } }На макетках все работает
есть возможность сфоткать и выложить схематику самого цоколя ?
Попробую на выходнях разобрать его. Пока могу сказать только что он достаточно большой и в некоторые из моих, - не могу вспомнить как правильно это на русском, люстры наверное, этот гаджет просто не влазит.
Сейчас еще подумываю о вот такой схеме, можно преобрести такой прикуриватель: 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$. Есть другие, маньше. В итоге получается достаточно истетический гаджет за очень маленькую цену.