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

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

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

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

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

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

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

Шаг 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 см во второй раз (третий «Пока») светодиод должен выключиться. И когда вы отводите руку от датчика (> 10 см, четвертый «пока») светодиод должен отключиться, пока вы снова не подвинете руку ближе, чем на 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: Результат

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

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

Ардуино+