#1 2015-09-10 15:05:30

GE_NE
Учасник
Зареєстрований: 2015-09-10
Повідомлень: 9

Нужна помощь, пульт ДУ

Добрый день.
Интересует скетч для дистанционного управления инфро красным сигналом.
В програмировании не силен.Есть ардуино уно.
Осилил, по отдельности, вот эти примеры :
https://www.youtube.com/watch?v=PjR9jlP4644
https://www.youtube.com/watch?v=AjIASUNiWkY
Могу считать коды кнопок своих пультов.
Но объединить, что бы часть кнопок работало с удержанием ,
а часть с фиксацией скетчи ит.д. не получается ...

Хочу сделать  дистанционное управление усилителем мощности.
В усилителе стояла плата управления на двух микросхемах и плата с управляющими реле.
В грозу плата управления выгорела (ремонту не подлежит, да и устарело все это,
по сервисам замену не найти)
Нужно управлять моторизованным сопротивлением или Servo , громкостью
(на пульте нажал, с удержанием + в одну сторону крутит , - в другую) ,
включать /выключать сеть и селектором входов(энкодер), 4 входа .
Если бы еще при переключении отключался  предыдущий канал, вход.
Помогите, пожалуйста . За ранее благодарен. Может есть готовый скетч ?
Наверняка, кому то еще, будет интересно ... Готов оплатить услугу.

Неактивний

#2 2015-09-10 15:52:53

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 878

Re: Нужна помощь, пульт ДУ

так на втором видео как раз ваша задачка и обсуждается

Неактивний

#3 2015-09-10 17:32:05

GE_NE
Учасник
Зареєстрований: 2015-09-10
Повідомлень: 9

Re: Нужна помощь, пульт ДУ

Может я чего не понимаю, но во втором видео, вроде бы объясняется только работа при удержании кнопки. А мне нужно при удержании регулировать только громкость. Сеть и селектор входов включать с фиксацией. То есть объединить два скетча в один. Объясните, пожалуйста. Или может поможете со скетчем ...

Неактивний

#4 2015-09-10 18:36:35

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Нужна помощь, пульт ДУ

"Готов оплатить услугу."  нужно быть убедительней ) тогда к Вам потянутся люди )

vvr , сказал правильно - начните с приемника, вместо моторов зажигайте лампочки, ну а потом по частям добавляйте свой функционал
т.е. вместо LED крутите свой мотор  и т.д.
успеха

Неактивний

#5 2015-09-10 22:12:57

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 878

Re: Нужна помощь, пульт ДУ

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

Неактивний

#6 2015-09-11 09:17:21

GE_NE
Учасник
Зареєстрований: 2015-09-10
Повідомлень: 9

Re: Нужна помощь, пульт ДУ

Я же писал, готов оплатить услугу. Ну или как Вы выразились - за денежку сделать проектик.
От пульта должна включаться сеть (включить с фиксацией) режим Standby.
Селектор входов , 4 входа. При переключении должен отключаться предыдущий (включить с фиксацией).
Желательно управление пультом привязать к ручному режиму (энкодер) или галетный переключатель.
Как будет удобно и целесообразно разработчику.
Ну и режим управления громкостью . Кнопки +\- режим без фиксации .Пока нажаты идет сигнал на включение реле.
Все стандартно, как во всех усилителях мощности, почти.
Вот такой вот алгоритм.
Интересует сам скетч. Все остальное соберу сам.

Неактивний

#7 2015-09-11 12:37:04

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Нужна помощь, пульт ДУ

уверен, Вы найдете исполнителя под эту задачу. 

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

Неактивний

#8 2015-09-11 21:12:02

Alex Wels
Гість

Re: Нужна помощь, пульт ДУ

Бррр. Как то я например не приемлю в усилителях мощности цифровые системы. В уселках все таки аналог актуальнее и лучше звучит.
Кстати есть готовые решения по ДУ с аналогвовым резистором и реализованым к нему приводом от сервы.

#9 2015-09-12 13:33:56

GE_NE
Учасник
Зареєстрований: 2015-09-10
Повідомлень: 9

Re: Нужна помощь, пульт ДУ

Alex Wels Вы не внимательно читали. Какие цифровые системы ? Потенциометр моторизированный ALPS.
А селектор входов на реле.

Неактивний

#10 2015-09-12 13:49:30

GE_NE
Учасник
Зареєстрований: 2015-09-10
Повідомлень: 9

Re: Нужна помощь, пульт ДУ

Подскажите, пожалуйста, знатоки. Может мне подойдет вот этот пример ?Или чего надо добавить ?
Не совсем понял кнопки , кроме повер , включаются с удержанием ?
http://arrduinolab.blogspot.ru/2014/04/ … st_10.html

#include <IRremote.h> // https://github.com/shirriff/Arduino-IRremote

#define RECV_PIN 8 // IR приемник
#define OUT1 11 // выхода на мосфеты\реле
#define OUT2 12
#define OUT3 15
#define OUT4 14

#define POWER_KEY 0x40BF30CF // коды пульта ДУ
#define KEY1 0x40BF7887
#define KEY2 0x40BFF807
#define KEY3 0xC03FC03F
#define KEY4 0xC03F40BF

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  irrecv.enableIRIn(); 
  pinMode(OUT1, OUTPUT);
  pinMode(OUT2, OUTPUT);
  pinMode(OUT3, OUTPUT);
  pinMode(OUT4, OUTPUT);
}

void loop() {
  if (irrecv.decode(&results)) {
    if (results.value == KEY1) digitalWrite(OUT1, !digitalRead(OUT1));
    else if (results.value == KEY2) digitalWrite(OUT2, !digitalRead(OUT2));
    else if (results.value == KEY3) digitalWrite(OUT3, !digitalRead(OUT3));
    else if (results.value == KEY4) digitalWrite(OUT4, !digitalRead(OUT4));
   
    else if (results.value == POWER_KEY) { 
      if (digitalRead(OUT1) || digitalRead(OUT2) || digitalRead(OUT3) || digitalRead(OUT4)){
        digitalWrite(OUT1, LOW);
        digitalWrite(OUT2, LOW);
        digitalWrite(OUT3, LOW);
        digitalWrite(OUT4, LOW); 
      }
      else {
        digitalWrite(OUT1, HIGH);
        digitalWrite(OUT2, HIGH);
        digitalWrite(OUT3, HIGH);
        digitalWrite(OUT4, HIGH); 
      }         
    }
    irrecv.resume(); 
  }
}

Неактивний

#11 2015-09-12 14:38:55

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 878

Re: Нужна помощь, пульт ДУ

ни у кого нет вашего пульта
попробуйте и отпишитесь
подключите светодиоды и всё будет понятно.
или в сериал выводите состояния этих аутов

Неактивний

#12 2015-09-23 11:48:45

GE_NE
Учасник
Зареєстрований: 2015-09-10
Повідомлень: 9

Re: Нужна помощь, пульт ДУ

Люди ... отзовитесь. Помогите за деньги. Не уже ли сложная задача ?
vvr  А, по командам, прописанным в скетче, нельзя увидеть,показать, объяснить ? Причем здесь коды кнопок пульта ?

Неактивний

#13 2015-09-23 13:33:20

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Нужна помощь, пульт ДУ

GE_NE, привет.
vvr  имел в виду сначала вывести на экран ваши коды от пульта. т.е. как их видит ваша ардуино.
надеюсь откликнется кто на отсурсе сидит.
есть тут несколько деятелей что заказы принимают , им отпишитесь.
успеха.

Неактивний

#14 2015-09-23 13:49:05

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 878

Re: Нужна помощь, пульт ДУ

вы проверили сами свой код?
что происходит с вашими аутами при нажатии кнопок пульта?

Неактивний

#15 2015-09-23 16:03:54

GE_NE
Учасник
Зареєстрований: 2015-09-10
Повідомлень: 9

Re: Нужна помощь, пульт ДУ

Проводил эксперимент
Пульт от ТВ Самсунг

E13DDA28      1
AD586662      2
273009C4      3
F5999288       4
731A3E02       5
2C452C6C       6
B9F56762       0

5F12E8C4      +каналы
189D7928      -каналы

68733A46      +громкость
83B19366       -громкость

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

Неактивний

#16 2015-09-23 18:38:35

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Нужна помощь, пульт ДУ

правильно,  поздравляю,
теперь двигайтесь далее )
что там у Вас по плану?

Неактивний

#17 2015-09-23 20:34:35

GE_NE
Учасник
Зареєстрований: 2015-09-10
Повідомлень: 9

Re: Нужна помощь, пульт ДУ

Самый первый опыт был вот с таким скетчем . Изменил коды кнопок на свои.
Этот скетч с фиксацией кнопок. Работает.

//урок от Дмитрия Осипова - управление arduino ИК пультом   
С исправленными моими кодами команд (пульт ТВ Самсунг)
#include <IRremote.h> // это скачанная библиотека

int RECV_PIN = 11; //вход ИК приемника
IRrecv irrecv(RECV_PIN);
decode_results results;
int a=0; // переменная переключения режима, при нажатии кнопки она принимает значение +1
int b=0; //
int c=0; //
int d=0; //
int e=0; //
int f=0; //
int g=0; //


void setup()
{
irrecv.enableIRIn(); // включить приемник

pinMode(13, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT); // назначаем пины как выходы
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);

}

void loop() {
if (irrecv.decode(&results)) {
delay(300); // задержка перед выполнением определения кнопок, чтобы избежать быстрое двойное нажатие

if (results.value == 0xE13DDA28) {a=a+1;} // обработка нажитя клавиши, здесь переменная принимает значение +1
if (results.value == 0xAD586662) {b=b+1;} //ВАЖНО !!! ( 1008889 ) это код кнопки №2 - моего пульта от телевизора Panasonic - у вашего пульта будет другой код - замените на свой
if (results.value == 0x273009C4) {c=c+1;}
if (results.value == 0xF5999288) {d=d+1;}
if (results.value == 0x731A3E02
) {e=e+1;}
if (results.value == 0x2C452C6C
) {f=f+1;}
if (results.value == 0xB9F56762) {g=g+1;}

// начинаем включать светодиоды на пинах
if (a==1){digitalWrite(13, HIGH);} else {digitalWrite(13, LOW); a=0;} // действие после нажатия кнопки, если переменная стала равна 1 то
if (b==1){digitalWrite(2, HIGH);} else {digitalWrite(2, LOW); b=0;} // произвести переключение пина в режим HIGH, если же нет то вернуть переменную в исходное состояние
if (c==1){digitalWrite(3, HIGH);} else {digitalWrite(3, LOW); c=0;} // Дествие может быть другим
if (d==1){digitalWrite(4, HIGH);} else {digitalWrite(4, LOW); d=0;} // действие после нажатия кнопки
if (e==1){digitalWrite(5, HIGH);} else {digitalWrite(5, LOW); e=0;} // действие после нажатия кнопки
if (f==1){digitalWrite(6, HIGH);} else {digitalWrite(6, LOW); f=0;} // действие после нажатия кнопки
if (g==1){digitalWrite(7, HIGH);} else {digitalWrite(7, LOW); g=0;} // действие после нажатия кнопки


{ //
delay(50); //пауза между повторами //
} //
irrecv.resume(); //

}

}

Следующий опыт был с удержанием кнопок. Пока кнопка нажата светодиод светится.
Работает

/* урок от Дмитрия Осипова. http://www.youtube.com/user/d36073?feature=watch
v.01 Arduino IR Управление с ИК пульта в режиме удержания кнопки
Version 0.1 2013/07/02

После того как я выложил видео
1/6 Управление Arduino с ИК пульта - начало
http://www.youtube.com/watch?v=PjR9jlP4644
поступило немало  просьб такого содержания
(Антон Палыч
Дмитрий, огромная благодарность за Ваш труд! Все просто и доходчиво.
Скачал Ваш пример "urok ot Dmitriya Osipova - upravleniye Arduino IK pulоtom"
Все работает но у меня возник вопрос. Как сделать,
что бы кнопка определенного пина работала в режиме удержания а не в режиме "триггер" как в уроке?
То есть нажимая и удерживая кнопку пульта напряжение идет, отпуская исчезает.)
//
Поначалу я думал все это будет сделать очень легко и просто, а потом выяснилось что тут
много подводных камней.
в видео я подробно все это изложу
v.01 Arduino IR Управление с ИК пульта в режиме удержания кнопки
https://www.youtube.com/watch?v=AjIASUNiWkY

*******************************************************************


Скачать библиотеку IRremote для ИК пульта
https://disk.yandex.ru/public/?hash=yNz … mhW4Xt0%3D

скетч arduino чтобы узнать код кнопки ИК пульта
sketch arduino buttons on the remote to learn the code
https://disk.yandex.ru/public/?hash=KzL … QKJHGRQ%3D

4/6 как ? узнать код - кнопки своего ИК пульта
http://www.youtube.com/watch?v=InZuGntH_wk

Arduino Розетки, Управление любым ИК пультом, (программируемые на лету) socket IR remote control
http://www.youtube.com/watch?v=Nx6DUQ7Tx1w

усилитель ИК инфракрасного сигнала IR infrared signal amplifier на одном транзисторе Arduino
http://www.youtube.com/watch?v=3EYxONWSyR4

*/

#include <IRremote.h> // это скачанная библиотека

int RECV_PIN = 11; //вход ИК приемника
IRrecv irrecv(RECV_PIN);
decode_results results;

//eventTime, для паузы,  вместо delay,будем использовать функцию millis.
unsigned long eventTime=0;
//индикация таймера
int timer = 12;

int L13 = 13; //пины управляющие моторами, светодиодами, или реле, чем угодно.
int L2 = 2;
int L3 = 3;
int L4 = 4;
int L5 = 5;
int L6 = 6;
int L7 = 7;
int L8 = 8;

void setup(){
  irrecv.enableIRIn(); // включить приемник

  pinMode(L13, OUTPUT); // назначаем пины как выходы
  pinMode(L2, OUTPUT);
  pinMode(L3, OUTPUT);
  pinMode(L4, OUTPUT);
  pinMode(L5, OUTPUT);
  pinMode(L6, OUTPUT);
  pinMode(L7, OUTPUT);
  pinMode(L8, OUTPUT);

  pinMode(timer, OUTPUT);
}
void loop() {
  // Эта конструкция нужна чтобы конвертировать пульсирующий (-) с (ИК) преемника сигнал в постоянный.
  //После появление и пропадания сигнала, состояние сразу не меняется! а ждет  100 миллисекунд.
  //Если 100 миллисекунд не прошло, и поступил еще один сигнал с пульта, тогда таймер заново запускается на 100 миллисекунд.

  //Проще говоря, пока кнопка на пульте нажата таймерПИН остается вКлюченным, если кнопка на пульте отпущена таймерПИН вЫключен.

  // Читаем данные с (ИК) преемника. В момент приема данных у (ИК) приемника на выходе появляется пульсирующий (-)отрицательный сигнал
  if (digitalRead(RECV_PIN) == LOW)
    //  Если обнаружен отрицательный сигнал запускаем таймер,и включаем таймерПИН //(timer, HIGH);
    eventTime=millis(),digitalWrite(timer, HIGH);
  //  Продолжительность работы таймера >100 миллисекунд. И ТаймерПИН выключаем //(timer, LOW)
  if(millis()-eventTime>100) digitalWrite(timer, LOW)
    //  и вЫключаем все
    ,digitalWrite(L13, LOW),digitalWrite(L2, LOW),digitalWrite(L3, LOW)
      ,digitalWrite(L4, LOW),digitalWrite(L5, LOW),digitalWrite(L6, LOW),digitalWrite(L7, LOW),digitalWrite(L8, LOW);

  if (irrecv.decode(&results)) {
    //ВАЖНО !!! ( 1000809 ) это код кнопки №1 - моего (ИК)! (инфракрасного пульта)!, -
    //-у вашего пульта будет другой код, замените на свой!
    // У моего пульта при нажатии на одну и ту же кнопку, могут отсылаться два разных (КОДА) сигнала,  чтобы обойти эту проблему
    //я использовал Логический оператор "или" (||) if (results.value == 0x1000809 || results.value == 0xF7283C77
    // Теперь неважно какой код отправлен  с кнопки пульта, первый или второй
    // Если ваша кнопка пульта не страдает раздвоением личности, можете написать так if (results.value == 0x1000809

    //Только при условии если, (Одновременно),Обнаружен поступивший код кнопки
    // и выключен ТаймерПИН,"и" "&&" (digitalRead(timer) == HIGH)
    // включаем нужный нам pin, digitalWrite(L13, HIGH);

    if (results.value == 0xE13DDA28 || results.value == 0xF7283C77 && (digitalRead(timer) == HIGH) )digitalWrite(L13, HIGH);
    if (results.value == 0xAD586662 || results.value == 0x757FB4DF && (digitalRead(timer) == HIGH) )digitalWrite(L2, HIGH);
    if (results.value == 0x273009C4 || results.value == 0xB33B4597 && (digitalRead(timer) == HIGH) )digitalWrite(L3, HIGH);
    if (results.value == 0xF5999288 || results.value == 0x3C03E507 && (digitalRead(timer) == HIGH) )digitalWrite(L4, HIGH);
    if (results.value == 0x731A3E02 || results.value == 0xE705551F && (digitalRead(timer) == HIGH) )digitalWrite(L5, HIGH);
    if (results.value == 0x2C452C6C || results.value == 0xA4A58EC7 && (digitalRead(timer) == HIGH) )digitalWrite(L6, HIGH);
    if (results.value == 0xB9F56762 || results.value == 0xE2E45F7F && (digitalRead(timer) == HIGH) )digitalWrite(L7, HIGH);
   

    irrecv.resume();
  }
}

Остання редакція GE_NE (2015-09-23 21:09:15)

Неактивний

#18 2015-09-23 21:40:21

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Нужна помощь, пульт ДУ

вы выложили код из примеров.

 плс оформляйте как С++ код, 5 кнопка справа

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

Неактивний

#19 2015-09-24 21:20:34

GE_NE
Учасник
Зареєстрований: 2015-09-10
Повідомлень: 9

Re: Нужна помощь, пульт ДУ

Выше я привел два примера.17 пост. Теперь их нужно как то объединить, что бы одна кнопка включала\выключала сеть  режим стендбай т.е. при нажатии на кнопку давалась команда на  один из выходов  ардуино , чтобы включить реле питание усилителем. И чтобы при этом разблокировались ( или как правильно сказать, стали активны команды для переключения других кнопок. А именно переключение каналов. Их четыре. В примере выше нажал включено, еще нажал выключилось.
А как сделать, чтобы нажал и переключилось с предыдущего выхода на тот который нажал ?
На счет сервы, давайте пока отложим. Еще не выбрал, серво двигатель или мотор альпс. Не совсем разобрался с устройством и работой. Если серво то нужно углы поворота задавать ? Ну так вроде бы и мотор альпсы тоже также. Хотя видел в старых усилителях и с концевиками.
У меня в усилителе какой то мотор на громкости стоит. Алгоритма его работы я не знаю. Курочить пока не могу, усилитель сильно не дешевый ...
Хотя команды можно заложить , держишь кнопку на пульте + громкость на выходе ардуино есть сигнал,   - громкость на другом выходе сигнал.
Так сказать команды с удержанием. Вот такие нужны команды.

И еще один момент. В 10 посте тоже есть пример. Чем он лучше\хуже того , что в 17. (первый пример)?

Неактивний

#20 2015-09-25 09:42:36

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Нужна помощь, пульт ДУ

наверное я вам все таки порекомендую найти исполнителя.

то что вы хотите делается просто -

start
bool power_status = false;
set power OFF
  
if power button is pressed  

{
  set power ON
  power_status = true
}

if power_status == true 
{
  check key1
  check key2
  check key3
 и т.д.
}

пример алгоритма,
и не забывайте  что выключение должно быть с удержанием   например 700 мс,   включение не по первому импульсу а например 300 мс
рекомендую расписать  алгоритм хотя бы для себя, может в процессе создания корректного ТЗ  прийдет понимание как сделать хороший алгоритм а не собрать код с двух примеров

код из примера более читабельный как по мне

http://arrduinolab.blogspot.ru/2014/04/ … st_10.html
#include <IRremote.h> // https://github.com/shirriff/Arduino-IRremote
#define RECV_PIN 8 // IR приемник
#define POWER_IR_KEY  xxxx  номер контакта что включает питание
#define OUT1 11 // выхода на мосфеты\реле
#define OUT2 12
#define OUT3 15
#define OUT4 14
#define POWER_IR_KEY 0x40BF30CF // коды пульта ДУ
#define KEY1 0x40BF7887
#define KEY2 0x40BFF807
#define KEY3 0xC03FC03F
#define KEY4 0xC03F40BF
IRrecv irrecv(RECV_PIN);

int    power_status = 0;

decode_results results;
void setup()
{
  irrecv.enableIRIn();  
  pinMode(POWER_PIN, OUTPUT);
  pinMode(OUT1, OUTPUT);
  pinMode(OUT2, OUTPUT);
  pinMode(OUT3, OUTPUT);
  pinMode(OUT4, OUTPUT);

 digitalWrite(POWER_PIN, LOW); 
}
void loop() {
  if (irrecv.decode(&results)) 
  {
   if (results.value == POWER_IR_KEY) 
   {
   if (   power_status  == 0 )
        {   power_status = 1;  digitalWrite(POWER_PIN, LOW);  }
   else {   power_status = 0;  digitalWrite(POWER_PIN, HIGH); }
   }
 else  if ( power_status ) 
  {
          if (results.value == KEY1) digitalWrite(OUT1, !digitalRead(OUT1)); //   инверсия только после включения
    else if (results.value == KEY2) digitalWrite(OUT2, !digitalRead(OUT2));
    else if (results.value == KEY3) digitalWrite(OUT3, !digitalRead(OUT3));
    else if (results.value == KEY4) digitalWrite(OUT4, !digitalRead(OUT4));
 }
    irrecv.resume();  
  }
}

подправите под свои нужды

вот его и возмите за основу, но начните с алгоритма
вариант  "хочу это" не очень хорош
пример более корреткного описания задачи, тем более что цяця ваша хорошо звучит и наверяка денег стоит )
StateMachines.png

забейте в поиск state machine
много примеров понагляднее

Остання редакція NoName (2015-09-25 11:46:15)

Неактивний

#21 2015-09-27 17:10:43

KovalOleg
Гість

Re: Нужна помощь, пульт ДУ

А как сделать, чтобы нажал и переключилось с предыдущего выхода на тот который нажал ?

Ознакомитесь с этим уроком(а еще лучше со всеми с первого). Во второй части разбирается код который,
по моему, решит эту проблему.
https://www.youtube.com/watch?v=wjB2qZ3 … Zs_4VnJqLa

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму