Подача разной силы тока на выход

easyme
Offline
Зарегистрирован: 28.03.2017

Здравствуйте всем!

Пытаюсь подключить кнопки рулевого колеса в машине к новой магнитоле, знаний и практики по ардуине ноль =)

Смысл таков. В руле встроена микросхема, которая используется для отправки ИК кодов, она была изначально с завода, все это подключалось к штатной магнитоле и кнопки работали по проводам. Подпаяв ИК передатчик к выходом на микросхеме и соорудив на ардуине ИК приемник, выяснилось что нажимая разные кнопки ИК коды меняются. Я все это дело запаял, скрепил и начал писать код. Спросив на форуме по магнитоле, получил ответ, что она обучается кнопкам по входящему вольтажу, таким образом ардуина получает от кнопок на руле ИК код и в зависимости от кода на пин 5 выдает через PWM разный вольтаж от 1 до 5-ти вольт. Когда начинаешь обучать магнитолу в этом случае, то она видит нажатие, но предполагает, что я нажимаю одну и ту же кнопку, хотя они разные. Из этого я делаю вывод, что все таки она читает кнопки по сопротивлению, а может и по тому и тому, пока не понимаю.

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

Я пробовал использовать 4 пина ардуины к которым припаивал 4 разных сопротивления 10кОм, 20кОм, 40кОм и 80кОм а затем все эти 4 выхода припаивал к одному сигнальному проводу, который шел в магнитолу. Это похоже какой-то дикий колхоз, потому что оно не заработало. Я не электрик, не соображаю(

Скетч я на всякий случаю прикладываю.

 

#include <IRLib.h>

#define VOL_UP 0xA9D7295A
#define VOL_DOWN 0xF3ABCCBC
#define NEXT 0x40CA8EC
#define PREV 0x87BD05F2

int RECV_PIN = 11;
int sigPIN = 5;

IRrecv My_Receiver(RECV_PIN);

IRdecode My_Decoder;
IRdecodeHash My_Hash_Decoder;


void setup()
{
  Serial.begin(9600);
  delay(2000);while(!Serial); //delay for Leonardo
  pinMode (sigPIN, OUTPUT);
  My_Receiver.enableIRIn(); // Start the receiver
  
}

void loop() {
  if (My_Receiver.GetResults(&My_Decoder)) {
    My_Hash_Decoder.copyBuf(&My_Decoder);//copy the results to the hash decoder
    My_Hash_Decoder.decode();
    
          switch(My_Hash_Decoder.hash) {
            case NEXT:      
                            Serial.print("PRESSED NEXT 0x");
                            Serial.println(My_Hash_Decoder.hash, HEX);
                            analogWrite(sigPIN,250);
                            delay(600);
                            analogWrite(sigPIN,0);                            
                            Serial.println("UNPRESSED NEXT");                            
                            My_Receiver.enableIRIn(); 
                            
            break;
            
            case PREV:      
                            Serial.print("PRESSED PREVIOUS 0x");
                            Serial.println(My_Hash_Decoder.hash, HEX);
                            analogWrite(sigPIN,200);
                            delay(600);
                            analogWrite(sigPIN,0);
                            Serial.println("UNPRESSED PREVIOUS");
                            My_Receiver.enableIRIn(); 
            
            break;
                        
            case VOL_UP:    
                            Serial.print("PRESSED VOLUME UP 0x");
                            Serial.println(My_Hash_Decoder.hash, HEX);
                            analogWrite(sigPIN,150);
                            delay(600);
                            analogWrite(sigPIN,0);
                            Serial.println("UNPRESSED VOLUME UP");                            
                            My_Receiver.enableIRIn(); 
             
            break;
            case VOL_DOWN:  
                            Serial.print("PRESSED VOLUME DOWN 0x");
                            Serial.println(My_Hash_Decoder.hash, HEX);
                            analogWrite(sigPIN,100);
                            delay(600);
                            analogWrite(sigPIN,0);
                            Serial.println("UNPRESSED VOLUME DOWN");                                                      
                            My_Receiver.enableIRIn(); 
                            
            break;

          }    
My_Receiver.resume();              

  }
}

 

easyme
Offline
Зарегистрирован: 28.03.2017

Еще добавлю. Штатный сигнальный провод, который идет от магнитолы к рулю не имеет напряжения. При нажатии разных кнопок на нем появляется сопротивление, оно всегда одно и тоже. Я подозреваю, что по нему передается какой-то код, который понимала старая магнитола, а код скорее всего формируется той микросхемой, что в руле.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

easyme пишет:

на пин 5 выдает через PWM разный вольтаж от 1 до 5-ти вольт.

Можно увидеть как именно Вы это делаете? Какая схема стоит после пина (между пином и магнитолой)?

easyme пишет:

провод, на котором будет разное сопротивление 

Что Вы понимаете под выражением "сопртивление на проводе"? Это что? Можете объяснить или схему привести?

 

easyme
Offline
Зарегистрирован: 28.03.2017

ЕвгенийП пишет:

Можно увидеть как именно Вы это делаете? Какая схема стоит после пина (между пином и магнитолой)?

Что Вы понимаете под выражением "сопртивление на проводе"? Это что? Можете объяснить или схему привести?

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

evgta
Offline
Зарегистрирован: 02.09.2016
easyme
Offline
Зарегистрирован: 28.03.2017

Подскажите, пожалуйста, чего мне делать с ним? Как использовать в моей схеме?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

easyme пишет:

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

Понятно.

Никакое "разное напряжение средствами самого ардуино" туда не подаётся. "Средствами самого ардуино" вообще нельзя подать никакое напряжение (кроме HIGH и LOW) ни на какой пин, т.к. у Ардуино нет цифро-аналогового преобразователя.

Просто возьмите осциллограф и посмотрите что там на самом деле или просто почитайте что такое PWM хотя бы здесь.

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

Питание усилителя не обязательно 7В, можно больше, но не меньше. 5В хватит только если Вы поставите туда rail-to-rail усилитель.

Если нужен другой диапазон напряжений, то добавится пара резисторов и (возможно) увеличится напряжение питания усилителя.

easyme
Offline
Зарегистрирован: 28.03.2017

ЕвгенийП, 

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

evgta
Offline
Зарегистрирован: 02.09.2016

магнитола какая?

вот это так полагаю хотят сделать, сама магнитола управляется подключением резисторов

http://magnitola.org/pioneer/185220-podklyuchenie-provodnyh-pultov-dzhoistikov-k-pioneer.html

AlexeySh
Offline
Зарегистрирован: 16.01.2017

easyme пишет:

Подскажите, пожалуйста, чего мне делать с ним? Как использовать в моей схеме?

Подключаете крайние выводы потенциометра к 0 и +5В, движок ко входу магнитолы. Цифровую часть подключаете по SPI или другому интерфейсу (зависит от выбранной модели потенциометра) к Ардуино. Подавая цифровой код, получаете на выходе нужное вам напряжение. И не надо заморачиваться с интегрирующими цепочками, питанием на операционный усилитель, ШИМ сигналом и т. д.

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

easyme пишет:

ЕвгенийП, 

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

Ничего там не достигается. Просто Ваш мультиметр показывает Вам нечто осреднённое. а магнитоле такая фигня не нравится.

Поставьте цепочку, как я написал - там будет честный постоянный ток.

easyme
Offline
Зарегистрирован: 28.03.2017

ЕвгенийП пишет:

Ничего там не достигается. Просто Ваш мультиметр показывает Вам нечто осреднённое. а магнитоле такая фигня не нравится.

Это на самом деле странно, потому что если я в скетче поставлю задержку вывода в 5 секунд, то вольтметр показывает четко 1,43 вольта, например, и никуда не дергается. Но мысль Вашу я понял. Спасибо!

По поводу Вашей схемы, я в этом дуб дубом, мне сложновато будет ее реализовать, но буду читать, пробовать.

 

easyme
Offline
Зарегистрирован: 28.03.2017

evgta,

спасибо! Магнитола Китайская, на андроиде. Из этой темы https://4pda.ru/forum/index.php?showtopic=734564&view=findpost&p=48218522 

AlexeySh,

спасибо! Буду читать, думать.

evgta
Offline
Зарегистрирован: 02.09.2016

но не факт что на китайце сопротивлением управляется, может и цифрой, я у себя в пыжике переделывал для сони, но у меня просто было, перепаял сопротивления на плате дхойстика и все

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

easyme пишет:

Это на самом деле странно, потому что если я в скетче поставлю задержку вывода в 5 секунд, то вольтметр показывает четко 1,43 вольта, например, и никуда не дергается. 

Обычный мультиметр не умеет правильно измерять ШИМ сигнал. Хотя есть более продвинутые мультиметры, которые могут (но опять же, они не измеряют напряжение - они измеряют частоту и скважность). Вам надо самому понять смысл ШИМа, тогда всё станет ясно. ШИМ (PWM) - это не плавное изменение напряжения, это быстрое "включение-выключение" напряжения (представьте, что Вы включаете и выключаете свет в комнате с частотой 490 раз в секунду).

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

ЕвгенийП пишет:

у Ардуино нет цифро-аналогового преобразователя.

Зачем же вводить людей в заблуждение?

Есть целых два. Пины расположены между аналоговыми входами и CAN-шиной.