Датчик для отправки SMS

Привет, ребята, я создаю датчик, который будет отправлять SMS при идентификации объекта.

Датчик установлен на лестничной площадке промышленного объекта.

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

Датчик (HC-SR04) расположен на потолке примерно в 3 м над землей.

Цель состоит в том, чтобы посылать импульс с часовым интервалом.

Время от времени я получаю ложные срабатывания.

Был бы признателен вам за помощь.

Любая идея, если что-то не так с моей кодировкой или состоянием окружающей среды на лестнице, также играет свою роль.

#define TRIG A0 //Module pins
#define ECHO A1

const long oneSecond = 1000;  // a second is a thousand milliseconds
const long oneMinute = oneSecond * 60;
const long oneHour   = oneMinute * 50;

void setup() {
  Serial.begin(9600); // Serial monitoring
  pinMode(TRIG, OUTPUT); // Initializing Trigger Output and Echo Input
  pinMode(ECHO, INPUT_PULLUP);
}

void loop() {

  digitalWrite(TRIG, LOW); // Set the trigger pin to low for 2uS
  delayMicroseconds(2);

  digitalWrite(TRIG, HIGH); // Send a 10uS high to trigger ranging according to specs
  delay(oneHour);

  digitalWrite(TRIG, LOW); // Send pin low again
  delayMicroseconds(2);


  int distance = pulseIn(ECHO, HIGH, 26000); // Read in times pulse
  distance = distance/58;

  if (distance < 300) {
    Serial.print("\r");
    delay(1000);
    Serial.print("AT+CMGF=1\r");
    delay(1000);
    /*Replace XXXXXXXXXX to 10 digit mobile number & ZZ to 2 digit country code*/
    Serial.print("AT+CMGS=\"+YYXXXX\"\r"); // YY is the country code XXX is the number
    delay(1000); //
    //The text of the message to be sent.
    Serial.print("HELLO There");
    delay(1000);
    Serial.write(0x1A);
    delay(1000);
  }
  else {}

  }

, 👍0

Обсуждение

Как должен работать ваш код? Насколько я понимаю, вы посылаете НИЗКИЙ УРОВЕНЬ(выключите триггерный штифт), ждете 2 микросекунды, затем посылаете Высокий уровень (включите триггер) в течение часа, swnd снова НИЗКИЙ УРОВЕНЬ и проверяете с помощью "pulseIn", как долго он длится, пока эхо-штифт не станет высоким. Но спусковой штифт был высок в течение часа, так что эхо-штифт тоже был бы ВЫСОК, если бы рядом было препятствие. швы 3 м должны быть достаточно близко. Перехода к максимуму нет, и тайм-аут берет верх через 26 секунд. Функция возвращает 0 по таймауту, и вы получаете ложное срабатывание. Или я что-то пропустил?, @Peter Paul Kiefer


1 ответ


0

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

Случайные ложные срабатывания могут возникать из-за каких-либо нарушений окружающей среды, потому что всегда есть какой-то шум. Вы установили значение триггера прямо на 3 м, поэтому из-за шума расстояние может сократиться до 299 см без каких-либо препятствий. Поэтому сначала вы должны снизить значение триггера, чтобы дать шуму некоторый запас. Возможно, значение 290 см подойдет (если ваши объекты всегда выше 10 см), хотя вам следует поэкспериментировать с некоторыми значениями, чтобы получить наилучшее подходящее значение для вашего случая.

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

Если это все еще дает вам некоторые ложные триггеры, вы можете попробовать выполнить измерения несколько раз для одного объекта. Для этого вы увеличиваете переменную count, если объект находится в диапазоне, и сбрасываете счетчик, если датчик говорит, что в диапазоне нет объекта. После этого вы проверяете, чтобы переменная count достигла заданного числа измерений, скажем, 3. Таким образом, если 3 последовательных измерения показали объект в диапазоне, вы можете рассматривать его как триггер реального объекта. Если менее 3 последовательных измерений показали объект, вы будете рассматривать это как ошибку измерения и не инициируете действие SMS.

,

Всем привет! Спасибо за ваш ответ и совет. Отправка импульса с часовым интервалом означает, что датчик будет работать только каждый час, а не посылать и получать импульс каждый раз. Отмечено в переменной count. однако я очень новичок в arduino. Вы знаете, какой код я должен использовать?, @Zac