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

еще один бюджетный контролер


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

недавно на одном из форумов посвященных ардуине была выложена прошивка для управления 4 контурной пневмой по 8 клапанной схеме.

вот думаю может кому пригодится.

я немного её изменил, но совсем чуть-чуть, 

собрал макет на столе и проверил на общую работоспособность. работает.

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

 

датчики подходят любые с выходным наряжением от 0 до 5 вольт.

 

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

 

три уровня собственно прописываются в самой прошивке.

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

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

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

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

 

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

режиме блокировки надпись *система заблокирована*

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

если за отведенное время уровень ненастроен то на дисплее надпись- *авария* с указанием контура.

 

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

 

собственно состав-

блок релеpost-199-0-44498100-1358643599_thumb.jpg

дисплейpost-199-0-89664800-1358643644_thumb.jpg

росширитель портов для дисплея post-199-0-23305000-1358643690_thumb.jpg

и сама ардуика post-199-0-13578600-1358643732_thumb.jpg

 

ну и сама прошивка-

 

 

 

 

#include <LiquidCrystal_I2C.h>
#include <Wire.h>

LiquidCrystal_I2C lcd(0x27,16,2);

int state=0;
int state2=0;
int state3=0;
int state4=0;
int state5=0;

int avaria=0;
int avaria2=0;
int avaria3=0;
int avaria4=0;

int ustanovka=0;
int ustanovka2=0;
int ustanovka3=0;
int ustanovka4=0;

long previousMillis = 0;
long previousMillis2 = 0;
long previousMillis3 = 0;
long previousMillis4 = 0;
long previousMillis5 = 0;

int obriv = 0;
int obriv2 = 0;
int obriv3 = 0;
int obriv4 = 0;

#include <EEPROM.h>

int dveknopky=0;

int predustanovka=0;
int regim=1;

int eeprom=0;

int knopka=0;
int knopka2=0;
int knopka3=0;

int analog=0;
int analog2=0;
int analog3=0;
int analog4=0;

int sek=0;
int sek2=0;
int sek3=0;
int sek4=0;

int flag1=0;
int flag2=0;
int flag3=0;
int flag4=0;

void setup()
{

pinMode(0,INPUT);
pinMode(1,INPUT);
pinMode(2,INPUT);
pinMode(3,INPUT);

digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);

lcd.init();
lcd.backlight();

pinMode(2,INPUT);
pinMode(3,INPUT);

pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);

pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);

}

void loop()
{

if (millis() -previousMillis5 >=100)
{
previousMillis5 = millis();
state5=!state5;

if(state5==1)
{
lcd.clear();
}
}


if(eeprom==0)
{
regim=EEPROM.read(0);
eeprom=1;
}


if(digitalRead(2)==HIGH&&digitalRead(3)==HIGH&&knopka3==0)
{
knopka3=1;

}
if(digitalRead(2)==LOW&&digitalRead(3)==LOW&&knopka3==1)
{

dveknopky=dveknopky+1;
if(dveknopky>1)
{
dveknopky=0;
}
if(dveknopky<0)
{
dveknopky=1;
}

knopka3=0;
delay(500);
}

if(dveknopky==1)
{
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);

lcd.setCursor(2,1);
lcd.print("ZABLOKIROVANA");
lcd.setCursor(4,0);
lcd.print("SISTEMA");

}

else
{

if(analogRead(0)<=1010&&analogRead(1)<=1010&&analogRead(2)<=1010&&analogRead(3)<=1010)

{

if(digitalRead(2)==HIGH&&knopka==0)
{
knopka=1;
avaria=0;
}
if(digitalRead(2)==LOW&&knopka==1)
{

knopka=0;

regim=regim+1;

if(regim>3)
{
regim=3;
}
EEPROM.write(0,regim);
sek=0;

}

if(digitalRead(3)==HIGH&&knopka2==0)
{
knopka2=1;
avaria=0;
}
if(digitalRead(3)==LOW&&knopka2==1)
{

knopka2=0;

regim=regim-1;

if(regim<1)
{
regim=1;
}
EEPROM.write(0,regim);
sek=0;

}

if(regim==1)
{

predustanovka=300;

if(avaria==0&&avaria2==0&&avaria3==0&&avaria4==0)
{
lcd.setCursor(4,0);
lcd.print("nigniy");

}
}

if(regim==2)
{
predustanovka=600;

if(avaria==0&&avaria2==0&&avaria3==0&&avaria4==0)
{
lcd.setCursor(4,0);
lcd.print("sredniy");
}
}

if(regim==3)
{

predustanovka=900;

if(avaria==0&&avaria2==0&&avaria3==0&&avaria4==0)
{
lcd.setCursor(4,0);
lcd.print("verhniy");
}
}

if(flag1==1)
{
if (millis() -previousMillis >=500)
{
previousMillis = millis();
state=!state;

if(state==1)
{
sek++;
}
if(sek>=30)
{
sek=30;
}
}
}

analog=analogRead(0);

if(analog>999)
{
analog=999;
}
if(analog<100)
{
analog=100;
}

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

{
flag1=1;
if(sek<30)
{

digitalWrite(4,HIGH);
digitalWrite(5,LOW);

}
else
{

avaria=1;
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);

}
}

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

{

ustanovka=1;
avaria=0;
flag1=0;
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
sek=0;
}
else
{

ustanovka=0;
flag1=1;
}

if(analog<(predustanovka-5)&&sek>=3)
{
flag1=1;
if(sek<30)
{

digitalWrite(5,HIGH);
digitalWrite(4,LOW);

}
else
{

avaria=1;
digitalWrite(5,HIGH);
digitalWrite(4,HIGH);

}

}

if(flag2==1)
{
if (millis() -previousMillis2 >=500)
{
previousMillis2 = millis();
state2=!state2;

if(state2==1)
{

sek2++;
}
if(sek2>=30)
{
sek2=30;
}
}
}

analog2=analogRead(1);

if(analog2>999)
{
analog2=999;
}
if(analog2<100)
{
analog2=100;
}

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

{
flag2=1;
if(sek2<30)
{

digitalWrite(6,HIGH);
digitalWrite(7,LOW);

}
else
{

avaria2=1;
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);

}
}

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

{

ustanovka2=1;
avaria2=0;
flag2=0;
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
sek2=0;
}
else
{

ustanovka2=0;
flag2=1;
}

if(analog2<(predustanovka-5)&&sek2>=3)
{
flag2=1;
if(sek2<30)
{

digitalWrite(7,HIGH);
digitalWrite(6,LOW);

}
else
{

avaria2=1;
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);

}

}

if(flag3==1)
{
if (millis() -previousMillis3 >=500)
{
previousMillis3 = millis();
state3=!state3;

if(state3==1)
{

sek3++;
}
if(sek3>=30)
{
sek3=30;
}
}
}

analog3=analogRead(2);

if(analog3>999)
{
analog3=999;
}
if(analog3<100)
{
analog3=100;
}

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

{
flag3=1;
if(sek3<30)
{

digitalWrite(9,HIGH);
digitalWrite(8,LOW);

}
else
{

avaria3=1;
digitalWrite(9,HIGH);
digitalWrite(8,HIGH);

}
}

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

{

ustanovka3=1;
avaria3=0;
flag3=0;
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
sek3=0;
}
else
{

ustanovka3=0;
flag3=1;
}

if(analog3<(predustanovka-5)&&sek3>=3)
{
flag3=1;
if(sek3<30)
{

digitalWrite(8,HIGH);
digitalWrite(9,LOW);

}
else
{

avaria3=1;
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);

}

}

if(flag4==1)
{
if (millis() -previousMillis4 >=500)
{
previousMillis4 = millis();
state4=!state4;

if(state4==1)
{

sek4++;
}
if(sek4>=30)
{
sek4=30;
}
}
}

analog4=analogRead(3);

if(analog4>999)
{
analog4=999;
}
if(analog4<100)
{
analog4=100;
}

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

{
flag4=1;
if(sek4<30)
{

digitalWrite(10,HIGH);
digitalWrite(11,LOW);

}
else
{

avaria4=1;
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);

}
}

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

{

ustanovka4=1;
avaria4=0;
flag4=0;
digitalWrite(11,HIGH);
digitalWrite(10,HIGH);
sek4=0;
}
else
{

ustanovka4=0;
flag4=1;
}

if(analog4<(predustanovka-5)&&sek4>=3)
{
flag4=1;
if(sek4<30)
{

digitalWrite(11,HIGH);
digitalWrite(10,LOW);

}
else
{

avaria4=1;
digitalWrite(11,HIGH);
digitalWrite(10,HIGH);

}

}

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

lcd.setCursor(3,1);
lcd.print("ustanovlen");

}
else
{
if(avaria==1||avaria2==1||avaria3==1||avaria4==1)
{

delay(1000);
lcd.setCursor(5,0);
lcd.print("AVARIYA");
lcd.setCursor(3,1);
lcd.print(!avaria);
lcd.setCursor(6,1);
lcd.print(!avaria2);
lcd.setCursor(9,1);
lcd.print(!avaria3);
lcd.setCursor(12,1);
lcd.print(!avaria4);

}
else
{
lcd.setCursor(1,1);
lcd.print(analog);
lcd.setCursor(5,1);
lcd.print(analog2);
lcd.setCursor(9,1);
lcd.print(analog3);
lcd.setCursor(13,1);
lcd.print(analog4);
}


}
}
else
{
if(analogRead(0)>=1010)
{
obriv=0;

delay(1000);
}
else
{
obriv=1;

}
if(analogRead(1)>=1010)
{
obriv2=0;

delay(1000);
}
else
{
obriv2=1;
}
if(analogRead(2)>=1010)
{
obriv3=0;

delay(1000);
}
else
{
obriv3=1;
}
if(analogRead(3)>=1010)
{
obriv4=0;

delay(1000);
}

else
{
obriv4=1;
}

lcd.setCursor(2,0);
lcd.print("OBRIV DATCHIKA");
lcd.setCursor(3,1);
lcd.print(obriv);
lcd.setCursor(6,1);
lcd.print(obriv2);
lcd.setCursor(9,1);
lcd.print(obriv3);
lcd.setCursor(12,1);
lcd.print(obriv4);

digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
digitalWrite(8,HIGH);
digitalWrite(7,HIGH);
digitalWrite(6,HIGH);
digitalWrite(5,HIGH);
digitalWrite(4,HIGH);


}

}
}

 

 

 

 

 

 

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

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

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

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

Судя по железу, около 1000-1500р ))) 50$ )))

Прошу вам залили на халяву.........

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

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

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

Хех, какое совпадение, я тоже смотрел на Ардуино, но только на модель Мега 1280 или 2560.

 

 

PS. Цена того что представлена в начале темы стоит приблизительно 530 грн. или 66 долл. 

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

Хех, какое совпадение, я тоже смотрел на Ардуино, но только на модель Мега 1280 или 2560.

 

 

PS. Цена того что представлена в начале темы стоит приблизительно 530 грн. или 66 долл. 

неа, около 50 долларов, где диисплей 5 баксов, ардуина 20 баксов, росширитель 13, блок реле 12 баксов. итого получаем 50 баксов.

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

 

для данного контролера и этого камня замного...

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

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

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

 

при его себестоимости он может быть отладочным.

 

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

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

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

можешь ссылку на этот форум дать?

Изменено пользователем bemba74
Сокращайте по возможности цитируемые посты...это же просто жесть какая то!
Ссылка на комментарий
Поделиться на другие сайты

Одна штука в том что на 4 реле никак не постороишь 4-контурную систему.

тупонул.... 8 реле.... шо значит поздняя ночь....

с вчерашшнего дня макет включен. аки работает....

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

 

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

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

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

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

 

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

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

все остальное обычные деталюшки...

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

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

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

А сколько у тебя клапанов? если 5 то можно банально диодами всё закомутировать! Система будит думать что управляет 8ю а на самом деле 5ю...

 

А схемку этого всего там не выложили? И ссылочку на сайт не помешало бы! 

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

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

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

это так поиграться.. :smile:

А сколько у тебя клапанов? если 5 то можно банально диодами всё закомутировать! Система будит думать что управляет 8ю а на самом деле 5ю...

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

Ну да, логично!! :smile:  А что на счет схемки? Не поделишься, или это коммерческий проект? 

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

Ну да, логично!! :smile:  А что на счет схемки? Не поделишься, или это коммерческий проект? 

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

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

позже на досуге нарисую...

 

п.с.

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

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

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

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


#include <LiquidCrystal.h>
 
#include <LiquidCrystalRus.h>
LiquidCrystalRus lcd(6, 7, 5, 4, 3, 2);
 
int state=0;
int state2=0;
int state3=0;
int state4=0;
int state5=0;
 
int avaria=0;
int avaria2=0;
int avaria3=0;
int avaria4=0;
 
int ustanovka=0;
int ustanovka2=0;
int ustanovka3=0;
int ustanovka4=0;
 
long previousMillis = 0;
long previousMillis2 = 0;
long previousMillis3 = 0;
long previousMillis4 = 0;
long previousMillis5 = 0;
 
int obriv = 0;
int obriv2 = 0;
int obriv3 = 0;
int obriv4 = 0;
 
#include <EEPROM.h>
 
int dveknopky=0;
 
int predustanovka=0;
int regim=1;
 
int eeprom=0;
 
 
int knopka=0;
int knopka2=0;
int knopka3=0;
 
 
 
int analog=0;
int analog2=0;
int analog3=0;
int analog4=0;
 
 
 
 
 
int sek=0;
int sek2=0;
int sek3=0;
int sek4=0;
 
int flag1=0;
int flag2=0;
int flag3=0;
int flag4=0;
 
 
 
void setup()
{
  
 pinMode(14,INPUT);
 pinMode(15,INPUT);
 pinMode(16,INPUT);
 pinMode(17,INPUT);
  
 digitalWrite(14, HIGH);
 digitalWrite(15, HIGH);
 digitalWrite(16, HIGH);
 digitalWrite(17, HIGH);
 
 lcd.begin(16, 2);
 
 pinMode(19,INPUT);
 pinMode(18,INPUT);
 
 pinMode(0,OUTPUT);
 pinMode(1,OUTPUT);
 pinMode(8,OUTPUT);
 pinMode(9,OUTPUT);
 
 pinMode(10,OUTPUT);
 pinMode(11,OUTPUT);
 pinMode(12,OUTPUT);
 pinMode(13,OUTPUT);
 
}
 
void loop()
{
  
  if (millis() -previousMillis5 >=100) 
 {  
   previousMillis5 = millis();  
  state5=!state5;
   
   if(state5==1)
   {
    lcd.clear();
   }
 }
  
  
  
  
    
  if(eeprom==0)
   {
   regim=EEPROM.read(0);
   eeprom=1;
   }
 
 
   if(digitalRead(19)==HIGH&&digitalRead(18)==HIGH&&knopka3==0) 
   {
   knopka3=1;                                                 
   
  }
   if(digitalRead(19)==LOW&&digitalRead(18)==LOW&&knopka3==1)
    {
                                                           
      dveknopky=dveknopky+1;                             
      if(dveknopky>1)
      {
        dveknopky=0;
      }
      if(dveknopky<0)
      {
       dveknopky=1;
      }
      
       knopka3=0;
       delay(500);
    }
 
  
  if(dveknopky==1)
  {
     digitalWrite(0,LOW);
     digitalWrite(1,LOW);
     digitalWrite(8,LOW);
     digitalWrite(9,LOW);
     digitalWrite(10,LOW);
     digitalWrite(11,LOW);
     digitalWrite(12,LOW);
     digitalWrite(13,LOW);
      
   
     lcd.setCursor(2,1);
     lcd.print("Заблокирована");
     lcd.setCursor(4,0);
     lcd.print("Система");
    
  }
  
  
  else
  {
 
    if(analogRead(14)<=1010&&analogRead(15)<=1010&&analogRead(16)<=1010&&analogRead(17)<=1010)
   
  {  
    
 
   
   
  if(digitalRead(19)==HIGH&&knopka==0)
  {                                   
   knopka=1;                    
    avaria=0;
  }
   if(digitalRead(19)==LOW&&knopka==1)
    {
     
       knopka=0;
      
       regim=regim+1;
  
       if(regim>3)
       {
         regim=3;
        } 
        EEPROM.write(0,regim);
         sek=0; 
        
    }
        
  
  
  if(digitalRead(18)==HIGH&&knopka2==0)
  {                             
   knopka2=1;
    avaria=0;
  }
   if(digitalRead(18)==LOW&&knopka2==1)
    {
     
       knopka2=0;
      
       regim=regim-1;
       
       if(regim<1)
       {
         regim=1;
        } 
         EEPROM.write(0,regim);
          sek=0; 
           
    }
         
    
  
  
  if(regim==1)
  {
    
    predustanovka=300;
    
     if(avaria==0&&avaria2==0&&avaria3==0&&avaria4==0)
     {
     lcd.setCursor(4,0);
     lcd.print("нижний");
    
     }
  }
  
   if(regim==2)
  {
     predustanovka=600;
     
       if(avaria==0&&avaria2==0&&avaria3==0&&avaria4==0)
     {
     lcd.setCursor(4,0);
     lcd.print("средний");
     }
  }
  
   if(regim==3)
  {
    
     predustanovka=900;
     
       if(avaria==0&&avaria2==0&&avaria3==0&&avaria4==0)
     {
     lcd.setCursor(4,0);
     lcd.print("верхний");
     }
  }
  
 
  
 
 
 
 if(flag1==1)
  {
   if (millis() -previousMillis >=500) 
 {  
   previousMillis = millis();  
  state=!state;
   
   if(state==1)
   {
     sek++;
   }
   if(sek>=30)
   {
     sek=30;
   }
 }
   }
  
  
  
analog=analogRead(14);
 
if(analog>999)
{
  analog=999;
}
if(analog<100)
{
  analog=100;
}
 
 if(analog>(predustanovka+5)&&sek>=3)
 
  {                
 flag1=1;
  if(sek<30)
  {
    
   
   
   digitalWrite(13,LOW);
   digitalWrite(0,HIGH); 
   
  }
   else
  {
    
   avaria=1;
  digitalWrite(13,LOW);
   digitalWrite(0,LOW);
   
    
  }
  }
  
  if(analog>=(predustanovka-10)&&analog<=(predustanovka+10))
  
  {
    
   
     ustanovka=1;
    avaria=0;
  flag1=0;
    digitalWrite(0,LOW);
    digitalWrite(13,LOW); 
  sek=0;
  }
  else
  {
   
   ustanovka=0;
   flag1=1;  
  }
  
  if(analog<(predustanovka-5)&&sek>=3)
  {
    flag1=1;
     if(sek<30)
  {
    
   digitalWrite(0,LOW);
   digitalWrite(13,HIGH); 
   
  }
   else
  {
    
   avaria=1;
  digitalWrite(0,LOW);
   digitalWrite(13,LOW);
   
    
  }
  
  }
  
  
  if(flag2==1)
  {
   if (millis() -previousMillis2 >=500) 
 {  
   previousMillis2 = millis();  
  state2=!state2;
   
   if(state2==1)
   {
    
     sek2++;
   }
   if(sek2>=30)
   {
     sek2=30;
   }
 }
   }
  
  
  
analog2=analogRead(15);
 
if(analog2>999)
{
  analog2=999;
}
if(analog2<100)
{
  analog2=100;
}
 
 if(analog2>(predustanovka+5)&&sek2>=3)
 
  {                
 flag2=1;
  if(sek2<30)
  {
    
   
   
   digitalWrite(12,LOW);
   digitalWrite(1,HIGH); 
   
  }
   else
  {
    
   avaria2=1;
  digitalWrite(12,LOW);
   digitalWrite(1,LOW);
   
    
  }
  }
  
  if(analog2>=(predustanovka-10)&&analog2<=(predustanovka+10))
  
  {
    
   
     ustanovka2=1;
    avaria2=0;
  flag2=0;
    digitalWrite(1,LOW);
    digitalWrite(12,LOW); 
  sek2=0;
  }
  else
  {
   
   ustanovka2=0;  
   flag2=1;  
  }
  
  if(analog2<(predustanovka-5)&&sek2>=3)
  {
    flag2=1;
     if(sek2<30)
  {
    
   digitalWrite(1,LOW);
   digitalWrite(12,HIGH); 
   
  }
   else
  {
    
   avaria2=1;
  digitalWrite(1,LOW);
   digitalWrite(12,LOW);
   
    
  }
  
  }
   
  
  
   
   
   
    
  if(flag3==1)
  {
   if (millis() -previousMillis3 >=500) 
 {  
   previousMillis3 = millis();  
  state3=!state3;
   
   if(state3==1)
   {
    
     sek3++;
   }
   if(sek3>=30)
   {
     sek3=30;
   }
 }
   }
  
  
  
analog3=analogRead(16);
 
if(analog3>999)
{
  analog3=999;
}
if(analog3<100)
{
  analog3=100;
}
 
 if(analog3>(predustanovka+5)&&sek3>=3)
 
  {                
 flag3=1;
  if(sek3<30)
  {
    
   
   
   digitalWrite(11,LOW);
   digitalWrite(8,HIGH); 
   
  }
   else
  {
    
   avaria3=1;
  digitalWrite(11,LOW);
   digitalWrite(8,LOW);
   
    
  }
  }
  
  if(analog3>=(predustanovka-10)&&analog3<=(predustanovka+10))
  
  {
    
   
     ustanovka3=1;
    avaria3=0;
  flag3=0;
    digitalWrite(8,LOW);
    digitalWrite(11,LOW);
  sek3=0;
  }
  else
  {
   
   ustanovka3=0;
   flag3=1;  
  }
  
  if(analog3<(predustanovka-5)&&sek3>=3)
  {
    flag3=1;
     if(sek3<30)
  {
    
   digitalWrite(8,LOW);
   digitalWrite(11,HIGH); 
   
  }
   else
  {
    
   avaria3=1;
  digitalWrite(8,LOW);
   digitalWrite(11,LOW);
   
    
  }
  
  }
   
  
  
   
  
   
      
  if(flag4==1)
  {
   if (millis() -previousMillis4 >=500) 
 {  
   previousMillis4 = millis();
  state4=!state4;
   
   if(state4==1)
   {
    
     sek4++;
   }
   if(sek4>=30)
   {
     sek4=30;
   }
 }
   }
  
  
  
analog4=analogRead(17);
 
if(analog4>999)
{
  analog4=999;
}
if(analog4<100)
{
  analog4=100;
}
 
 if(analog4>(predustanovka+5)&&sek4>=3)
 
  {                
 flag4=1;
  if(sek4<30)
  {
    
   
   
   digitalWrite(10,LOW);
   digitalWrite(9,HIGH); 
   
  }
   else
  {
    
   avaria4=1;
  digitalWrite(10,LOW);
   digitalWrite(9,LOW);
   
    
  }
  }
  
  if(analog4>=(predustanovka-10)&&analog4<=(predustanovka+10))
  
  {
    
   
  ustanovka4=1;
  avaria4=0;
  flag4=0;
    digitalWrite(9,LOW);
    digitalWrite(10,LOW); 
  sek4=0;
  }
  else
  {
   
    ustanovka4=0;
   flag4=1;  
  }
  
  if(analog4<(predustanovka-5)&&sek4>=3)
  {
    flag4=1;
     if(sek4<30)
  {
    
   digitalWrite(9,LOW);
   digitalWrite(10,HIGH); 
   
  }
   else
  {
    
   avaria4=1;
   digitalWrite(9,LOW);
   digitalWrite(10,LOW);
   
    
  }
  
  }
   
  
  
   
   
  
   
   
  
   if(ustanovka==1&&ustanovka2==1&&ustanovka3==1&&ustanovka4==1)
   {
     
   lcd.setCursor(3,1);
   lcd.print("Установлен");
   
   }
   else
   {
     if(avaria==1||avaria2==1||avaria3==1||avaria4==1)
     {
  
       delay(1000);
   lcd.setCursor(5,0);
   lcd.print("АВАРИЯ");
   lcd.setCursor(3,1);
   lcd.print(!avaria);
   lcd.setCursor(6,1);
   lcd.print(!avaria2);
   lcd.setCursor(9,1);
   lcd.print(!avaria3);  
   lcd.setCursor(12,1);
   lcd.print(!avaria4);
   
     }
   else
   {
   lcd.setCursor(1,1);
   lcd.print(analog);
   lcd.setCursor(5,1);
   lcd.print(analog2);
   lcd.setCursor(9,1);
   lcd.print(analog3);
   lcd.setCursor(13,1);
   lcd.print(analog4);
   }
   
   
   } 
  }
  else
  {
    if(analogRead(14)>=1010)
    {
      obriv=0;
      
      delay(1000);
    }
    else
    {
      obriv=1;
      
    }
    if(analogRead(15)>=1010)
    {
      obriv2=0;
     
      delay(1000);
    }
    else
    {
      obriv2=1;
    }
    if(analogRead(16)>=1010)
    {
      obriv3=0;
     
      delay(1000);
    }
    else
    {
      obriv3=1;
    }
    if(analogRead(17)>=1010)
    {
      obriv4=0;
     
      delay(1000);
    }
    
    else
    {
      obriv4=1;
    }
    
    
   lcd.setCursor(2,0);
   lcd.print("ОБРЫВ ДАТЧИКА"); 
   lcd.setCursor(3,1);
   lcd.print(obriv); 
   lcd.setCursor(6,1);
   lcd.print(obriv2); 
   lcd.setCursor(9,1);
   lcd.print(obriv3); 
   lcd.setCursor(12,1);
   lcd.print(obriv4); 
   
   
   digitalWrite(9,LOW);
   digitalWrite(10,LOW);
   digitalWrite(11,LOW);
   digitalWrite(8,LOW);
   digitalWrite(12,LOW);
   digitalWrite(1,LOW);
   digitalWrite(13,LOW);
   digitalWrite(0,LOW);
   
   
    
  }
 
 }
}


нашел тут

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

да, это отсюда.

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

и в этом коде нет временной защиты.

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

  • 2 недели спустя...

@SERG, Будь другом, дай схемы или ссылки на схемы!

А где платы покупал, в частности "расширитель портов для дисплея"???

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

\\\покупаю здесь- http://parts.dn.ua/category_24_show_all.html\

и здесь- http://arduino.shopium.ua/catalog/\

да и у вас в Харькове думаю тоое мо\жно прикупить\.\\\\\\\\\\\\

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

а схемы у мня как таковы и нет...

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

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

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

млин, снова почистили мои сообщения. надоело.

цензура, админы с модерами шашками маут.... :hunter: 

а ты пиши, пиши.... :LaieA_029:

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

В Харькове много чего есть, но плат с первого поста нет :((

http://www.kosmodrom.com.ua/prodlist.php?page=0&name=Arduino+&okbutton=%CF%EE%E8%F1%EA

Можешь хотя бы расписать (для чайников) на какие порты к Arduino Nano цепляются датчики, дисплей (с задней платой), кнопки управления?

Сфоткать твою рабочую модель на столе, если еще не разобрал?

 

Дисплей 2х20 или 2х16?

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

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

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

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

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

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

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

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

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

Загрузка...



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