4 аналоговых датчика и 6 светодиодов помогите написать программу

italius
Offline
Зарегистрирован: 19.12.2011

 Прошу помощи в написании программы, так как сам новичок и полностью ничего не получается - совсем мало практики.

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

Вот примерное (близкое к основной задаче) видение устройства:

Устройство

Ардуино
4 аналоговых датчика, назовем их сенсоры — на аналоговых входах
6 исполнительных элементов ввиде светодиодной индикации — на цифровых входах

Построение

4 аналоговых датчика подключены на аналоговые входы Ардуино Нано и подразумевают две группы считывающих устройств, назовем их, соответственно по групно AD1 и AD2, BD1 и BD2. Показания считывают (к примеру) в условном диапазоне от 500 до 600. Значение покоя равно среднему значению между 500 и 600, соответственно 550.
6 элементов индикации разделены на две группы, где первая заключает в себя 4 светодиода и работает (включается) совместно с аналоговыми датчиками, если есть изменение по диапазону показаний в меньшую или большую сторону, и каждый из этих диодов соответствует своему датчику — AL1, AL2, BL1 и BL2. Другая группа индикации (обработки), назовем их СL1 и СL2, может работать с первой группой светодиодов.

Алгоритм

В общем устройстве есть две основные группы «А» и «В».
В группу «А» входят датчики AD1, AD2 и светодиоды AL1, AL2 и распределяются на подгруппы AD1, AL1 и AD2, AL2.
Группа «В» построена таким же способом.
В группе «С» есть светодиоды СL1 и CL2, в дальнейшем — исполнительные устройства.

При включении устойства есть задержка в 20 сек., до начала описанного ниже цикла.

Рассмотрим алгоритм работы устройства на одной из групп — группу «А»:
при изменениии показаний на датчике или датчиках в сторону < 500 и находясь в диапазоне более 3 секунд без перерыва, загорается светодиод(ы), соответствующий данному датчику(ам) и включается светодиод группы «С» CL1 (в дальнейшем исполнительное устройство), начинается изменение показаний на датчике и когда оно достигнет 550 гаснет светодиод(ы) группы «А» и CL1.
при изменениии показаний на датчике или датчиках в сторону > 600 и находясь в диапазоне более 3 секунд без перерыва, загорается светодиод(ы), соответствующий данному датчику(ам) и включается светодиод группы «С» CL2 (в дальнейшем исполнительное устройство), начинается изменение показаний на датчике и когда оно достигнет 550 гаснет светодиод(ы) группы «А» и CL2.
в группе «В» все происходит аналогично.

Разрешения и запреты:

Состояние «покоя» - все датчики находятся п диапазонах считывания между значениями 500 и 600.
Светодиоды в группе «С» не могут работать одновременно, не зависимо какой из групп «А» или «В» они заняты, работает или CL1 или CL2.
Группа «А» имеет приоритет работать первой, если процесс не занят группой «В».
В группе «А» могут быть комбинации:
AD1 + AD2 + AL1 + AL2 + CL1;
AD1 + AD2 + AL1 + AL2 + CL2;
AD1 + AL1 + CL1;
AD1 + AL1 + CL2;
AD2 +AL2 + CL1;
AD2 +AL2 + CL2;
В группе «В» комбинации аналогичные группе «А».
В группе «С» приоритетов нет, работает тот который включается первым и совместно СL1 и СL2 не работают.

 

Буду благодарен откликнувшимся и отвечу на любой вопрос для проеснения

С ув

Игорь

Adessit
Adessit аватар
Offline
Зарегистрирован: 12.04.2011

Брать лист большой бумаги и рисовать полную блок-схему алгоритма работы программы до самого конца, и когда вы увидите размеры вашего алгоритма то поймёте почему никто (к сожалению) вам столько времени не отвечал.

Много проверок и условий я прочитав ваш пост аж сам зашел в тупик. Сделайте проще - создайте пока алгоритм (и программу) работы на 1 датчик, потом на группу из двух датчиков, а вконце уже на 2 группы. 

А в реальности задача не из простых. Но вполне решаемая.

rodot
Offline
Зарегистрирован: 18.10.2011

Хотябы словесный алгоритм составте грамотно. А это не алгоритм а постановка задачи.

italius
Offline
Зарегистрирован: 19.12.2011

 Ок!

Сделаю как посоветовал модеретор, а то я уж совсем отчаялся.

Завтра же попробую прописать алгоритм, если что то не так - поправляйте.

С ув ко всем  откликнувшимся

Игорь

italius
Offline
Зарегистрирован: 19.12.2011

Попытка написать алгоритм для одного датчика.

Апаратная часть:

Ардуино

Аналоговый датчик - A_1

Светодиод-1 (после эксперимента заменяем на реле) положения значений с датчика - D_1

Светодиод-2 (после эксперимента заменен на реле исполнительного механизма одностороннего направления) превышения значения датчика - D_2

Светодиод-3 (после эксперимента заменен на реле исполнительного механизма одностороннего направления) понижения значения датчика - D_3

*Исполнительные механизмы (светодиод-2 и светодиод-3 - разнонаправленые)

Условия:

А_1 работает во всем спектре аналогового сигнала от 0 до 1023, но диапазон работы в моем случае 450 - 550 (взят условно)

При снижениии ниже значения А_1 - 450 и задержки в данном положении более 3 секунд - подключается D_1 и D_2 (исполнительный механизм), приводя рычаг датчика в точку соответствующую значению А_1 - 500, после чего D_1 и D_2 отключаются.

При повышении выше значения А_1 - 550 и задержки в данном положении более 3 секунд - подключается D_1 и D_3(исполнительный механизм), приводя рычаг датчика в точку соответствующую значению А_1 - 500, после чего D_1 и D_3 отключаются.

Вот примерный алгоритм работы с одним датчиком.

С ув

Игорь

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

Первое может как-то так. Не проверял.

int D_1=11;
int D_2=12;
int D_3=13;
int A_1=0;
long previousMillis = 0;
long interval = 3000;
void setup() {                
  pinMode(D_1, OUTPUT);  
  pinMode(D_2, OUTPUT); 
  pinMode(D_3, OUTPUT); 
}

void loop() {
  if (analogRead(A_1)<450)
  {
    unsigned long currentMillis = millis();
    if(currentMillis - previousMillis > interval) 
    {
      previousMillis = currentMillis; 
      digitalWrite(D_1, 1);
      digitalWrite(D_2, 1);
    }
  }
  if (analogRead(A_1)>550)
  {
    unsigned long currentMillis = millis();
    if(currentMillis - previousMillis > interval) 
    {
      previousMillis = currentMillis; 
      digitalWrite(D_1, 1);
      digitalWrite(D_3, 1);
    }
  }
  if (analogRead(A_1)>=500)
  {
    digitalWrite(D_1, 0);
    digitalWrite(D_2, 0);
  }
  if (analogRead(A_1)<=500)
  {
    digitalWrite(D_1, 0);
    digitalWrite(D_3, 0);
  }
}

 

italius
Offline
Зарегистрирован: 19.12.2011

Спасибо, завтра соберу макетку и опробую, результат опишу.

С ув

Игорь

italius
Offline
Зарегистрирован: 19.12.2011

 Скетч проверил - работает не коректно, а именно D_1 не загорается вообще, мерцает где-то глубоко. Паузу времени не выдерживает и D_2, D_3 включаются сразу после преодоления рабочего диапазона. Отключение по порогу 500 делает коректно.

Что можно поправить в скетче?

Спасибо 

С ув

Игорь

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

Код мне не очень и сам нравится. Значит не горит D_1 (мерцает) это говорит о том что он включается и сразу выключается. Я разделил обработку времени на 2 независимых «потока». Попробуй так короче.

int D_1=11;
int D_2=12;
int D_3=13;
int A_1=0;
long previousMillis1 = 0;
long previousMillis2 = 0;
unsigned long currentMillis1;
unsigned long currentMillis2;
long interval = 3000;
void setup() {                
  pinMode(D_1, OUTPUT);  
  pinMode(D_2, OUTPUT); 
  pinMode(D_3, OUTPUT); 
}

void loop() {
  if (analogRead(A_1)<450)
  {
    currentMillis1 = millis();
    if(currentMillis1 - previousMillis1 > interval) 
    {
      //previousMillis1 = currentMillis1; 
      digitalWrite(D_1, 1);
      digitalWrite(D_2, 1);
    }
  }
  if (analogRead(A_1)>550)
  {
    currentMillis2 = millis();
    if(currentMillis2 - previousMillis2 > interval) 
    {
     // previousMillis2 = currentMillis2; 
      digitalWrite(D_1, 1);
      digitalWrite(D_3, 1);
    }
  }
  if (analogRead(A_1)>=500)
  {
    previousMillis1=0;
    digitalWrite(D_1, 0);
    digitalWrite(D_2, 0);
  }
  if (analogRead(A_1)<=500)
  {
    previousMillis1=1;
    digitalWrite(D_1, 0);
    digitalWrite(D_3, 0);
  }
}

Для понимания что происходит и отладки используй Serial.println
И проверь схему правильно ли всё подсоединил.
 

italius
Offline
Зарегистрирован: 19.12.2011

ДД

Подсоединения правильны, их немного. Сериалом проверял. Мерцание практически еле заметное на 11 порту. Нет задержки.

Сейчас попробую.

С ув

Игорь 

italius
Offline
Зарегистрирован: 19.12.2011

 ДД

Положение поменялось так

D_1 загорается но не в полную яркость а с D_3 еще слабее. Задержки так и нет. После прохождения диапазона загорается попарно но в возвратном положении гаснет сначала D_1 (после прохождения границ 450 и 550) а затем D_2 или D_3 (по достижению 500)

Сув

Игорь

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

Ддаааа…. Могу предложить пойти от простого к сложному. Сначала сделать без задержки чтобы понять правильно ли всё загорается.

int D_1=11;
int D_2=12;
int D_3=13;
int A_1=0;
long previousMillis1 = 0;
long previousMillis2 = 0;
unsigned long currentMillis1;
unsigned long currentMillis2;
long interval = 3000;
void setup() {                
  pinMode(D_1, OUTPUT);  
  pinMode(D_2, OUTPUT); 
  pinMode(D_3, OUTPUT); 
}

void loop() {
  if (analogRead(A_1)<450)
  {
//    currentMillis1 = millis();
//    if(currentMillis1 - previousMillis1 > interval) 
//    {
      //previousMillis1 = currentMillis1; 
      digitalWrite(D_1, 1);
      digitalWrite(D_2, 1);
//    }
  }
  if (analogRead(A_1)>550)
  {
//    currentMillis2 = millis();
//    if(currentMillis2 - previousMillis2 > interval) 
//    {
     // previousMillis2 = currentMillis2; 
      digitalWrite(D_1, 1);
      digitalWrite(D_3, 1);
//    }
  }
  if (analogRead(A_1)>490&&analogRead(A_1)<500)
  {
//    previousMillis1=0;
    digitalWrite(D_1, 0);
    digitalWrite(D_2, 0);
  }
  if (analogRead(A_1)>500&&analogRead(A_1)<510)
  {
//    previousMillis1=1;
    digitalWrite(D_1, 0);
    digitalWrite(D_3, 0);
  }
}

Вроде я нашел ошибку. Она была в обработке выключения. Если всё заработает то попробуй убери комментарии.
 

italius
Offline
Зарегистрирован: 19.12.2011

 ДД

Ок

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

При снижениии ниже значения А_1 - 450 и задержки в данном положении более 3 секунд - подключается D_1 и D_2 (исполнительный механизм), приводя рычаг датчика в точку соответствующую значению А_1 - 500, после чего D_1 и D_2 отключаются.

При повышении выше значения А_1 - 550 и задержки в данном положении более 3 секунд - подключается D_1 и D_3(исполнительный механизм), приводя рычаг датчика в точку соответствующую значению А_1 - 500, после чего D_1 и D_3 отключаются.

С ув

Игорь

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

Ты убирал комментарии как я говорил?

int D_1=11;
int D_2=12;
int D_3=13;
int A_1=0;
long previousMillis1 = 0;
long previousMillis2 = 0;
unsigned long currentMillis1;
unsigned long currentMillis2;
long interval = 3000;
void setup() {                
  pinMode(D_1, OUTPUT);  
  pinMode(D_2, OUTPUT); 
  pinMode(D_3, OUTPUT); 
}

void loop() {
  if (analogRead(A_1)<450)
  {
    currentMillis1 = millis();
    if(currentMillis1 - previousMillis1 > interval) 
    {
      //previousMillis1 = currentMillis1; 
      digitalWrite(D_1, 1);
      digitalWrite(D_2, 1);
    }
  }
  if (analogRead(A_1)>550)
  {
    currentMillis2 = millis();
    if(currentMillis2 - previousMillis2 > interval) 
    {
     // previousMillis2 = currentMillis2; 
      digitalWrite(D_1, 1);
      digitalWrite(D_3, 1);
    }
  }
  if (analogRead(A_1)>490&&analogRead(A_1)<500)
  {
    previousMillis1=0;
    digitalWrite(D_1, 0);
    digitalWrite(D_2, 0);
  }
  if (analogRead(A_1)>500&&analogRead(A_1)<510)
  {
    previousMillis2=0;
    digitalWrite(D_1, 0);
    digitalWrite(D_3, 0);
  }
}

 

italius
Offline
Зарегистрирован: 19.12.2011

 ДД

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

С ув

Игорь

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

У вас есть соображения по поводу кода?
Можно сделать и так: если А_1 меньше 450 то пауза 3 секунды. Потом опять смотрим что стало с А_1 и если ничего не изменилось (по-прежнему меньше 450) то включаем D –шки
И попробуйте убрать комментарий с previousMillis1 = currentMillis1;
И previousMillis2 = currentMillis2;
 

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

 Сделал я совсем по тупому. Если не заработает прошу чертёж подключения и фото.

int D_1=11;
int D_2=12;
int D_3=13;
int A_1=0;
int Millis1 = 0;
int Millis2 = 0;
int interval = 3000;
int flag1=0;
int flag2=0;
void setup() {                
  pinMode(D_1, OUTPUT);  
  pinMode(D_2, OUTPUT); 
  pinMode(D_3, OUTPUT); 
}
void loop() {
  
  
  if (analogRead(A_1)<450&&flag1==0)
  {
    Millis1++;
    delay(1);
      if(Millis1==interval) 
      {
        Millis1=0;
        digitalWrite(D_1, 1);
        digitalWrite(D_2, 1); 
        flag1=1;  
      }
  }
  if (analogRead(A_1)>=450&&analogRead(A_1)<=495)
    Millis1=0;




  if (analogRead(A_1)>550&&flag2==0)
  {
    Millis2++;
    delay(1);
      if(Millis2==interval) 
      {
        Millis2=0;
        digitalWrite(D_1, 1);
        digitalWrite(D_2, 1); 
        flag2=1;  
      }
  }
  
  if (analogRead(A_1)>=505&&analogRead(A_1)<=550)
    Millis2=0;





  if (analogRead(A_1)>495&&analogRead(A_1)<500)
  {
    flag1=0;
    digitalWrite(D_1, 0);
    digitalWrite(D_2, 0);
  }



  if (analogRead(A_1)>500&&analogRead(A_1)<505)
  {
    flag2=0;;
    digitalWrite(D_1, 0);
    digitalWrite(D_3, 0);
  }
}

 

italius
Offline
Зарегистрирован: 19.12.2011

 ДД

Сейчас задержка работает с одним плечомD_1 D_2 , второе вообще не работает D_1 D_3.

С ув

Игорь

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

исправил. 

italius
Offline
Зарегистрирован: 19.12.2011

ДД

Без изменений, если исправлял в пост №16

Сув

Игорь

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

исправил)))) Разбирайся тоже сам. Ошибки то глупейшие. Я сам их не замечаю по началу от невнимательности)))

italius
Offline
Зарегистрирован: 19.12.2011

ДД

Да сейчас все работает.

Признателен.

Я то поправлял сам для себя, но хотелось понять верность автора.

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

С ув

Игорь

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

   

>>У вас есть соображения по поводу кода?
 Можно сделать и так: если А_1 меньше 450 то пауза 3 секунды. Потом опять смотрим что стало с А_1 и если ничего не изменилось (по-прежнему меньше 450)<<

Так и нужно было делать изначально.

italius , а вы случайно не пневмоподвеску делаете ? 
 

А то у меня сейчас похожий проект заказали.

Четыре пневмоподушки , на каждой два клапана (впуск/выпуск)  и датчик положения , с выводом на LCD

дисплей и кнопочным управлением  (три предустановленных положения) и т.д..

Программа готова , но полностью я ее выкладывать не буду (не разберетесь).

Если нужно выложу кусок программы который удерживает пневмоподушку в заданном положении.

 

и еще вопрос.

Для каких целей задержка 3сек. ?

Не лучше ли выставить диапазон для положения которое нужно удерживать ?

Скажем , не 450 , а от 430 до 470.

italius
Offline
Зарегистрирован: 19.12.2011

 могу пообщаться через почтовый ящик

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Как угодно heruvim219@mail.ru .

Но на форуме удобней. 

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

я тоже хочу кусок кода. 

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Позже аккуратно вырежу. 

Там нет ничего суперсложного.

italius
Offline
Зарегистрирован: 19.12.2011

LEVV2006

Вы уже кусок написали, чуть исправил и заработало плечо.

nestandart

сложного ничего, согласен, я не програмист просто просил товарища, у него то времени нет то еще что-то..... Вот пытаюсь совместно с вами.

 

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

italius , опишите конкретно тот мехнизм которым собираетесь управлять (может чего дельного посоветуем).

Понятно что это (в простом варианте) два сервомеханизма которые должны удерживать заданую точку.

Вопрос , что смещает эту точку ? Вы сами или внешнее воздействие ?

 

chaytan
Offline
Зарегистрирован: 02.02.2012

мне тоже очень интересно...

прошу конечно прощения, в програмировании я конечно далек пока, хотя и моск и руки на месте...

chaytan
Offline
Зарегистрирован: 02.02.2012

nestandart пишет:

   

>>У вас есть соображения по поводу кода?
 Можно сделать и так: если А_1 меньше 450 то пауза 3 секунды. Потом опять смотрим что стало с А_1 и если ничего не изменилось (по-прежнему меньше 450)<<

Так и нужно было делать изначально.

italius , а вы случайно не пневмоподвеску делаете ? 
 

А то у меня сейчас похожий проект заказали.

Четыре пневмоподушки , на каждой два клапана (впуск/выпуск)  и датчик положения , с выводом на LCD

дисплей и кнопочным управлением  (три предустановленных положения) и т.д..

Программа готова , но полностью я ее выкладывать не буду (не разберетесь).

Если нужно выложу кусок программы который удерживает пневмоподушку в заданном положении.

 

и еще вопрос.

Для каких целей задержка 3сек. ?

Не лучше ли выставить диапазон для положения которое нужно удерживать ?

Скажем , не 450 , а от 430 до 470.

ага, пневмоподвеску.

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

итого 5 клапанов на 4 контура, плюс клапан ресивера.
 

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

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

итого 5 клапанов на 4 контура, плюс клапан ресивера. <<

Что то вы , батенька ,чушь несете.

Может вообще два клапана на все четыре стойки ?

То что я делаю сейчас управляет каждой пневмоподушкой НЕЗАВИСИМО.

chaytan
Offline
Зарегистрирован: 02.02.2012

nestandart пишет:

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

итого 5 клапанов на 4 контура, плюс клапан ресивера. <<

Что то вы , батенька ,чушь несете.

Может вообще два клапана на все четыре стойки ?

То что я делаю сейчас управляет каждой пневмоподушкой НЕЗАВИСИМО.

это вы делаете на 8 клапанов, а italius на 5 клапанов. это особенность его блока клапанов. в нем 5 клапанов, 4 для контуров и один для ресивера. клапан сброса на компрессоре.

а вот два клапана на 4 стойки это уже чушь....

 

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

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

 >>это вы делаете на 8 клапанов, а italius на 5 клапанов<<

Вы это точно знаете ?

>>это особенность его блока клапанов. в нем 5 клапанов, 4 для контуров и один для ресивера. клапан сброса на компрессоре<<

При такой особенности , если собьется  один датчик , система будет вечно "блуждать" пытаясь выставить 

положение всех датчиков вместе. При этом всегда будет либо три датчика выставлены , один -нет либо один выставлен , три - нет.

 

 

 

>>задержка в 3 или более секунд нужна для правильного понимания процеса изменения уровня. здесь или выполняется посадка-высадка в авто или авто движется по плохой дороге где происходит измения в показаниях датчиков.<<

В моей системе все это предусмотрено , но по другому.

При включении всей системы МК отслеживает датчики и выставляет каждую пневмоподушку.

Как только первая пневмоподушка "встала" в заданое положение (режим предустановки) МК прекращает отслеживать датчик этой подушки и отключает ее клапана.

Так  все четыре подушки выставляются отдельно (независимо друг от друга) .

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

Разблокировка системы происходит при нажатии на кнопку "смена режима" (+или-) и сисстема перестраивает 

подушки в другой режим (более низкий или высокий).

Поледний режим сохраняется в энергонезависимую память МК.

Так же есть возможность блокировки кнопок и принудительная (ручная) блокировка системы.

Все это дело выводится на LCD дисплей.

Режимы , показания датчиков  и т.д.

chaytan
Offline
Зарегистрирован: 02.02.2012

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

поэтому блокировка после выставления уровня и смене режима малоэфективна по сравнению с вводом временной задержки на исполнение в результате изменения уровня.

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

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

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

 

 

 

chaytan
Offline
Зарегистрирован: 02.02.2012

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

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

имхо, это суто мое мнение.

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

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

>>второй пример. опять-же зима. вы запускаете авто на улице. корекция проведена и уровень выставлен. вы поехали. в движении воздух ввиду наличия изменений вызваных дорожным покрытием немного меняется в обьеме. авто приподымается и в результате и вы получаете вовсе не предустановленный уровень. тоже нужна коректировка. <<

Вот это не понял.

Нельзя вот так вот просто "рулить" подвеской во время движения (это опасно).

Пример.

В датчик попал камень и просто оторвал его.

Показания упали в ноль.

Система подождала три секунды и рванула левую переднюю стойку вверх.

А если на скорости , в плотном потоке , в повороте ?

 

Мне не сложно добавить функцию отслеживания больших отклонений датчиков когда режим установлен и 

система заблокирована. А так же оповещать об этом.

Полная блокировка  системы во время движения было одним из условий заказчика.

И я с ним согласен.

 

italius
Offline
Зарегистрирован: 19.12.2011

 nestandart

Немного выпал из общения, постоял в московских пробках.

Вопрос - у вас есть пневмоподвеска?

chaytan
Offline
Зарегистрирован: 02.02.2012

italius пишет:

 nestandart

Немного выпал из общения, постоял в московских пробках.

Вопрос - у вас есть пневмоподвеска?

вот правильный вопрос.....

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

 >>в дисплее разве что на уровне настройки имеется смысл, в эксплуатации уже смысла мало.<<

Не согласен.

Если присутствует неисправность светодиоды хрен что покажут.

А так есть возможность просматривать состояние каждого датчика в реальном времени.

Хотя бы даже для того чтобы знать что датчик не оторван и работает нормально.

Так же показания датчиков можно конвертировать в сантиметры клиренса (для удобства).

 

Настройка без вывода аналогового сигнала это танцы с бубном в темноте.

Для отладки системы я написал отдельную программу.

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

>>Вопрос - у вас есть пневмоподвеска?<< 

Нет .

Я пишу программу и собираю электронно - силовой модуль для заказчика.

Установка пневмоподушек , клапанов , компрессора , рессивера и т.д. на стороне заказчика.

italius
Offline
Зарегистрирован: 19.12.2011

nestandart пишет:

>>второй пример. опять-же зима. вы запускаете авто на улице. корекция проведена и уровень выставлен. вы поехали. в движении воздух ввиду наличия изменений вызваных дорожным покрытием немного меняется в обьеме. авто приподымается и в результате и вы получаете вовсе не предустановленный уровень. тоже нужна коректировка. <<

Вот это не понял.

Нельзя вот так вот просто "рулить" подвеской во время движения (это опасно).

Пример.

В датчик попал камень и просто оторвал его.

Показания упали в ноль.

Система подождала три секунды и рванула левую переднюю стойку вверх.

А если на скорости , в плотном потоке , в повороте ?

 

Мне не сложно добавить функцию отслеживания больших отклонений датчиков когда режим установлен и 

система заблокирована. А так же оповещать об этом.

Полная блокировка  системы во время движения было одним из условий заказчика.

И я с ним согласен.

 

Ну попал камень, ну оборвало датчик, ну вы как програмист, что не можете предусмотреть этого как:

при обрыве связи с датчиком в течении каког-то времени - команда - действий не выполнять, включить светодиод сигнализации обрыва!

А так-то надорогах и гвоздей полно, но производитель шины все равно выпускает.

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

>>Ну попал камень, ну оборвало датчик, ну вы как програмист, что не можете предусмотреть этого<< 

Так вот у меня оно и предусмотрено , во время движения датчики не опрашиваются.

>>при обрыве связи с датчиком в течении каког-то времени - команда - действий не выполнять, включить светодиод сигнализации обрыва!<<

Сигнализацию обрыва сделать не сложно. А вот если датчик собьется , то определить это автоматически

(с точностью 95%) будет не просто.

 

Изначально я говорил о том что не правильно управлять всеми подушками вместе.

Если собьется один датчик система не сможет "выставиться".

italius
Offline
Зарегистрирован: 19.12.2011

 Ну, вот.

Пневмоподвески у вас нет! Другими словами вы толком-то не знаете как она работает.

У меня она есть, и есть она у chaytan так как с ним знаком по другому форуму. Знаю тенденцию его и знаю что хочу я.

Предлагаю объеденить усилия и построить грамотную автоматику с различными функциями и возможностью их отключения-включения для пожелания владельца.

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

И более того, когда говорят про два клапана на подушку, то понятно сразу, что дилетанты (прошу не обижаться).

Я например слова как Беркут, Виаир и т.п. принимаю как ругательство.

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

Ну, так как насчет сотрудничества

chaytan
Offline
Зарегистрирован: 02.02.2012

nestandart пишет:

>>второй пример. опять-же зима. вы запускаете авто на улице. корекция проведена и уровень выставлен. вы поехали. в движении воздух ввиду наличия изменений вызваных дорожным покрытием немного меняется в обьеме. авто приподымается и в результате и вы получаете вовсе не предустановленный уровень. тоже нужна коректировка. <<

Вот это не понял.

Нельзя вот так вот просто "рулить" подвеской во время движения (это опасно).

Пример.

В датчик попал камень и просто оторвал его.

Показания упали в ноль.

Система подождала три секунды и рванула левую переднюю стойку вверх.

А если на скорости , в плотном потоке , в повороте ?

 

Мне не сложно добавить функцию отслеживания больших отклонений датчиков когда режим установлен и 

система заблокирована. А так же оповещать об этом.

Полная блокировка  системы во время движения было одним из условий заказчика.

И я с ним согласен.

 

чушь полнейшая...

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

рулить можна... и это делается штатными системами. 

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

chaytan
Offline
Зарегистрирован: 02.02.2012

nestandart пишет:

>>Ну попал камень, ну оборвало датчик, ну вы как програмист, что не можете предусмотреть этого<< 

Так вот у меня оно и предусмотрено , во время движения датчики не опрашиваются.

>>при обрыве связи с датчиком в течении каког-то времени - команда - действий не выполнять, включить светодиод сигнализации обрыва!<<

Сигнализацию обрыва сделать не сложно. А вот если датчик собьется , то определить это автоматически

(с точностью 95%) будет не просто.

 

Изначально я говорил о том что не правильно управлять всеми подушками вместе.

можна вместе или попарно, попарно даже правильнее. здесь задается приоритетность на выполнение изменений.

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

Если собьется один датчик система не сможет "выставиться".

italius
Offline
Зарегистрирован: 19.12.2011

 nestandart

Я вам только что сослал мануал подвески БМВ, если нада вышлю Ауди или Фаэтон, там все случайности хорошо описаны и набросок алгоритма есть.

chaytan
Offline
Зарегистрирован: 02.02.2012

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

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

>>чушь полнейшая...<< 

Хорошо. 

Удачи.

italius
Offline
Зарегистрирован: 19.12.2011

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

Есть такая функция - бордюрный камень- так там при резком изменениии клиренса на 4см, подъем-опускание только до определенного уровня (БМВ) предустановленного производителем

italius
Offline
Зарегистрирован: 19.12.2011

 nestandart

Вы напрасно злитесь, вопрос совсем в другом chaytan вам пересказывает свой опыт, он не со зла.

Поверьте что опыт у него есть.

Я не использую Американские системы доступные на ебэй и т.д. а компоненты Европейского производителя промышленных систем.

И то, что пишу - уже проверено. Давайте лучше что-то вместе сотворим.