Питание arduino в авто... Плавают снимаемые показания сопротивления...
- Войдите на сайт для отправки комментариев
Доброго всем времени суток. Поблема заключается в следующем.
Делал адаптер резистивных кнопок для мультируля своего авто(Opel vectra B).
Нашел проект в интернете http://mysku.su/sdelaj-sam/primenenie-arduino-v-avtomobile-upravlenie-magnitoloj-knopkami-na-rule.html а также проект схожий с моим(а именно одинаковый цифровой потенциометр) https://www.drive2.ru/l/9517061/
В общем все сделал, подключил к магнитоле (машина была не заведена) все работало. Но когда машина заводится то показания сопротивления(напряжения) на ардуину приходят завышеные.
В чем может быть проблема?
Питал ардуину от сети автомобиля через китайский модуль с aliexpress https://ru.aliexpress.com/item/MT3608-2A-Max-DC-DC-Step-Up-Power-Module-Booster-Power-Module-For-Arduino/32576479067.html?spm=2114.13010608.0.0.ayNwMa
Схема подключения кнопок
Скетч прошивы
// библиотека для потенциометра, скачать. // скачивать тут https://sites.google.com/site/tfagerscode/home/digipotx9cxxx #include <DigiPotX9Cxxx.h> //задаем на каких пинах сидит управление потенциометром (INC,CS,U/D) DigiPot pot(2,5,4); //задаем начальные значение переменных int i=0; int prevButton=0; // Коды имеющихся на руле кнопок const int VOL_UP=1; const int VOL_DN=2; const int PREV_TR=3; const int NEXT_TR=4; const int MODE=5; const int MUTE=6; // задаем аналоговый пин, на котором мы считываем сопротивление нажатой на руле кнопки int wheelPin=A5; void setup() { pinMode(wheelPin, INPUT); pot.reset(); } // Эта функция читает сопротивление с кнопок на руле и возвращает код нажатой кнопки, либо 0 int getR() { // читаем сопротивление (на самом деле напряжение, конечно) на аналоговом пине int r=analogRead(wheelPin); //Serial.println(r); //можно вывести в терминал значение нажатой кнопки // Ищем, какая кнопка соответствует этому сопротивлению. // Данные значения сопротивлений подходят для Opel Vectra B, для других автомобилей числа будут другие. if (r>=12 && r<=21) return(VOL_UP); if (r>=2 && r<=10) return(VOL_DN); if (r>=69 && r<=83) return(PREV_TR); if (r>=38 && r<=52) return(NEXT_TR); if (r>=23 && r<=33) return(MODE); if (r>=125 && r<=138) return(MUTE); // если ни одна из кнопок не нажата, возвращаем 0 return (0); } // ОСНОВНОЙ ЦИКЛ void loop() { int currButton=getR(); // заносим в переменную currButton код нажатой кнопки if (currButton!=prevButton) // если значение поменялось с прошлого раза { delay(10); currButton=getR(); // ждем 10ms и читаем еще раз, чтобы исключить "дребезг" кнопки if (currButton!=prevButton) // если код кнопки точно поменялся с прошлого раза { prevButton=currButton; // сохраняем новое значение в переменную prevButton // Выставляем сопротивление на потенциометре, тем самым посылаем команду на магнитолу. // Значения сопротивлений даны для Pioneer, для магнитол других марок числа будут другие. pot.reset(); switch(currButton) { case VOL_UP: pot.set(16); break; // 16k case VOL_DN: pot.set(24); break; // 24k case PREV_TR: pot.set(11); break; // 11k case NEXT_TR: pot.set(7); break; // 8k case MODE: pot.set(1); break; // 1.6k case MUTE: pot.set(3); break; // 3k default: pot.reset(); break; // 0k } } } delay(5); }
BataniQ, MT3608 это StepUp преобразователь, напряжение на его входе должно быть меньше, чем выходное, иначе он не работает стабилизатором.
Т. е. необходимо плата питания сабилизирующая? Видели ли вы такую плату на aliexpress? Или что можете посоветовать
Т. е. необходимо плата питания сабилизирующая? Видели ли вы такую плату на aliexpress? Или что можете посоветовать
Переделайте его в Sepic с добавлением пары деталей (обязательно нужна еще одна такая же индуктивность) и скорее всего болезнь уйдет. В нете есть методика гуглится по MT3608. В принципе по ней можно любой StepUp.
Ваша ссылка не работает, например такой. И проверьте еще разок напряжения приходящие, чтобы входа не пожечь.
Если нормально заработает, то переменный резистор после настройки лучше заменить на постоянный, они вибрацию не любят.