Ультразвуковой включатель со звуком на основе Arduino UNO

Платформа «Ардуино» позволяет делать неплохие средства автоматизации разных процессов. Причем происходит это быстро, внесение изменений для программиста не является большой проблемой. Используя исходный код проекта выключателя освещения для лестницы, а также свой кусок, удалось сделать выключатель на основе дешевого ультразвукового датчика.

Вот видео как работает предлагаемое устройство:

Данная поделка — продолжение  вот этой, простейшей реализации ультразвукового сенсорного датчика присутствия.

Вот текст программы

#include 
#include "sounds.h"
 
const int Trig = 2;
const int Echo = 3;
 
// current  led state
int led_state=0;
 
long led_period_on = 50; //periods = ~50 ->23 second
long led_left_on; //if this is 0 - turn off
 
void setup()
{
  pinMode(Trig, OUTPUT);
  pinMode(Echo, INPUT);
  pinMode(10, OUTPUT);
  pinMode(12, OUTPUT);
  //default turn on
  delay(500);
  turn_led(1);
  led_left_on = led_period_on;
}
 
void loop()
{
  if ( led_left_on-- > 0 )
  {
    if (led_state == 0)
    {
      turn_led(1);
    }
  }
  else
  {
    if (led_state == 1)
    {
       turn_led(0);
    }
  }
 
  long dist_sm=us_distanse_sm();
 
  if ( dist_sm != 0 && dist_sm < 80 ) 
  {
    led_left_on = led_period_on;
    if (led_state == 0)
    {
      turn_led(1);
    }
  }
 
  delay( 200 ); // main delay
}
 
// turn led on/off & play sound
 
void turn_led( int led_state_)
{
   led_state = led_state_;
   digitalWrite(12, led_state == 0?LOW:HIGH);
   digitalWrite(10, led_state == 0?HIGH:LOW);
 
   if ( led_state ==1 )
   {
      startPlayback(hi, sizeof(hi));
      delay(100);
   }
   else
   {
      startPlayback(fi, sizeof(fi));
      delay(100);
   }
 
}
 
// get distance ( sm )
 
long us_distanse_sm()
{
  digitalWrite(Trig, LOW);
  delayMicroseconds(2);
  digitalWrite(Trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(Trig, LOW); 
  return pulseIn(Echo, HIGH)/58;
 
}

Каким образом создать данные в файле sounds.h можно прочитать вот в этой статье. Библиотека для работы с PCM фалами также взята по указанной ссылке. Однако, очевидно формат этих данных такой же как и в проекте на хабре, потому, что «звуковые файлы» из хабра-примера идеально подошли к этой библиотеке.

Единственно что по какой-то причине использованный мною динамик на 8ом, от старого модема курьер, звучит послабей чем в примере на хабре. Но может это и хорошо, так как пугать таким выключателем народ, также, не очень хорошо.

Необходимый интервал включенного состояния выключателя задается с помощью:

long led_period_on = 50; // ~23 seconds

50 — это 50 циклов выполнения программы, то есть по идее 50*200ис = 10 секунд. Однако на практике время дольше так как Ардуино выполняет не только задержку но и другие, медленные операции. Если вам надо поставить период в минуту, то задайте интервал ~145.

long led_period_on = 145; // ~60 seconds

Расстояние. при котором срабатывает датчик, точнее ниже которого он срабатывает 80 см

if ( dist_sm != 0 && dist_sm < 80 )

можно изменять от 500 до где-то 10-ти см. Датчик иногда дает ложные срабатывания, в 0 см, поэтому при непосредственном контакте данная схема не срабатывает. Да она и не предназначена, так как изначально планировалось размещение такого датчика на потолке.

Исходные файлы, вместе с библиотеками можно скачать вот тут.

Питание осуществляется от внешнего источника. Период задержки в тестовом видео установлен очень коротким, 5 циклов — около 2х секунд или даже меньше. В программе он намного больше и приближается по длительности к тмоу, который я привык ставить для устройств автономного включения освещения — около 30-ти секунд.

Подключение датчика и исполнительного реле — примитивное, к портам напрямую. Светодиоды через резисторы 240 Ом. Никаких активных компонентов не применено. То есть схема собирается просто на основе ардуино и датчиков

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

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