Arduino для начинающих. Урок 7. Подключение фоторезистора
Продолжаем серию уроков “Arduino для начинающих”. Сегодня подключаем фоторезистор (фотоэлемент) к плате Arduino. Фоторезисторы используются в роботах как датчики освещенности. В статье видео-инструкция, листинг программы, схема подключения и необходимые компоненты.
Фоторезистор — резистор, сопротивление которого зависит от яркости света, падающего на него. В нашей модели светодиод горит, только если яркость света над фоторезистором меньше определенной, эту яркость можно регулировать программно.
Фоторезисторы используются в робототехнике как датчики освещенности. Встроенный в робота фоторезистор позволяет определять степень освещенности, определять белые или черные участки на поверхности и в соответствие с этим двигаться по линии или совершать другие действия.
Видео-инструкция сборки модели Arduino с фоторезистором:
Для сборки модели с сервоприводом нам потребуется:
- плата Arduino
- 6 проводов “папа-папа”
- фоторезистор
- светодиод
- резистор на 220 Ом
- резистор на 10 кОм
- программа Arduino IDE, которую можно скачать с сайта Arduino.
Схема подключения модели 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 с фоторезистором:
Если светодиод не реагирует на изменение освещенности, то попробуйте поменять число 800 в программе, если он все время горит — уменьшите, если не горит — увеличьте.
Смотрите также:
Учебный курс «Arduino для начинающих»: главная страница.
Посты по урокам:
- Первый урок: Светодиод
- Второй урок: Кнопка
- Третий урок: Потенциометр
- Четвертый урок: Сервопривод
- Пятый урок: Трехцветный светодиод
- Шестой урок: Пьезоэлемент
- Седьмой урок: Фоторезистор
- Восьмой урок: Датчика движения (PIR) и E-mail
- Девятый урок: Подключение датчика температуры и влажности DHT11 или DHT22
Все посты сайта «Занимательная робототехника» по тегу Arduino.
Наш YouTube канал, где публикуются видео-уроки.
Не знаете, где купить Arduino? Все используемые в уроке комплектующие входят в большинство готовых комплектов Arduino, их также можно приобрести по отдельности. Подробная инструкция по выбору здесь. Низкие цены, спецпредложения и бесплатная доставка на сайтах AliExpress и DealExtreme. Если нет времени ждать посылку из Китая — рекомендуем интернет-магазины Амперка и DESSY. Низкие цены и быструю доставку предлагает интернет-магазин ROBstore. Смотри также список магазинов.
Автор: Александр Гагарин.
Александр
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 — номер цифрового порта.
Некропостер
25.01.2017
казалось бы при чем тут #define A0 …
Иван
25.12.2014
Не могу понять зачем нужен резистор на 10 кОм.
Фоторезистор сам по себе уже резистор. Аналоговый порт держит 5 вольт. Объясните пожалуйста…
Алексей
28.12.2014
резистивный делитель из фоторезистора и реза 10 кОм. На аналоговый вход считывается потенциал точки делителя — он изменяется пропорционально фотосопротивлению. Если б не было 10 кОм-ника, то потенциал постоянно равен нулю и не было бы изменений.
Юрий
18.04.2015
А почему именно 10 кОм? Как рассчитывать какие резисторы нужны?
Арсений
31.12.2018
Ещё одна загадка человечества
Сэм
18.05.2016
А можно по проще как то объяснить для недалёких?)))
Дима Ар
07.07.2018
Согласен,ведь фотоРЕЗИСТОР
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 не сможет быть установлен программно.
эд
29.04.2015
как сделать чтобы светодиод при отсутствии освещения включался а при появлении не отключался???
Александр
30.04.2015
Эд, уточни задачу…. А то немного похоже на то, что нужно чтобы светодиод горел всегда ….. Т.е. купить ардуино и купить датчики зачеркиваем.)
Михаил
11.08.2015
Почему при инициализации переменных в setup не указан фоторезистор ldr, как вход INPUT? Ведь он же по аналогии с уроком про кнопку работает. Или почему так?
И что такое 800 в примере — люксы? Или просто некое цифровое значение, особого физического смысла не имеющее?
Антон
13.08.2015
По сути это коэффициент передачи делителя напряжения. где «0» соответствует «0», а «1» — «1024».
Денис
13.08.2015
Фоторезистор подключается к портам analog in, что заранее говорит о том, что это input, поэтому не прописывается.
800 — ток, который зависит от освещения и используемого резистора и фоторезистора.
Александр
23.10.2015
а какова должна быть мощность резистора 10 кОм?
Денис
23.10.2015
0,25 Вт будет достаточно
Foxxxof
20.10.2016
У меня ни как не хочет работать на Arduino nano.
При значении 0 — не горит, при 1 и больше всегда горит.
Это как то связано с тем, что у меня нано?
vitali
06.11.2016
у меня такая же проблема
Некропостер
25.01.2017
значение 0 это что?
djonikage
13.02.2017
собрал все как на схеме залил ваш скетч на сборке светодиод не реагирует только на самом ардуино уно светодиод реагирует
Андрей
13.12.2017
скорее всего дело в полярности ног светодиода
проверьте ноги светодиода, ток должен течь с длинной (анод) на короткую (катод). На некоторых диодах минус помечен плоской засечкой на корпуцсе. Это вероятная и распространенная ошибка при подключении. Если перепутать ноги то диод не будет светить, т.к. это полупроводниковый элемент с ОДНОСТОРОННЕЙ пропускаемостью. Еще он не будет гореть если подключить к аналоговому порту и подать малое напряжение. И да, проверьте что он вообще горит. Для этого можно использовать мультиметр в режиме прозвонки (помним при прозвонке к какой ноге подавать плюс)
Анатолий
09.12.2018
Подскажите знающие люди, как лучше всего собрать часы для дайвинга на Ардуино, с 3д компасом, с барометром ms5540, чтобы отображалось длительность погружения и максимальная глубина.
Миша
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);
}
}
А так можно?