Espruino:Примеры/Ночной светильник

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Ночной светильник[1]

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

Используемой в этом руководстве батареи на 2400 мА должно хватить примерно на 4 месяца – с расчетом, что светодиод будет гореть по 4 часа в день.

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

DIY Night Light

Вам понадобятся:

Подсоединение

  • Подсоедините батарею либо с помощью JST-коннектора, либо напрямую
  • Подключите светодиод между GND и IO-контактом (с последовательно подключенным резистором). В нашем примере используется контакт D15, но подойдет и любой другой IO-контакт.

Код

var light = 0, on = false;

setInterval(function() {
  light = analogRead(LED2);
  if (light < 0.16) on = true;
  if (light > 0.18) on = false;
  D15.write(on);
}, 2000);

// Используйте код ниже, только если вам нужно, 
// чтобы светильник был скрыт для Bluetooth, 
// пока не будет нажата кнопка.
NRF.sleep();
setWatch(function() {
  NRF.wake();
}, BTN1);

Просто загрузите код выше на flash-память платы MDBT42Q. После загрузки она отключится от Bluetooth и превратится в ночной светильник.

Но вы, возможно, захотите поменять цифры, отвечающие за включение и выключение светодиода. Для этого просто удалите последний фрагмент кода, и затем, будучи подключенным, просто впишите light в консоль онлайн-IDE, чтобы понять, какое значение переменная light имеет при разных уровнях яркости.

Как улучшить проект

В видео выше уже говорилось, что от постоянного включения/выключения (мерцания) может помочь проверка при помощи пороговых значений (см. 05:20 на видео), но есть и другие способы:

  • Замените light = analogRead(LED2); на D15.reset(); light = analogRead(LED2); D15.write(on);. По словам пользователя Акоса Лукаша в комментариях к видео, этот код очень быстро выключает светодиод, чтобы прочесть значение яркости, а затем включает обратно. Мерцание будет едва заметно.
  • Переверните плату MDBT42, чтобы датчик яркости не реагировал на светодиод, генерирующий свет.
  • Загородите чем-нибудь нижнюю часть теннисного шарика, чтобы свет не попадал напрямую на датчик.

Корпус, сделанный с помощью 3D-печати

Корпус для проекта был сделан с помощью OpenSCAD – это просто полый цилиндр.

difference() {
  translate([0,0,-1.5]) cylinder(r=36/2,h=60);
  cylinder(r=33/2,h=60);
}

См.также

Ссылки на полезные ресурсы

Внешние ссылки