Перейти к контенту

Рекомендованный пост

недавно на одном из форумов посвященных ардуине была выложена прошивка для управления 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
короче..
greega нравится это

Поделиться этим сообщением


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

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

Поделиться этим сообщением


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

Судя по железу, около 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-контурную систему.

Поделиться этим сообщением


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

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

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

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

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

 

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

Изменено пользователем SERG

Поделиться этим сообщением


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

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

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

 

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

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

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

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

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

Поделиться этим сообщением


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

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

 

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

Изменено пользователем Максимус

Поделиться этим сообщением


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

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

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

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

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

Maximus нравится это

Поделиться этим сообщением


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

Ну да, логично!! :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);
   
   
    
  }
 
 }
}


нашел тут

Поделиться этим сообщением


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

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

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

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

bemba74 нравится это

Поделиться этим сообщением


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

@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?

Поделиться этим сообщением


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

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти


×