Скорость изменения аналогового входа

Rash923
Offline
Зарегистрирован: 17.12.2011

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

achest
achest аватар
Offline
Зарегистрирован: 01.10.2012

int PIN = 1
int lastval = 0;

void loop () {

     long time = millis();  // время с момента старта в милисикундах.
     int val = AnalogRead(PIN);
     
      doSomething(time/1000, val-lastval) // обрабатываем данные
     lastval=val;
     Delay(1000);  //Ждем секунду
}

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

Не уверен, это правильный код, потому, что не понял на 100% это ли тебе надо. Для аппроксимации тебе надо подумать как это лучше программно делать, почитать как делают фильтр кальмана или просто производную. Там обычно много шума, лучше 2-3 раза померить и взять среднее, чем пологаться на одиночное значение. 

Rash923
Offline
Зарегистрирован: 17.12.2011

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

спасибо за помощь;)

maksim
Offline
Зарегистрирован: 12.02.2012
#define POROG 100
#define pin A0

void setup() 
{
  Serial.begin(9600);
}

void loop() 
{
  int val = analogRead(pin);
  static int val_prev = val;
  if(abs(val_prev - val) > POROG)
  {
    Serial.println("Pisec!");
    Serial.println("Nado cheto delat'!");
  }
  val_prev = val;
  delay(1000);
}

 

Rash923
Offline
Зарегистрирован: 17.12.2011

Классный скетч :D сегодня до дома доберусь попробую за одним опишу свою концепцию)

Rash923
Offline
Зарегистрирован: 17.12.2011

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

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

У меня есть распббери и ардуино с езернет шилдом: 

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

Вроде описал вкратце )) наверно не все понятно с первого раза, поэтому и собираю, чтобы показать всю прелесть этой системы начальнику.... Заранее СПАСИБО за помощь таварстчи!! ;)

 

и еще меня интересует вопрос на аналоговый вход ардуино можно подавать 5V только с самого ардуино или же можно подать 5В взяты от БП на 5В?