Автоматическая подсветка рабочего места на arduino

Немного предисловия:

Как то решил заняться своим рабочим местом дома. Сделал удобный стол, полки, подсветка, на подоконнике микро мастерская для пайки и разных приблуд. Но каждый раз пока сидишь работаешь, супруга ложится спать. И приходится постоянно включать и отключать подсветку. Задолбало!!! в итоге пришел к следующему

Задача:

Автоматизировать включение подсветки рабочего места из имеющегося говна и палок =))) Главный приоритет бесшумное включение.

Решение:

Использовать имеющийся лазерный дальномер. Бесшумное реле и самая маленькая плата которая есть Arduino Uno + блок питания в розетку для стационарной работы.

Алгоритм простой. Есть препятствие - включаем реле, нет препятствия - выключаем реле.

Реализация:

Вначале использовал ультразвуковой дальномер HC-SR04. Но с ним есть одна проблема - ультразвуковой сигнал который она выпускает, теряется в ткани одежды. В связи с чем он был выкинут. Инфракрасный датчик тоже отпал, так как MH-Sensor даже с учётом построечного резистора, не очень большой диапазон распознавания препятствия. Хотя это идеальный вариант что бы схема была минимальной. Что было под рукой:

Arduino Uno - Лучше конечно nano но её нет ( Или на MH-Sensor но увеличивать дальность

HY-M285 - Твердотельное реле omron которое не издаёт никакого звука (Тишина залог здоровья)

CJVL53L0XV2 - Лазерный дальномер который постоянно делает замер

[Супер - Схема]

 

Определяем пины:

CJVL53L0XV2 - A4 (SDA)

CJVL53L0XV2 - A5 (SCL)

HY-M285 Реле - D3

Подключение

На дальномере + и - подключаем к линии +5 и grd. SDA подключаем к контакту А4 на Arduno и SCL на контакт А5 Arduino

HY-M285 подключаем так же, + к +5 на ардуино и - на grn. CH1 крутим на контакт D3 

На светодиодную ленту у меня стоит драйвер с 220 на 12 вольт. Поэтому реле я ставлю в разрез фазы 220 вольт

Программа

Для работы программы нужна стандартная библиотека Adafruit_VL53L0X.h

#include "Adafruit_VL53L0X.h"
#define PIN_RELAY 3 // определяем пин для реле
Adafruit_VL53L0X lox = Adafruit_VL53L0X(); 

void setup() {
  Serial.begin(115200);
  pinMode(PIN_RELAY, OUTPUT);
  digitalWrite(PIN_RELAY, HIGH);
  while (! Serial) {
    delay(1);
  }
    if (!lox.begin()) {
    Serial.println(F("Не загружен VL53L0X"));
    while(1);
  }
}

void loop() {
  VL53L0X_RangingMeasurementData_t measure;
  lox.rangingTest(&measure, false); 

  if (measure.RangeStatus != 4) {  
    Serial.print("Растояние: "); 
    Serial.print(measure.RangeMilliMeter);
    Serial.println(" mm");
  } else {
    Serial.println(" Очень далеко ");
  }

  if (measure.RangeMilliMeter < 450) {
    digitalWrite(PIN_RELAY, HIGH); 
  }
  else
  {
    digitalWrite(PIN_RELAY, LOW); 
  }
  delay(100);
}

 

Параметр "чувствительности" или появления объекта регулируется здесь. Если расстояние до объекта меньше 450 мм то включаем реле

if (measure.RangeMilliMeter < 450) {
    digitalWrite(PIN_RELAY, HIGH); 

 

Скачать скетч

Видео:

О статье

Автор: Владимир Корниенков

Дата публикации: Четверг, декабря 19, 2019