Официальный сайт компании Arduino по адресу arduino.cc
Remote switch - простое управление покупными радиорозетками.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Надеюсь, тема будет полезна начинающим.
Итак, имеется набор радиорозеток с пультом, вот такой :
(живущим в Украине - куплено в "Эпицентре" за 99,95 грн.)
Работает этот набор на частоте 433 МГц, что дает возможность "рулить" розетками с Ардуины. Гугление темы подтвердило - имеются разные библиотеки для работы с разными управляемыми по 433/315 МГц исполнительными устройствами. Я начал с двух :
1. rc-switch - Arduino library to operate low cost 315 MHz / 433 MHz remote control devices , http://code.google.com/p/rc-switch/
2. RemoteSwitch - for generic remote switches, https://bitbucket.org/
fuzzillogic/433mhzforarduino/wiki/Home
Первая библиотека мне не подошла, упоминаю ее только "для ассортимента", а вот, зайдя по второй ссылке, на картинке
я с радостью обнаружил мой тип розеток, бинго !
Теперь конкретика. Берем Ардуино, приемник и передатчик на 433МГц (приемник потом не нужен будет), ага, вот такие
Приемник - на второй пин, передатчик - на десятый.
Приступаем к самому интересному.
1. Распаковываем библиотеку RemoteSwitch в \libraries\RemoteSwitch
2. Управлять розеткой будет функция RemoteSwitch::sendTelegram(code,RF_TX_PIN), но где взять значение code ? Да не проблема, запускаем \libraries\RemoteSwitch\examples\Show_received_code\Show_received_code.pde , открываем окно терминала.
3. Берем пульт, нажимаем по очереди все кнопки и в окне терминала видим искомые Code и period duration. Копипастим и сохраняем. Все, приемник можно отключать.
4. Из копипащеного делаем заготовку, что-то типа
unsigned int period = 146; unsigned long CodesON[] = { 265353, 266325, 266649 }; unsigned long CodesOFF[] = { 265349, 266321, 266645 };
5. Ну а теперь можно писать скетч для управления розетками. В моем случае была дописка рабочего скетча, поэтому процитирую только необходимые строки, кто не разберется - подробности спрашивайте.
#include <RemoteSwitch.h> #define RF_TX_PIN 10 // pin connected to 433MHz TX String readString = ""; ... // В void setup() для этой библиотеки в данном случае ничего не пишем ... // В void loop() принимаем команду : while (Serial.available()) { delay(3); //delay to allow buffer to fill if ( Serial.available() > 0 ) { char c = Serial.read(); //gets one byte from serial buffer readString += c; //makes the string readString } } if ( readString.length() > 0 ) { SendToRCSwitch(readString); } readString = "";
...
Далее существует некая функция, которая анализирует принятую извне команду и передает указания розеткам. Вот часть ее :
unsigned long transmitCode; unsigned int period = 146; unsigned long code; unsigned long CodesON[] = { 265353, 266325, 266649 }; unsigned long CodesOFF[] = { 265349, 266321, 266645 }; if (DoON == 0 ) { transmitCode = CodesON[cmdnom - 1]; } if (DoOFF == 0 ) { transmitCode = CodesOFF[cmdnom - 1]; } //Copy the received code. code = transmitCode & 0xFFFFF; //truncate to 20 bits for show; receivedCode is never more than 20 bits.. //Add the period duration to the code. Range: [0..511] (9 bit) code |= (unsigned long)period << 23; //Add the number of repeats to the code. Range: [0..7] (3 bit). The actual number of repeats will be 2^(repeats), //in this case 8 code |= 3L << 20; //Transmit the signal RemoteSwitch::sendTelegram(code,RF_TX_PIN); delay(100);
Тут все взято из первоисточника.
Ну вот и все, если в общих чертах. Готов ответить на вопросы.
UPD: разобрал одну из розеток - внутри обыкновенное реле 24V 10A (не то чтоб я удивился, интересовал вольтаж), так что для силовых розеток без проблем можно будет поменять его на более мощное (SSR, естественно).
это все ужастно интересно. но как бы вроде уже весь инет исписан вдоль и поперек подобными проектами, с примерами и прочими хороводами на ардуино..
самая основная проблема всех этих устройств, в том что они не имеют обратного отклика. они не сообщают о своем состоянии.. догадыватся включено оно или выключено можно только методом раскладывания пасьянса...
плюс ограниченое количество кодов.. даже при условии что один и тот же код включает и выключает...
есть еще выключатели такие же китайские... заметсо обычного вкручиваеш и играйся со светом удалено...
как то так :)
вы бы код вставляли кодом.. читалось бы легче и выглядело бы красивше..
да и реле вы конечно можете заменить хоть на пускач.. вопрос расчитаны ли провода и клемы на большее напряжение... а то как минимум все оплавится, а как максимум и сгорит вместе с домом... ибо никаких зашит с проверкой температуры там тоже нет
Согласен с Вами по всем пунктам, особенно насчет отсутствия обратной связи. Спасибо, Кэп :)
несколько лет назад тоже на них смотрел, но выбрал zwave и не жалею. Выходит раза в 3-4 дороже, но оно того стоит. Обратная связь присутствует. Наращивать можно шаг за шагом
поиграться конечно можно и с такими, хотя лучше тогда уже сделать свои )) раз мы все в теме програмирования МК
то, что там обычное реле - это обычная практика. Полноформатная розетка должна быть расчитана на 3,5квт, если делать ее в компактном корпусе то при использовании твердотельного реле не удасться решить задачу с теплоотводом.
Ну а там, где мощности десятиамперного реле не хватает, можно поставить что-то покруче, например, твердотельное реле.
Это розетка, обслуживающая утюг. Идея состоит в том, чтобы обесточивать её при включении "охранного" режима, во избежание, так сказать.
Внутри TSR-25DA от Fotek и "потроха" одной из радиоуправляемых розеток (см. топикстарт).
Коробочка с розеткой соединена тремя проводами.
там где не хватает реле 10А можно поставить реле 30А )))
Твердотельное реле тож не плохо только с учетом теплоотвода и размеров китайских реле - громоздко, не везде удобно
п.с. кто утюг еще не купил - покупайте утюг с встроенной защитой. У меня такой тефаль - если ему не менять положение более нескольких минут он сам отключается (причем в лежачем положении отключается быстрее). Так что без дополнительных заморочек практически исключается риск пожара
там где не хватает реле 10А можно поставить реле 30А )))
Твердотельное реле тож не плохо только с учетом теплоотвода и размеров китайских реле - громоздко, не везде удобно
п.с. кто утюг еще не купил - покупайте утюг с встроенной защитой. У меня такой тефаль - если ему не менять положение более нескольких минут он сам отключается (причем в лежачем положении отключается быстрее). Так что без дополнительных заморочек практически исключается риск пожара
Реле на радиаторе.
Купить утюг с защитой мне не интересно, в дополнительных заморочках весь смысл (Вы меня понимаете))). Кроме результата в решении реальных (и даже придуманных) задач важен ведь и процесс их решения (Вы меня опять понимаете))).
конечно понимаю)) у меня так же примерно сделано отключения всей плиты - тоже твердотельное реле на радиаторе только реле на 80А и стоит в щитке.
специально сделал оговорку - для тех кто утюг еще не купил)
Добрый день.
Подскажите пожалуйста как запрограммировать Ардуино Дуемиланова для управления радиорозетками через веб интерфейс?
Уж не знаю на какой ответ Вы рассчитаваете, пойду путем Капитана Очевидности : задача разделяется на две подзадачи.
1. Научите Ардуино управлять радиорозетками (см.выше в теме).
2. Научите Ардуино управляться через веб-интерфейс (см. поиск, таких проектов много, в т.ч. и на этом форуме).
1 + 2 = Дальше все еще очевидней.
Не сочтите за насмешку, это единственный способ САМОМУ запрограммировать Ардуино для управления радиорозетками через веб интерфейс..
За насмешку несочту конечно)
Я научил Ардуину управлять радиорозетками по средствам обработки сигналов с ИК пульта, благо примеров придостаточно, а вот с вебом застрял( Перекапал форум ничего подходящего ненашол, а можт нашол да не понял, что это, ОНО))) ОК буду дальше биться.
За насмешку несочту конечно)
Я научил Ардуину управлять радиорозетками по средствам обработки сигналов с ИК пульта, благо примеров придостаточно, а вот с вебом застрял( Перекапал форум ничего подходящего ненашол, а можт нашол да не понял, что это, ОНО))) ОК буду дальше биться.
web понятие растяжимое. Полноценная web консоль это одно и тут без компьютера не обойтись - получится связка розетка <-> радио <-> ардуино <-> ethernet <-> компьютер <-> web server <-> пользователь
либо web это GET/POST запросы в компьютерной сети например http://192.168.1.1/rozetka/001/off - выключаем свет у выклюателя номер 1. ну или простые кнопки в браузере - ON/OFF. Это можно сделать без компьютера
подключаете к ардуино с одной стороны радио для управления розетками с другой ethernet шилд для связи с компьютерной сетью. Поднимаете web server и в зависимости от того что хотите на web иметь делаете обработку
вот вам пример моего куска кода для обработки GET запросов из сети. Писал его как раз как gateway из компьютерной сети в радио сеть
Огромное Спасибо. Пытаюсь разобраться).
Eще один подходящий скетч http://arduino.ru/forum/programmirovanie/avtomaticheskii-reset#comment-42802
добрый день
есть вопрос это библиотека поддерживает чип PT2240.???????
заранее спасибо за ответ.
Упомянутые выше библиотеки не поддерживают.
«Заводим» радиоуправляемые розетки без пульта
http://habrahabr.ru/post/212215/
Можете подсказать где можно достать или добавить в библиотеку RC switch поддежку чипов PT2240. У меня два пульта на этих чипах. Подскажите пожалуиста.
Заранее спасибо
Можете подсказать где можно достать или добавить в библиотеку RC switch поддежку чипов PT2240.
Можно же посмотреть что шлют пульты, инструкция по реверсу есть в самом первом сообщении.
Плюс на хабре достаточно подробно разжевано про чипы, там правда 2272 был, но суть таже думаю.
спасибо за ответ и внимание
оказываеться у библиотека RC switch поддерживает чипы PT2240. 24bit
может кому то будет полезно.
может кому то будет полезно.
Будет более полезно если расскажите здесь про ваш опыт и что в итоге получилось:)
пульт на чипе PT2240(315мгц) имеет четыре кнопки. на ардуино про мини с применением бибилиотеки RC switch появились надписи по сериал порту 6116656 24bit.
Можно спросить ,а как передать эти коды через блютуз ,коды я узнал пульта теперь не могу понять как их отправить на 10 пин передатчика, из примеров не понял в какой системе счисления передавать эти коды .
сам задал сам отвечу
вот вам пример моего куска кода для обработки GET запросов из сети. Писал его как раз как gateway из компьютерной сети в радио сеть
Правда что-то ваш код не компилируется. Видимо совсем "кусок" - только часть кода ?
Дляаналогичных целей пробывал "RCSwitch Webserver" - но почему-то не срабатывает. Кто-то его еще пробывал ? Для управления радиореле через web ?
50$ розетка от Belkin. Там и Wifi и подсчет мощности и еще куча всякого.
это все лишнее
Кто поможет ,хочу другим пультом управлять розетками,код пульта получил ,не могу понять как написать код что поступил сигнал с кодом например 1234567 ,чтоб отправить команду с кодом определенной розетки ?
Вроде работает но включает с задержкой,что можно исправить?
Мне вот этот кусочек кода не совсем понятен.
code |= (unsigned long)period << 23;
//Add the number of repeats to the code. Range: [0..7] (3 bit). The actual number of repeats will be 2^(repeats),
//in this case 8
code |= 3L << 20;
Разжуйте пожалуйста.
Всем привет, использую библиотеку RemoteSwith для ролевых игровых целей, вообщем необходимо что бы когда на приемник не приходит сигнал с передатчика переменная Y была равна 0, а когда поднести приемник равна 85, проблема в том что когда подносишь приемник к передатчику, переменная меняется, а вот когда отходишь от передатчика и сигнал не поступает на приемник Y все равно равна 85. Я новичек в этом деле, вот часть кода.
Проще написать
if (receivedCode == 528526) //если есть доступные данные с передатчика 1
{
Serial.println("Priem 01");
y = 85;
}
else //если нет, меняем переменную
{
y = 0;
}
, хотя приведенный Вами кусок кода тоже вполне работоспособен. Наверное, проблема не в этом месте кода. Возможно, когда сигнал не поступает на приемник, не изменяется сама receivedCode.
if (receivedCode == 528526) //если есть доступные данные с передатчика 1
{
Serial.println("Priem 01");
y = 85;
}
else //если нет, меняем переменную
{
y = 0;
}
Этот вариант я тоже пробовал, но переменная сбрасывается только тогда когла послать другой сигнал с другой кнопки передатчика. В этом случае оператор else ждет другого значения что бы выполнить действие, а проблема в том что в receivedCode хранится код который был послан(
Очищайте receivedCode после проверки.
if (receivedCode == 528526) //если есть доступные данные с передатчика 1
{
Serial.println("Priem 01");
y = 85;
}
else //если нет, меняем переменную
{
y = 0;
}
receivedCode = 0;
Не помогает :(
Есть еще какие ни будь идеи( Уже на стенку лезу...
Из шести показанных строчек кода больше идей не будет.
Решил проблемму принудительным обнулением переменной в конце скетча) А вот еще вопрос, почему при нажатии на кнопку передатчика, приемник не всегда получает код.
Может тут что то подправить RemoteReceiver::init(0, 3, showCode); ?
или в общем
// Callback function is called only when a valid code is received.
void showCode(unsigned long receivedCode, unsigned int period)
{
//Serial.println(receivedCode);
delay(3);
if (receivedCode == 528526) //если есть доступные данные с передатчика 1
{
//Serial.println("Priem 01");
x = 85;
}
delay(3);
if (receivedCode == 528528) //если есть доступные данные с передатчика 2
{
//Serial.println("Priem 02");
y = 85;
}
delay(3);
if (receivedCode == 528534) //если есть доступные данные с передатчика 3
{
//Serial.println("Priem 03");
z = 85;
}
delay(3);
if (receivedCode == 528552) //если есть доступные данные с передатчика 4
{
//Serial.println("Priem 04");
f = 85;
}
delay(3);
if (receivedCode == 528768) //если есть доступные данные с передатчика 5
{
//Serial.println("Priem 05");
p = 85;
}
delay(3);
}
cudla1973
просветите что за цыфры в вашем скетче #23 / в скобках ( 349632,24 ) строка 27.
при отправке вашего скетча по радио, в приёмнике приходит совсем другая цифра code 58995
как получается такая цифра ??
и как передать настоящий код пульта ??
а что за микросхемы используют в розетках? даташит где посмотреть?
cudla1973
просветите что за цыфры в вашем скетче #23 / в скобках ( 349632,24 ) строка 27.
при отправке вашего скетча по радио, в приёмнике приходит совсем другая цифра code 58995
как получается такая цифра ??
и как передать настоящий код пульта ??
В скобках код моего пульта ,передаю через блютус программой написаной на ап инвертор
это ик ии радио?
это ик ии радио?
Фраза
"Есть в наличие пульт от ворот 433,92 MHz (2 кнопки) , узнал коды."
как бы намекает...
код от радио или от ик??
Ага, фраза не намекает. Хорошо, тогда так: dinamitch1 приводит скетч от Д.Осипова, обрабатывающий сигналы с ИК-пульта, и желает, чтобы добрые люди сделали из него скетч, обрабатывающий сигналы с пульта от ворот 433,92 MHz (2 кнопки) с кодами 144532 и 144534, period duration: 459us.
это ик ии радио?
Araris я прошу помоши зделать это , просто гугл не помог и я решыл обратится здесь
простенький пример управления реле с любого радиопульта 2262
можно дополнить и писать в память состояние реле, при вкл будет восстанавливаться.
вход приемника - 2
Спосибо что помог с кодом ;)
"можно дополнить и писать в память состояние реле, при вкл будет восстанавливаться." - это обезательно или можно обойтись?
в оригинальних китайских этого нет.
можно посмотреть на дополнительный код с состоянием реле? а то я не могу понять о чём ты.