Показано с 1 по 7 из 7

Тема: Управление усилителем с любого пульта ИК

  1. #1
    Завсегдатай
    Автор темы
    Аватар для samodelkin
    Регистрация
    30.11.2005
    Адрес
    Москва, Геленджик, и еще дальше, где полицейских хрен встретишь...
    Сообщений
    1,338

    По умолчанию Управление усилителем с любого пульта ИК

    Предлагаю систему управления устройством с некого пульта
    "Схема сомого простого варианта:"
    Нажмите на изображение для увеличения. 

Название:	nano4.jpg 
Просмотров:	174 
Размер:	89.7 Кб 
ID:	361581
    Схему можно наращивать почти до бесконечности...

    ПРОШИВКА


    #include <IRremote.h>
    #include <EEPROM.h> //Needed to access the eeprom read write functions

    int RECV_PIN = 2; // на плате D2 вход для IR приемника
    int BEEP_PIN = 3; // D3 вывод на зуммер
    int REELAY_PIN = 4; // D4 вывод на реле
    int PROOF_PIN = 5; // кнопка защиты программирования

    int i, j, numb;
    unsigned long code[5];

    long sum;
    IRrecv irrecv(RECV_PIN);
    decode_results results;
    long previousMillis = 0;
    int timer = 0;
    int power=1;

    unsigned long currentMillis;
    long result;


    void setup()
    {
    digitalWrite(REELAY_PIN, 1);
    Serial.begin(115200);
    pinMode(BEEP_PIN, OUTPUT);
    pinMode(RECV_PIN,INPUT_PULLUP); // подтягиваем резистором к +5в
    pinMode(PROOF_PIN,INPUT_PULLUP);
    pinMode(13, OUTPUT);
    pinMode(REELAY_PIN, OUTPUT);

    irrecv.enableIRIn(); // Start the receiver
    bip();delay(200); //
    bip();delay(200);
    bip();

    }

    void loop() {


    currentMillis = millis();

    if (currentMillis - previousMillis > 1000)
    {
    previousMillis = currentMillis;
    timer++;
    // Serial.println(timer);
    }
    if (timer == 5)for (j = 0; j < 5; j++)
    {
    code[j] = -1;
    timer = 0;
    }


    if (irrecv.decode(&results))
    {
    result = results.value;
    result = abs(result);
    if (result==1)result=111;
    Serial.print("result=");
    Serial.println(result);
    delay(200);

    if (numb > 4)numb = 0;
    code[numb] = result;

    for (j = 0; j < 5; j++)
    {
    Serial.println(code[j]);
    if (code[0] == code[1] && code[1] == code[2] && code[2] == code[3] && code[3] == code[4] && code[3] != -1 && digitalRead(PROOF_PIN) == 0 )sum = 1;
    }
    Serial.println(sum);
    if (sum == 1 ){
    bipf();
    EEPROM_ulong_write(0, result);
    sum = 0;
    }
    irrecv.resume();

    Serial.println("----------------");
    Serial.print("Read the following int at the eeprom address 0: ");
    Serial.println(EEPROM_ulong_read(0));
    Serial.println("----------------");
    Serial.println(digitalRead(PROOF_PIN));
    if (result == EEPROM_ulong_read(0))
    {
    power = !power;
    if (power ==0)bipm();
    if (power ==1)bipm1();
    digitalWrite(13, power ? HIGH : LOW);
    digitalWrite(REELAY_PIN, !power ? LOW : HIGH);
    }
    numb++;
    }

    }

    void bipf()
    {
    //100 155 170
    for (j = 155; j > 100; j -= 4)
    {
    for (i = 0; i < 25; i++)
    {
    digitalWrite(BEEP_PIN, HIGH); // sets the pin on
    delayMicroseconds(j); // pauses for 50 microseconds
    digitalWrite(BEEP_PIN, LOW); // sets the pin off
    delayMicroseconds(j);
    }
    }
    }

    void bipm()
    {
    //100 155 170
    for (j = 180; j > 90; j -= 20)
    {
    for (i = 0; i < 70; i++)
    {
    digitalWrite(BEEP_PIN, HIGH); // sets the pin on
    delayMicroseconds(j); // pauses for 50 microseconds
    digitalWrite(BEEP_PIN, LOW); // sets the pin off
    delayMicroseconds(j);
    }
    delay(50);
    }
    }

    void bipm1()
    {
    //100 155 170
    for (j = 90; j < 180; j += 20)
    {
    for (i = 0; i < 70; i++)
    {
    digitalWrite(BEEP_PIN, HIGH); // sets the pin on
    delayMicroseconds(j); // pauses for 50 microseconds
    digitalWrite(BEEP_PIN, LOW); // sets the pin off
    delayMicroseconds(j);
    }
    delay(50);
    }
    }
    void bip()
    {
    //100 155 170

    for (i = 0; i < 10; i++)
    {
    digitalWrite(BEEP_PIN, HIGH); // sets the pin on
    delayMicroseconds(170); // pauses for 50 microseconds
    digitalWrite(BEEP_PIN, LOW); // sets the pin off
    delayMicroseconds(170);
    }

    }
    void biph()
    {
    //100 155 170

    for (i = 0; i < 25; i++)
    {
    digitalWrite(BEEP_PIN, HIGH); // sets the pin on
    delayMicroseconds(100); // pauses for 50 microseconds
    digitalWrite(BEEP_PIN, LOW); // sets the pin off
    delayMicroseconds(100);
    }

    }
    // запись
    void EEPROM_ulong_write(int addr, unsigned long num) {
    byte raw[4];
    (unsigned long&)raw = num;
    for (byte i = 0; i < 4; i++) EEPROM.write(addr + i, raw[i]);
    }

    unsigned long EEPROM_ulong_read(int addr) {
    byte raw[4];
    for (byte i = 0; i < 4; i++) raw[i] = EEPROM.read(addr + i);
    unsigned long &num = (unsigned long&)raw;
    return num;
    }
    [свернуть]


    Покупаем :
    https://aliexpress.ru/item/32341832857.html нужен 4-ый вариант
    Реле https://aliexpress.ru/item/4000346597879.html
    Приемник ИК https://aliexpress.ru/item/32270351330.html
    Дежурный БП 5в https://aliexpress.ru/item/32668275940.html
    Управление DC мотором https://aliexpress.ru/item/1399176040.html

    Есть вопросы? В ЛИЧКУ!
    Последний раз редактировалось samodelkin; 06.02.2020 в 10:30.
    Всегда!!!

  2. #2
    Завсегдатай
    Автор темы
    Аватар для samodelkin
    Регистрация
    30.11.2005
    Адрес
    Москва, Геленджик, и еще дальше, где полицейских хрен встретишь...
    Сообщений
    1,338

    По умолчанию Re: Управление усилителем с любого пульта ИК

    "вопрос: у вас там схема на реле, я так понимаю, что к нему подключается паралельно кнопка, которой надо управлять.
    А как управлять кнопкой без фиксации, которая, например, просто входы усилителя переключает?"
    Добавил 1 кнопку. Питание.
    Нажмите на изображение для увеличения. 

Название:	nano4-2.jpg 
Просмотров:	127 
Размер:	98.6 Кб 
ID:	363755

    Еще, планируется-ли смена пульта или пульт будет 1?
    Если пульт будет 1 то не надо делать самообучение двух кнопок - хлопотно.
    Если уж научимся заливать прошивку то изменить в ней 2 числа наверное можно....

    Прошивка

    #include <IRremote.h> // библиотека ИК приемника
    #include <EEPROM.h> //Needed to access the eeprom read write functions

    int RECV_PIN = 2; // приемник подключен к D2
    int BEEP_PIN = 3; // пищалка к D3
    int PROOF_PIN = 5; // кнопка записи к D5
    int REELAY_PIN = 4; // вывод на реле к D4

    int POWER_PIN = 7; // кнопка "питание" к D7




    int i, j, numb;
    unsigned long code[5];
    long sum;
    int TEMP_POWER_KNOB = 0;

    IRrecv irrecv(RECV_PIN);
    decode_results results;

    long previousMillis = 0;
    long previousMillis1 = 0;
    unsigned long currentMillis;

    int timer = 0;
    long result;
    int power=1;
    int proof = 1;

    void setup()
    {
    digitalWrite(REELAY_PIN, 1); // если реле включается "0" то digitalWrite(REELAY_PIN, 1);
    pinMode(BEEP_PIN, OUTPUT);
    pinMode(RECV_PIN,INPUT_PULLUP);
    pinMode(PROOF_PIN,INPUT_PULLUP);
    pinMode(POWER_PIN,INPUT_PULLUP);

    pinMode(REELAY_PIN, OUTPUT);
    Serial.begin(115200);
    irrecv.enableIRIn(); // Start the receiver
    bip(); delay(200); bip(); delay(200); bip(); // гудочки при включении
    }

    void loop() {
    currentMillis = millis();

    if (currentMillis - previousMillis > 1000)
    {
    previousMillis = currentMillis;
    timer++;
    }
    if (timer == 5)for (j = 0; j < 5; j++)
    {
    code[j] = -1;
    timer = 0;
    }
    if (currentMillis - previousMillis1 > 10)
    {
    int in = digitalRead(POWER_PIN);
    if ( in == 0 && TEMP_POWER_KNOB<30) TEMP_POWER_KNOB +=1;
    if ( in == 1 && TEMP_POWER_KNOB>1) TEMP_POWER_KNOB -=2;
    previousMillis1 = currentMillis;
    //Serial.print("TEMP_POWER_KNOB="); Serial.println(TEMP_POWER_KNOB);
    }
    if (irrecv.decode(&results))
    {
    proof = digitalRead(PROOF_PIN);
    result = results.value;
    result = abs(result);
    if (result==1)result=111;
    Serial.print("result="); Serial.println(result);
    delay(300);

    if (numb > 4)numb = 0;
    code[numb] = result;

    for (j = 0; j < 5; j++)
    {
    if (proof == 0)Serial.println(code[j]);
    if (code[0] == code[1] && code[1] == code[2] && code[2] == code[3] && code[3] == code[4] && code[3] != -1 && proof == 0 )sum = 1;
    }
    if (proof == 0)Serial.println(sum);
    if (sum == 1 ){
    bipf();
    EEPROM_ulong_write(0, result);
    sum = 0;
    }
    irrecv.resume();

    if (proof == 0)Serial.println("----------------");
    if (proof == 0)Serial.print("Read the following int at the eeprom address 0: ");
    if (proof == 0)Serial.println(EEPROM_ulong_read(0));
    if (proof == 0)Serial.println("----------------");
    if (proof == 0)Serial.println(proof);


    numb++;
    }

    if (result == EEPROM_ulong_read(0) || TEMP_POWER_KNOB == 29)
    {
    power = !power;
    if (power ==0)bipm();
    if (power ==1)bipm1();
    digitalWrite(REELAY_PIN, !power ? LOW : HIGH); // внимание!!!
    result = 0;
    }

    }

    void bipf()
    {
    //100 155 170 частоты
    for (j = 155; j > 100; j -= 4)
    {
    for (i = 0; i < 25; i++)
    {
    digitalWrite(BEEP_PIN, HIGH);
    delayMicroseconds(j);
    digitalWrite(BEEP_PIN, LOW);
    delayMicroseconds(j);
    }
    }
    }

    void bipm()
    {
    //100 155 170
    for (j = 180; j > 90; j -= 20)
    {
    for (i = 0; i < 70; i++)
    {
    digitalWrite(BEEP_PIN, HIGH);
    delayMicroseconds(j);
    digitalWrite(BEEP_PIN, LOW);
    delayMicroseconds(j);
    }
    delay(50);
    }
    }

    void bipm1()
    {
    //100 155 170
    for (j = 90; j < 180; j += 20)
    {
    for (i = 0; i < 70; i++)
    {
    digitalWrite(BEEP_PIN, HIGH);
    delayMicroseconds(j);
    digitalWrite(BEEP_PIN, LOW);
    delayMicroseconds(j);
    }
    delay(50);
    }
    }
    void bip()
    {
    //100 155 170

    for (i = 0; i < 10; i++)
    {
    digitalWrite(BEEP_PIN, HIGH);
    delayMicroseconds(170);
    digitalWrite(BEEP_PIN, LOW);
    delayMicroseconds(170);
    }

    }

    // запись
    void EEPROM_ulong_write(int addr, unsigned long num) {
    byte raw[4];
    (unsigned long&)raw = num;
    for (byte i = 0; i < 4; i++) EEPROM.write(addr + i, raw[i]);
    }

    unsigned long EEPROM_ulong_read(int addr) {
    byte raw[4];
    for (byte i = 0; i < 4; i++) raw[i] = EEPROM.read(addr + i);
    unsigned long &num = (unsigned long&)raw;
    return num;
    }

    [свернуть]


    ---------- Сообщение добавлено 18:08 ---------- Предыдущее сообщение было 08:43 ----------

    Вариант Питание + селектор 4 выхода
    Нажмите на изображение для увеличения. 

Название:	nano4-3.jpg 
Просмотров:	146 
Размер:	113.9 Кб 
ID:	363790

    Прошивка под мой пульт

    #include <IRremote.h> // библиотека ИК приемника

    int RECV_PIN = 2; // приемник подключен к D2
    int BEEP_PIN = 3; // пищалка к D3

    int REELAY_PIN = 4; // реле к D4
    int SELECT_PIN = 6; // кнопка "селект" к D6
    int POWER_PIN = 7; // кнопка "питание" к D7


    int SELECT_OUT1 = 8;
    int SELECT_OUT2 = 9;
    int SELECT_OUT3 = 10;
    int SELECT_OUT4 = 11;

    long result_power = 1401758429; // код кнопки пульта power
    long result_select = 1401812999; // код кнопки пульта селект вход

    int i, j, numb;
    unsigned long code[5];
    long sum;
    int TEMP_POWER_KNOB = 0;

    IRrecv irrecv(RECV_PIN);
    decode_results results;

    long previousMillis = 0;
    long previousMillis1 = 0;
    long previousMillis2 = 0;
    unsigned long currentMillis;

    int timer = 0;
    long result;
    int power=1;
    int proof = 1;
    int select = 0;
    int temp_select = 0;
    int select_out = 0;

    void setup()
    {
    digitalWrite(REELAY_PIN, 1); // если реле включается "0" то digitalWrite(REELAY_PIN, 1);
    pinMode(BEEP_PIN, OUTPUT);
    pinMode(RECV_PIN,INPUT_PULLUP);

    pinMode(POWER_PIN,INPUT_PULLUP);
    pinMode(SELECT_PIN,INPUT_PULLUP);
    pinMode(REELAY_PIN, OUTPUT);

    pinMode(SELECT_OUT1, OUTPUT);
    pinMode(SELECT_OUT2, OUTPUT);
    pinMode(SELECT_OUT3, OUTPUT);
    pinMode(SELECT_OUT4, OUTPUT);


    Serial.begin(115200);
    irrecv.enableIRIn(); // Start the receiver
    bip(); delay(200); bip(); delay(200); bip(); // гудочки при включении
    }

    void loop() {
    currentMillis = millis();

    if (currentMillis - previousMillis > 996)
    {
    previousMillis = currentMillis;
    timer++;
    }
    if (timer == 5)for (j = 0; j < 5; j++)
    {
    code[j] = -1;
    timer = 0;
    }



    if (currentMillis - previousMillis1 > 11)
    {
    int in = digitalRead(POWER_PIN);
    if ( in == 0 && TEMP_POWER_KNOB<30) TEMP_POWER_KNOB +=1;
    if ( in == 1 && TEMP_POWER_KNOB>1) TEMP_POWER_KNOB -=2;
    previousMillis1 = currentMillis;
    //Serial.print("TEMP_POWER_KNOB="); Serial.println(TEMP_POWER_KNOB);
    }





    if (currentMillis - previousMillis2 > 5)
    {
    int in1 = digitalRead(SELECT_PIN);
    if ( in1 == 0 && temp_select<30) temp_select +=1;
    if ( in1 == 1 && temp_select>1) temp_select -=2;
    previousMillis2 = currentMillis;
    //Serial.print("temp_select="); Serial.println(temp_select);
    }

    if (temp_select == 29){temp_select+=1;bip();select_out +=1;}
    //Serial.print("select_out="); Serial.println(select_out);
    if (select_out > 3)select_out = 0;

    if (select_out == 0){digitalWrite(SELECT_OUT1,1);digitalWrite(SELECT_OUT4,0);}
    if (select_out == 1){digitalWrite(SELECT_OUT2,1);digitalWrite(SELECT_OUT1,0);}
    if (select_out == 2){digitalWrite(SELECT_OUT3,1);digitalWrite(SELECT_OUT2,0);}
    if (select_out == 3){digitalWrite(SELECT_OUT4,1);digitalWrite(SELECT_OUT3,0);}




    if (irrecv.decode(&results))
    {

    result = results.value;
    result = abs(result);
    if (result==1)result=111;
    Serial.print("result="); Serial.println(result);
    delay(300);
    irrecv.resume();
    }

    if (result == result_power || TEMP_POWER_KNOB == 29)
    {
    power = !power;
    if (power ==0)bipm();
    if (power ==1)bipm1();
    digitalWrite(REELAY_PIN, !power ? LOW : HIGH); // внимание!!!
    result = 0;
    }


    if (result == result_select)
    {
    select_out +=1;
    result = 0;
    bip();

    }

    }

    void bipf()
    {
    //100 155 170 частоты
    for (j = 155; j > 100; j -= 4)
    {
    for (i = 0; i < 25; i++)
    {
    digitalWrite(BEEP_PIN, HIGH);
    delayMicroseconds(j);
    digitalWrite(BEEP_PIN, LOW);
    delayMicroseconds(j);
    }
    }
    }

    void bipm()
    {
    //100 155 170
    for (j = 180; j > 90; j -= 20)
    {
    for (i = 0; i < 70; i++)
    {
    digitalWrite(BEEP_PIN, HIGH);
    delayMicroseconds(j);
    digitalWrite(BEEP_PIN, LOW);
    delayMicroseconds(j);
    }
    delay(50);
    }
    }

    void bipm1()
    {
    //100 155 170
    for (j = 90; j < 180; j += 20)
    {
    for (i = 0; i < 70; i++)
    {
    digitalWrite(BEEP_PIN, HIGH);
    delayMicroseconds(j);
    digitalWrite(BEEP_PIN, LOW);
    delayMicroseconds(j);
    }
    delay(50);
    }
    }
    void bip()
    {
    //100 155 170

    for (i = 0; i < 10; i++)
    {
    digitalWrite(BEEP_PIN, HIGH);
    delayMicroseconds(170);
    digitalWrite(BEEP_PIN, LOW);
    delayMicroseconds(170);
    }

    }

    [свернуть]


    ===
    ТАК как троллей на форуме полно, все вопросы в личку!
    Последний раз редактировалось samodelkin; 06.02.2020 в 21:04.
    Всегда!!!

  3. #3
    Завсегдатай
    Автор темы
    Аватар для samodelkin
    Регистрация
    30.11.2005
    Адрес
    Москва, Геленджик, и еще дальше, где полицейских хрен встретишь...
    Сообщений
    1,338

    По умолчанию Re: Управление усилителем с любого пульта ИК

    Али экспресс заметно тормозит, в связи с борьбой с вирусом.
    недорогой магазин Arduino железок
    https://procontact74.ru
    Всегда!!!

  4. #4
    Завсегдатай Аватар для Elms
    Регистрация
    21.12.2008
    Адрес
    Москва
    Возраст
    56
    Сообщений
    3,352

    По умолчанию Re: Управление усилителем с любого пульта ИК

    Цитата Сообщение от samodelkin Посмотреть сообщение
    Али экспресс заметно тормозит
    Да.
    Цитата Сообщение от samodelkin Посмотреть сообщение
    недорогой магазин
    Нет.

  5. #5
    Завсегдатай
    Автор темы
    Аватар для samodelkin
    Регистрация
    30.11.2005
    Адрес
    Москва, Геленджик, и еще дальше, где полицейских хрен встретишь...
    Сообщений
    1,338

    По умолчанию Re: Управление усилителем с любого пульта ИК

    Elms, какой магазин дешевый и есть-ли у него доставка?

    ---------- Сообщение добавлено 16:36 ---------- Предыдущее сообщение было 14:29 ----------

    Цитата Сообщение от Elms Посмотреть сообщение
    Сообщение от samodelkin
    недорогой магазин
    Нет.
    Не нет а ДА!
    Если не в силах написать что-то аргументированно - не пиши ни чего!
    Всегда!!!

  6. #6
    Завсегдатай Аватар для Pyku_He_oTTyda
    Регистрация
    22.06.2005
    Адрес
    Москва
    Возраст
    50
    Сообщений
    4,261

    По умолчанию Re: Управление усилителем с любого пульта ИК

    Реклама своей торговой точки?
    Андрей

  7. #7
    Жестокий, толстый слон Аватар для Konkere
    Регистрация
    02.12.2002
    Адрес
    Москва
    Сообщений
    1,162

    По умолчанию Re: Управление усилителем с любого пульта ИК

    Цитата Сообщение от samodelkin Посмотреть сообщение
    Не нет а ДА!
    Аргументы будут?
    Цитата Сообщение от samodelkin Посмотреть сообщение
    Если не в силах написать что-то аргументированно - не пиши ни чего!
    В первую очередь это относится к вам...
    Dictum sapienti sat est

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •