Выношу на суд общественности первый вроде бы завершенный проектик

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

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

 

В проекте использовал Pro mini 328 5v, ультрозвуковой датчик , реле 5v, и внутренности от БП для сотового телефона. Все запихал в распаечную коробку 700х700.

 

Прошу покритиковать скетч.

 

#include "Ultrasonic.h"

Ultrasonic ultrasonic(4, 5); //пины подключения датчика 3-Trig, 2-Echo
int relay=6; //пин подключения релейного модуля 
float distance; //переменная в которую записывается значение дистанции
int distance2=100;// расстояние до объекта в см
long previousMillis = 0;
long interval = 10000; //задаем интервал, через который выключится реле (10сек)
int relayState = LOW; //устанавливаем состояние релейного модуля



void setup()
{
  //Serial.begin (9600);  //открываем Serial порт
  pinMode(relay, OUTPUT); // назначаем пин для реле как выход
  digitalWrite (relay, LOW); // устанавливаем значение для выкл для реле

}

void loop()
{
  distance = ultrasonic.Ranging(CM); //измеряем дистанцию до объекта
  unsigned long currentMillis = millis(); //измеряем время прошежшее  начала запуска цикла
  //Serial.print ("Distance: ");
  //Serial.println (distance); //выводим значение дисанции до объекта в Serial порт
  
  if (distance < distance2 && relayState == LOW ) { //если дистанция до объекта меньше заданной дистанции и реле выключено
    digitalWrite (relay, HIGH);//включаем реле
    relayState = HIGH; //указываем, что реле включено
   } 
  
   if (distance > distance2 && relayState == HIGH) { //  если релейный модуль включен
    if (currentMillis - previousMillis > interval) { //проверяем интервал 
      previousMillis = currentMillis;
      digitalWrite (relay, LOW);  //выключаем релейный модуль
      relayState = LOW; //указываем, что реле выключено
    }
   }

   //Serial.print ("Relay: ");
   //Serial.println (relayState); //печатаем в сериал состояние реле
}

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

могу покритиковать саму идею проектика :)

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

зачем вам в этом проекте МК мне совсем не понятно.. :) почему никто, никогда не ищет лугких путей? ( ворпос риторический) гы гы

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

Ну это был первый шаг. Если отадка пройдет удачно, планирую сделать включение от центрального МК по расписанию или удаленно (иммитация ложного присутствия).

Araris
Offline
Зарегистрирован: 09.11.2012

1) Я бы посоветовал данные, получаемые с УЗ-датчика, пропускать через какой-нибудь усреднитель-отбрасыватель пиков, например, такой, как описан в http://playground.arduino.cc/Main/DigitalSmooth , сам им пользуюсь, работой доволен.

2) Должно ли устройство включать настольную лампу в ясный солнечный день ? Может быть, уместен будет датчик уровня освещенности ?

3) Я бы прикрутил к устройству кнопку, позволяющую вручную управлять лампой. Житейские ситуации бывают разные, это может пригодиться.

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

Araris пишет:

1) Я бы посоветовал данные, получаемые с УЗ-датчика, пропускать через какой-нибудь усреднитель-отбрасыватель пиков, например, такой, как описан в http://playground.arduino.cc/Main/DigitalSmooth , сам им пользуюсь, работой доволен.

2) Должно ли устройство включать настольную лампу в ясный солнечный день ? Может быть, уместен будет датчик уровня освещенности ?

3) Я бы прикрутил к устройству кнопку, позволяющую вручную управлять лампой. Житейские ситуации бывают разные, это может пригодиться.

1) С утра читал ваш пост в теме ниже, думаю, что надо будет.

2) Возможно, хотя, если уж лампа мешает, на ней есть кнопка ВЫКЛ.

3) Думал об этом так же. Скорее всего сделаю такую кнопку для переключения режимов работы.

 

Araris
Offline
Зарегистрирован: 09.11.2012

4) Что произойдет, если некто положит на стол стопку учебников/портфель и т.п. и уйдет ?

(Намекаю на датчик движения.)

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

имеете ввиду совместное использование датчика движения и ультрозвукового или ультразвук вообще убрать?

Araris
Offline
Зарегистрирован: 09.11.2012

Предпочел бы совместное : у PIR-датчика широкий угол охвата, могут быть проблемы с "паразитными" срабатываниями на периферии зоны (можно, конечно, поиграть с линзой Френеля, сузив охват). А УЗ-датчик имеет конус 10-15 градусов, он Вам четко покажет наличие объектов в нужной зоне.

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

Зачем такие сложности, научите детей вкл/выключать лампу :)
 

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

Michal пишет:

Зачем такие сложности, научите детей вкл/выключать лампу :)
 

 

я искал на чем по пробовать, решил на настольной лампе. Потом можно перенести на освещение помещения.

pencraft
Offline
Зарегистрирован: 17.01.2012

Наверное, лучше комбинация датчиков. Датчик движения позволит отличить человека от стопки книг ;)) а ультразвуковой датчик - распознает человека, если он сидит неподвижно ;) УЗ датчик должен быть направлен таким образом, чтобы реагировать только на человека, а не на предметы, лежащие на столе.

pencraft
Offline
Зарегистрирован: 17.01.2012

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

Araris
Offline
Зарегистрирован: 09.11.2012

pencraft пишет:

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

А вдвоем с УЗ они - сила.