Новости:

W202club.su - русскоязычный форум клуба любителей и владельцев автомобилей Мерседес-Бенц с акцентом на C-класс в кузове W202.

Главное меню

Автомат опускания зеркал

Автор SerJjj, 29 июля 2015, 10:22:03

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

sledge hammer

Цитата: SerJjj от 30 июля 2015, 13:09:37А делал больше just for fun, ставить салон с памятью или блоки от него и потом это все дружить (у меня обычный электропривод) нет желания.

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

SerJjjАвтор темы

sledge hammer, а по какому алгоритму работает штатный блок? Можешь описать? Я просто не знаю. Ну там Заднюю включил, положение запомнил - это понятно. А дальше. Как происходит решение опускать или нет, и когда поднимать и т.п.
WDB2100621B179665

Gurza

Цитата: SerJjj от 29 июля 2015, 12:28:03Следующие у меня в планах память сидений. У меня салон без памяти - только лифт и спинка. Как реализовывать уже есть мысли.
валяется без дела водительское седло с пультом( больше ничего нет) седло на все положения регулируются.

sledge hammer

Цитата: SerJjj от 31 июля 2015, 13:31:54а по какому алгоритму работает штатный блок? Можешь описать? Я просто не знаю. Ну там Заднюю включил, положение запомнил - это понятно. А дальше. Как происходит решение опускать или нет, и когда поднимать и т.п.

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

дальше оно работает так: если нажата кнопка регулировки правого зеркала, то при включении задней оно опускается.
если скорость машины больше 15 км/ч - зеркало поднимется.
если нажать кнопку регулировки левого зеркала - тоже поднимется
ну и если нажата эта же клавиша - зеркало опускаться не будет.

в общем, функция реализована очень удобно и под разные задачи.

SerJjjАвтор темы

Пришла мне маленькая ардуинка, переделал все на ней.







Логика работы: что бы опустилось зеркало, необходимо дважды включить заднюю.

Скетч:

int i;
int pos=0;
int sensorPin = A3;
int revers = 2;
int up = 8;
int down = 6;
int PINbeep=10;
int delayreverse=0;
int ps=0;
int ps1=0;
int ps2=0;
int delaybutton=20;
int ton=7000; // звук поднять - опустить
int tondelay=150; //длительность звука

void setup() {
  Serial.begin(9600);
  pinMode(revers, INPUT);
  pinMode(up, OUTPUT);
  pinMode(down, OUTPUT);
 
}

void mdown()
{
Serial.println("DOWNmirror");
if ((digitalRead(revers)==HIGH) and (pos==0)) {tone(PINbeep,ton,tondelay);
                                          if (digitalRead(revers)==HIGH) {}
                                      for (i=1; i<=(analogRead(sensorPin)/3); i++) {         
                                                             
                                                             digitalWrite(down,HIGH);
                                                             delay(10);
                                                             pos=1;
                                                             }
                                                             digitalWrite(down,LOW);
                          }
}

                         



void loop() {               
                         
if ((digitalRead(revers)==LOW) and (pos==1)) {delay(3000);
                                              Serial.println("UPmirror");
                                      for (i=1; i<=(analogRead(sensorPin)/3); i++) {
                                                             digitalWrite(up,HIGH);
                                                             delay(10);
                                                             pos=0;
                                                             }
                                                             digitalWrite(up,LOW);
ps1=0; ps2=0; delayreverse=0;
}
   Serial.println(delayreverse);
   Serial.println(ps1);
  Serial.println(ps2);

delayreverse=delayreverse+1;

if ((digitalRead(revers)==HIGH) and (pos==0) and (ps1!=0) and (ps!=digitalRead(revers))){
if (ps2==0) {ps2=delayreverse;}
}

if ((digitalRead(revers)==LOW) and (pos==0) and (ps!=digitalRead(revers))){if (ps1==0) {ps1=delayreverse;}}

ps=digitalRead(revers);

if ((ps1!=0) and (ps2!=0) and (ps2-ps1<delaybutton )) {ps1=0; ps2=0; delayreverse=0; mdown();}

if ((ps1!=0) and (ps2!=0) and (delayreverse>=10)) {ps1=0; ps2=0; delayreverse=0; }

ps=digitalRead(revers);
delay(100); 

}
WDB2100621B179665

Gurza


SerJjjАвтор темы

Gurza, к джойстику идет 3 провода - сигнал включения задней (логическую 1 снимаю через делитель на резисторах) и по 1 управляющему на верх - низ. Земля общая. Земля-управляющий коммутирую через оптрон.
WDB2100621B179665

z10b_Hittroff

Цитата: SerJjj от 19 августа 2015, 11:26:37Логика работы: что бы опустилось зеркало, необходимо дважды включить заднюю.
Зачем дважды? Где тут логика...
Глюки моих глюков, не мои глюки!

eraiser

Цитата: z10b от 19 августа 2015, 17:18:31Зачем дважды? Где тут логика...

у него коробка - механика  :hihi:
Занимаюсь запчастями для а/м

SerJjjАвтор темы

Дважды - потому что в 90% случаем у меня нет необходимости видеть задние колеса, нужно просто где то сдать назад.
WDB2100621B179665

vorobey.pavel

Сергей, схему электрическую принципиальную покажешь?

vorobey.pavel

Сделал себе.
Добавлю информации для простоты повторения:





Скетч:

int i;
int aaa=0;
int sensorPin = A3; //с этого входа считываем значение подстроечного резистора
int revers = 2;     //задняя передача цифровой вход
int up = 8;         //выход на оптрон
int down = 6;       //выход на оптрон
int DelayButton=200;//количество времени задержки между включениями задней передачи
int ton=7000;       // звук поднять - опустить
int tondelay=150;   //длительность звука

void setup()      //выполняется один раз при подаче напряжения на ардуину
{
  pinMode(revers, INPUT);
  pinMode(up, OUTPUT);
  pinMode(down, OUTPUT);
  pinMode(PINbeep, OUTPUT);
  pinMode(13, OUTPUT);
}

void MoveDown()//процедура опускания зеркала
{
  Serial.println("DownMirror");   // записываем отчет о запуске процедуры в лог
  digitalWrite(13, HIGH);            // включить светодиод на плате
  digitalWrite(down,HIGH);        // выдать сигнал на выход Down
  aaa=analogRead(sensorPin);  // считываем значение с подстроечного резистора и запоминаем
  for (i=1; i<=(aaa/3); i++)      // выполнять цикл до тех пор пока не достигнет значения заданного подстроечником
    {           
     delay(10);                   // задержка 10мсек
    }
  digitalWrite(down,LOW);         // убрать сигнал с выхода Down
  digitalWrite(13, LOW);          // выключить светодиод на плате
}


void MoveUp()//процедура поднятия зеркала
{
  Serial.println("UpMirror");     // записываем отчет о запуске процедуры в лог
  digitalWrite(13, HIGH);         // включить светодиод на плате
  digitalWrite(up,HIGH);          // выдать сигнал на выход Up
  for (i=1; i<=(aaa/3); i++)   // выполнять цикл до тех пор пока не достигнет значения снятого с подстроечника
    {           
     delay(10);                          // задержка 10мсек
    }
  digitalWrite(up,LOW);           // снимаем сигнал с оптрона отключая дальнейшее поднятие
  digitalWrite(13, LOW);          // выключить светодиод на плате
}

                         

void loop()//главное тело программы
{               
while (digitalRead(revers)!=HIGH)          // ждем пока включится передача
   {
    delay(10);                                           // задержка 10мсек
    Serial.println("wait for revers On");     // записываем в лог 
   }
Serial.println("revers pulled On");
while (digitalRead(revers)!=LOW)           // ждем пока выключится передача
   {
    delay(10);                                            // задержка 10мсек
    Serial.println("wait for revers Off");      // записываем в лог
   }
Serial.println("revers pulled Off");           // записываем в лог
i=0;                                                        // обнуляем переменную
while ((digitalRead(revers)!=HIGH) and (i<=DelayButton)) //ждем второго отключения 10*DelayButton милисекунд(циклов)
   {
    delay(10);                                           // задержка 10мсек
    i=i+1;                                                 // инкремент
    Serial.println(i);                                  // записываем в лог
    Serial.println("Wait DelayButton");     // записываем в лог
   }
if (digitalRead(revers)==HIGH)             // если второй раз включил то
   {
    MoveDown();                                       // опускаем зеркало
    do                                                         // сначала делаем, а потом проверяем условие если не выполнено, то повторяем
     {
      while (digitalRead(revers)!=LOW)      // ждем пока выключит передачу
         {
          delay(10);                        // задержка 10мсек   
          Serial.println("wait for revers Off");
         }
      i=0;                                  // обнуляем переменную
      while ((digitalRead(revers)!=HIGH) and (i<=100))//ждем что не включит снова 3 секунды
        {
         delay(10);
         i=i+1;
         Serial.println(i);
         Serial.println("wait 3 sec for revers Off");
        }
     }while (digitalRead(revers)!=LOW);    // передача выключена если да то дальше
    MoveUp();
   }
}

hamroz

Цитата: sledge hammer от 02 августа 2015, 14:46:34
Цитата: SerJjj от 31 июля 2015, 13:31:54а по какому алгоритму работает штатный блок? Можешь описать? Я просто не знаю. Ну там Заднюю включил, положение запомнил - это понятно. А дальше. Как происходит решение опускать или нет, и когда поднимать и т.п.

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

дальше оно работает так: если нажата кнопка регулировки правого зеркала, то при включении задней оно опускается.
если скорость машины больше 15 км/ч - зеркало поднимется.
если нажать кнопку регулировки левого зеркала - тоже поднимется
ну и если нажата эта же клавиша - зеркало опускаться не будет.

в общем, функция реализована очень удобно и под разные задачи.

Заводская функция?Подскажите как называется? И на какой машине? заранее спасибо .