Arduino для начинающих. Урок 7. Подключение фоторезистора

Share Button

Продолжаем серию уроков “Arduino для начинающих”. Сегодня подключаем фоторезистор (фотоэлемент) к плате Arduino. Фоторезисторы используются в роботах как датчики освещенности. В статье видео-инструкция, листинг программы, схема подключения и необходимые компоненты.

Фоторезистор — резистор, сопротивление которого зависит от яркости света, падающего на него. В нашей модели светодиод горит, только если яркость света над фоторезистором меньше определенной, эту яркость можно регулировать программно.

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

Видео-инструкция сборки модели Arduino с фоторезистором:

Для сборки модели с сервоприводом нам потребуется:

  • плата Arduino
  • 6 проводов “папа-папа”
  • фоторезистор
  • светодиод
  • резистор на 220 Ом
  • резистор на 10 кОм
  • программа Arduino IDE, которую можно скачать с сайта Arduino.
Необходимые компоненты для подключения фоторезистора на Arduino

Необходимые компоненты для подключения фоторезистора на Arduino

Схема подключения модели Arduino с фоторезистором:

7схема

Схема подключения фоторезистора на Arduino

Для работы этой модели подойдет следующая программа (программу вы можете просто скопировать в Arduino IDE):

int led = 13; //переменная с номером пина светодиода
int ldr = 0; //и фоторезистора
void setup() //процедура setup
{
pinMode(led, OUTPUT); //указываем, что светодиод - выход
}
void loop() //процедура loop
{
if (analogRead(ldr) < 800) digitalWrite(led, HIGH);
//если показатель освещенности меньше 800, включаем светодиод
else digitalWrite(led, LOW); //иначе выключаем
}

Так выглядит собранная модель Arduino с фоторезистором:

готово

Готовая модель подключения фоторезистора на Arduino

Если светодиод не реагирует на изменение освещенности, то попробуйте поменять число 800 в программе, если он все время горит  — уменьшите, если не горит — увеличьте.

Смотрите также:

Учебный курс «Arduino для начинающих»: главная страница.

Посты по урокам:

  1. Первый урок: Светодиод
  2. Второй урок: Кнопка
  3. Третий урок: Потенциометр
  4. Четвертый урок: Сервопривод
  5. Пятый урок: Трехцветный светодиод
  6. Шестой урок: Пьезоэлемент
  7. Седьмой урок: Фоторезистор
  8. Восьмой урок: Датчика движения (PIR) и E-mail
  9. Девятый урок: Подключение датчика температуры и влажности DHT11 или DHT22

Все посты сайта «Занимательная робототехника» по тегу Arduino.

Наш YouTube канал, где публикуются видео-уроки.

Не знаете, где купить Arduino? Все используемые в уроке комплектующие входят в большинство готовых комплектов Arduino, их также можно приобрести по отдельности. Подробная инструкция по выбору здесь. Низкие цены, спецпредложения и бесплатная доставка на сайтах AliExpress и DealExtreme. Если нет времени ждать посылку из Китая — рекомендуем интернет-магазины Амперка и DESSY. Низкие цены и быструю доставку предлагает интернет-магазин ROBstore. Смотри также список магазинов.

Автор: Александр Гагарин.

Share Button

25 комментариев к статье “Arduino для начинающих. Урок 7. Подключение фоторезистора”

  1. Александр

    14.11.2014

    Правильно ли определена связь между именем переменной и ножкой контроллера:
    int ldr = 0; //и фоторезистора
    Ведь фоторезистор подключен не к ножке «0», а к «A0».
    Быть может надо написать так:
    int ldr = A0; //и фоторезистора

    Ответить на этот комментарий
    • Занимательная робототехника

      15.11.2014

      Переменная типа int (integer) может содержать только число. В свою очередь функция analogRead() принимает аргумент в формате x или Ax, где x — номер аналогового пина. То есть использовать можно как analogRead(0) так и analogRead(A0), но переменная типа int не может содержать A0. В случае если требуется считывать данные с цифрового пина следует использовать функцию digitalRead(x), где x — номер цифрового порта.

      Ответить на этот комментарий
  2. Иван

    25.12.2014

    Не могу понять зачем нужен резистор на 10 кОм.
    Фоторезистор сам по себе уже резистор. Аналоговый порт держит 5 вольт. Объясните пожалуйста…

    Ответить на этот комментарий
  3. sameza

    08.02.2015

    Всем привет ) У меня был залит скетч для отлавливания событий на кнопке (на цифровых пинах), воткнул вместо кнопки фоторезюк и всё работает … т,е. для него нет разницы в аналоговый или цифровой пин ?

    const int buttonPin = 2; // the number of the pushbutton pin
    const int ledPin = 13; // the number of the LED pin

    // variables will change:
    int buttonState = 0; // variable for reading the pushbutton status

    void setup() {
    // initialize the LED pin as an output:
    pinMode(ledPin, OUTPUT);
    // initialize the pushbutton pin as an input:
    pinMode(buttonPin, INPUT);
    //
    Serial.begin(9600) ;
    }

    void loop(){
    // read the state of the pushbutton value:
    buttonState = digitalRead(buttonPin);

    // check if the pushbutton is pressed.
    // if it is, the buttonState is HIGH:
    if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
    Serial.println(«Button ON») ;
    delay (300) ;
    }
    else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
    //Serial.println(«Button OFF») ;
    }
    }

    Ответить на этот комментарий
    • Занимательная робототехника

      08.02.2015

      Да, но тогда разумеется порог между HIGH и LOW не сможет быть установлен программно.

      Ответить на этот комментарий
  4. эд

    29.04.2015

    как сделать чтобы светодиод при отсутствии освещения включался а при появлении не отключался???

    Ответить на этот комментарий
    • Александр

      30.04.2015

      Эд, уточни задачу…. А то немного похоже на то, что нужно чтобы светодиод горел всегда ….. Т.е. купить ардуино и купить датчики зачеркиваем.)

      Ответить на этот комментарий
  5. Михаил

    11.08.2015

    Почему при инициализации переменных в setup не указан фоторезистор ldr, как вход INPUT? Ведь он же по аналогии с уроком про кнопку работает. Или почему так?

    И что такое 800 в примере — люксы? Или просто некое цифровое значение, особого физического смысла не имеющее?

    Ответить на этот комментарий
    • Антон

      13.08.2015

      По сути это коэффициент передачи делителя напряжения. где «0» соответствует «0», а «1» — «1024».

      Ответить на этот комментарий
    • Денис

      13.08.2015

      Фоторезистор подключается к портам analog in, что заранее говорит о том, что это input, поэтому не прописывается.
      800 — ток, который зависит от освещения и используемого резистора и фоторезистора.

      Ответить на этот комментарий
  6. Александр

    23.10.2015

    а какова должна быть мощность резистора 10 кОм?

    Ответить на этот комментарий
  7. Foxxxof

    20.10.2016

    У меня ни как не хочет работать на Arduino nano.
    При значении 0 — не горит, при 1 и больше всегда горит.
    Это как то связано с тем, что у меня нано?

    Ответить на этот комментарий
  8. djonikage

    13.02.2017

    собрал все как на схеме залил ваш скетч на сборке светодиод не реагирует только на самом ардуино уно светодиод реагирует

    Ответить на этот комментарий
    • Андрей

      13.12.2017

      скорее всего дело в полярности ног светодиода

      проверьте ноги светодиода, ток должен течь с длинной (анод) на короткую (катод). На некоторых диодах минус помечен плоской засечкой на корпуцсе. Это вероятная и распространенная ошибка при подключении. Если перепутать ноги то диод не будет светить, т.к. это полупроводниковый элемент с ОДНОСТОРОННЕЙ пропускаемостью. Еще он не будет гореть если подключить к аналоговому порту и подать малое напряжение. И да, проверьте что он вообще горит. Для этого можно использовать мультиметр в режиме прозвонки (помним при прозвонке к какой ноге подавать плюс)

      Ответить на этот комментарий
  9. Анатолий

    09.12.2018

    Подскажите знающие люди, как лучше всего собрать часы для дайвинга на Ардуино, с 3д компасом, с барометром ms5540, чтобы отображалось длительность погружения и максимальная глубина.

    Ответить на этот комментарий
  10. Миша

    20.05.2019

    int led = 9;
    int fld = A0;

    void setup() {
    pinMode(led, OUTPUT);

    }

    void loop() {
    if (analogRead(fld) <= 800) {
    digitalWrite(led, HIGH);
    } else {
    digitalWrite(led, LOW);
    }

    }
    А так можно?

    Ответить на этот комментарий

Оставить комментарий

© 2014-2024 Занимательная робототехника, Гагарина Д.А., Гагарин А.С., Гагарин А.А. All rights reserved / Все права защищены. Копирование и воспроизведение в любой форме запрещено. Политика конфиденциальности. Соглашение об обработке персональных данных.
Наверх