Вопрос от новичка. Вообще новичка. Ардуино как контроллер управления пневмоподвеской?
- Войдите на сайт для отправки комментариев
Добрый день.
Весь мой опыт программирования - Basic, ассемблер на БК0010-01, все освоено 20 лет назад. И примерно тогда же позабыто.
Ардуино рассматриваю на роль контроллера для управления пневмоподвеской. Не знаю с чем еще и столкнусь, потому хочу сто раз перестраховаться перед покупкой. И под силу будет ли вообще результат.
А в результате нужно устройство, которое будет читать показания четырех датчиков угла подвески, на выходе которых напряжение 0 - 5 В. Контроллер должен иметь возможность предварительной настройки: положение подвески "внизу" - данные датчиков разные, но они должны быть сохранены параметры положения подвески. Далее подвеска подкачивается в среднее положение, а параметры датчиков сохраняются как соответствующие ей. И т.п. для верхнего положения.
Ожидается, что устройство будет управлять пневматическими клапанами подкачивая или спуская воздух из пневмоподушек для поддержания заданных параметров датчиков.
Скажу откровенно: я потеряю на этой разработке времени, т.к. придется пройти процесс обучения, а сами знаете - сначала сотня глюков и вопросов "я заливаю так, а оно что-то не то", потом первый код будет кривым и некрасивым. Потом его улучшишь. Потом, когда научишься писать красиво - уже и не разберешь что и где было.
Потому - лучше заплачу тому, кто разработает по ТЗ.
Либо уж уверьте, что "все получится" :)
Спасибо.
Могу и написать по ТЗ и помочь в разработке/выборе железа (перенос МК на плату, разводка, выбор "рассыпухи"). Вопрос цены за мои услуги, скажу сразу - не дешево, если интерсно:
1
скайп: maksimkstovo1985
>>И под силу будет ли вообще результат.<<
Я делал контроллер пневмоподвески на заказ. Это большая, сложная и трудоемкая работа .
Начните с "Чего по проще".
>> потом первый код будет кривым и некрасивым.<<
Сто первый будет таким же. Не все так быстро.
>>Потому - лучше заплачу тому, кто разработает по ТЗ.<<
ТЗ завист от того насколько точно вы опишите ВСЕ что вам нужно.
Обычно бывает так что первоначальное ТЗ и конечное устройство даже не похожи друг на друга.
Первый опыт создания контроллера пневмоподвески начинился так же с трех положений (предустановок) , а закончился автоматической системой корректировки и автоматической самодиагностикой устройства.
Цена за ваши услуги - то, сколько вы назовете, а так - готовый контроллер accuair - 600 долларов, уже готовые в россии - 200 (не видел не щупал, только слышал) и 450 долларов - обещается что будет все что нужно.
Т.е. иными словами говоря - с нуля не возметесь, наверно. А сразу готовое ТЗ я не могу вам дать по простой причине - как только я захочу завязать стандартную приборку на отображение текущего режима работы подвески (моя имеет "карту" автомобиля и на ней отображался режим подвески TEM-S, который легко адаптировать для отображения состояния пневмы - просто подавая питание на соответствующий ввод на приборку), так сразу ТЗ поменяется. А кроме этого столько нюансов, которые будут "выловлены" в процессе эксплуатации и настройки, что сразу о них и не подумаешь даже.
Т.е. лучше посоветуйте комплект и сопутствующее железо. Я правда не столь деревянный. Тот же БК0010 у меня был подключен к древнему принтеру Sintra - железный ящик весом килограмм 50. Неужели не разберусь и здесь..
Скажу откровенно - я готов и дольше поездить. Думаю, программную часть осилю. Не сразу, постепенно.
А вот если уже разработали - может продается?
Вы озвучте тот необходимый набор функций. Продумайте все хорошо.
Основной функционал того что делал я это управление восемью клапанами (два на каждую стойку), три режима (нижний , верхний, средний) , автоматическое удержание заданной позиции, ручная блокировка (отключение автоматического удержания), оповещение о проблемах датчиков , клапанов и управляющ драйверов и различные мелкие фишки.
Все это выводилось на дисплей и управлялось двумя кнопками.
>>А вот если уже разработали - может продается?<<
Не совсем понял. Если вы имеете в иду мой контроллер , то да наверное продается. У заказчика был прицел на коммерческое изготовление устройства.
да, имелось ввиду - продается ли готовый контроллер и стоимость оного. Те функции которые вы описали - их достаточно вполне
>>да, имелось ввиду - продается ли готовый контроллер и стоимость оного.<<
Я не знаю. С тем закзчиком я давно не контактирую.
Ну что будем работать ? Кстати как у вас дела с электроникой, ЛУТом , пайкой и т.д. ?
паяльник держать умею, распаять могу, плату рисовал цапон-лаком, травил. Думаю, утюгом не сложнее перенести.
Ну и хорошо. С прошлым заказчиком я работал так.
Я писал программу, и консультировал его что купить как собрать/подключить как залить программу и т.д.
Вас такой вариант устраивает ?
Если да то мне нужно несколько дней для подготовки железа. Все остальное в личной переписке
1
heruvim219@mail.ru
Сначала бы на берегу определиться - во сколько это выльется и смогу ли я модифицировать ПО в дальнейшем.
>>Сначала бы на берегу определиться <<
Вот и я об этом. О таких вещах не принято говорить в открытой переписке.
В любом случае договориться обо всем на берегу не получиться т.к. вы уже собрались апгрейдить будущее ПО. Так что какие то изменения придется вносить "по ходу".
>>смогу ли я модифицировать ПО в дальнейшем<<
Зависит только от вас. Я могу детально откоментировать исходник.
Так же , в программе будут участки кода которые требуют настройки именно под ваши параметры.
Т.к. я не могу воссоздать у себя полный прототип устройства (только приблизительный стенд-макет).
Добрый день.
Весь мой опыт программирования - Basic, ассемблер на БК0010-01, все освоено 20 лет назад. И примерно тогда же позабыто.
Ардуино рассматриваю на роль контроллера для управления пневмоподвеской. Не знаю с чем еще и столкнусь, потому хочу сто раз перестраховаться перед покупкой. И под силу будет ли вообще результат.
А в результате нужно устройство, которое будет читать показания четырех датчиков угла подвески, на выходе которых напряжение 0 - 5 В. Контроллер должен иметь возможность предварительной настройки: положение подвески "внизу" - данные датчиков разные, но они должны быть сохранены параметры положения подвески. Далее подвеска подкачивается в среднее положение, а параметры датчиков сохраняются как соответствующие ей. И т.п. для верхнего положения.
Ожидается, что устройство будет управлять пневматическими клапанами подкачивая или спуская воздух из пневмоподушек для поддержания заданных параметров датчиков.
Скажу откровенно: я потеряю на этой разработке времени, т.к. придется пройти процесс обучения, а сами знаете - сначала сотня глюков и вопросов "я заливаю так, а оно что-то не то", потом первый код будет кривым и некрасивым. Потом его улучшишь. Потом, когда научишься писать красиво - уже и не разберешь что и где было.
Потому - лучше заплачу тому, кто разработает по ТЗ.
Либо уж уверьте, что "все получится" :)
Спасибо.
Друг, купи готовое и не парься. Ничего ты толком не выгадаешь, на круг выйдет купить готовый и проверенный дешевле. Обкатывать контроллер на Абдурино ты будешь долго и нудно. И все что будет написано работает только на столе в виде потенциометров и светодиодов. Как только поставишь на машину, пойдут проблеммы. Я тоже начинал с этого форума и тоже Абдурино, так вот - начало вроде как февраль, что-то более-менее рабочее появилось к лету, глюки мелкие до сих пор убираются, было написано штук пять версий глобально отличающихся и штук под 100!!! вариантов почти в каждой версии. Вспоминая начало своих работ, думаю, что лучше бы готовое купил и не ездил бы с кучей проводов почти год. Кстати прогу писал парень с этого-же форума и живем мы с ним в одном городе и он достаточно работоспособный и писал бывало по три-четыре версии в день. Подумай хорошенько. Кстати Акку-Левел вроде подороже 600 долларов стоит, но если он работает, то цена вполне адекватная, правда посмотреть что он могЁт.
Можешь готовое у меня купить, как минимум обкатанное и не в версии макетки, все выполнено на производстве на полевых ключах с дисплеем под настройку и энкодером с сегментом для управления.
italius, а с датчиком давления твой работает??? ну, тот который на штатном блоке клапанов....
Что же... Вас уже двое, кто меня отговорил. Давайте обусдим
Да, действительно. Я согласен с постом italiusом дело долгое и нудное. Вспомнил я как с прошлой такой темой мучались ... не дай бог еще раз ...
Вобщем я отказываюсь учавствовать в этом проекте.
chaytan, версия со штатным датчиком присутствовала, есть у меня в архиве, но до конечного варианта так и не дошла, так как проблемно было обыграть работу с данным датчиком, и поэтому решили дошлифовать алгоритм в целлом. Сейчас основа работает! Датчик штатный в архиве, да и он малопригоден по причине того, что многие строят не на штатных клапанах, да и у меня без ресивера все стоит.
nestandart, вроде как парня Андрей (или Алексей) зовут, и он из Москвы и поставил контроллер на квадроцикл?
eastpoint, тема к обсуждению какова? Я высказал свое мнение. Если нужно готовое что-то, то могу предложить я, а можно и на Америку посмотреть, да вроде и на Украине ребята что-то делают.....
я от задействования датчика давления отказываться нехочу. с использовнием ресиверов просто реально интересней.
имитировл работу системы с ресом, в моем случае как нельзя кстати. может есть смысл добавить работу с датчиком в качестве дополнительного девайса к уже имеющейся системе. ведь можн даже не привязывать програмно к контролеру а только в разрыв меж управлением омпресором и клапанами ставить.
Что же... Вас уже двое, кто меня отговорил. Давайте обусдим
для разработки потребуется делать макет для имитации неких дорожных и эксплуатационных условий, пусть даже примитивный но он если по уму то нужен. а это только для экспериментов требует приобретения тех-же серв, что влечет за собой использование еще одного контролера для их управления и соответственно п.о. имитатора....
тем самым надо делать платформу на корой установятся 4 датчики, вторую платформу которая будет имитировать дорогу и изменение дорожного рельефа.
одним словом ребята правы, надо быть или готовым к недетским затратам на разработку или покупать готовый. разработка требует и реальной системы на автомобиле, кучу времени на эксперименты.
>>nestandart, вроде как парня Андрей (или Алексей) зовут, и он из Москвы <<
Даже близко не попали.
>>поставил контроллер на квадроцикл?<<
Изначально да. Но потом заказчик поставил его на машину (не помню какую), немного откатали и как то рзошлись .
Что же... Вас уже двое, кто меня отговорил. Давайте обусдим
На самом деле просто многие промолчали :)
В любых раскладах если есть что-то готовое удовлетворяющие ваши потребности в 99% купить его дешевле (даже если выглядит дорого). Бывают, конечно, "завихи маркетинга" когда трансформатор с амперметром в красивом корпусе за $300 продают, но...
Гораздо чаще, даже "самому все делать" - дороже выходит. Даже не считая "скрытой цены" собственного времени (за счет массового производства, в "разнобой" покупать, плюс инструменты, плюс сломал/спалил в разы все может привысить и т.д. и т.п.).
А если еще нанимать програмера (посмотрите по чем програмер на ставке стоит, так это "долгосрончые контракты", а "разово" почасовка выше зажелается). А "за неделю" - такое не сделаешь. А если еще нужен "знает электронику", да по хорошему и слесарить можешь, да еще и с "опытом".... Ой как бы не вышло что дешевле машину классом повыше купить где все это есть "из коробки".
Так что IMHO все это "монстрячить" имеет смысл только в трех случаях:
1. Собираетесь потом сами продавать разработки (но тут еще на порядок цены увеличить нужно будет).
2. Просто нравится копатся в своей машине Just for Fun (и готовы тратить деньги на хобби, как любое автомобильное хобби - хорошие деньги).
3. Вам нужны уникальные фичи, которых в готовых продуктах просто нет. А нажны настолько что "цена рояля не играет".
nestandart, Да тот парень, просто в Мскв встречался с ним и говорил он про програмиста из Кемерово (или близкое к Уральскому региону), да в принципе какая разница. Суть в другом, надеюсь что заказная разработка не будет продана но второму кругу, а будет написана как новый вариант.
chaytan Работу ресивера легче обыграть с реле давления с гистерезисом, подсоединив еще и проводком через диод на датчик тормоза. Так и дешевле и надежнее. Жалко, конечно, штатного датчика, но мы его все-таки допишем, поработав над теорией алгоритма.
leshak Не требуются коментарии на ваш пост, все правильно написано, дешево разовое изделие не сделать, будет все - и глюки и "пожары" и потерянное время и захочется просто все похер... Да и не забывать, что и програмист может нервничать....
ну может отчасти и прав относительно датчика, но всеже когда все магистрали есть, и они именно под имеющийся блок клапанов и компрессор, городить огород с дополнением реле давления неочень охота. темболее учитывая компоновку авты и изобилие прочих девайсов в некотором роде непредставляется возможным.
и опять-же, дабы ненарушать целостность проводов укладывать- добавлять новые неочень и хочется. другое дело дополнить некой *черной коробкой* в которой и будет обрабатываться датчик.
ты неповеришь, у меня машино уже полтора года на стапеле стоит, частично из-за отсутствия свободного времени или погодных условий а в основном по причине желания все сделать продуманно и не как у всех. это хоть и дорого но в тоже время учитывая тот факт что она стоит и нет расходов связаных с эксплуатацией то теже деньги идут на интересные плюшки...
кстати, у меня с датчиком давления проблем невозникло. тоисть в моем случае у него выходное напряжение зависит от давления.
>> про програмиста из Кемерово<<
А вот это в точку.
>>заказная разработка не будет продана но второму кругу<<
Конечно нет. Хотя бы даже по причине того что прошел уже год и я уже плохо помню алгоритмы работы программы.
Ту программу я совершенно бесплатно скинул chaytan у.
>>а будет написана как новый вариант<<
Я же писал выше. Никакого нового варианта, от меня, не будет.
chaytan Да с датчиком давления в штатном блоке я давно разобрался, суть в другом, штатными блоками клапанов мало кто пользуется, в основном ездят на ГБО. И так как я планировал изначально комерческий проект, то рациональней оказалось использовать реле давления.
chaytan Да с датчиком давления в штатном блоке я давно разобрался, суть в другом, штатными блоками клапанов мало кто пользуется, в основном ездят на ГБО. И так как я планировал изначально комерческий проект, то рациональней оказалось использовать реле давления.
в плане рациональности да, согласен.
но тотже сенайко, делает блоки клапанов по подобию штатных, и лишь с тем отличием что они более ремонтопригодны.
чаще всего используемую схему пневмы я уже прошол на этапе эксперименов. а поскольку все лучшее враг хорошего, попробовав с использованием ресиверов то от них неокажусь. да и возможность знать давление в системе также радует.
Если кому нужно то вот та программа которую я писал год назад для заказчика.
Когда я писал программу я не был уверен в том что мне заплатят. Поятому вшил туда "Жука".
Жук блокирует систему после 250 циклов вкл/выкл устройства. Он вшивается в ипром и поэтому простая перепрошивка МК ни к чему не приведет. Мне было лень его убирать. К тому же он может быть кому нибудь интересен.
Жук это раздел "блокировка 1 " , "else { " сразу после него и предпоследняя скобка программы.
001
#include <LiquidCrystal.h>// библиотека дисплея
002
#include <LiquidCrystalRus.h>//руссификатор дисплея
003
004
LiquidCrystalRus lcd(6, 7, 5, 4, 3, 2);
//порты подключения дисплея
005
006
007
#include <EEPROM.h>//библиотека работы с энергонезависимой памятью
008
009
int
dveknopky=0;
//переменная для блокировки
010
011
int
predustanovka=0;
//переменная для хранения значений предустановок
012
013
int
regim=1;
//переменная для хренения значения режимов
014
015
int
eeprom=0;
//сохранение данных в энергонезависимой памяти
016
int
eeprom2=0;
//сохранение данных в энергонезависимой памяти
017
018
int
knopka=0;
//переменная для хранания состояния кнопок
019
int
knopka2=0;
020
int
knopka3=0;
021
int
knopka4=0;
022
023
024
int
analog=0;
//переменная для хранения значений
025
int
analog2=0;
//датчиков
026
int
analog3=0;
027
int
analog4=0;
028
029
030
int
blok=0;
//переменная для блокировки установленных режимов
031
int
blok2=0;
032
int
blok3=0;
033
int
blok4=0;
034
035
036
int
modul=0;
//переменная для общей блокировки
037
int
modul2=0;
038
int
modul3=0;
039
int
modul4=0;
040
041
042
043
044
045
046
047
void
setup
()
048
{
049
050
lcd.begin(16, 2);
//иницифлизация дисплея
051
052
pinMode(19,INPUT);
//кнопки
053
pinMode(18,INPUT);
054
055
pinMode(0,OUTPUT);
//Клапана сброса
056
pinMode(1,OUTPUT);
057
pinMode(8,OUTPUT);
058
pinMode(9,OUTPUT);
059
060
pinMode(10,OUTPUT);
//клапана накачки
061
pinMode(11,OUTPUT);
062
pinMode(12,OUTPUT);
063
pinMode(13,OUTPUT);
064
065
}
066
067
void
loop
()
068
{
069
070
071
/////////////////////////блокипровка 1 ////////////////////////
072
073
if
(knopka4==0)
074
{
075
EEPROM.write(1,(EEPROM.read(1)+1));
076
knopka4=1;
077
}
078
079
eeprom2=EEPROM.read(1);
080
081
if
(eeprom2>=250)
082
{
083
lcd.setCursor(0,1);
084
lcd.print(
" "
);
085
lcd.setCursor(2,1);
086
lcd.print(
"Заблокирована "
);
087
lcd.setCursor(0,0);
088
lcd.print(
" "
);
089
lcd.setCursor(4,0);
090
lcd.print(
"Система"
);
091
lcd.setCursor(12,0);
092
lcd.print(
" "
);
093
094
095
096
digitalWrite(0,LOW);
//отключние всех клапанов
097
digitalWrite(1,LOW);
098
digitalWrite(8,LOW);
099
digitalWrite(9,LOW);
100
digitalWrite(10,LOW);
101
digitalWrite(11,LOW);
102
digitalWrite(12,LOW);
103
digitalWrite(13,LOW);
104
105
106
delay(1000);
107
lcd.setCursor(0,0);
108
lcd.print(
" "
);
109
lcd.setCursor(0,1);
110
lcd.print(
" "
);
111
delay(1000);
112
113
}
114
115
else
116
{
117
if
(eeprom==0)
118
{
119
regim=EEPROM.read(0);
//чтение энергонезависимой памяти
120
eeprom=1;
121
}
122
//****************Блокировка системы 2 ***************
123
124
if
(digitalRead(19)==HIGH&&digitalRead(18)==HIGH&&knopka3==0)
//если нажаты две кнопки
125
{
126
knopka3=1;
//то пишем 1 в переменную "кнопка"
127
128
}
129
if
(digitalRead(19)==LOW&&digitalRead(18)==LOW&&knopka3==1)
//если две кнопки не нажаты
130
{
131
//то инвертируем переменную "две кнопки"
132
dveknopky=dveknopky+1;
//и блокируем систему
133
if
(dveknopky>1)
134
{
135
dveknopky=0;
136
}
137
if
(dveknopky<0)
138
{
139
dveknopky=1;
140
}
141
142
knopka3=0;
143
delay(500);
144
}
145
146
147
if
(dveknopky==1)
148
{
149
digitalWrite(0,LOW);
//отключение всех клапанов
150
digitalWrite(1,LOW);
151
digitalWrite(8,LOW);
152
digitalWrite(9,LOW);
153
digitalWrite(10,LOW);
154
digitalWrite(11,LOW);
155
digitalWrite(12,LOW);
156
digitalWrite(13,LOW);
157
158
lcd.setCursor(0,1);
159
lcd.print(
" "
);
160
lcd.setCursor(2,1);
161
lcd.print(
"Заблокирована "
);
162
lcd.setCursor(0,0);
163
lcd.print(
" "
);
164
lcd.setCursor(4,0);
165
lcd.print(
"Система"
);
166
lcd.setCursor(12,0);
167
lcd.print(
" "
);
168
}
169
170
171
else
//если система не заблокирована то ...
172
{
173
174
//*********************Переключение режимов***************
175
//********************(предустановок)********************
176
177
178
if
(digitalRead(19)==HIGH&&knopka==0)
//если нажата кнопка + то
179
{
//пишем +1 в переменную "режим"
180
knopka=1;
181
182
}
183
if
(digitalRead(19)==LOW&&knopka==1)
184
{
185
186
knopka=0;
187
188
regim=regim+1;
189
190
if
(regim>3)
191
{
192
regim=3;
193
}
194
EEPROM.write(0,regim);
//включаем значение последнего режима
195
}
196
197
198
if
(digitalRead(18)==HIGH&&knopka2==0)
//если нажата кнопка - то
199
{
//пишем -1 в переменную "режим"
200
knopka2=1;
201
202
}
203
if
(digitalRead(18)==LOW&&knopka2==1)
204
{
205
206
knopka2=0;
207
208
regim=regim-1;
209
210
if
(regim<1)
211
{
212
regim=1;
213
}
214
EEPROM.write(0,regim);
//включаем значение последнего режима
215
}
216
217
//*********Индикация режимов в верхней строке********
218
219
if
(regim==1)
//если переменная "режим" равна 1 то..
220
{
221
lcd.setCursor(4,0);
//устанавливаем курсор в верхнюю строку
222
223
predustanovka=300;
//предустановка равна 300
224
//это значение можно изменять в пределах от 100 до 999
225
226
lcd.print(
"нижний"
);
//выводим надпись на дисплей
227
lcd.setCursor(10,0);
228
lcd.print(
" "
);
229
230
}
231
232
if
(regim==2)
//аналогично
233
{
234
lcd.setCursor(4,0);
235
236
predustanovka=600;
237
238
lcd.print(
"средний"
);
239
240
}
241
242
if
(regim==3)
//аналогично
243
{
244
lcd.setCursor(4,0);
245
246
predustanovka=900;
247
248
lcd.print(
"верхний"
);
249
250
}
251
252
253
254
//**************Управление первым блоком *****************
255
//***********(клапан-впуск , клапан- выпуск , датчик 1)***
256
257
258
259
260
if
(blok==0)
//если переменная "блок" равна 0 то ...
261
{
262
263
analog=analogRead(14);
//опрашиваем датчик
264
265
266
if
(analog>999)
//приводим значение с датчика в диапазон от 100 до 999
267
{
268
analog=999;
269
}
270
271
if
(analog<100)
272
{
273
analog=100;
274
}
275
276
277
}
278
279
if
(analog<(predustanovka-5))
//если значение датчика меньше значения предустановки то ...
280
{
281
modul=0;
//пишем 0 в переменную "модуль"
282
blok=0;
//пишем 0 в переменную "блок"
283
digitalWrite(13,HIGH);
//включаем клапан накачки
284
digitalWrite(0,LOW);
//отключаем клапан сброса
285
286
287
}
288
289
if
(analog>=(predustanovka-10)&&analog<=(predustanovka+10))
//если значение датчика равно предустановке (+/-10) то...
290
291
{
292
modul=1;
//пишем 1 в переменную "модуль"
293
blok=1;
//пишем 1 в переменную "блок"
294
digitalWrite(0,LOW);
//отключаем клапан сброса
295
digitalWrite(13,LOW);
//отключаем клапан накачки
296
297
}
298
299
if
(analog>(predustanovka+5))
//если значение датчика больше значения предустановки то...
300
{
301
modul=0;
//пишем 0 в переменную "модуль"
302
blok=0;
//пишем 0 в переменную "блок"
303
digitalWrite(13,LOW);
//отключаем клапан накачки
304
digitalWrite(0,HIGH);
//включаем клапан сброса
305
306
307
}
308
//**************Управление вторы блоком *****************
309
//***********(клапан-впуск , клапан- выпуск , датчик 2)***
310
311
//аналогично
312
313
if
(blok2==0)
314
{
315
analog2=analogRead(15);
316
317
if
(analog2>999)
318
{
319
analog2=999;
320
}
321
322
if
(analog2<100)
323
{
324
analog2=100;
325
}
326
}
327
328
329
330
if
(analog2<(predustanovka-5))
331
{
332
modul2=0;
333
blok2=0;
334
digitalWrite(12,HIGH);
335
digitalWrite(1,LOW);
336
337
338
}
339
340
if
(analog2>=(predustanovka-10)&&analog2<=(predustanovka+10))
341
342
{
343
modul2=1;
344
blok2=1;
345
digitalWrite(1,LOW);
346
digitalWrite(12,LOW);
347
348
}
349
350
if
(analog2>(predustanovka+5))
351
{
352
modul2=0;
353
blok2=0;
354
digitalWrite(12,LOW);
355
digitalWrite(1,HIGH);
356
357
358
}
359
360
//**************Управление третим блоком *****************
361
//***********(клапан-впуск , клапан- выпуск , датчик 3)***
362
363
//аналогично
364
365
366
if
(blok3==0)
367
{
368
analog3=analogRead(16);
369
370
if
(analog3>999)
371
{
372
analog3=999;
373
}
374
375
if
(analog3<100)
376
{
377
analog3=100;
378
}
379
}
380
381
382
383
if
(analog3<(predustanovka-5))
384
{
385
modul3=0;
386
blok3=0;
387
digitalWrite(11,HIGH);
388
digitalWrite(8,LOW);
389
390
391
}
392
393
if
(analog3>=(predustanovka-10)&&analog3<=(predustanovka+10))
394
395
{
396
modul3=1;
397
blok3=1;
398
digitalWrite(8,LOW);
399
digitalWrite(11,LOW);
400
401
}
402
403
if
(analog3>(predustanovka+5))
404
{
405
modul3=0;
406
blok3=0;
407
digitalWrite(11,LOW);
408
digitalWrite(8,HIGH);
409
410
411
}
412
413
//**************Управление четвертым блоком *****************
414
//***********(клапан-впуск , клапан- выпуск , датчик 4)***
415
416
//аналогично
417
418
419
if
(blok4==0)
420
{
421
analog4=analogRead(17);
422
423
if
(analog4>999)
424
{
425
analog4=999;
426
}
427
428
if
(analog4<100)
429
{
430
analog4=100;
431
}
432
}
433
434
435
436
if
(analog4<(predustanovka-5))
437
{
438
modul4=0;
439
blok4=0;
440
digitalWrite(10,HIGH);
441
digitalWrite(9,LOW);
442
443
444
}
445
446
if
(analog4>=(predustanovka-10)&&analog4<=(predustanovka+10))
447
448
{
449
modul4=1;
450
blok4=1;
451
digitalWrite(9,LOW);
452
digitalWrite(10,LOW);
453
454
}
455
456
if
(analog4>(predustanovka+5))
457
{
458
modul4=0;
459
blok4=0;
460
digitalWrite(10,LOW);
461
digitalWrite(9,HIGH);
462
463
464
}
465
466
467
468
//***************Индикация состояния датчиков***************
469
//***************и работы режимов***************************
470
471
472
if
(modul==1&&modul2==1&&modul3==1&&modul4==1)
//если все "модули" равны 1 (т.е. все датчики установлены в заданное положение) то...
473
{
474
//выводим в нижнюю строку надпись "Установлен"
475
lcd.setCursor(0, 1);
476
lcd.print(
" "
);
477
478
lcd.setCursor(3, 1);
479
lcd.print(
"Установлен"
);
480
481
lcd.setCursor(13, 1);
482
lcd.print(
" "
);
483
484
}
485
486
else
//если установлены не все датчики то...
487
{
488
489
//выводим в нижнюю строку показания всех датчиков
490
lcd.setCursor(1,1);
491
lcd.print(analog);
492
lcd.setCursor(4,1);
493
lcd.print(
" "
);
494
495
lcd.setCursor(5,1);
496
lcd.print(analog2);
497
lcd.setCursor(8,1);
498
lcd.print(
" "
);
499
500
lcd.setCursor(9,1);
501
lcd.print(analog3);
502
lcd.setCursor(12,1);
503
lcd.print(
" "
);
504
505
lcd.setCursor(13,1);
506
lcd.print(analog4);
507
lcd.setCursor(16,1);
508
lcd.print(
" "
);
509
510
511
512
513
}
514
}
515
}
516
}
Блин, совсем запутался.
Вот более поздняя версия программы без жука , с временной задержкой действия и некоторыми функциями самодиагностики.
001
#include <LiquidCrystal.h>
002
003
#include <LiquidCrystalRus.h>
004
LiquidCrystalRus lcd(6, 7, 5, 4, 3, 2);
005
006
int
state=0;
007
int
state2=0;
008
int
state3=0;
009
int
state4=0;
010
int
state5=0;
011
012
int
avaria=0;
013
int
avaria2=0;
014
int
avaria3=0;
015
int
avaria4=0;
016
017
int
ustanovka=0;
018
int
ustanovka2=0;
019
int
ustanovka3=0;
020
int
ustanovka4=0;
021
022
long
previousMillis = 0;
023
long
previousMillis2 = 0;
024
long
previousMillis3 = 0;
025
long
previousMillis4 = 0;
026
long
previousMillis5 = 0;
027
028
int
obriv = 0;
029
int
obriv2 = 0;
030
int
obriv3 = 0;
031
int
obriv4 = 0;
032
033
#include <EEPROM.h>
034
035
int
dveknopky=0;
036
037
int
predustanovka=0;
038
int
regim=1;
039
040
int
eeprom=0;
041
042
043
int
knopka=0;
044
int
knopka2=0;
045
int
knopka3=0;
046
047
048
049
int
analog=0;
050
int
analog2=0;
051
int
analog3=0;
052
int
analog4=0;
053
054
055
056
057
058
int
sek=0;
059
int
sek2=0;
060
int
sek3=0;
061
int
sek4=0;
062
063
int
flag1=0;
064
int
flag2=0;
065
int
flag3=0;
066
int
flag4=0;
067
068
069
070
void
setup
()
071
{
072
073
pinMode(14,INPUT);
074
pinMode(15,INPUT);
075
pinMode(16,INPUT);
076
pinMode(17,INPUT);
077
078
digitalWrite(14, HIGH);
079
digitalWrite(15, HIGH);
080
digitalWrite(16, HIGH);
081
digitalWrite(17, HIGH);
082
083
lcd.begin(16, 2);
084
085
pinMode(19,INPUT);
086
pinMode(18,INPUT);
087
088
pinMode(0,OUTPUT);
089
pinMode(1,OUTPUT);
090
pinMode(8,OUTPUT);
091
pinMode(9,OUTPUT);
092
093
pinMode(10,OUTPUT);
094
pinMode(11,OUTPUT);
095
pinMode(12,OUTPUT);
096
pinMode(13,OUTPUT);
097
098
}
099
100
void
loop
()
101
{
102
103
if
(millis() -previousMillis5 >=100)
104
{
105
previousMillis5 = millis();
106
state5=!state5;
107
108
if
(state5==1)
109
{
110
lcd.clear();
111
}
112
}
113
114
115
116
117
118
if
(eeprom==0)
119
{
120
regim=EEPROM.read(0);
121
eeprom=1;
122
}
123
124
125
if
(digitalRead(19)==HIGH&&digitalRead(18)==HIGH&&knopka3==0)
126
{
127
knopka3=1;
128
129
}
130
if
(digitalRead(19)==LOW&&digitalRead(18)==LOW&&knopka3==1)
131
{
132
133
dveknopky=dveknopky+1;
134
if
(dveknopky>1)
135
{
136
dveknopky=0;
137
}
138
if
(dveknopky<0)
139
{
140
dveknopky=1;
141
}
142
143
knopka3=0;
144
delay(500);
145
}
146
147
148
if
(dveknopky==1)
149
{
150
digitalWrite(0,LOW);
151
digitalWrite(1,LOW);
152
digitalWrite(8,LOW);
153
digitalWrite(9,LOW);
154
digitalWrite(10,LOW);
155
digitalWrite(11,LOW);
156
digitalWrite(12,LOW);
157
digitalWrite(13,LOW);
158
159
160
lcd.setCursor(2,1);
161
lcd.print(
"Заблокирована"
);
162
lcd.setCursor(4,0);
163
lcd.print(
"Система"
);
164
165
}
166
167
168
else
169
{
170
171
if
(analogRead(14)<=1010&&analogRead(15)<=1010&&analogRead(16)<=1010&&analogRead(17)<=1010)
172
173
{
174
175
176
177
178
if
(digitalRead(19)==HIGH&&knopka==0)
179
{
180
knopka=1;
181
avaria=0;
182
}
183
if
(digitalRead(19)==LOW&&knopka==1)
184
{
185
186
knopka=0;
187
188
regim=regim+1;
189
190
if
(regim>3)
191
{
192
regim=3;
193
}
194
EEPROM.write(0,regim);
195
sek=0;
196
197
}
198
199
200
201
if
(digitalRead(18)==HIGH&&knopka2==0)
202
{
203
knopka2=1;
204
avaria=0;
205
}
206
if
(digitalRead(18)==LOW&&knopka2==1)
207
{
208
209
knopka2=0;
210
211
regim=regim-1;
212
213
if
(regim<1)
214
{
215
regim=1;
216
}
217
EEPROM.write(0,regim);
218
sek=0;
219
220
}
221
222
223
224
225
if
(regim==1)
226
{
227
228
predustanovka=300;
229
230
if
(avaria==0&&avaria2==0&&avaria3==0&&avaria4==0)
231
{
232
lcd.setCursor(4,0);
233
lcd.print(
"нижний"
);
234
235
}
236
}
237
238
if
(regim==2)
239
{
240
predustanovka=600;
241
242
if
(avaria==0&&avaria2==0&&avaria3==0&&avaria4==0)
243
{
244
lcd.setCursor(4,0);
245
lcd.print(
"средний"
);
246
}
247
}
248
249
if
(regim==3)
250
{
251
252
predustanovka=900;
253
254
if
(avaria==0&&avaria2==0&&avaria3==0&&avaria4==0)
255
{
256
lcd.setCursor(4,0);
257
lcd.print(
"верхний"
);
258
}
259
}
260
261
262
263
264
265
266
if
(flag1==1)
267
{
268
if
(millis() -previousMillis >=500)
269
{
270
previousMillis = millis();
271
state=!state;
272
273
if
(state==1)
274
{
275
sek++;
276
}
277
if
(sek>=30)
278
{
279
sek=30;
280
}
281
}
282
}
283
284
285
286
analog=analogRead(14);
287
288
if
(analog>999)
289
{
290
analog=999;
291
}
292
if
(analog<100)
293
{
294
analog=100;
295
}
296
297
if
(analog>(predustanovka+5)&&sek>=3)
298
299
{
300
flag1=1;
301
if
(sek<30)
302
{
303
304
305
306
digitalWrite(13,LOW);
307
digitalWrite(0,HIGH);
308
309
}
310
else
311
{
312
313
avaria=1;
314
digitalWrite(13,LOW);
315
digitalWrite(0,LOW);
316
317
318
}
319
}
320
321
if
(analog>=(predustanovka-10)&&analog<=(predustanovka+10))
322
323
{
324
325
326
ustanovka=1;
327
avaria=0;
328
flag1=0;
329
digitalWrite(0,LOW);
330
digitalWrite(13,LOW);
331
sek=0;
332
}
333
else
334
{
335
336
ustanovka=0;
337
flag1=1;
338
}
339
340
if
(analog<(predustanovka-5)&&sek>=3)
341
{
342
flag1=1;
343
if
(sek<30)
344
{
345
346
digitalWrite(0,LOW);
347
digitalWrite(13,HIGH);
348
349
}
350
else
351
{
352
353
avaria=1;
354
digitalWrite(0,LOW);
355
digitalWrite(13,LOW);
356
357
358
}
359
360
}
361
362
363
if
(flag2==1)
364
{
365
if
(millis() -previousMillis2 >=500)
366
{
367
previousMillis2 = millis();
368
state2=!state2;
369
370
if
(state2==1)
371
{
372
373
sek2++;
374
}
375
if
(sek2>=30)
376
{
377
sek2=30;
378
}
379
}
380
}
381
382
383
384
analog2=analogRead(15);
385
386
if
(analog2>999)
387
{
388
analog2=999;
389
}
390
if
(analog2<100)
391
{
392
analog2=100;
393
}
394
395
if
(analog2>(predustanovka+5)&&sek2>=3)
396
397
{
398
flag2=1;
399
if
(sek2<30)
400
{
401
402
403
404
digitalWrite(12,LOW);
405
digitalWrite(1,HIGH);
406
407
}
408
else
409
{
410
411
avaria2=1;
412
digitalWrite(12,LOW);
413
digitalWrite(1,LOW);
414
415
416
}
417
}
418
419
if
(analog2>=(predustanovka-10)&&analog2<=(predustanovka+10))
420
421
{
422
423
424
ustanovka2=1;
425
avaria2=0;
426
flag2=0;
427
digitalWrite(1,LOW);
428
digitalWrite(12,LOW);
429
sek2=0;
430
}
431
else
432
{
433
434
ustanovka2=0;
435
flag2=1;
436
}
437
438
if
(analog2<(predustanovka-5)&&sek2>=3)
439
{
440
flag2=1;
441
if
(sek2<30)
442
{
443
444
digitalWrite(1,LOW);
445
digitalWrite(12,HIGH);
446
447
}
448
else
449
{
450
451
avaria2=1;
452
digitalWrite(1,LOW);
453
digitalWrite(12,LOW);
454
455
456
}
457
458
}
459
460
461
462
463
464
465
466
if
(flag3==1)
467
{
468
if
(millis() -previousMillis3 >=500)
469
{
470
previousMillis3 = millis();
471
state3=!state3;
472
473
if
(state3==1)
474
{
475
476
sek3++;
477
}
478
if
(sek3>=30)
479
{
480
sek3=30;
481
}
482
}
483
}
484
485
486
487
analog3=analogRead(16);
488
489
if
(analog3>999)
490
{
491
analog3=999;
492
}
493
if
(analog3<100)
494
{
495
analog3=100;
496
}
497
498
if
(analog3>(predustanovka+5)&&sek3>=3)
499
500
{
501
flag3=1;
502
if
(sek3<30)
503
{
504
505
506
507
digitalWrite(11,LOW);
508
digitalWrite(8,HIGH);
509
510
}
511
else
512
{
513
514
avaria3=1;
515
digitalWrite(11,LOW);
516
digitalWrite(8,LOW);
517
518
519
}
520
}
521
522
if
(analog3>=(predustanovka-10)&&analog3<=(predustanovka+10))
523
524
{
525
526
527
ustanovka3=1;
528
avaria3=0;
529
flag3=0;
530
digitalWrite(8,LOW);
531
digitalWrite(11,LOW);
532
sek3=0;
533
}
534
else
535
{
536
537
ustanovka3=0;
538
flag3=1;
539
}
540
541
if
(analog3<(predustanovka-5)&&sek3>=3)
542
{
543
flag3=1;
544
if
(sek3<30)
545
{
546
547
digitalWrite(8,LOW);
548
digitalWrite(11,HIGH);
549
550
}
551
else
552
{
553
554
avaria3=1;
555
digitalWrite(8,LOW);
556
digitalWrite(11,LOW);
557
558
559
}
560
561
}
562
563
564
565
566
567
568
569
if
(flag4==1)
570
{
571
if
(millis() -previousMillis4 >=500)
572
{
573
previousMillis4 = millis();
574
state4=!state4;
575
576
if
(state4==1)
577
{
578
579
sek4++;
580
}
581
if
(sek4>=30)
582
{
583
sek4=30;
584
}
585
}
586
}
587
588
589
590
analog4=analogRead(17);
591
592
if
(analog4>999)
593
{
594
analog4=999;
595
}
596
if
(analog4<100)
597
{
598
analog4=100;
599
}
600
601
if
(analog4>(predustanovka+5)&&sek4>=3)
602
603
{
604
flag4=1;
605
if
(sek4<30)
606
{
607
608
609
610
digitalWrite(10,LOW);
611
digitalWrite(9,HIGH);
612
613
}
614
else
615
{
616
617
avaria4=1;
618
digitalWrite(10,LOW);
619
digitalWrite(9,LOW);
620
621
622
}
623
}
624
625
if
(analog4>=(predustanovka-10)&&analog4<=(predustanovka+10))
626
627
{
628
629
630
ustanovka4=1;
631
avaria4=0;
632
flag4=0;
633
digitalWrite(9,LOW);
634
digitalWrite(10,LOW);
635
sek4=0;
636
}
637
else
638
{
639
640
ustanovka4=0;
641
flag4=1;
642
}
643
644
if
(analog4<(predustanovka-5)&&sek4>=3)
645
{
646
flag4=1;
647
if
(sek4<30)
648
{
649
650
digitalWrite(9,LOW);
651
digitalWrite(10,HIGH);
652
653
}
654
else
655
{
656
657
avaria4=1;
658
digitalWrite(9,LOW);
659
digitalWrite(10,LOW);
660
661
662
}
663
664
}
665
666
667
668
669
670
671
672
673
674
if
(ustanovka==1&&ustanovka2==1&&ustanovka3==1&&ustanovka4==1)
675
{
676
677
lcd.setCursor(3,1);
678
lcd.print(
"Установлен"
);
679
680
}
681
else
682
{
683
if
(avaria==1||avaria2==1||avaria3==1||avaria4==1)
684
{
685
686
delay(1000);
687
lcd.setCursor(5,0);
688
lcd.print(
"АВАРИЯ"
);
689
lcd.setCursor(3,1);
690
lcd.print(!avaria);
691
lcd.setCursor(6,1);
692
lcd.print(!avaria2);
693
lcd.setCursor(9,1);
694
lcd.print(!avaria3);
695
lcd.setCursor(12,1);
696
lcd.print(!avaria4);
697
698
}
699
else
700
{
701
lcd.setCursor(1,1);
702
lcd.print(analog);
703
lcd.setCursor(5,1);
704
lcd.print(analog2);
705
lcd.setCursor(9,1);
706
lcd.print(analog3);
707
lcd.setCursor(13,1);
708
lcd.print(analog4);
709
}
710
711
712
}
713
}
714
else
715
{
716
if
(analogRead(14)>=1010)
717
{
718
obriv=0;
719
720
delay(1000);
721
}
722
else
723
{
724
obriv=1;
725
726
}
727
if
(analogRead(15)>=1010)
728
{
729
obriv2=0;
730
731
delay(1000);
732
}
733
else
734
{
735
obriv2=1;
736
}
737
if
(analogRead(16)>=1010)
738
{
739
obriv3=0;
740
741
delay(1000);
742
}
743
else
744
{
745
obriv3=1;
746
}
747
if
(analogRead(17)>=1010)
748
{
749
obriv4=0;
750
751
delay(1000);
752
}
753
754
else
755
{
756
obriv4=1;
757
}
758
759
760
lcd.setCursor(2,0);
761
lcd.print(
"ОБРЫВ ДАТЧИКА"
);
762
lcd.setCursor(3,1);
763
lcd.print(obriv);
764
lcd.setCursor(6,1);
765
lcd.print(obriv2);
766
lcd.setCursor(9,1);
767
lcd.print(obriv3);
768
lcd.setCursor(12,1);
769
lcd.print(obriv4);
770
771
772
digitalWrite(9,LOW);
773
digitalWrite(10,LOW);
774
digitalWrite(11,LOW);
775
digitalWrite(8,LOW);
776
digitalWrite(12,LOW);
777
digitalWrite(1,LOW);
778
digitalWrite(13,LOW);
779
digitalWrite(0,LOW);
780
781
782
783
}
784
785
}
786
}
Если кому нужно то вот та программа которую я писал год назад для заказчика.
Мое IMHO что нового заказчика "продают ему повторно" или "пишут с нуля" - волновать не должно (если он не хочется дополнительно оплатить "эксклюзив"). Есть проблема - есть стоимость ее решения. А вто что оно обошлось програмеру - его личное дело.
Если пойти к другому програмеру, у которого нет готового - то будет стоимость "воспроизвести результат", вот это и есть "рыночная цена".
Если кого волновать и должно, то только "прошлого заказчика". Но тут уж как вы с ним изначально договорились на "он владелец интелектуального продукта" или ему важно только "лишь бы работало" и дальнейшая судьба кода его не интересует (кстати большинство именно такие, а некоторые еще и сами собираются в OpenSource отдавать ;).
Когда я писал программу я не был уверен в том что мне заплатят. Поятому вшил туда "Жука".
Ну если отдаются исходиники,то любые "жуки" - можно отдихлофосить :)
Я встречал еще такой вариант (когда отдается только бинарная прошивка): разводится лишняя дорожка на ногу. В прошивке - есть ограничитель каких-нибудь циклов достаточный для проверки работоспособности.
Когда клиент все проверил и оплатил и ему говорится: возьми скальпель и перереж вот эту дорожку и ограничение уйдет :)
Но, честно говоря, сам никогда таким не страдал ;)
>>Ну если отдаются исходиники,то любые "жуки" - можно отдихлофосить :)<<
На тот момент сам заказчик плохо ориентировался в программе и программировании в целом. Чтобы отдихлофосить жуков нужно было идки к другому программеру и платить деньги ему.
>>Ну если отдаются исходиники,то любые "жуки" - можно отдихлофосить :)<<
На тот момент сам заказчик плохо ориентировался в программе и программировании в целом. Чтобы отдихлофосить жуков нужно было идки к другому программеру и платить деньги ему.
Это да. "отдихлофосить" по трудозатратам может быть не меньше (а зачастую даже больше) чем написать с нуля по готовому ТЗ (кроме прошивки, вы же еще, фактически ТЗ ему основательно устаканили).
Да и вообще, если четко знаешь что "кинули предшественника", то как-то для кармы вредно этим заниматся (и противно).
В любом случае если берешь код в "поддержку", почти наверняка прийдется его основательно переписать/отрефакторить что-бы не боятся "чего-нибудь зацепить ненароком".
Хотя пару раз были клиенты, которые "на грани броска" убегали к индусам типа "у них дешевле", а потом когда "сроки поджимают" и "индусы наворотили" - возвращаются. "Спасите, помогите, разгребите". Причем мы даже никаких "жуков/ловушек" никогда не ставили. Всегда хватало низкой квалификации "дешовых конкурентов" ;)
Но если и вернулся - можно и помочь :) По двух-кратному прайсу ;). Теперь-то клиент четко знает нашу ценность :)
>>Да и вообще, если четко знаешь что "кинули предшественника", то как-то для кармы вредно этим заниматся (и противно).<<
Это в мой огород ?
После перевода оплаты. Я скинул ему программу без жука. Объяснив ситуацию и собственно показав ему этого самого жука.
Он понял и отнесся к этому нормально.
Прав, leshak, если я его правильно понял. Говоря о твоем, nestandart, действии, это называют подлостью. Взяв с человека деньги, ты всю оплаченную другим человеком работу, выложил в открытый доступ. Или тебе все-таки не заплатили? И ты решил перевести проект в открытый доступ? Вот такой вот гуманизм и мораль.
Ну, во первых, мы не договаривались о конфиденциальности. Изначальная договоренность была такая что я отдаю ему программу , он оплачивает мы доводим ее до ума и он делает с ней все что захочет. Точно так же и я могу делать с ней все что захочу.
Программу оплатили как договаривались, претензий нет.
Во вторых, у меня есть с десяток файлов программ этого проекта (самые последние были утеряны когда навернулся жесткий).
Я выложил только две версии.
В третьих, человек оплачивал не только программу , но и детальные консультации по сборке и внедрению контроллера.
На момент написания программы он даже не умел прошивать дуину. Мы с железом с месяц ковырялись.
Дружище, а зачем и вправду выложил то, что делал по заказу?
Вы говорите про стенд с лампочками? Зачем мне это - у меня все железо по пневме скоро будет готово и собрано.
Вы говорите купить готовое решение? Нет, неинтересно. ECU двигателя - стороннее. Японская коробка управляется другим, широкоизвестным в узких кругах процессором российской разработки. Самодельный круиз-контроль, активный, с сонарами. Самоделка, где заводское только тяга на др.заслонку. Родная приборная панель, где есть отображение состояния всех систем авто. Включая и бывшую когда то на машине подвеску TEMS. Теперь эту шкалу хотелось бы использовать для индикации состоянии пневмы. И таких нюансов - с десяток.
Дальше? На машине где была ABS 2+1 установлены датчки ABS 4, установлен датчик положения рулевого колеса, датчики ускорения. Все это нужно, чтобы на старой машине реализовать систему антизанос. Вот это - практически нереализуемо, если у вас нет второй "стендовой" машины, на которой готовы боком заходить в повороты в любую погоду.
А вот настроить антикрен в повороте используя данные датчика скорости, бокового ускорения, положения руля - можно. Есть ли это в готовой программе? нет.
И почему "сам". Машина давно полная самоделка. Там ничего не осталось от завода. Сшита сторонняя электроника, ДВС с одной тойоты, коробка от другого ДВС, пусть и той же серии, АБС4 вообще не ставилась на эту машину. И доверяться сторонним специалистам, не вникая в суть сделанных работ - означает остаться беспомощным в случае каких то поломок или глюков.
Парни, я готов "покомпосировать" мозг себе. Пока это не заработает - я буду накачивать пневму "ручками", не жалуясь.
Всё, что я спросил - посоветуйте набор железа - что потребуется. Сама Дурина, но которая? Далее - модули - LCD простой - да, хочу. Только зеленый, в две строчки. И не спрашивайте почему. А реле? ну ведь потребуются. Есть ли готовые? Какие?
Собственно и всё, что хотелось узнать. Цена всего этого не столь высока, чтобы расстроиться в случае неудачи. Так же выставлю на ebay как б/у - и уйдет в миг. Тем более, что в бюджете машины давно похоронена квартира в новостройке.
>>Дружище, а зачем и вправду выложил то, что делал по заказу? <<
Ну если вам всем это так не нравиться сегодня же подчищу посты.
набор железа зависит от конечного результата. од того что вы хотите в результате получить. если только пневма и дисплей то должно хватить и ардуино нано. но опять-же, все зависит от количества задействованых выводов. а здесь или росширять кол-во входов сторонними способами или использовать например уже младшую мегу.
дисплей с зеленой подсветкой. да пожалста, но выбирайте тот что работает адекватно при отрицательных температурах.
реле? конечно понадобиться, компрессору подавать питание понадобиться, здесь лучше отдать предпочтение или контакторам при использовании нескольких компрессоров или бошевские или хеловские релюхи 70А. реально работают в штатных системах. но их количество зависит от кол-ва компрессоров.
управление клапанами нерационально делать с использованием релюх. здесь лучше силовые транзисторы.
для правильного подбора комплектующих лучше сразу определиться с тем что вы хотите в конечном итоге получить, и из чего (компрессор, клапана) будет состоять ваша система.
Знаешь, что я тебе посоветую?
Забудь про "среду" Абдурино! Пиши в чистой С++, без всяких "сред"! Или ищи того кто это зделает за тебя.
Атмел, в принципе неплохой контроллер, но вот его народное продвижение проложила среда Абдурино. Ну, да согласен, там лампочки моргают, яйца варятся и чешутся, куры несутся.....с петухами, ну и так далее. Но вот к серьезной разработке лучше подойти в "чистом програмировании". Ну и еще один совет - сразу обговори конфидициальность проекта.
eastpoint, вот смотрите. в приведенном выше скетче реализована работа с 8 клапанами (4 подьем и 4 спуск) и возможность предустановить три уровня. при желании кол-во уровней можна добавить.
компрессором управлять можна как использовав команды управления клапанами подьема так и отдав эту функцию реле давления при использовании ресивера.
компрессором управлять можна как использовав команды управления клапанами подьема так и отдав эту функцию реле давления при использовании ресивера.
Верно, я и не хочу иначе. Управление компрессором не требует ничего заумного и программного.
и да - я все-таки застрял на железе.
italius, вот интересно, чем плох атмел??? и чем лучше тот-же микрочип??? этоо тоже самое как и сторонники амд или интела парафинят противоположную сторону. или виндовс и линукс.... спор о платформах и их преимуществах всеравно бесполезен. а тем более с темпами развития технологий.
компрессором управлять можна как использовав команды управления клапанами подьема так и отдав эту функцию реле давления при использовании ресивера.
Верно, я и не хочу иначе. Управление компрессором не требует ничего заумного и программного.
и да - я все-таки застрял на железе.
вы определитесь с компонентами. типа вот буду использовать вот этот компрессор и у него вот такие характеристики. вместе с тем какие требования к пневме вцелом. чего от неё ожидаете- комфорта или выпендрежа??? это также повлияет на состав системы.
italius, вот интересно, чем плох атмел??? и чем лучше тот-же микрочип??? этоо тоже самое как и сторонники амд или интела парафинят противоположную сторону. или виндовс и линукс.... спор о платформах и их преимуществах всеравно бесполезен. а тем более с темпами развития технологий.
Я вообще-то про среду програмирования писал, а не про сравнение контроллеров. И конкретно про оболочку Абдурино, лучше ту же программу подписать без оболочки Абдурино. Вот я про что!!!
каким образом электроника будет определять параметры "выпендрежа" или комфорта?
расчетная жесткость на подушках будет соответствовать нынешним пружинам 8 и 6 кг соответственно. Подключение или отключение ресиверов для каждой подушки - вручную.
Основное назначение подвески - поднять авто при переползании "направлений", опустить до разумного при движении по нормальной дороге.
Ходовые характеристики подвески должны быть сохранены
italius, вот интересно, чем плох атмел??? и чем лучше тот-же микрочип??? этоо тоже самое как и сторонники амд или интела парафинят противоположную сторону. или виндовс и линукс.... спор о платформах и их преимуществах всеравно бесполезен. а тем более с темпами развития технологий.
Я вообще-то про среду програмирования писал, а не про сравнение контроллеров. И конкретно про оболочку Абдурино, лучше ту же программу подписать без оболочки Абдурино. Вот я про что!!!
лучше пойти и купить готовое, а все остальное тернистый путь, путь проб и ошибок. путь бесполезных затрат. но зачастую в том что продается нет того что надо или есть то что надо а еще больше того чего ненадо и никогда не понадобиться...
каким образом электроника будет определять параметры "выпендрежа" или комфорта?
расчетная жесткость на подушках будет соответствовать нынешним пружинам 8 и 6 кг соответственно. Подключение или отключение ресиверов для каждой подушки - вручную.
Основное назначение подвески - поднять авто при переползании "направлений", опустить до разумного при движении по нормальной дороге.
Ходовые характеристики подвески должны быть сохранены
диаметр магистралей, проходные сечение клапанов это все влияет на электронику, точнее правильность поддержания уровней зависит от массы параметров.
самая бюджетная пневма получается при изначальном уклоне на комфорт.
Забудь про "среду" Абдурино! Пиши в чистой С++, без всяких "сред"! Или ищи того кто это зделает за тебя.
Атмел, в принципе неплохой контроллер, но вот его народное продвижение проложила среда Абдурино. Ну, да согласен, там лампочки моргают, яйца варятся и чешутся, куры несутся.....с петухами, ну и так далее. Но вот к серьезной разработке лучше подойти в "чистом програмировании".
Так может скажите какая оболочка или среда разработки лучше, которая годится для "серьезной разработки"?
Или может дело в танцоре, а не в яйцах?
бублики рубена 130х3, амортизаторы бильштайн, сечение подачи 6 мм, сечение на ресиверы 12. Штуцеры на соединения не поздно еще уменьшить/увеличить
maksim, Вам в сущности, что не нравится? Или в этом форуме я ограничен в своем мнении? Как раз и пишу о своем опыте! Об опыте как раз в теме програмирования (програмист другой человек, я разработчик) именно контроллера пневмоподвески.
Ну, а поддерживая ваш тон, скажу, что мне пофиг какя среда или четверг, или Атмел или Пик, но все должно работать без проблемм. Так вот после года работ, с Абдурино, все равно что-то да выплывает. Пусть мелочь, но она напрягает. И все время что-то нужно подписывать. Не знаю, что там про яйца вы написали, но "блинк" у меня работает без проблемм!!!! Думаю и у вас тоже?
>>Да и вообще, если четко знаешь что "кинули предшественника", то как-то для кармы вредно этим заниматся (и противно).<<
Это в мой огород ?
Да нет. Причем тут ваш огород? Я просто примерил на себя ситуацию "ко мне приходит клиент и просит найти жучка от предыдущего работника". Вот и все. Лично я бы скорее всего отказался.
Никаких намеков и проч.
По поводу выкладывания "то что делал под заказ" - я тоже не вижу ничего крамольного. Откуда я знаю как вы с клиентом договаривались, что обещали и т.д. (да вообщем и не хочу вникать).
Изначально предполагаю что тут все порядочные, значит и вы, раз решили выложить код - не нарушили никаких своих обязательств. Пока не доказанно обратное - вы честный человек. И только спасибо вам что "не пожалели поделится".
Если появится "клиент с криками", так опять-таки - это ваше двоих дело.
Лично я, стараюсь переспрашивать клиентов в таких случаях. Как вы строите свои отношения с клиентами - дело ваше :)
Но еще раз. Никаких камней, намеков и проч. у меня даже в мыслях небыло. Вообщем "вам виднее" :)