Espruino:Примеры/Светильник на базе Puck.js, меняющий цвет в зависимости от температуры

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

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Светильник на базе Puck.js, меняющий цвет в зависимости от температуры [1]

Допустим, у вас есть ребёнок, и нужно, чтобы температура в его комнате была между 16 и 20 °C, но ночью смотреть на градусник не очень удобно. Решение есть – можно создать ночной светильник, который будет менять цвет в зависимости от окружающей температуры.

DIY Temperature Controlled Night Light

Нам понадобятся

  • Puck.js.
  • RGB-лампочка, управляемая через инфракрасное излучение (купить такую можно, например, на eBay).
  • ИК-ресивер (если ваша лампочка отличается от той, что использую я).

Код

Вначале нам понадобятся ИК-коды для RGB-лампочки. О том, как их узнать, рассказывается здесь.

Сам код довольно простой:

var light = {
  normal : [8.9,4.5,0.5,0.5,0.6,0.5,0.6,0.5,0.5,0.6,0.5,0.6,0.5,0.6,0.5,0.6,0.5,0.6,0.5,1.7,0.5,1.7,0.5,1.7,0.6,1.8,0.4,1.7,0.5,1.7,0.5,1.7,0.5,1.7,0.5,1.7,0.5,0.6,0.5,1.7,0.5,1.7,0.5,0.6,0.5,0.6,0.5,0.6,0.5,0.6,0.5,0.6,0.5,1.7,0.5,0.6,0.5,0.6,0.5,1.7,0.5,1.7,0.5,1.7,0.5,1.7,0.5,39.9,8.9,2.2,0.5],
  hot : [8.9,4.5,0.5,0.6,0.5,0.5,0.6,0.5,0.5,0.6,0.5,0.6,0.5,0.6,0.5,0.6,0.5,0.6,0.5,1.7,0.5,1.7,0.5,1.7,0.5,1.7,0.5,1.7,0.5,1.7,0.5,1.7,0.5,1.7,0.5,1.7,0.5,0.6,0.5,0.6,0.5,1.7,0.5,0.6,0.5,0.6,0.5,0.6,0.5,0.6,0.5,0.6,0.5,1.7,0.5,1.7,0.5,0.6,0.5,1.7,0.5,1.7,0.6,1.7,0.5,1.7,0.5,39.9,8.9,2.3,0.5],
  cold :  [8.9,4.5,0.5,0.6,0.5,0.6,0.5,0.6,0.5,0.6,0.5,0.6,0.5,0.6,0.5,0.6,0.5,0.5,0.6,1.7,0.5,1.7,0.5,1.7,0.6,1.8,0.5,1.7,0.5,1.7,0.5,1.7,0.5,1.7,0.5,0.6,0.5,1.7,0.6,1.7,0.5,1.7,0.5,0.6,0.5,0.6,0.5,0.6,0.5,0.6,0.5,1.7,0.5,0.5,0.6,0.5,0.5,0.6,0.5,1.7,0.5,1.7,0.5,1.7,0.5,1.7,0.5,39.9,8.9,2.3,0.5]
};
var offset = 20.2 - 17.75;

function tempTest() {
  var temp = E.getTemperature()+offset;
  print("Температура:"+temp);
  if (temp < 16)
    Puck.IR(light.cold);
  else if (temp <= 20)
    Puck.IR(light.normal);
  else
    Puck.IR(light.hot);
}

setInterval(tempTest, 30*1000);

Когда вы загрузите код, он будет работать, пока не кончится заряд батареи (или пока вы не вытащите батарею). Если вы хотите сохранить код, чтобы он запускался даже после отключения батареи, просто напечатайте save() в левой части IDE.

Примечания

  • Чтобы выключить ночной светильник, когда в комнате начнёт светлеть, воспользуйтесь функцией Puck.light() – она определяет интенсивность окружающего света.
  • Поскольку у Puck.js есть Bluetooth, вы также можете воспользоваться BLE-лампочкой. Но они, как правило, хуже поддаются реверс-инжинерингу (обратному проектированию).
  • Puck.js тоже оснащён RGB-светодиодами, и их тоже можно использовать для создания ночного светильника, но я не стал, потому что:
    • Если они будут работать всю ночь, это очень быстро израсходует заряд батареи (за день или два).
    • Работа светодиодов увеличит температуру кристалла Puck.js, что будет мешать считыванию окружающей температуры. Это ещё одна причина, по которой температуру лучше измерять раз в несколько секунд, а не всё время.

См.также

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