Помогите пожалуйста изменить работу ИК приёмника (точнее реле от него).

iven83
Offline
Зарегистрирован: 02.02.2017

Уверен, что кому-то это ерунда, а моих познаний не хватило (((

Изучал работу ИК приёмников, управление ИК пультами разной техникой - всё вроди понятно, всё по-настраивал. 

Но есть одна проблема - изначально на реле подаётся сигнал и оно включается, а меня это не устраивает (не подходит для проекта). Реле является переключателем из одного положения в другое и если я буду использовать реле с тиким скетчем (скачал у Дмитрия Осипова), магнитный засов будет отыркваться в счлучае чего с ардуиной (или питанием ардуины.

Помогите пожалуйста сделать так, чтоб при старте на реле был "0", т.е. чтоб подавалась только земля и 5 вольт, а сингал подавался при нажатии кнопки. 

Может реле можно как-то перенастроить (там есть перемычка слева, вообще не знаю для чего она)?

 

//urok ot Dmitriya Osipova - upravleniye Arduino IK pul?tom
#include <IRremote.h> // eto skachannaya biblioteka

int RECV_PIN = 11; //vkhod IK priyemnika
IRrecv irrecv(RECV_PIN);
decode_results results;
int a=0; // peremennaya pereklyucheniya rezhima , pri nazhatii knopki ona prinimayet znacheniye +1
int b=0; //
int c=0; //
int d=0; //
int e=0; //
int f=0; //
int g=0; //
 

void setup()
{
irrecv.enableIRIn(); // vklyuchit? priyemnik

pinMode(13, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT); // naznachayem piny kak vykhody
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);

} 

void loop() {
if (irrecv.decode(&results)) {
delay(100); // zaderzhka pered vypolneniyem opredeleniya knopok , chtoby izbezhat? bystroye dvoynoye nazhatiye

if (results.value == 0x20DF10EF) {a=a+1;} // obrabotka nazhitya klavishi , zdes? peremennaya prinimayet znacheniye +1
if (results.value == 0x20DFA956) {b=b+1;} //VAZHNO !!! ( 1008889 ) Eto kod knopki � 2 - moyego pul?ta ot televizora Panasonic - u vashego pul?ta budet drugoy kod - zamenite na svoy
if (results.value == 0x20DF0FF0) {c=c+1;}
if (results.value == 0x17E9867) {d=d+1;}
if (results.value == 0x17E58A7) {e=e+1;}
if (results.value == 0x17ED827) {f=f+1;}
if (results.value == 0x17E38C7) {g=g+1;}

// nachinayem vklyuchat? svetodiody na pinakh
if (a==1){digitalWrite(13, HIGH);} else {digitalWrite(13, LOW); a=0;} // deystviye posle nazhatiya knopki , yesli peremennaya stala ravna 1 to
if (b==1){digitalWrite(2, HIGH);} else {digitalWrite(2, LOW); b=0;} // proizvesti pereklyucheniye pina v rezhim HIGH, yesli zhe net to vernut? peremennuyu v iskhodnoye sostoyaniye
if (c==1){digitalWrite(3, HIGH);} else {digitalWrite(3, LOW); c=0;} // Destviye mozhet byt? drugim
if (d==1){digitalWrite(4, HIGH);} else {digitalWrite(4, LOW); d=0;} // Destviye posle nazhatiya knopki  
if (e==1){digitalWrite(5, HIGH);} else {digitalWrite(5, LOW); e=0;} // Destviye posle nazhatiya knopki
if (f==1){digitalWrite(6, HIGH);} else {digitalWrite(6, LOW); f=0;} // Destviye posle nazhatiya knopki
if (g==1){digitalWrite(7, HIGH);} else {digitalWrite(7, LOW); g=0;} // Destviye posle nazhatiya knopki

{ //
delay(50); //pauza mezhdu povtorami //
} //
irrecv.resume(); // 

}

}

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Это Осипов такой говнокод написал, что то не верится.

Родной, куда у тебя реле подключено ?  Схему, хоть от руки, осилишь ?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Мда похоже Дмитрий Осипов учился программировать китайскому коду у самого Конфуция.

Вот мой код.

#include <IRremote.h> // eto skachannaya biblioteka
const byte Recv_pin = 11; //vkhod IK priyemnika
IRrecv irrecv(Recv_pin);
decode_results results;
bool a,b,c,d,e,f,g;
const byte a_pin = 13;
const byte b_pin = 2;
const byte c_pin = 3;
const byte d_pin = 4;
const byte e_pin = 5;
const byte f_pin = 6;
const byte g_pin = 7;

void setup() {
  irrecv.enableIRIn(); // Включить прием
  pinMode(a_pin, OUTPUT);
  digitalWrite(a_pin, a = 0);
  pinMode(b_pin, OUTPUT);
  digitalWrite(b_pin, b = 0);
  pinMode(c_pin, OUTPUT);
  digitalWrite(c_pin, c = 0);
  pinMode(d_pin, OUTPUT);
  digitalWrite(d_pin, d = 0);
  pinMode(e_pin, OUTPUT);
  digitalWrite(e_pin, e = 0);
  pinMode(f_pin, OUTPUT);
  digitalWrite(f_pin, f = 0);
  pinMode(g_pin, OUTPUT);
  digitalWrite(g_pin, g = 0);
}

void loop() {
  if (irrecv.decode(&results)) {
    if (results.value == 0x20DF10EF) digitalWrite(a_pin, a = !a);
    if (results.value == 0x20DFA956) digitalWrite(b_pin, b = !b); ;
    if (results.value == 0x20DF0FF0) digitalWrite(c_pin, c = !c);
    if (results.value == 0x17E9867) digitalWrite(d_pin, d = !d);
    if (results.value == 0x17E58A7) digitalWrite(e_pin, e = !e); ;
    if (results.value == 0x17ED827) digitalWrite(f_pin, f = !f);
    if (results.value == 0x17E38C7) digitalWrite(g_pin, g = !g); ;
    delay(150);
    irrecv.resume();
  }
}

 

iven83
Offline
Зарегистрирован: 02.02.2017

xDriver пишет:

Это Осипов такой говнокод написал, что то не верится.

Родной, куда у тебя реле подключено ?  Схему, хоть от руки, осилишь ?

Ну для меня это пока предел мечтаний - я только начинаю осваивать азы (до этого с программированием вообще не был связан), поэтому написал как есть - скопировал у Осипова, только заменил свои кнопки (коды кнопок со своего пульта) на пин2 и пин3 (соответственно на них подключены реле1 и реле2). 

От руки рисовать не умею - могу попробоват в Fritzing нарисовать, если такой информации будет недостаточно. 

Датчик естественно на пин11, питание и землю взял с Ардуино Нано (не отдельно с бока питания). 

Кстати, уроки давние, может сейчас Дмитрий как-то подругому код написал бы, но это ещё с тех времён, когда он тоже только осваивал просторы Ардуино. Вообще я ему очень благодарен - очень доступно рассказывает, показывает, даёт ссылки на скетчи и библиотеки - мало кто это делает с таким интузиазмом. 

iven83
Offline
Зарегистрирован: 02.02.2017

qwone пишет:

Мда похоже Дмитрий Осипов учился программировать китайскому коду у самого Конфуция.

Вот мой код.

#include <IRremote.h> // eto skachannaya biblioteka
const byte Recv_pin = 11; //vkhod IK priyemnika
IRrecv irrecv(Recv_pin);
decode_results results;
bool a,b,c,d,e,f,g;
const byte a_pin = 13;
const byte b_pin = 2;
const byte c_pin = 3;
const byte d_pin = 4;
const byte e_pin = 5;
const byte f_pin = 6;
const byte g_pin = 7;

void setup() {
  irrecv.enableIRIn(); // Включить прием
  pinMode(a_pin, OUTPUT);
  digitalWrite(a_pin, a = 0);
  pinMode(b_pin, OUTPUT);
  digitalWrite(b_pin, b = 0);
  pinMode(c_pin, OUTPUT);
  digitalWrite(c_pin, c = 0);
  pinMode(d_pin, OUTPUT);
  digitalWrite(d_pin, d = 0);
  pinMode(e_pin, OUTPUT);
  digitalWrite(e_pin, e = 0);
  pinMode(f_pin, OUTPUT);
  digitalWrite(f_pin, f = 0);
  pinMode(g_pin, OUTPUT);
  digitalWrite(g_pin, g = 0);
}

void loop() {
  if (irrecv.decode(&results)) {
    if (results.value == 0x20DF10EF) digitalWrite(a_pin, a = !a);
    if (results.value == 0x20DFA956) digitalWrite(b_pin, b = !b); ;
    if (results.value == 0x20DF0FF0) digitalWrite(c_pin, c = !c);
    if (results.value == 0x17E9867) digitalWrite(d_pin, d = !d);
    if (results.value == 0x17E58A7) digitalWrite(e_pin, e = !e); ;
    if (results.value == 0x17ED827) digitalWrite(f_pin, f = !f);
    if (results.value == 0x17E38C7) digitalWrite(g_pin, g = !g); ;
    delay(150);
    irrecv.resume();
  }
}

 

 

Спасибо за код. Попробовал - хоть и написано по-другому, но результат тот же - всё-равно реле включатюся при загрузке скетча и выключатся только с пульта (т.е. при обрыве и восстановлении питания мои замкИ откроются). 

А ещё реле греется даже без нагрузки (буквально чуть-чуть тёплые после пары часов в замкнутом состоянии), поэтому однозначно хочу добиться состояния LOW при запуске скетча (при подаче питания). Сигнал на реле однозначно не должен идти при подаче питания на ардуину. 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
digitalWrite(a_pin, a = 0);
//замени на это и все
digitalWrite(a_pin, a = 1);

У вас реле вкл когда на выходе 0. вы подключили реле (вывод) - (реле) - (питание)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Если реле включено, когда на выходе 0, нужно либо менять реле, либо менять схему включения, либо стирать загрузчик и программировать Ардуину через ISP.

В противном случае реле будет включаться на время, пока работает загрузчик, котороый передает управление основной программе примерно через секунду.

iven83
Offline
Зарегистрирован: 02.02.2017

Эх, не успел я сигнализацию на базе Ардуиной поставить на мастерскую - вынесли сегодня оборудования на 600 у.е. (((

Но ставить однозначно буду! Второй раз вынесли, гады! (

iven83
Offline
Зарегистрирован: 02.02.2017

qwone пишет:

digitalWrite(a_pin, a = 0);
//замени на это и все
digitalWrite(a_pin, a = 1);

У вас реле вкл когда на выходе 0. вы подключили реле (вывод) - (реле) - (питание)

Большое списабо - так действительно работает правильно (при включении питания на ардуино реле остаются выключенными). 

Первая хорошая новость за сегодня ). 

Код написан очень красиво - просто, понятно. Надеюсь у меня когда-то будет получаться что-то похожее ). 

iven83
Offline
Зарегистрирован: 02.02.2017

qwone пишет:

Мда похоже Дмитрий Осипов учился программировать китайскому коду у самого Конфуция....

Если не трудно подскажите заодно где лучше посмотреть готовый скетч на датчик движения.

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

Спасибо ещё раз за скетч на пульт. 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

iven83 пишет:

qwone пишет:

Мда похоже Дмитрий Осипов учился программировать китайскому коду у самого Конфуция....

Если не трудно подскажите заодно где лучше посмотреть готовый скетч на датчик движения.

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

Спасибо ещё раз за скетч на пульт. 

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

iven83
Offline
Зарегистрирован: 02.02.2017

xDriver пишет:
...

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

Спасибо. Виноват, исправлюсь. 

Основное, где хочу использовать дтичик движения - это освещение (включать свет, когда кто-то проходит в "поле видимости датчика) и GSM-оповещение, т.е. сигнализация. 

С освещением всё более-менее для меня понятно, то с GSM пока всё мрачно. Но учитывая реалии последних событий (время у нас тяжкое народ прёт всё, что не так лежит), GSM-оповедение стало очень актуальным. Соответственно нужен бюджетный GSM-модуль и скетч под него, чтобы можно было получать оповещения от датчика движении, или от звукового датчика, датчика вибрации... на телефон. 

Если мастерскую обворуют уже после заполнения инструментом, это будет очень тяжело для моего маленького бизнеса (. Так что нужа активная сигнализация (не только сирена или "светомузыка"). 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Может Вам лучше IP камеру повесить и не морочится. Сейчас рынок наводнен IP камерами.

в них широкий фунционал, запись по движению, тревога и т.д.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Самая бюджетная GSM-оповещение это старый мобильник. И сигнализация это кнопка позвонить на нем на ваш телефон. Вашу конуру ломанули и вам идет вызов на телефон. Только мобильник должен Nokia 3210

ПС: Только пока вы доберетесь до конуры, у вас все вынесут. Тем более вынести хватит и 10 минут за глаза.

iven83
Offline
Зарегистрирован: 02.02.2017

qwone пишет:

Самая бюджетная GSM-оповещение это старый мобильник. И сигнализация это кнопка позвонить на нем на ваш телефон. Вашу конуру ломанули и вам идет вызов на телефон. Только мобильник должен Nokia 3210

Спасибо, тоже думал над этим (видел у Осипова), но надеялся что есть более бюджетные и надёжные варианты ). 

Именно Nokia 3210 или подойдёт любой с функцией быстрого набора с клавиши? 

Ещё у меня с датчиком движения та же ерунда - подаёт сигнал на реле сразу при включении, а по идее не должен. Т.е. подключаю реле и датчик без ардуино к 5В, земле, сигнал напрямую с датчика на реле - сразу загорается диод на реле (т.е. оно срабатывает), а при срабатывании датчка движения наоборот - реле переключается в первоначальное положение. Чертовщина какая-то .... 

Смотрел у Осипова - та же ситуация (реле активно сразу при подключении датчика). По-другому никак? 

Мне конечно нужно всё будет подключать через Ардуину, но всё же для общего развития хотелось бы понимать. 

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

qwone пишет:
пока вы доберетесь до конуры, у вас все вынесут

Элементарно, запускаем обносчиков внутрь, делая видимость благополучного взлома, после быстро блокируем все двери и окна, открываем электроклапан, привинченный к баллону с веселящим газом. Приезжаем, берём в руки холодное чугунное дилдо и будим этих тёпленьких спящих. "Апельсиновым" соком полить можно, усадив в ванну, как делал Максим Марцинкевич. Ну или иным способом объясняем, что воровать нехорошо. Не всё же как Траволта, обвешивать всё брикетами из composition 4, в которые напиханы шарики от подшипников.

Щютка йумора™ ;)

<offtop>

arduinolab, нуфф саид. А Осипов - самый скучный человек на ютубе. Самый.

</offtop>

iven83
Offline
Зарегистрирован: 02.02.2017

Разобрался с датчиком - проблема не в датчике а реле. Они оказывается бывают "высокого уровня" и "низкого уровня" (как у меня). 

К сожалению реле низкого уровня довольно проблеатично подключать к датчиками без ардуины (((

iven83
Offline
Зарегистрирован: 02.02.2017

qwone пишет:
...ПС: Только пока вы доберетесь до конуры, у вас все вынесут. Тем более вынести хватит и 10 минут за глаза.

Вы может и не поверите, но у нас вернулись времена, когда дома выносят при спящих хозяевах! К соседу ломились (точнее пытались) в гараж в 10 метрах от дома - хорошо, что он там ротвеллера держит, не рискнули залезть. 

Мне 10 минут хватит дважды до объекта доехать, да ещё и прихватить с собой что-то. Так что однозначно нужно сигналку ставить. 

iven83
Offline
Зарегистрирован: 02.02.2017

Voodoo Doll пишет:

... запускаем обносчиков внутрь, делая видимость благополучного взлома, после быстро блокируем все двери и окна, открываем электроклапан, привинченный к баллону с веселящим газом. Приезжаем, берём в руки холодное чугунное дилдо и будим этих тёпленьких спящих. "Апельсиновым" соком полить можно, усадив в ванну, как делал Максим Марцинкевич. Ну или иным способом объясняем, что воровать нехорошо. Не всё же как Траволта, обвешивать всё брикетами из composition 4, в которые напиханы шарики от подшипников.

Щютка йумора™ ;)

<offtop>

arduinolab, нуфф саид. А Осипов - самый скучный человек на ютубе. Самый.

</offtop>

Я задумывался об этом, только как-то это черезчур гуманно - я думал о газах "по-веселее", чтоб потом объяснять не пришлось... Тем-более полиция у наз следит за соблюдением закона, а не соблюдение её мало интересует. Не подскажете где можно посмотреть пример таких проектов на этом форуме?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ну хлопок питарды в замкнутом помещении по ушам и нервам сильно бьет. Чем больше заряд, тем выше давление по ушам. Но надо, что бы тела были внутри гаража.