Перейти к содержанию

Контроллер подвески opensource


Рекомендуемые сообщения

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

Изменено пользователем Vlad-bodryi
Ссылка на комментарий
Поделиться на другие сайты

  • Ответов 557
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

Скетч для ардуины:

 

 

 

#include <LiquidCrystal.h>

 

#include <LiquidCrystalRus.h>

LiquidCrystalRus lcd(6, 7, 5, 4, 3, 2);

 

int state=0;

int state2=0;

int state3=0;

int state4=0;

int state5=0;

 

int avaria=0;

int avaria2=0;

int avaria3=0;

int avaria4=0;

 

int ustanovka=0;

int ustanovka2=0;

int ustanovka3=0;

int ustanovka4=0;

 

long previousMillis = 0;

long previousMillis2 = 0;

long previousMillis3 = 0;

long previousMillis4 = 0;

long previousMillis5 = 0;

 

int obriv = 0;

int obriv2 = 0;

int obriv3 = 0;

int obriv4 = 0;

 

#include <EEPROM.h>

 

int dveknopky=0;

 

int predustanovka=0;

int regim=1;

 

int eeprom=0;

 

 

int knopka=0;

int knopka2=0;

int knopka3=0;

 

 

 

int analog=0;

int analog2=0;

int analog3=0;

int analog4=0;

 

 

 

 

 

int sek=0;

int sek2=0;

int sek3=0;

int sek4=0;

 

int flag1=0;

int flag2=0;

int flag3=0;

int flag4=0;

 

 

 

void setup()

{

 

pinMode(14,INPUT);

pinMode(15,INPUT);

pinMode(16,INPUT);

pinMode(17,INPUT);

 

digitalWrite(14, HIGH);

digitalWrite(15, HIGH);

digitalWrite(16, HIGH);

digitalWrite(17, HIGH);

 

lcd.begin(16, 2);

 

pinMode(19,INPUT);

pinMode(18,INPUT);

 

pinMode(0,OUTPUT);

pinMode(1,OUTPUT);

pinMode(8,OUTPUT);

pinMode(9,OUTPUT);

 

pinMode(10,OUTPUT);

pinMode(11,OUTPUT);

pinMode(12,OUTPUT);

pinMode(13,OUTPUT);

 

}

 

void loop()

{

 

if (millis() -previousMillis5 >=100)

{

previousMillis5 = millis();

state5=!state5;

 

if(state5==1)

{

lcd.clear();

}

}

 

 

 

 

 

if(eeprom==0)

{

regim=EEPROM.read(0);

eeprom=1;

}

 

 

if(digitalRead(19)==HIGH&&digitalRead(18)==HIGH&&knopka3==0)

{

knopka3=1;

 

}

if(digitalRead(19)==LOW&&digitalRead(18)==LOW&&knopka3==1)

{

 

dveknopky=dveknopky+1;

if(dveknopky>1)

{

dveknopky=0;

}

if(dveknopky<0)

{

dveknopky=1;

}

 

knopka3=0;

delay(500);

}

 

 

if(dveknopky==1)

{

digitalWrite(0,LOW);

digitalWrite(1,LOW);

digitalWrite(8,LOW);

digitalWrite(9,LOW);

digitalWrite(10,LOW);

digitalWrite(11,LOW);

digitalWrite(12,LOW);

digitalWrite(13,LOW);

 

 

lcd.setCursor(2,1);

lcd.print("Заблокирована");

lcd.setCursor(4,0);

lcd.print("Система");

 

}

 

 

else

{

 

if(analogRead(14)<=1010&&analogRead(15)<=1010&&analogRead(16)<=1010&&analogRead(17)<=1010)

 

{

 

 

 

 

if(digitalRead(19)==HIGH&&knopka==0)

{

knopka=1;

avaria=0;

}

if(digitalRead(19)==LOW&&knopka==1)

{

 

knopka=0;

 

regim=regim+1;

 

if(regim>3)

{

regim=3;

}

EEPROM.write(0,regim);

sek=0;

 

}

 

 

 

if(digitalRead(18)==HIGH&&knopka2==0)

{

knopka2=1;

avaria=0;

}

if(digitalRead(18)==LOW&&knopka2==1)

{

 

knopka2=0;

 

regim=regim-1;

 

if(regim<1)

{

regim=1;

}

EEPROM.write(0,regim);

sek=0;

 

}

 

 

 

 

if(regim==1)

{

 

predustanovka=300;

 

if(avaria==0&&avaria2==0&&avaria3==0&&avaria4==0)

{

lcd.setCursor(4,0);

lcd.print("нижний");

 

}

}

 

if(regim==2)

{

predustanovka=600;

 

if(avaria==0&&avaria2==0&&avaria3==0&&avaria4==0)

{

lcd.setCursor(4,0);

lcd.print("средний");

}

}

 

if(regim==3)

{

 

predustanovka=900;

 

if(avaria==0&&avaria2==0&&avaria3==0&&avaria4==0)

{

lcd.setCursor(4,0);

lcd.print("верхний");

}

}

 

 

 

 

 

 

if(flag1==1)

{

if (millis() -previousMillis >=500)

{

previousMillis = millis();

state=!state;

 

if(state==1)

{

sek++;

}

if(sek>=30)

{

sek=30;

}

}

}

 

 

 

analog=analogRead(14);

 

if(analog>999)

{

analog=999;

}

if(analog<100)

{

analog=100;

}

 

if(analog>(predustanovka+5)&&sek>=3)

 

{

flag1=1;

if(sek<30)

{

 

 

 

digitalWrite(13,LOW);

digitalWrite(0,HIGH);

 

}

else

{

 

avaria=1;

digitalWrite(13,LOW);

digitalWrite(0,LOW);

 

 

}

}

 

if(analog>=(predustanovka-10)&&analog<=(predustanovka+10))

 

{

 

 

ustanovka=1;

avaria=0;

flag1=0;

digitalWrite(0,LOW);

digitalWrite(13,LOW);

sek=0;

}

else

{

 

ustanovka=0;

flag1=1;

}

 

if(analog<(predustanovka-5)&&sek>=3)

{

flag1=1;

if(sek<30)

{

 

digitalWrite(0,LOW);

digitalWrite(13,HIGH);

 

}

else

{

 

avaria=1;

digitalWrite(0,LOW);

digitalWrite(13,LOW);

 

 

}

 

}

 

 

if(flag2==1)

{

if (millis() -previousMillis2 >=500)

{

previousMillis2 = millis();

state2=!state2;

 

if(state2==1)

{

 

sek2++;

}

if(sek2>=30)

{

sek2=30;

}

}

}

 

 

 

analog2=analogRead(15);

 

if(analog2>999)

{

analog2=999;

}

if(analog2<100)

{

analog2=100;

}

 

if(analog2>(predustanovka+5)&&sek2>=3)

 

{

flag2=1;

if(sek2<30)

{

 

 

 

digitalWrite(12,LOW);

digitalWrite(1,HIGH);

 

}

else

{

 

avaria2=1;

digitalWrite(12,LOW);

digitalWrite(1,LOW);

 

 

}

}

 

if(analog2>=(predustanovka-10)&&analog2<=(predustanovka+10))

 

{

 

 

ustanovka2=1;

avaria2=0;

flag2=0;

digitalWrite(1,LOW);

digitalWrite(12,LOW);

sek2=0;

}

else

{

 

ustanovka2=0;

flag2=1;

}

 

if(analog2<(predustanovka-5)&&sek2>=3)

{

flag2=1;

if(sek2<30)

{

 

digitalWrite(1,LOW);

digitalWrite(12,HIGH);

 

}

else

{

 

avaria2=1;

digitalWrite(1,LOW);

digitalWrite(12,LOW);

 

 

}

 

}

 

 

 

 

 

 

 

if(flag3==1)

{

if (millis() -previousMillis3 >=500)

{

previousMillis3 = millis();

state3=!state3;

 

if(state3==1)

{

 

sek3++;

}

if(sek3>=30)

{

sek3=30;

}

}

}

 

 

 

analog3=analogRead(16);

 

if(analog3>999)

{

analog3=999;

}

if(analog3<100)

{

analog3=100;

}

 

if(analog3>(predustanovka+5)&&sek3>=3)

 

{

flag3=1;

if(sek3<30)

{

 

 

 

digitalWrite(11,LOW);

digitalWrite(8,HIGH);

 

}

else

{

 

avaria3=1;

digitalWrite(11,LOW);

digitalWrite(8,LOW);

 

 

}

}

 

if(analog3>=(predustanovka-10)&&analog3<=(predustanovka+10))

 

{

 

 

ustanovka3=1;

avaria3=0;

flag3=0;

digitalWrite(8,LOW);

digitalWrite(11,LOW);

sek3=0;

}

else

{

 

ustanovka3=0;

flag3=1;

}

 

if(analog3<(predustanovka-5)&&sek3>=3)

{

flag3=1;

if(sek3<30)

{

 

digitalWrite(8,LOW);

digitalWrite(11,HIGH);

 

}

else

{

 

avaria3=1;

digitalWrite(8,LOW);

digitalWrite(11,LOW);

 

 

}

 

}

 

 

 

 

 

 

 

if(flag4==1)

{

if (millis() -previousMillis4 >=500)

{

previousMillis4 = millis();

state4=!state4;

 

if(state4==1)

{

 

sek4++;

}

if(sek4>=30)

{

sek4=30;

}

}

}

 

 

 

analog4=analogRead(17);

 

if(analog4>999)

{

analog4=999;

}

if(analog4<100)

{

analog4=100;

}

 

if(analog4>(predustanovka+5)&&sek4>=3)

 

{

flag4=1;

if(sek4<30)

{

 

 

 

digitalWrite(10,LOW);

digitalWrite(9,HIGH);

 

}

else

{

 

avaria4=1;

digitalWrite(10,LOW);

digitalWrite(9,LOW);

 

 

}

}

 

if(analog4>=(predustanovka-10)&&analog4<=(predustanovka+10))

 

{

 

 

ustanovka4=1;

avaria4=0;

flag4=0;

digitalWrite(9,LOW);

digitalWrite(10,LOW);

sek4=0;

}

else

{

 

ustanovka4=0;

flag4=1;

}

 

if(analog4<(predustanovka-5)&&sek4>=3)

{

flag4=1;

if(sek4<30)

{

 

digitalWrite(9,LOW);

digitalWrite(10,HIGH);

 

}

else

{

 

avaria4=1;

digitalWrite(9,LOW);

digitalWrite(10,LOW);

 

 

}

 

}

 

 

 

 

 

 

 

 

 

if(ustanovka==1&&ustanovka2==1&&ustanovka3==1&&ustanovka4==1)

{

 

lcd.setCursor(3,1);

lcd.print("Установлен");

 

}

else

{

if(avaria==1||avaria2==1||avaria3==1||avaria4==1)

{

 

delay(1000);

lcd.setCursor(5,0);

lcd.print("АВАРИЯ");

lcd.setCursor(3,1);

lcd.print(!avaria);

lcd.setCursor(6,1);

lcd.print(!avaria2);

lcd.setCursor(9,1);

lcd.print(!avaria3);

lcd.setCursor(12,1);

lcd.print(!avaria4);

 

}

else

{

lcd.setCursor(1,1);

lcd.print(analog);

lcd.setCursor(5,1);

lcd.print(analog2);

lcd.setCursor(9,1);

lcd.print(analog3);

lcd.setCursor(13,1);

lcd.print(analog4);

}

 

 

}

}

else

{

if(analogRead(14)>=1010)

{

obriv=0;

 

delay(1000);

}

else

{

obriv=1;

 

}

if(analogRead(15)>=1010)

{

obriv2=0;

 

delay(1000);

}

else

{

obriv2=1;

}

if(analogRead(16)>=1010)

{

obriv3=0;

 

delay(1000);

}

else

{

obriv3=1;

}

if(analogRead(17)>=1010)

{

obriv4=0;

 

delay(1000);

}

 

else

{

obriv4=1;

}

 

 

lcd.setCursor(2,0);

lcd.print("ОБРЫВ ДАТЧИКА");

lcd.setCursor(3,1);

lcd.print(obriv);

lcd.setCursor(6,1);

lcd.print(obriv2);

lcd.setCursor(9,1);

lcd.print(obriv3);

lcd.setCursor(12,1);

lcd.print(obriv4);

 

 

digitalWrite(9,LOW);

digitalWrite(10,LOW);

digitalWrite(11,LOW);

digitalWrite(8,LOW);

digitalWrite(12,LOW);

digitalWrite(1,LOW);

digitalWrite(13,LOW);

digitalWrite(0,LOW);

 

 

 

}

 

}

}

 

 

 

Ссылка на комментарий
Поделиться на другие сайты

Это оригинал скетча найденого в тырнете.

Переделываю потихоньку, добавляю новые фичи.

Ссылка на комментарий
Поделиться на другие сайты

 Я так думаю  что @kort,  закинул  "утку"  и хочет посмотреть, что из этого получится. МЕГА которая будет работать с экраном 3.2"  и тач  не будет стоить 400-500рэ + переходник под екран.  Если задача не стоит получить только картинку. :smile3:  

Ссылка на комментарий
Поделиться на другие сайты

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

 

85365475833d.jpg

 

с другим экраном алгоритм основной все равно не особо изменится

Ссылка на комментарий
Поделиться на другие сайты

Дисплей 3,2" 950 р. Блок реле 350 р. Дуина 350 р. Вот и почти весь бюджет.

Ссылка на комментарий
Поделиться на другие сайты

могу приблизительно накидать смету на стоимость лабуды помимо контроллера:

 

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

датчики давления - адекватные которые нашёл 5 шт х 1400

мощные ключи управления со всей мелочёвкой - до 2 тр

ардуина - средне 1500

модуль связи+гироскоп - ? условно возьмём 1тр или тот-же модуль отображения будет стоить намного дороже(около 4тр), не считая приятной установки в авто

 

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

 

итого: 15-20тр за мозг управления, без блока клапанов и всей механической лабуды.

Ссылка на комментарий
Поделиться на другие сайты

Дисплей 3,2" 950 р. Блок реле 350 р. Дуина 350 р. Вот и почти весь бюджет.

ну можно и 2,4 дюйма взять за 250р для уны  http://www.ebay.com/itm/2-4-inch-TFT-lcd-shield-for-Arduino-UNO-/301094536907?pt=LH_DefaultDomain_0&hash=item461aa206cb

Ссылка на комментарий
Поделиться на другие сайты

могу приблизительно накидать смету на стоимость лабуды помимо контроллера:

 

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

датчики давления - адекватные которые нашёл 5 шт х 1400

мощные ключи управления со всей мелочёвкой - до 2 тр

ардуина - средне 1500

модуль связи+гироскоп - ? условно возьмём 1тр или тот-же модуль отображения будет стоить намного дороже(около 4тр), не считая приятной установки в авто

если датчики высоты стоят то зачем еще датчики давления? еще и 5 штук? деньги на ветер -8 тыщ сразу. Ардуина не 1500 а 500 макс. 

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

если датчики высоты стоят то зачем еще датчики давления? еще и 5 штук? деньги на ветер -8 тыщ сразу. Ардуина не 1500 а 500 макс. 

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

5-й - для показания давления в ресивере.

 

цены условно-рыночные привёл из наличия в моём городе и москве(датчики давления), можно конечно и дешевле нарыть, но конечная стоимость не намного изменится и ниже 15тр вряд-ли можно уронить для единичного случая!

Ссылка на комментарий
Поделиться на другие сайты

могу приблизительно накидать смету на стоимость лабуды помимо контроллера

 

итого: 15-20тр за мозг управления, без блока клапанов и всей механической лабуды.

Усложнил.

Дуина со всей лабудой примерно 1600, 4 датчика высоты примерно 4500, коннекторы, проводка и мелочевка еще 500 р.

Итого контроллер и датчики примерно 6600. Контроллер Paln'a с датчиками обойдется в большую сумму. И есть одно но, его программу не изменить. На ардуине реально реализовать все фичи, которые нужны конкретно тебе.

 

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

Есть, контроль положения во избежании кренов и, например, занижение по скорости.

Ссылка на комментарий
Поделиться на другие сайты

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

 

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

Показулька давления в ресе не обязательна для контроллера.

Ссылка на комментарий
Поделиться на другие сайты

Видать продажи Arduin -ов стали падать.

в смысле? они есть оригиналы итальянские дорогие, а есть китайские полные копии, вот они копейки стоят

Ссылка на комментарий
Поделиться на другие сайты

Есть, контроль положения во избежании кренов и, например, занижение по скорости.

крены на ходу править? это по-моему бесмысленная и очень опасная затея

Ссылка на комментарий
Поделиться на другие сайты

крены на ходу править? это по-моему бесмысленная и очень опасная затея

Любой брендовый контроллер так работает.

Ссылка на комментарий
Поделиться на другие сайты

Вот эти цены очень приятные. http://www.tinydeal.com/index.php?main_page=ws_search_result&keyword=arduino&categories_id=&cat_change=true

Думаю соберу заказик и начну собирать.

Ссылка на комментарий
Поделиться на другие сайты

в смысле? они есть оригиналы итальянские дорогие, а есть китайские полные копии, вот они копейки стоят

Если есть представление  как строится электронный блок для автомобиля то сразу возникнут множество требований которым не отвечает в принцыпе кружковый набор под названием "Arduino".  Если представления нет то совет разобрать и посмотреть как устроены  подобные блоки,  очень много можно почерпнуть интересного.  В оисаниях  кто-нить  читал для чего "Arduino" вобще придуман. Даже если откатать скетчи под дуину до более менее работоспособного состояния то схемотехнические решения всё равно придется допиливать-допаивать ручками. И надеятся что китайцы всё сделают в своих копеечных поделках не стоит! 

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

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

Дуина или АТМега?

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...



×
×
  • Создать...