Подключение фоторезистора к ардуино и работа с датчиком освещенности
Содержание:
- Датчик освещенности и плавное изменение яркости подсветки
- Подключение BH1750 к Arduino
- Где используется
- Характеристики фотоэлементов
- KY-008: лазерный модуль для Ардуино
- Способы подключения фотореле
- Характеристики датчика
- Как сделать управление освещением на Ардуино
- Применение фоторезисторов
- Фоторезистор ардуино и датчик освещенности
- Как подключить фоторезистор к Ардуино
- Использование фоторезисторов
- Как подключить потенциометр к Ардуино
Датчик освещенности и плавное изменение яркости подсветки
Можно модифицировать проект так, чтобы в зависимости от уровня освещенности менялась яркость светодиода. В алгоритм мы добавим следующие изменения:
- Яркость лампочки будем менять через ШИМ, посылая с помощью analogWrite() на пин со светодиодом значения от 0 до 255.
- Для преобразования цифрового значения уровня освещения от датчика освещенности (от 0 до 1023) в диапазон ШИМ яркости светодиода (от 0 до 255) будем использовать функцию map().
Пример скетча:
#define PIN_LED 10
#define PIN_PHOTO_SENSOR A0
void setup() {
Serial.begin(9600);
pinMode(PIN_LED, OUTPUT);
}
void loop() {
int val = analogRead(PIN_PHOTO_SENSOR);
Serial.println(val);
int ledPower = map(val, 0, 1023, 0, 255); // Преобразуем полученное значение в уровень PWM-сигнала. Чем меньше значение освещенности, тем меньше мощности мы должны подавать на светодиод через ШИМ.
analogWrite(PIN_LED, ledPower); // Меняем яркость
}
#define PIN_LED 10 #define PIN_PHOTO_SENSOR A0 void Serial pinMode void int Serial int analogWrite |
В случае другого способа подключения, при котором сигнал с аналогового порта пропорционален степени освещенности, надо будет дополнительно «обратить» значение, вычитая его из максимального:
int val = 1023 – analogRead(PIN_PHOTO_RESISTOR);
Для нашего следующего проекта мы будем использовать фоторезистор. А рассмотрим мы реализацию ночника в спальню, который будет автоматически включаться когда темно и выключаться когда становится светло.
Сопротивление фоторезистора зависит от света, попадающего на него. Используя фоторезистор в связке с обычным резистором 4.7 кОм, мы получаем делитель напряжения, в котором напряжение проходящее через фоторезистор, изменяется, в зависимости от уровня освещенности.
Напряжение с делителя, мы подаем на вход АЦП Arduino. Там мы сравниваем полученное значение с определенным порогом и включаем или выключаем светильник.
Принципиальная схема делителя показана ниже. Когда освещенность увеличивается, сопротивление фоторезистора падает и соответственно на выходе делителя (и входе АЦП) напряжение увеличивается. Когда освещенность падает все наоборот.
На фото ниже, показана собранная схема на макетной плате. Напряжения 0В и 5В берутся с Arduino. Ножка А0 используется как вход АЦП.
Ниже показан скетч Arduino. В данном уроке мы просто включаем и выключаем LED, который встроен в плату Arduino. Более яркий LED-светодиод, вы можете подключить к ноге 13 (через резистор ~220 Ом). Если будете подключать более мощную нагрузку, такую как лампу накаливания, то ее следует подключать через реле или тиристор.
В коде программы есть закомментированные участки, они служат для отладки. Можно будет контролировать значение АЦП (от 0 до 1024). Также, необходимо в коде изменить значение 500 (порог включения и выключения) на то, которое вы подберете опытным путем, изменяя освещенность.
/*
** Ночник
**
** www.hobbytronics.co.uk
*/
int sensorPin = A0; // устанавливаем входную ногу для АЦП
unsigned int sensorValue = 0; // цифровое значение фоторезистора
void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600); // старт последовательного вывода данных (для тестирования)
}
void loop()
{
sensorValue = analogRead(sensorPin); // считываем значение с фоторезистора
if(sensorValue
Подключение BH1750 к Arduino
Модуль модуль GY-302 оборудован пяти-пиновым разъемом стандарта 2.54мм:
- VCC: Питание «+»
- GND: Земля «-«
- SCL: Линия тактирования (Serial CLock)
- SDA: Линия данных (Serial Data)
- ADDR: Выбор адреса
Выводы отвечающие за интерфейс I2C на платах Arduino на базе различных контроллеров разнятся:
Arduino Mega | Arduino Uno/Nano/Pro Mini | BH1750 модуль | Цвет проводов на фото |
---|---|---|---|
GND | GND | GND | Черный |
5V | 5V | VCC | Красный |
20 (SDA) | A4 | SDA | Синий |
21 (SCL) | A5 | SCL | Зелёный |
3.3V | 3.3V | ADDR | Жёлтый |
Схема подключения BH1750 к Arduino по I2C
На следующем рисунке показана схема подключения датчика внешней освещенности BH1750 к Arduino UNO. Вывод ADD можно оставить «висящим»:
но вы можете подключить его к 3.3 В. Это переведет вывод ADD в высокий логический уровень, и адрес ведомого I2C датчика внешней освещенности BH1750 станет 0x5C
Это важно в программировании. Если вывод ADD переведен в низкое логическое состояние путем подключения к земле, адрес ведомого устройства I2C датчика внешней освещенности BH1750 будет 0x23
Таким образом, два датчика внешней освещенности BH1750 могут быть подключены к одной шине I2C, где один вывод ADD имеет низкое логическое состояние, а другой вывод ADD высокое.
Пример скетча
В скетче мы каждые 1000 мсек считываем с датчика BH1750 показания освещённости в люксах и выводим эти данные в последовательный порт.
/*
Подключяем библиотеку Wire (для I2C)
*/
#include <Wire.h>
/*
Подключяем библиотеку для bh1750
*/
#include <BH1750.h>
/*
Объявляем объект lightMeter
*/
BH1750 lightMeter;
void setup() {
/*
Запускаем последовательный порт
*/
Serial.begin(9600);
/*
Инициализируем шину I2C (библиотека BH1750 не делает это автоматически)
На esp8266 вы можете выбрать выводы SCL и SDA, используя Wire.begin (D4, D3);
*/
Wire.begin();
/*
Инициализируем и запускаем BH1750
*/
lightMeter.begin();
Serial.println(F(«BH1750 тест»));
}
void loop() {
/*
Считываем показания с BH1750
*/
float lux = lightMeter.readLightLevel();
/*
Отправляем значение освещенности в последовательный порт
*/
Serial.print(«Light: «);
Serial.print(lux);
Serial.println(» lx»);
/*
раз в секунду
*/
delay(1000);
}
1 |
/* BH1750lightMeter; voidsetup(){ /* Запускаем последовательный порт Serial.begin(9600); /* Инициализируем шину I2C (библиотека BH1750 не делает это автоматически) Wire.begin(); /* Инициализируем и запускаем BH1750 lightMeter.begin(); Serial.println(F(«BH1750 тест»)); } voidloop(){ /* Считываем показания с BH1750 floatlux=lightMeter.readLightLevel(); /* Отправляем значение освещенности в последовательный порт Serial.print(«Light: «); Serial.print(lux); Serial.println(» lx»); /* раз в секунду delay(1000); } |
Результат
Открыть монитор последовательного порта можно сочетанием клавиш Ctrl+Shift+M или через меню Инструменты. В мониторе последовательного порта побегут значения освещённости с нашего датчика BH1750.
Где используется
Когда мы узнали об устройстве и параметрах фоторезисторов, давайте поговорим о том, для чего он нужен на конкретных примерах. Хоть и применение фотосопротивлений ограничено их быстродействием, от этого область применения меньшей не стала.
- Сумеречные реле. Их еще называют фотореле – это устройства для автоматического включения света в темное время суток. На схеме ниже изображен простейший вариант такой схемы, на аналоговых компонентах и электромеханического реле. Её недостатком является отсутствие гистерезиса и возможное возникновение дребезжание при приграничных величинах освещенности, в результате чего реле будет дребезжать или включаться-отключаться при незначительных колебаниях освещенности.
- Датчики освещенности. С помощью фоторезисторов можно детектировать слабый световой поток. Ниже представлена реализация такого устройства на базе ARDUINO UNO.
- Сигнализации. В таких схемах используются преимущественно элементы, чувствительные к ультрафиолетовому излучению. Чувствительный элемент освещается излучателем, в случае появления препятствия между ними – срабатывает сигнализация или исполнительный механизм. Например, турникет в метро.
- Датчики наличия чего либо. Например, в полиграфической промышленности с помощью фоторезисторов можно контролировать обрыв бумажной ленты или количество листов, подаваемых в печатную машину. Принцип работы подобен тому, что рассмотрен выше. Таким же образом можно считать количество продукции, прошедшей по конвейерной ленте, или её размер (при известной скорости движения).
Напоследок рекомендуем просмотреть полезное видео по теме:
Наверняка вы не знаете:
- Как сделать фотореле своими руками
- Как подключить датчик движения для освещения
- Что такое резистор и для чего он нужен
Опубликовано:
17.12.2018
Обновлено: 17.12.2018
Характеристики фотоэлементов
Выбор фотореле определяют следующие факторы:
- чувствительность фотоэлемента;
- напряжение питания;
- коммутируемая мощность;
- внешняя среда.
Чувствительность характеризуется как отношение образующегося фототока к величине внешнего потока света и измеряется в мкА/лм. Она зависит от частоты (спектральная) и интенсивности света (интегральная). Для управления освещением в быту важна последняя характеристика, зависящая от суммарного светового потока.
Величину номинального напряжения можно найти на корпусе прибора или в сопроводительном документе. Устройства зарубежного производства могут иметь другие стандарты напряжения питания.
От мощности светильников, к которым подключено фотореле, зависит нагрузка на его контакты. Схемы фотореле освещения могут предусматривать прямое включение ламп через контакты датчика или через пускатели, когда нагрузка велика.
На открытом воздухе сумеречный выключатель помещается под герметичной прозрачной крышкой. Она является защитой от влаги и осадков. При работе в холодный период применяется подогрев.
KY-008: лазерный модуль для Ардуино
Основной компонент модуля — это красный лазерный светодиод с медным цилиндрическим радиатором охлаждения. Также на плате передатчика размещены пассивные компоненты, обеспечивающие стабильный режим работы светодиода. Лазера луч виден в задымленном помещении. и создает небольшое световое пятно на поверхности объекта, расположенного на расстоянии до 14 метров от источника.
Принцип работы лазерного светодиода на схеме
При подключении светодиода к Arduino, во время прохождения электронов через p-n переход происходит спонтанное излучение фотонов света. В лазерном светодиоде происходит рекомбинация фотонов (вынужденное излучения фотонов с одинаковыми параметрами). Принцип работы лазера основан на том, что излучаемые фотоны света вызывают повторное излучение, которое увеличивается лавинообразно.
Интенсивность излучения передатчика ky-008 зависит от силы тока. При малых токах модуль работает, как обычный светодиод, так как происходит только спонтанное излучение фотонов. Когда сила тока превышает пороговое значение – мощность излучения резко вырастает. Лазерный диод испускает свет перпендикулярно поверхности кристалла и фокусируется с помощью оптики (см. фото выше).
Способы подключения фотореле
Перед приобретением датчика необходимо подсчитать потребляемую светильниками мощность и взять с запасом 20 %. При значительной нагрузке схема уличного фотореле предусматривает дополнительную установку электромагнитного пускателя, обмотка которого должна включаться через контакты фотореле, а силовыми контактами коммутировать нагрузку.
Для дома такой способ применяется редко.
Перед установкой проверяется напряжение сети питания ~220 В. Подключение производится от автоматического выключателя. Фотодатчик устанавливается таким образом, чтобы свет от фонаря не попадал на него.
На приборе применяются клеммы для подключения проводов, что делает монтаж проще. Если они отсутствуют, применяется распределительная коробка.
За счет применения микропроцессоров схема подключения фотореле с другими элементами приобрела новые функции. В алгоритм действий внесли таймер и датчик движения.
Удобно, когда светильники автоматически включаются при прохождении человека по лестничной площадке или по дорожке сада. Причем срабатывание происходит только в темное время суток. За счет применения таймера фотореле не реагирует на свет фар от проезжающих автомобилей.
Простейшая схема подключения таймера с датчиком движения — последовательная. Для дорогих моделей разработаны специальные программируемые схемы, учитывающие различные условия эксплуатации.
Характеристики датчика
Заранее знать об основных параметрах этого элемента необходимо, чтобы в процессе установки и эксплуатации не были нарушены основные технические требования по безопасному использованию устройств этого типа. Плата датчика может быть изготовлена по аналоговой или цифровой схеме. Во втором случае устройство оснащается подстроечным резистором, с помощью которого можно изменять характеристики выходного сигнала вручную.
Вне зависимости от типа устройства, плата оснащается 3 контактами. По двум соединительным элементам осуществляется подача питающего электричества (+5 и GND), третий контакт служит для передачи цифрового сигнала (обозначается на плате S или D0).
Датчик освещенности аппаратной платформы Ардуино представляет собой довольно простую схему. Основным элементом такого устройства является фоторезистор, которые изменяет сопротивление электрической цепи в зависимости от освещенности.
Как сделать управление освещением на Ардуино
Для этого проекта нам потребуется:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- IR приемник Ардуино;
- пульт ДУ;
- источник питания DC 12В;
- светодиодная лента;
- транзисторы и резисторы;
- PIR датчики движения;
- паяльник, термопистолет, провода и изолента.
Схема. Освещение в комнате на Arduino Nano
Для включения LED ленты используются транзисторы 2N2222, заказанные за 60 рублей за штуку на Алиэкспресс. Характеристика 2N2222 транзисторов: макcимальное напряжение коллектор-база — 60 Вольт, макcимальное напряжение коллектор-эмиттер — 30 Вольт, макcимальное напряжение эмиттер-база — 5 В, макcимальный постоянный ток коллектора — 0.8 Ампер, максимальная рассеиваемая мощность — 0,5 Ватт.
В схеме два светильника, подключены через транзистор к Pin7 и Pin8, установлены в коридоре на 1 и 2 этаже, включаются автоматически только в темноте и при срабатывании датчиков движения. Светильник, подключенный к Pin6, установлен в ванной и включается автоматически от Pir датчика движения при любом освещении. Три светильника на Pin10, Pin11 и Pin12 управляются от пульта через ИК приемник.
Скетч. Управление освещением на Ардуино
Скачать скетч для управления освещением целиком можно скачать здесь. Также в программе есть цикл для работы в режиме «имитация присутствия», включаемый с пульта ДУ. Светильники в разных комнатах включаются в разное время, имитируя присутствие хозяев в квартире или в доме. Это пригодится тем, кто хочет дополнительно защитить свое жилье от нежданных гостей в свое отсутствие.
#include // подключаем библиотеку для IR приемника IRrecv irrecv(A5); // указываем пин, к которому подключен IR приемник decode_results results; // вводим переменные для циклов while byte n = 5; byte m = 5; // вводим переменные для счетчиков unsigned long counttime0; unsigned long counttime1; unsigned long counttime2; unsigned long counttime3; // назначаем имена для портов #define PIR_V 2 // ванная комната #define PIR_K1 3 // прихожая в доме #define PIR_K2 4 // коридор на 2 этаже #define LED_V 6 // ванная комната #define LED_K1 7 // прихожая в доме #define LED_K2 8 // коридор на 2 этаже #define LED_Z 10 // светильник в комнате #define LED_Z1 11 // светильник в комнате #define LED_Z2 12 // светильник в комнате #define FOTO A0 // датчик освещенности #define IR A5 // IR - приемник void setup() { // запускаем прием инфракрасного сигнала irrecv.enableIRIn(); // запускаем серийный монитор порта Serial.begin(9600); // назначаем режим работы портов pinMode(PIR_V, INPUT); pinMode(PIR_K1, INPUT); pinMode(PIR_K2, INPUT); pinMode(LED_V, OUTPUT); pinMode(LED_K1, OUTPUT); pinMode(LED_K2, OUTPUT); pinMode(LED_Z, OUTPUT); pinMode(LED_Z1, OUTPUT); pinMode(LED_Z2, OUTPUT); pinMode(FOTO, INPUT); pinMode(IR, INPUT); // выключаем светильники digitalWrite(LED_Z, LOW); digitalWrite(LED_V, LOW); digitalWrite(LED_K1, LOW); digitalWrite(LED_K2, LOW); digitalWrite(LED_Z1, LOW); digitalWrite(LED_Z2, LOW); }
При длительном включении 2-х метровой LED ленты, транзисторы греются, поэтому используйте радиаторы для их охлаждения или используйте для управления освещением полевой MOSFET транзистор IRF530. У транзистора максимальное напряжение коллектор-база — 100 В, макcимальный ток коллектора 3 Ампера (при напряжении на затворе 5 В), максимальная рассеиваемая мощность — 88 Ватт.
Применение фоторезисторов
Фоторезисторы используются в уличных фонарях для контроля, когда свет должен включаться и когда свет должен выключаться. Когда окружающий свет падает на фоторезистор, он выключает уличный свет. Когда света нет, фоторезистор вызывает включение уличного освещения. Это уменьшает потери электроэнергии.
Они также используются в различных устройствах, таких как сигнальные устройства, солнечные уличные фонари, ночники и радиочасы.
Пример схемы датчика освещенности
Световой датчик
Если требуется базовый датчик освещенности, можно использовать схему LDR, такую как схема на рисунке. Светодиод загорается, когда интенсивность света, достигающего резистора LDR, достаточна. Переменный резистор 10K используется для установки порога, при котором светодиод включится. Если индикатор LDR ниже пороговой интенсивности, светодиод останется в выключенном состоянии. В реальных приложениях светодиод будет заменен реле или выход может быть подключен к микроконтроллеру или другому устройству. Если требуется датчик темноты, где светодиод будет светиться при отсутствии света, необходимо заменить LDR и два резистора 10К.
Аудио компрессоры
Аудио компрессоры — это устройства, которые уменьшают усиление аудио усилителя, когда амплитуда сигнала превышает установленное значение. Это сделано для усиления тихих звуков при одновременном предотвращении обрыва громких звуков. Некоторые компрессоры используют LDR и небольшую лампу (светодиод или электролюминесцентную панель), подключенную к источнику сигнала для создания изменений в усилении сигнала. Считается, что этот метод добавляет более плавные характеристики к сигналу, потому что время отклика света и резистора смягчает атаку и освобождение. Задержка времени отклика в этих приложениях составляет порядка 0,1 с.
Фоторезистор ардуино и датчик освещенности
Фоторезистор, как следует из названия, имеет прямое отношение к резисторам, которые часто встречаются практически в любых электронных схемах. Основной характеристикой обычного резистора является величина его сопротивления. От него зависят напряжение и ток, с помощью резистора мы выставляем нужные режимы работы других компонентов. Как правило, значение сопротивления у резистора в одних и тех же условиях эксплуатации практически не меняется.
В отличие от обычного резистора, фоторезистор может менять свое сопротивление в зависимости от уровня окружающего освещения. Это означает, что в электронной схеме будут постоянно меняться параметры, в первую очередь нас интересует напряжение, падающее на фоторезисторе. Фиксируя эти изменения напряжения на аналоговых пинах ардуино, мы можем менять логику работы схемы, создавая тем самым адаптирующиеся под вешние условия устройства.
Фоторезисторы достаточно активно применяются в самых разнообразных системах. Самый распространенный вариант применения — фонари уличного освещения. Если на город опускается ночь или стало пасмурно, то огни включаются автоматически. Можно сделать из фоторезистора экономную лампочку для дома, включающуюся не по расписанию, а в зависимости от освещения. На базе датчика освещенности можно сделать даже охранную систему, которая будет срабатывать сразу после того, как закрытый шкаф или сейф открыли и осветили. Как всегда, сфера применения любых датчиков ардуино ограничена лишь нашей фантазией.
Самый популярный и доступный вариант датчика на рынке – это модели массового выпуска китайских компаний, клоны изделий производителя VT. Там не всегда можно разораться, кто и что именно производит тот или иной поставщик, но для начала работы с фоторезисторами вполне подойдет самый простой вариант.
Начинающему ардуинщику можно посоветовать купить готовый фотомодуль, который выглядит вот так:
На этом модуле уже есть все необходимые элементы для простого подключения фоторезистора к плате ардуино. В некоторых модулях реализована схема с компаратором и доступен цифровой выход и подстроечный резистор для управления.
Российскому радиолюбителю можно посоветовать обратить на российский датчик ФР. Встречающиеся в продаже ФР1-3, ФР1-4 и т.п. — выпускались ещё в союзовские времена. Но, несмотря на это, ФР1-3 – более точная деталь. Из этого следует и разница в цене За ФР просят не более 400 рублей. ФР1-3 будет стоить больше тысячи рублей за штуку.
Маркировка фоторезистора
Современная маркировка моделей, выпускаемых в России, довольно простая. Первые две буквы — ФотоРезистор, цифры после чёрточки обозначают номер разработки. ФР -765 — фоторезистор, разработка 765. Обычно маркируется прямо на корпусе детали
У датчика VT в схеме маркировке указаны диапазон сопротивлений. Например:
- VT83N1 — 12-100кОм (12K – освещенный, 100K – в темноте)
- VT93N2 — 48-500кОм (48K – освещенный, 100K – в темноте).
Иногда для уточнения информации о моделях продавец предоставляет специальный документ от производителя. Кроме параметров работы там же указывается точность детали. У всех моделей диапазон чувствительности расположен в видимой части спектра. Собирая датчик света нужно понимать, что точность срабатывания — понятие условное. Даже у моделей одного производителя, одной партии, одной закупки отличаться она может на 50% и более.
На заводе детали настраиваются на длину волны от красного до зелёного света. Большинство при этом «видит» и инфракрасное излучение. Особо точные детали могут улавливать даже ультрафиолет.
Достоинства и недостатки датчика
Основным недостатком фоторезисторов является чувствительность к спектру. В зависимости от типа падающего света сопротивление может меняется на несколько порядков. К минусам также относится низкая скорость реакции на изменение освещённости. Если свет мигает — датчик не успевает отреагировать. Если же частота изменения довольно велика — резистор вообще перестанет «видеть», что освещённость меняется.
К плюсам можно отнести простоту и доступность. Прямое изменение сопротивления в зависимости от попадающего на неё света позволяет упростить электрическую схему подключения. Сам фоторезистор очень дешев, входит в состав многочисленных наборов и конструкторов ардуино, поэтому доступен практически любому начинающему ардуинщику.
Как подключить фоторезистор к Ардуино
На этом занятии мы соберем электрическую схему «умного» светильника. Если на предыдущем занятии мы с помощью потенциометра включали и изменяли яркость светодиода, то сегодня мы будем использовать фоторезистор в схеме для автоматического включения светодиода. Фоторезистор будет играть роль переменного сопротивления, которое изменяет напряжение на аналоговом входе A0.
Для занятия нам понадобятся следующие детали:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- макетная плата;
- 1 фоторезистор;
- 1 светодиод;
- 2 резистора 220 Ом;
- провода «папа-папа».
Схема сборки светильника с фоторезистором на Ардуино
Соберите электрическую цепь, как на картинке выше. Принцип работы схемы в том, что в электрической цепи будет меняться сопротивление, в зависимости от освещенности в помещении, а значит будут меняться данные на аналоговом входе. После сборки принципиальной схемы с фоторезистором, подключите Arduino к компьютеру и загрузите следующую программу с датчиком освещенности в микроконтроллер.
Скетч. Светильник с автоматическим включением
// Присваиваем имя для аналогового входа A0 с фоторезистором #define SENSOR A0 // Присваиваем имя для порта 9 со светодиодом #define LED 9 // Присваиваем имя для цифрового значения аналогового входа A0 // unsigned int округляет значения и принимает только положительные числа unsigned int value = 0; void setup() { // Пин 9 со светодиодом будет выходом (англ. «output») pinMode(LED, OUTPUT); // Пин A0 с фоторезистором будет входом (англ. «input») pinMode(SENSOR, INPUT); } void loop() { // Считываем значение с фоторезистора на аналоговом входе A0 value = analogRead(SENSOR); // Если значение value на входе A0 меньше 500, включаем светодиод if (value<500) digitalWrite(LED, HIGH); // В противном случае (если value>500), выключаем светодиод if (value>500) digitalWrite(LED, LOW); }
- для удобства, в первой строчке программы мы присвоили имя для аналогового входа A0 с помощью функции ;
- оператор указывает, что значение может принимать только положительное целое число, а начальное значение равно нулю;
- условный оператор позволяет определить действие при истинном условии. Оператор позволяет определить действие, когда истинное условие ложно.
Скетч. Умный светильник на Ардуино
// Присваиваем имя для аналогового входа A0 с фоторезистором #define SENSOR A0 // Присваиваем имя для порта 9 со светодиодом #define LED 9 // Присваиваем имя для цифрового значения аналогового входа A0 // unsigned int округляет значения и принимает только положительные числа unsigned int value = 0; // Назначаем переменную data, которую будем использовать в скетче int data; void setup() { // Пин 9 со светодиодом будет выходом (англ. «output») pinMode(LED, OUTPUT); // Пин A0 с фоторезистором будет входом (англ. «input») pinMode(SENSOR, INPUT); } void loop() { // Считываем значение с фоторезистора на аналоговом входе A0 value = analogRead(SENSOR); // Полученные значения на аналоговом входе A0 делим на 4 data = value / 4; // Включаем светодиод с полученной ранее мощностью - от 0 до 255 analogWrite(LED, data); }
Использование фоторезисторов
Метод считывания аналогового напряжения
Самый простой вариант использования: подключить одну ногу к источнику питания, вторую — к земле через понижающий резистор. После этого точка между резистором с постоянным номиналом и переменным резистором — фоторезистором — подключается к аналоговому входу микроконтроллера. На рисунке ниже показана схема подключения к Arduino .
В этом примере подключается источник питания 5 В, но не забывайте, что вы с таким же успехом можете использовать питание 3.3 В. В этом случае аналоговые значения напряжения будут в диапазоне от 0 до 5 В, то есть приблизительно равны напряжению питания.
Это работает следующим образом: при понижении сопротивления фоторезистора суммарное сопротивление фоторезистора и понижающего резистора уменьшается от 600 кОм до 10 кОм. Это значит, что ток, проходящий через оба резистора, увеличивается, что приводит к повышению напряжения на резистора с постоянным сопротивлением 10 кОм. Вот и все!
В этой таблице приведены приблизительные значения аналогового напряжения на основании уровня освещенности/сопротивления при подключении напряжения питания 5 В и 10 кОм понижающего резистора.
Если вы хотите использовать сенсор на ярко освещенной территории и использовать резистор 10 кОм, он быстро «сдуется». То есть он практически моментально достигнет допустимого уровня напряжения 5 В и не сможет различать более интенсивное освещение. В этом случае вам стоит заменить резистор на 10 кОм на резистор 1кОм. При такой схеме резистор не сможет определять уровень темноты, но лучше определи оттенки высокого уровня освещенности. В общем, вам стоит с этим поиграться в зависимости от ваших условий!
Кроме того, вы также сможете использовать формулу «Axel Benz» для базовых измерений минимального и максимального значения сопротивления с помощью мультиметра и дальнейшего нахождения значения сопротивления резистора с помощью: Понижающий резистор = квадратный корень(Rmin * Rmax), что в результате даст вам гораздо лучший результат в виде:
В таблице выше приведены приблизительные значения аналогового напряжения при использовании сенсора с питанием от 5 В и понижающим резистором 1 кОм.
Не забывайте, что наш метод не дает нам линейную зависимость напряжения от освещенности! Кроме того, каждый датчик отличается по своим характеристикам. С увеличением уровня освещенности аналоговое напряжение будет расти, а сопротивление падать:
Vo = Vcc (R / (R + Photocell))
То есть напряжение обратно пропорционально сопротивлению фоторезистора, которое, в свою очередь, обратно пропорционально уровню освещения.
Как подключить потенциометр к Ардуино
Для занятия нам понадобятся следующие детали:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- потенциометр (переменный резистор);
- беспаечная макетная плата;
- один светодиод и резистор;
- сервопривод;
- провода «папа-папа», «папа-мама».
Скетч. Подключение потенциометра к аналоговому входу
Крайние ножки переменного резистора подключаются к портам питания (5V и GND). Средний контакт имеет подвижный контакт, на котором меняется напряжение вследствие изменения сопротивления при вращении ручки. Полярность подключения «+» и «-» роли не играет, при этом будет происходить только инверсия сигнала потенциометра. Соберите следующую схему и загрузите приведенный код в плату.
Схема подключения потенциометра к Arduino Uno
void setup() { Serial.begin(9600); // запускаем монитор порта pinMode(A1, INPUT); // к входу A1 подключаем потенциометр } void loop() { int val = analogRead(A1); // считываем данные с порта A1 Serial.println(val); // выводим данные на монитор порта delay(500); // ставим задержку для удобства }
- при необходимости подключения нескольких потенциометров к Arduino Nano, следует их подключать к другим аналоговым входам;.
Скетч. Подключение потенциометра и светодиода
Для регулировки яркости светодиода с помощью переменного резистора, следует считывать данные с данного радиоэлемента, подключив его к аналоговому входу. В зависимости от поворота ручки потенциометра необходимо в линейной зависимости менять яркость светодиода. Это сделать довольно просто на микроконтроллере, схема подключения переменного резистора с примером кода, размещена далее.
Схема подключения потенциометра и светодиода к Ардуино
void setup() { pinMode(10, OUTPUT); // подключаем светодиод к пин 10 pinMode(A1, INPUT); // к входу A1 подключаем потенциометр } void loop() { int val = analogRead(A1); // считываем данные с порта A1 val = val / 4; // делим значения на 4 analogWrite(10, val); // меняем яркость светодиода }
- светодиод подключается к аналоговому выходу с ШИМ сигналом;
- данные с порта A1, которые находятся в диапазоне 0…1023, мы делим на 4 и получаем диапазон от 0 до 255 для изменения яркости светодиода.
Скетч. Подключение потенциометра и сервопривода
Сервомотор подключается к аналоговым выходам Arduino Nano. В скетче использована функция map, которая пропорционально переносит значение переменной из текущего диапазона значений в новый диапазон. Таким образом, значения с потенциометра в диапазоне 0…1023, мы переводим их в новый диапазон от 0 до 180 (угол поворота сервомотора). Соберите схему и загрузите следующий скетч.
Схема подключения потенциометра и сервомотора к Ардуино
#include <Servo.h> // подключаем библиотеку для сервопривода Servo servo; // объявляем переменную servo типа "servo" void setup() { servo.attach(10); // привязываем сервопривод к порту 10 pinMode(A1, INPUT); // к входу A1 подключаем потенциометр } void loop() { int val = analogRead(A1); // считываем данные с порта A1 val = map(val, 0, 1023, 0, 180); // переводим val в новый диапазон servo.write(val); // передаем значения для сервопривода }