Светлость: фоторезистенты

Если выяснится, что получение входов потенциометра может быть полезным для управляемых человеком экспериментов, что мы будем использовать, если хотим эксперимент, управляемый окружающей средой? Мы повторяем точно такие же принципы, но вместо потенциометра (сопротивление на основе коммутации) мы используем фоторезистор (сопротивление на основе яркости).
Arduino не может непосредственно обнаружить сопротивление (он обнаруживает напряжение) также настраиваем делитель напряжения. Точное напряжение (напряжение) в принимающем его порту можно рассчитать, но для нашего использования (просто обнаружить относительную яркость) можно экспериментировать со значениями и посмотреть, что работает для нас. Низкая величина возникает, когда сенсор хорошо освещен, а высокая - когда он в темноте.

КОМПОНЕНТЫ

СХЕМА ЦЕПИ

Schéma du circuit

Примечание переводчика: Монтаж фоторезиста неясен или неверен. Обычный монтаж состоит из:
1) подключить один из двух контактов к питанию 5В.
2) соединить другой контакт с сопротивлением 330 Ом и портом А0.
Кроме того, сопротивление, подключенное к светодиоду, составляет 330, а не 560 Ом.

МОНТАЖ ЦЕПИ

Diagramme d'assemblage

Видео сборки.

Utiliser une photoresistance

Фото функционального монтажа переводчиком.
Отметим, что лапка фоторезистора сверху соединена с резистором и портом А0,
и второй самый низкий на диете.

КОД

You can find this code in CIRC-09-code-photoresistor.js

var five = require("johnny-five"), board, myPhotoresistor, myLed;

board = new five.Board();
board.on("ready", function() {
  myLed = new five.Led(9);
  myPhotoresistor = new five.Sensor({
    pin: "A0",
    freq: 250
  });
  myPhotoresistor.on("read", function( err, value ) {
    // l'intervalle de la luminosité de la led est entre 0 et 255
    var brightnessValue = five.Fn.constrain(five.Fn.map(value, 0, 900, 0, 255), 0, 255);
    myLed.brightness(brightnessValue);
  });
});

АВАРИЙНЫЙ РЕМОНТ

СИД остается черным

Это ошибка, которую мы продолжаем делать время от времени, если бы только мы могли делать светодиоды, которые работают в обе стороны! Убери ее и верни .

Ca не реагирует на изменения света

Поскольку расстояние между штифтами на фоторезисторе не является стандартным, его легко разместить. Убедитесь, что она на правильном месте.

Все еще не

работает?

Вы можете оказаться в комнате, которая слишком ясна или слишком темна. Попробуйте включить и выключить свет, чтобы посмотреть, поможет ли это. Или если рядом с вами лампа, попробуйте.

РАСШИРЕНИЕ КОДА

Инвертировать ответ

:

Возможно, вам нужен противоположный ответ. Не волнуйтесь, мы можем легко перевернуть ответ, просто добавьте :

brightnessValue = 255 - brightnessValue;

Запустите программу еще раз и посмотрите результат.

Ночной свет:

Вместо того, чтобы контролировать четкость светодиода в ответ на свет, включаем его или выключаем там на основе порогового значения. Измените диспетчер данных фоторезистора на :

myPhotoresistor.on("data", function( err, value ) {
  var threshold = 300;
  if (value > threshold) {
    myLed.on();
  } else {
    myLed.off();
  }
});

Или:

myPhotoresistor.booleanAt(512).on("data", function( err, value ) {
    if (this.boolean) {
        myLed.on();
    } else {
        myLed.off();
    }
});

Серво контролируется светом

Давайте использовать наши новые знания об обнаружении света, чтобы управлять сервоприводом. Подключите сервопривод к порту 9 (как в упражнении 4).
Затем возьмите код для управления сервоприводом из упражнения 8 и посмотрите, как он работает без изменений.

Использовать весь диапазон сервопривода

:

Заметим, что серво работает только на ограниченной части своего диапазона. Это потому, что с цепью деления напряжения мы используем напряжение на аналоговом порту 0, которое находится не в диапазоне от 0 до 5 вольт, а скорее между двумя более низкими значениями (эти значения меняются в зависимости от вашей конфигурации). Чтобы исправить его, играйте с линией:

thefive.Fn.constrain(five.Fn.map(value, 0, 1023, 0, 179), 0, 255);