Вопрос от новичка. Вообще новичка. Ардуино как контроллер управления пневмоподвеской?

eastpoint
Offline
Зарегистрирован: 04.01.2013

Добрый день.

Весь мой опыт программирования - Basic, ассемблер на БК0010-01, все освоено  20 лет назад. И примерно тогда же позабыто.

Ардуино рассматриваю на роль контроллера для управления пневмоподвеской. Не знаю с чем еще и столкнусь, потому хочу сто раз перестраховаться перед покупкой. И под силу будет ли вообще результат.

А в результате нужно устройство, которое будет читать показания четырех датчиков угла подвески, на выходе которых напряжение 0 - 5 В.  Контроллер должен иметь возможность предварительной настройки: положение подвески "внизу" - данные датчиков разные, но они должны быть сохранены параметры положения подвески. Далее подвеска подкачивается в среднее положение, а параметры датчиков сохраняются как соответствующие ей. И т.п. для верхнего положения.

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

 

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

Потому - лучше заплачу тому, кто разработает по ТЗ.

Либо уж уверьте, что "все получится" :)

Спасибо.

maksim
Offline
Зарегистрирован: 12.02.2012

Могу и написать по ТЗ и помочь в разработке/выборе железа (перенос МК на плату, разводка, выбор "рассыпухи"). Вопрос цены за мои услуги, скажу сразу - не дешево, если интерсно:

 

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

>>И под силу будет ли вообще результат.<<

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

Начните с "Чего по проще".

>> потом первый код будет кривым и некрасивым.<<

Сто первый будет таким же. Не все так быстро.

>>Потому - лучше заплачу тому, кто разработает по ТЗ.<<

ТЗ завист от того насколько точно вы опишите ВСЕ что вам нужно.

Обычно бывает так что первоначальное ТЗ и конечное устройство даже не похожи друг на друга.

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

eastpoint
Offline
Зарегистрирован: 04.01.2013

Цена за ваши услуги - то, сколько вы назовете, а так - готовый контроллер accuair - 600 долларов, уже готовые в россии - 200 (не видел не щупал, только слышал) и 450 долларов - обещается что будет все что нужно.

Т.е. иными словами говоря - с нуля не возметесь, наверно. А сразу готовое ТЗ я не могу вам дать по простой причине - как только я захочу завязать стандартную приборку на отображение текущего режима работы подвески (моя имеет "карту" автомобиля и на ней отображался режим подвески TEM-S, который легко адаптировать для отображения состояния пневмы - просто подавая питание на соответствующий ввод на приборку), так сразу ТЗ поменяется. А кроме этого столько нюансов, которые будут "выловлены" в процессе эксплуатации и настройки, что сразу о них и не подумаешь даже.

Т.е. лучше посоветуйте комплект и сопутствующее железо. Я правда не столь деревянный. Тот же БК0010 у меня был подключен к древнему принтеру Sintra - железный ящик весом килограмм 50. Неужели не разберусь и здесь..

eastpoint
Offline
Зарегистрирован: 04.01.2013

Скажу откровенно - я готов и дольше поездить. Думаю, программную часть осилю. Не сразу, постепенно. 

А вот если уже разработали - может продается?

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

Вы озвучте тот необходимый набор функций. Продумайте все хорошо. 

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

Все это выводилось на дисплей и управлялось двумя кнопками.

>>А вот если уже разработали - может продается?<<

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

eastpoint
Offline
Зарегистрирован: 04.01.2013

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

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

>>да, имелось ввиду - продается ли готовый контроллер и стоимость оного.<<

Я не знаю. С тем закзчиком я давно не контактирую.

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

Ну что будем работать ? Кстати как у вас дела с электроникой, ЛУТом , пайкой и т.д. ?

eastpoint
Offline
Зарегистрирован: 04.01.2013

паяльник держать умею, распаять могу, плату рисовал цапон-лаком, травил. Думаю, утюгом не сложнее перенести.

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

Ну и хорошо. С прошлым заказчиком я работал так.

Я писал программу, и консультировал его что купить как собрать/подключить  как залить программу и т.д.

Вас такой вариант устраивает ?

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

1heruvim219@mail.ru

 

eastpoint
Offline
Зарегистрирован: 04.01.2013

Сначала бы на берегу определиться - во сколько это выльется и смогу ли я модифицировать ПО в дальнейшем.

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

>>Сначала бы на берегу определиться <<

Вот и я об этом. О таких вещах не принято говорить в открытой переписке.

В любом случае договориться обо всем на берегу не получиться т.к. вы уже собрались  апгрейдить будущее ПО. Так что какие то изменения придется вносить "по ходу".

>>смогу ли я модифицировать ПО в дальнейшем<<

Зависит только от вас. Я могу детально откоментировать исходник.

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

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

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

eastpoint пишет:

Добрый день.

Весь мой опыт программирования - Basic, ассемблер на БК0010-01, все освоено  20 лет назад. И примерно тогда же позабыто.

Ардуино рассматриваю на роль контроллера для управления пневмоподвеской. Не знаю с чем еще и столкнусь, потому хочу сто раз перестраховаться перед покупкой. И под силу будет ли вообще результат.

А в результате нужно устройство, которое будет читать показания четырех датчиков угла подвески, на выходе которых напряжение 0 - 5 В.  Контроллер должен иметь возможность предварительной настройки: положение подвески "внизу" - данные датчиков разные, но они должны быть сохранены параметры положения подвески. Далее подвеска подкачивается в среднее положение, а параметры датчиков сохраняются как соответствующие ей. И т.п. для верхнего положения.

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

 

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

Потому - лучше заплачу тому, кто разработает по ТЗ.

Либо уж уверьте, что "все получится" :)

Спасибо.

Друг, купи готовое и не парься. Ничего ты толком не выгадаешь, на круг выйдет купить готовый и проверенный дешевле. Обкатывать контроллер на Абдурино ты будешь долго и нудно. И все что будет написано работает только на столе в виде потенциометров и светодиодов. Как только поставишь на машину, пойдут проблеммы. Я тоже начинал с этого форума и тоже Абдурино, так вот - начало вроде как февраль, что-то более-менее рабочее появилось к лету, глюки мелкие до сих пор убираются, было написано штук пять версий глобально отличающихся и штук под 100!!! вариантов почти в каждой версии. Вспоминая начало своих работ, думаю, что лучше бы готовое купил и не ездил бы с кучей проводов почти год. Кстати прогу писал парень с этого-же форума и живем мы с ним в одном городе и он достаточно работоспособный и писал бывало по три-четыре версии в день. Подумай хорошенько. Кстати Акку-Левел вроде подороже 600 долларов стоит, но если он работает, то цена вполне адекватная, правда посмотреть что он могЁт.

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

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

italius, а с датчиком давления твой работает??? ну, тот который на штатном блоке клапанов....

eastpoint
Offline
Зарегистрирован: 04.01.2013

Что же... Вас уже двое, кто меня отговорил. Давайте обусдим

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

Да, действительно. Я согласен с постом italiusом дело долгое и нудное. Вспомнил я как с прошлой такой темой мучались ... не дай бог еще раз ...

Вобщем я отказываюсь учавствовать в этом проекте.

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

chaytan, версия со штатным датчиком присутствовала, есть  у меня в архиве, но до конечного варианта так и не дошла, так как проблемно было обыграть работу с данным датчиком, и поэтому решили дошлифовать алгоритм в целлом. Сейчас основа работает! Датчик штатный в архиве, да и он малопригоден по причине того, что многие строят не на штатных клапанах, да и у меня без ресивера все стоит.

nestandart, вроде как парня Андрей (или Алексей) зовут, и он из Москвы и поставил контроллер на квадроцикл?

eastpoint, тема к обсуждению какова? Я высказал свое мнение. Если нужно готовое что-то, то могу предложить я, а можно и на Америку посмотреть, да вроде и на Украине ребята что-то делают.....

 

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

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

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

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

eastpoint пишет:

Что же... Вас уже двое, кто меня отговорил. Давайте обусдим

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

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

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

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

>>nestandart, вроде как парня Андрей (или Алексей) зовут, и он из Москвы <<

Даже близко не попали. 

>>поставил контроллер на квадроцикл?<<

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

leshak
Offline
Зарегистрирован: 29.09.2011

 

eastpoint пишет:

Что же... Вас уже двое, кто меня отговорил. Давайте обусдим

На самом деле просто многие промолчали :)

В любых раскладах если есть что-то готовое удовлетворяющие ваши потребности в 99% купить его дешевле (даже если выглядит дорого). Бывают, конечно, "завихи маркетинга" когда трансформатор с амперметром в красивом корпусе за $300 продают, но...

Гораздо чаще, даже "самому все делать" - дороже выходит. Даже не считая "скрытой цены" собственного времени (за счет массового производства, в "разнобой" покупать, плюс инструменты, плюс сломал/спалил в разы все может привысить и т.д. и т.п.).

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

Так что IMHO все это "монстрячить" имеет смысл только в трех случаях:

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

2. Просто нравится копатся в своей машине Just for Fun (и готовы тратить деньги на хобби, как любое автомобильное хобби - хорошие деньги).

3. Вам нужны уникальные фичи, которых в готовых продуктах просто нет. А нажны настолько что "цена рояля не играет".

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

nestandart, Да тот парень, просто в Мскв встречался с ним и говорил он про програмиста из Кемерово (или близкое к Уральскому региону), да в принципе какая разница. Суть в другом, надеюсь что заказная разработка не будет продана но второму кругу, а будет написана как новый вариант.

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

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

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

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

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

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

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

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

>> про програмиста из Кемерово<<

А вот это в точку. 

>>заказная разработка не будет продана но второму кругу<<

Конечно нет. Хотя бы даже по причине того что прошел уже год и я уже плохо помню алгоритмы работы программы.

Ту программу я совершенно бесплатно скинул chaytan у.

>>а будет написана как новый вариант<<

Я же писал выше. Никакого нового варианта, от меня, не будет.

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

chaytan Да с датчиком давления в штатном блоке я давно разобрался, суть в другом, штатными блоками клапанов мало кто пользуется, в основном ездят на ГБО. И так как я планировал изначально комерческий проект, то рациональней оказалось использовать реле давления.

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

italius пишет:

chaytan Да с датчиком давления в штатном блоке я давно разобрался, суть в другом, штатными блоками клапанов мало кто пользуется, в основном ездят на ГБО. И так как я планировал изначально комерческий проект, то рациональней оказалось использовать реле давления.

в плане рациональности да, согласен.

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

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

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

Если кому нужно то вот та программа которую я писал год назад для заказчика.

Когда я писал программу я не был уверен в том что мне заплатят. Поятому вшил туда "Жука".

Жук блокирует систему после 250 циклов вкл/выкл устройства.  Он вшивается в ипром и поэтому простая перепрошивка МК ни к чему не приведет. Мне было лень его убирать. К тому же он может быть кому нибудь интересен.

Жук это раздел "блокировка 1 " , "else { " сразу после него  и предпоследняя скобка программы.

 

001#include <LiquidCrystal.h>// библиотека дисплея
002#include <LiquidCrystalRus.h>//руссификатор дисплея
003 
004LiquidCrystalRus lcd(6, 7, 5, 4, 3, 2);//порты подключения дисплея
005 
006 
007#include <EEPROM.h>//библиотека работы с энергонезависимой памятью
008 
009int dveknopky=0;//переменная для блокировки
010 
011int predustanovka=0;//переменная для хранения значений предустановок
012 
013int regim=1;//переменная для хренения значения режимов
014 
015int eeprom=0;//сохранение данных в энергонезависимой памяти
016int eeprom2=0;//сохранение данных в энергонезависимой памяти
017 
018int knopka=0;//переменная для хранания состояния кнопок
019int knopka2=0;
020int knopka3=0;
021int knopka4=0;
022 
023 
024int analog=0;//переменная для хранения значений
025int analog2=0;//датчиков
026int analog3=0;
027int analog4=0;
028 
029 
030int blok=0;//переменная для блокировки установленных режимов
031int blok2=0;
032int blok3=0;
033int blok4=0;
034 
035 
036int modul=0;//переменная для общей блокировки
037int modul2=0;
038int modul3=0;
039int modul4=0;
040 
041 
042 
043 
044 
045 
046 
047void 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 
067void 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}
nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Блин, совсем запутался.

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

 

001#include <LiquidCrystal.h>
002 
003#include <LiquidCrystalRus.h>
004LiquidCrystalRus lcd(6, 7, 5, 4, 3, 2);
005 
006int state=0;
007int state2=0;
008int state3=0;
009int state4=0;
010int state5=0;
011 
012int avaria=0;
013int avaria2=0;
014int avaria3=0;
015int avaria4=0;
016 
017int ustanovka=0;
018int ustanovka2=0;
019int ustanovka3=0;
020int ustanovka4=0;
021 
022long previousMillis = 0;
023long previousMillis2 = 0;
024long previousMillis3 = 0;
025long previousMillis4 = 0;
026long previousMillis5 = 0;
027 
028int obriv = 0;
029int obriv2 = 0;
030int obriv3 = 0;
031int obriv4 = 0;
032 
033#include <EEPROM.h>
034 
035int dveknopky=0;
036 
037int predustanovka=0;
038int regim=1;
039 
040int eeprom=0;
041 
042 
043int knopka=0;
044int knopka2=0;
045int knopka3=0;
046 
047 
048 
049int analog=0;
050int analog2=0;
051int analog3=0;
052int analog4=0;
053 
054 
055 
056 
057 
058int sek=0;
059int sek2=0;
060int sek3=0;
061int sek4=0;
062 
063int flag1=0;
064int flag2=0;
065int flag3=0;
066int flag4=0;
067 
068 
069 
070void 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 
100void 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   
286analog=analogRead(14);
287 
288if(analog>999)
289{
290  analog=999;
291}
292if(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   
384analog2=analogRead(15);
385 
386if(analog2>999)
387{
388  analog2=999;
389}
390if(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   
487analog3=analogRead(16);
488 
489if(analog3>999)
490{
491  analog3=999;
492}
493if(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   
590analog4=analogRead(17);
591 
592if(analog4>999)
593{
594  analog4=999;
595}
596if(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}

 

leshak
Offline
Зарегистрирован: 29.09.2011

nestandart пишет:

Если кому нужно то вот та программа которую я писал год назад для заказчика.

Мое IMHO что нового заказчика "продают ему повторно" или "пишут с нуля" - волновать не должно (если он не хочется дополнительно оплатить "эксклюзив"). Есть проблема - есть стоимость ее решения. А вто что оно обошлось програмеру - его личное дело.

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

Если кого волновать и должно, то только "прошлого заказчика". Но тут уж как вы с ним изначально договорились на "он владелец интелектуального продукта" или ему важно только "лишь бы работало" и дальнейшая судьба кода его не интересует (кстати большинство именно такие, а некоторые еще и сами собираются в OpenSource отдавать ;).

nestandart пишет:

Когда я писал программу я не был уверен в том что мне заплатят. Поятому вшил туда "Жука".

Ну если отдаются исходиники,то любые "жуки" - можно отдихлофосить :)

Я встречал еще такой вариант (когда отдается только бинарная прошивка): разводится лишняя дорожка на ногу. В прошивке - есть ограничитель каких-нибудь циклов достаточный для проверки работоспособности.

Когда клиент все проверил и  оплатил и ему говорится: возьми скальпель и перереж вот эту дорожку и ограничение уйдет :)

Но, честно говоря, сам никогда таким не страдал ;)

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

>>Ну если отдаются исходиники,то любые "жуки" - можно отдихлофосить :)<<

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

leshak
Offline
Зарегистрирован: 29.09.2011

nestandart пишет:

>>Ну если отдаются исходиники,то любые "жуки" - можно отдихлофосить :)<<

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

Это да. "отдихлофосить" по трудозатратам может быть не меньше (а зачастую даже больше) чем написать с нуля по готовому ТЗ (кроме прошивки, вы же еще, фактически ТЗ ему основательно устаканили).

Да и вообще, если четко знаешь что "кинули предшественника", то как-то для кармы вредно этим заниматся (и противно).

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

Хотя пару раз были клиенты, которые "на грани броска" убегали к индусам типа "у них дешевле", а потом когда "сроки поджимают" и "индусы наворотили" - возвращаются. "Спасите, помогите, разгребите". Причем мы даже никаких "жуков/ловушек" никогда не ставили.  Всегда хватало низкой квалификации "дешовых конкурентов" ;)

Но если и вернулся - можно и помочь :) По двух-кратному прайсу ;). Теперь-то клиент четко знает нашу ценность :)

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

>>Да и вообще, если четко знаешь что "кинули предшественника", то как-то для кармы вредно этим заниматся (и противно).<<

Это в мой огород ?

После перевода оплаты. Я скинул ему программу без жука. Объяснив ситуацию и собственно показав ему этого самого жука.

Он понял и отнесся к этому нормально.

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

Прав, leshak, если я его правильно понял. Говоря о твоем, nestandart, действии, это называют подлостью. Взяв с человека деньги, ты всю оплаченную другим человеком работу, выложил в открытый доступ. Или тебе все-таки не заплатили? И ты решил перевести проект в открытый доступ? Вот такой вот гуманизм и мораль.

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

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

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

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

Я выложил только две версии.

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

На момент написания программы он даже не умел прошивать дуину. Мы с железом с месяц ковырялись.

eastpoint
Offline
Зарегистрирован: 04.01.2013

Дружище, а зачем и вправду выложил то, что делал по заказу? 

Вы говорите про стенд с лампочками? Зачем мне это - у меня все железо по пневме скоро будет готово и собрано.

Вы говорите купить готовое решение? Нет, неинтересно. ECU двигателя - стороннее. Японская коробка управляется другим,  широкоизвестным в узких кругах процессором российской разработки. Самодельный круиз-контроль, активный, с сонарами. Самоделка, где заводское только тяга на др.заслонку. Родная приборная панель, где есть отображение состояния всех систем авто. Включая и бывшую когда то на машине подвеску TEMS. Теперь эту шкалу хотелось бы использовать для индикации состоянии пневмы. И таких нюансов - с десяток. 

Дальше? На машине где была ABS 2+1 установлены датчки ABS 4, установлен датчик положения рулевого колеса, датчики ускорения. Все это нужно, чтобы на старой машине реализовать систему антизанос. Вот это - практически нереализуемо, если у вас нет второй "стендовой" машины, на которой готовы боком заходить в повороты в любую погоду. 

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

И почему "сам". Машина давно полная самоделка. Там ничего не осталось от завода. Сшита сторонняя электроника, ДВС с одной тойоты, коробка от другого ДВС, пусть и той же серии, АБС4 вообще не ставилась на эту машину. И доверяться сторонним специалистам, не вникая в суть сделанных работ - означает остаться беспомощным в случае каких то поломок или глюков.

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

Всё, что я спросил - посоветуйте набор железа - что потребуется. Сама Дурина, но которая? Далее - модули - LCD простой - да, хочу. Только зеленый, в две строчки. И не спрашивайте почему. А реле? ну ведь потребуются. Есть ли готовые? Какие?

Собственно и всё, что хотелось узнать. Цена всего этого не столь высока, чтобы расстроиться в случае неудачи. Так же выставлю на ebay как б/у - и уйдет в миг. Тем более, что в бюджете машины давно похоронена квартира в новостройке.

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

>>Дружище, а зачем и вправду выложил то, что делал по заказу? <<

Ну если вам всем это так не нравиться сегодня же подчищу посты.

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

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

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

реле? конечно понадобиться, компрессору подавать питание понадобиться, здесь лучше отдать предпочтение или контакторам при использовании нескольких компрессоров или бошевские или хеловские релюхи 70А. реально работают в штатных системах. но их количество зависит от кол-ва компрессоров.

управление клапанами нерационально делать с использованием релюх. здесь лучше силовые транзисторы.

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

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

Знаешь, что я тебе посоветую?

Забудь про "среду" Абдурино! Пиши в чистой С++, без всяких "сред"! Или ищи того кто это зделает за тебя.

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

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

eastpoint, вот смотрите. в приведенном выше скетче реализована работа с 8 клапанами (4 подьем и 4 спуск) и возможность предустановить три уровня. при желании кол-во уровней можна добавить.

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

eastpoint
Offline
Зарегистрирован: 04.01.2013

chaytan пишет:

 

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

Верно, я и не хочу иначе. Управление компрессором не требует ничего заумного и программного.

и да - я все-таки застрял на железе. 

 

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

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

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

eastpoint пишет:

chaytan пишет:

 

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

Верно, я и не хочу иначе. Управление компрессором не требует ничего заумного и программного.

и да - я все-таки застрял на железе. 

 

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

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

chaytan пишет:

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

Я вообще-то про среду програмирования писал, а не про сравнение контроллеров. И конкретно про оболочку Абдурино, лучше ту же программу подписать без оболочки Абдурино. Вот я про что!!!

 

eastpoint
Offline
Зарегистрирован: 04.01.2013

каким образом электроника будет определять параметры "выпендрежа" или комфорта?

расчетная жесткость на подушках будет соответствовать нынешним пружинам 8 и 6 кг соответственно. Подключение или отключение ресиверов для каждой подушки - вручную.

Основное назначение подвески - поднять авто при переползании "направлений", опустить до разумного при движении по нормальной дороге.

 

Ходовые характеристики подвески должны быть сохранены

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

italius пишет:

chaytan пишет:

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

Я вообще-то про среду програмирования писал, а не про сравнение контроллеров. И конкретно про оболочку Абдурино, лучше ту же программу подписать без оболочки Абдурино. Вот я про что!!!

 

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

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

eastpoint пишет:

каким образом электроника будет определять параметры "выпендрежа" или комфорта?

расчетная жесткость на подушках будет соответствовать нынешним пружинам 8 и 6 кг соответственно. Подключение или отключение ресиверов для каждой подушки - вручную.

Основное назначение подвески - поднять авто при переползании "направлений", опустить до разумного при движении по нормальной дороге.

 

Ходовые характеристики подвески должны быть сохранены

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

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

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

maksim
Offline
Зарегистрирован: 12.02.2012

italius пишет:
Знаешь, что я тебе посоветую?

Забудь про "среду" Абдурино! Пиши в чистой С++, без всяких "сред"! Или ищи того кто это зделает за тебя.

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

italius пишет:
И конкретно про оболочку Абдурино, лучше ту же программу подписать без оболочки Абдурино.
Да вы я посмотрю знаток сред разработаок и оболочек. Есть личный опыт? Или быть может ограничения в ней какие есть? Или глюков больше чем у других? И что вы имеете ввиду под словами чистый С++, без всяких "сред" и "чистом програмировании" ???

Так может скажите какая оболочка или среда разработки лучше, которая годится для "серьезной разработки"?

Или может дело в танцоре, а не в яйцах?

eastpoint
Offline
Зарегистрирован: 04.01.2013

бублики рубена 130х3, амортизаторы бильштайн, сечение подачи 6 мм, сечение на ресиверы 12. Штуцеры на соединения не поздно еще уменьшить/увеличить

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

maksim, Вам в сущности, что не нравится? Или в этом форуме я ограничен в своем мнении? Как раз и пишу о своем опыте! Об опыте как раз в теме програмирования (програмист другой человек, я разработчик) именно контроллера пневмоподвески. 

Ну, а поддерживая ваш тон, скажу, что мне пофиг какя среда или четверг, или  Атмел или Пик, но все должно работать без проблемм. Так вот после года работ, с Абдурино, все равно что-то да выплывает. Пусть мелочь, но она напрягает. И все время что-то нужно подписывать. Не знаю, что там про яйца вы написали, но "блинк" у меня работает без проблемм!!!! Думаю и у вас тоже?

leshak
Offline
Зарегистрирован: 29.09.2011

nestandart пишет:

>>Да и вообще, если четко знаешь что "кинули предшественника", то как-то для кармы вредно этим заниматся (и противно).<<

Это в мой огород ?

Да нет. Причем тут ваш огород? Я просто примерил на себя ситуацию "ко мне приходит клиент и просит найти жучка от предыдущего работника". Вот и все. Лично я бы скорее всего отказался.  

Никаких намеков и проч.

По поводу выкладывания "то что делал под заказ" - я тоже не вижу ничего крамольного. Откуда я знаю как вы с клиентом договаривались, что обещали и т.д. (да вообщем и не хочу вникать).

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

Если появится "клиент с криками", так опять-таки - это ваше двоих дело. 

Лично я, стараюсь переспрашивать клиентов в таких случаях. Как вы строите свои отношения с клиентами - дело ваше :)

Но еще раз. Никаких камней, намеков и проч. у меня даже в мыслях небыло. Вообщем "вам виднее" :)