Добрый день. Пробовал работать с датчиком движения, как работал модуль мне не понравилось, да и хотелось понять чуть глубже процесс работы в образовательных целях. Отпаял пироприемник и подключил к nano, к земле и выходу 3v3 (так как на модуле приходило именно 3,3 вольта. Сигнальный выход на А1.
void setup() {
Serial.begin(9600);
pinMode(6, OUTPUT);
pinMode(A1, INPUT);
Serial.println("start");
}
uint32_t valueMin, valueMax, value, valuePrev, timer = 0;
int16_t delta;
void loop() {
timer = millis(); valueMin = 1023; valueMax = 0;
while (timer+500 > millis()){ //в течении 0,5сек определяем минимальное и максимальное значение
if (analogRead(A1) > valueMax){valueMax = analogRead(A1);}
if (analogRead(A1) < valueMin){valueMin = analogRead(A1);}
}
valuePrev = value; //запоминаем предыдущее значения
value = valueMax - valueMin; //считаем разницу максимального и минимального значения за период
delta = value - valuePrev; //сравниваем текущее и предыдущее значение разницы за период
delta = abs(delta);
// Serial.print(value); Serial.print(" | "); Serial.println(delta);
if (delta >= 4){
Serial.print("move");Serial.print(" - ");Serial.println(delta);
analogWrite(6, 50); //включаем светодиод при обнаружении движения
delay(5000); //задержка так как сигнал плавает какое то время после обнаружения движения
}
analogWrite(6, 0);
}
выводя в print все этапы пришел к выводу:
сигнал поступающий с датчика имеет вид шума и колеблется между неизменным минимумом и переменным максимумом, но все же минимум я включил в расчет. Максимум меняется в обоих направлениях поэтому расчет таков: считаем максимум - минимум за период (0,5сек) и сравниваем с предыдущим значением. Так как после появления сигнала еще какое то время сигнал колеблется делаем задержку 5сек. после обнаружения “движения”.
Работает это не совсем стабильно. Так вот вопрос в чем, я не правильно понял логику сигнала или качество датчика не очень и зря трачу время и стоит пробовать другой датчик?



