Делаем бесконтактный переключатель с помощью Ардуино

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

Автор идеи - студент, который делает проект о «Пассивном доме», и ему понадобился специальный переключатель.

Делаем бесконтактный переключатель с помощью Ардуино

Шаг 1. Что нам нужно

Что нам нужно, чтобы сделать переключатель:

  • Ардуино (Arduino)
  • Датчик расстояния (HC-SR04 или HC-SR05)
  • Провода
  • Макетная плата
  • Светодиод для тестирования

Шаг 2. Подключение

Схема всех соединений ниже на изображении:

Сенсор расстояния имеет 4 контакта:

  • VCC
  • TRIG
  • ECHO
  • GND (земля)

Соединяем:

  • VCC к 5В Ардуино
  • TRIG на цифровой контакт (в нашем случае контакт 3)
  • ECHO на другой цифровой контакт (в нашем случае контакт 4)
  • GND к GND

Подключите светодиод к цифровому выходу, он должен отличаться от других контактов.

Шаг 3. Код программы

Для тех, кто не понимает код - в нашем коде есть две части (void loop):

  • первая часть касается датчика расстояния. Для измерения расстояния датчик посылает и получает эхо (вид звука). Я использовал длину листа A4 (29,7 см - 11,69 дюйма) для калибровки. В этом расчете «расстояние = (длительность / 2) / 29.7». Я разделил продолжительность на 2, потому что время, когда эхо должно пройти с этой стороны листа на другую сторону того же листа, это то же самое, что эхо проходит с другой стороны на датчик (он помещается на этой стороне листа).
  • вторая часть - основная часть этого кода.

Структура кода:

While(...){

...;

While(...){

...;

While(...){

...;

While(...){

...;

}

}

}

}

Если ваша рука (или объект) находится между 2 и 10 см (0.79" - 3.94"), программа войдет в первое while (условие "пока") и светодиод (или что-то еще) включится.

Вы можете изменить этот диапазон расстояний в программе.

Когда вы будете снова двигать рукой но на расстоянии более 10 см (второе «пока» - while) светодиод все равно должен включаться (как обычный переключатель). Если ваша рука составляет 2-10 см во второй раз (третий «пока» - while) светодиод должен выключиться. И когда вы отводите руку от датчика (> 10 см, четвертый while «пока») светодиод должен отключиться, пока вы снова не подвинете руку ближе, чем на 10 см.

Программный код вы можете взять ниже или скачать по ссылке:

int trigPin = 3;
int echoPin = 4;
float duration;
float distance;

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(9, OUTPUT);
  pinMode(10, INPUT);

}
void(* resetFunc) (void) = 0; //declare reset function at address 0

void loop() {

  // long duration, distance;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(100);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  //Serial.print(duration);
  distance = (duration / 2) / 29.1; //microsecond
  //---------------------------------------------------------------- this part above is for the distance sensor HC-SR04
  if (distance >= 400 || distance <= 2) {  //range of the sensor
    Serial.println("Out of range");
  }
  else {
    Serial.print(distance);
    Serial.println(" cm ");

  }

  digitalWrite(9, LOW);

  while (distance > 2 && distance < 10) {  //if your hand/an object is less than 10cm from the sensor, led will turn on. You can change the range.
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(100);
    digitalWrite(trigPin, LOW);
    duration = pulseIn(echoPin, HIGH);
    distance = (duration / 2) / 29.1; //microsecond

    digitalWrite(9, HIGH);
    delay(50);// prevent the bouncing
    // delay( millisecconds );

    while (distance > 10) {  //if you move your hand from the sensor, led still have to turn on.
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(100);
      digitalWrite(trigPin, LOW);
      duration = pulseIn(echoPin, HIGH);
      distance = (duration / 2) / 29.1; //microsecond

      digitalWrite(9, HIGH);
      delay(50);// prevent the bouncing

      while (distance > 2 && distance < 10) {  //the next time that you move your hand/object closer than 10cm from the sensor, led will turn off
        digitalWrite(trigPin, LOW);
        delayMicroseconds(2);
        digitalWrite(trigPin, HIGH);
        delayMicroseconds(100);
        digitalWrite(trigPin, LOW);
        duration = pulseIn(echoPin, HIGH);
        distance = (duration / 2) / 29.1; //microsecond

        digitalWrite(9, LOW);
        delay(50);// prevent the bouncing
        while (distance > 10) {
          digitalWrite(trigPin, LOW);
          delayMicroseconds(2);
          digitalWrite(trigPin, HIGH);
          delayMicroseconds(100);
          digitalWrite(trigPin, LOW);
          duration = pulseIn(echoPin, HIGH);
          distance = (duration / 2) / 29.1; //microsecond
          
          digitalWrite(9, LOW);
          delay(50);// prevent the bouncing
          resetFunc();
        }
      }
    }
  }
}

Шаг 4. Результат

Весь процесс создания бесконтактного переключателя и финальный результат вы можете посмотреть на видео ниже.

Дальше будет больше. Не переключайтесь.

19 июня 2017 в 00:19 | Обновлено 7 декабря 2019 в 02:26 (редакция)
Опубликовано:
Уроки, , ,

Добавить комментарий

Ваш E-mail не будет никому виден. Обязательные поля отмечены *