Отключить клапан при определеных оборотах и скорости

shurik609
Offline
Зарегистрирован: 28.10.2016

Зраствуйте Господа!

Кто может выручайте(возможно и  вознаграждение).

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

нужен скетч для управлениея клапаном вакуума на авто, ардуино уно,  по прерыванию.При наборе оборотов свыше 1600 об.мин вылючался клапан, а также вылючался набрав скорость свыше 25км\ч. До этого соответственно должен быть включеным. Схема управления собрана на транзисторе с управлением реле, а реле уже будет включать клапан, так как потребление у клапана не большое, возможно в дальнейшем переделаю управление транзистором, а он напрямую клапаном. Управляющий сигнал на транзистор положительной полярности. Ардуино править будет транзистором, ресторы где нужно воткнул

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

Скетчы за основу брал эти:

01 volatile unsigned long time = 0;       
02 #define Rele 5
03  
04 void Start(){
05   if(millis()-time <= 11) digitalWrite(Rele, 1);
06   else digitalWrite(Rele, 0);
07   time=millis();
08 }
09  
10   
11 void setup(){
12   attachInterrupt(0, Start, RISING);     //Прерывание по нарастающему фронту на D2
13   pinMode(Rele, OUTPUT);
14 }
15  
16 void loop(){
17   
18 }

 

01 volatile unsigned long time = 0;       
02 #define Rele 13
03 void Start(){
04   if(millis()-time <= 10) digitalWrite(Rele, LOW);
05   if(millis()-time >= 13) digitalWrite(Rele, HIGH);
06   time=millis();
07 }
08 void setup(){
09   attachInterrupt(0, Start, RISING);
10   pinMode(Rele, OUTPUT);
11 }
12 void loop(){

 

13   }

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

 

shurik609
Offline
Зарегистрирован: 28.10.2016

ВЫСЧИТЫВАЛ прерывания по таху делал и по датчику фаз+по скорости. но все вмете не работало, пробую по тахометру хотяб сначала, но не выходит сигнал что на входе что на выходе одинаков. подскажите пожалуйста.

shurik609
Offline
Зарегистрирован: 28.10.2016

по нарастающему и убывающему  прерыванию пробывал и время между сигналами менял, все одно, почему же???

shurik609
Offline
Зарегистрирован: 28.10.2016

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

bwn
Offline
Зарегистрирован: 25.08.2014

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

shurik609
Offline
Зарегистрирован: 28.10.2016

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

Foxxxof
Foxxxof аватар
Offline
Зарегистрирован: 07.10.2016
#define oboroti A0
#define klapan A1
#define light_limit 1600 //порог срабатывания оборотов
#define light_gist 50//гистерезис
void setup() //процедура setup
{

  pinMode(klapan, OUTPUT); //указываем, что пин 1 - выход
  pinMode(oboroti, INPUT); // указываем, что пин 0 - вход
}

void loop() //процедура loop
{
  {
    int light = analogRead(oboroti);

    if (light < light_limit) {//если обороты меньше порога
      Serial.println("Night is coming!");
      Serial.println("Light:");
      Serial.println(light);
      digitalWrite(klapan, LOW);//если показатель обороты меньше 1600, выключаем клапан
    }
    else if(light>(light_limit+light_gist))
    {
      digitalWrite(klapan, HIGH);
    }
  }
}

не?

И спидометр туда же

shurik609
Offline
Зарегистрирован: 28.10.2016

ВСем спасибо, разобрались, все работает!!!

shurik609
Offline
Зарегистрирован: 28.10.2016

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

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

3 пин вход сигнал с тахометра, 2 пин вход сигнала с датчика скорости( 6-ти импульсный).

Подтяжка сигналов в скетче сделана.

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

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

Гистерезис меняйте под себя как угодно.

//******************************************************************************************************

volatile unsigned long micros_sp = 0;
volatile byte          sz        = 0;              //счетчик обнуления
volatile unsigned int  sp        = 0;              //скорость
volatile boolean       st        = false;          //триггер 
//******************************************************************************************************
volatile unsigned long micros_th = 0;
volatile byte          tz        = 0;              //счетчик обнуления
volatile unsigned int  th        = 0;              //обороты
volatile boolean       tt        = false;          //триггер 
//******************************************************************************************************
byte          sp_sens   = 6;              //количество имп./м датчика скорости
unsigned int  sp_mult   = 0;              //коэфф. пересчета частоты в скорость
unsigned int  od_mult   = 0;              //коэфф. пересчета импульсов в сотни метров
//******************************************************************************************************
char KLAPAN = 13;     //Выход на транзистор - 13 контакт UNO
void speedometr(){                                  //измеряем частоту на входе спидометра по прерыванию
  if(!st){micros_sp = micros();}
  else   {sp = (sp_mult/(micros() - micros_sp));}
  st = !st;
  sz = 30;
 }
 //******************************************************************************************************
void tahometr(){                                    //измеряем частоту на входе тахометра по прерыванию
  if(!tt){micros_th = micros();}
  else   {th = (30000000/(micros() - micros_th));}
  tt = !tt;
  tz = 10;
}
//******************************************************************************************************
void setup(){ 
Serial.begin(115200); 
attachInterrupt(0, speedometr, FALLING); //прерывание спидометра по фронтам импульса - 2 контакт UNO
attachInterrupt(1, tahometr, RISING); //прерывание тахометра по фронтам импульса - 3 контакт UNO
//odometr = EEPROM_ulong_read(0); //чтение счетчика импульсов и EEPROM
sp_mult = 3600000 / sp_sens; //вычисление коэфф. пересчета частоты в скорость
od_mult = sp_sens * 100; //вычисление коэфф. пересчета импульсов в сотни метров 
pinMode(KLAPAN, OUTPUT);
digitalWrite(KLAPAN, HIGH);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
}
//******************************************************************************************************
void loop(){
  if(sp>25 || th>1600) // скорость // обороты
  {
    digitalWrite(KLAPAN, LOW);
  }
  if(sp<23 && th<1500) // скорость  // обороты
  {
    digitalWrite(KLAPAN, HIGH);
  }
  Serial.print("2-");
  Serial.print(sp);
  Serial.print("   3-");
  Serial.println(th);
  delay(100);
//******************************************************************************************************
  if (tz != 0){tz--;}else{th = 0;}; 
  if (sz != 0){sz--;}else{sp = 0;}; 

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

Пользуйтесь наздоровье :)