Пример 6. Фоторезистор
Примеры
ПРИМЕРЫ
- Пример 1. Светодиоды
- Пример 2. Подключение кнопки
- Пример 3. Переключатель
- Пример 4. Активный зуммер
- Пример 5. Пассивный зуммер
- Пример 6. Фоторезистор
- Пример 7. RGB-светодиод
- Пример 8. Семисегментный индикатор и 74HC595N
- Пример 9. Четырехразрядный 7-сегментный индикатор
- Пример 10. Светодиодная матрица
- Пример 11. Светодиодная шкала
- Пример 12. ЖК-дисплей
- Пример 13. Джойстик
- Пример 14. Вольтметр
- Пример 15. Термистор
- Пример 16. Модуль DHT11
- Пример 17. Модуль HC-SR04
- Пример 18. Датчик движения HC-SR501
- Пример 19. Матричная клавиатура
- Пример 20. ИК датчик и пульт
- Пример 21. Модуль часов DS-1302
- Пример 22. RFID-модуль RC522
- Пример 23. Сервопривод
- Пример 24. Модуль реле
- Пример 25. Двигатель постоянного тока
- Пример 26. Шаговый двигатель и драйвер ULN2003
- Пример 27. Драйвер двигателей на L298N
- Пример 28. MP3-плеер DFPlayer Mini
- Пример 29. Датчик уровня воды
- Пример 30. Serial Port
- Пример 31. Симуляция парковки
- Пример 32. Датчик температуры DS18B20
- Пример 33. Bluetooth-модуль HC-06
- Пример 34. Плата расширения с дисплеем и кнопками
- Пример 35. Плата расширения для двигателей на L293D
- Пример 36. Ethernet шилд W5100
- Пример 37. GSM/GPRS шилд SIM900
- Пример 38. GPS модуль Ublox NEO-6M
- Пример 39. Модуль считывания отпечатков пальцев
- Пример 40. Шаговый двигатель NEMA17 и драйвер TB6600
Более подробную информацию о резисторах и фоторезисторе, в частности, можете найти в соответствующей заметке.
Описание:
Если интенсивность падающего света является высокой, сопротивление фоторезистора уменьшается; если низкой – увеличивается. В этом примере будем использовать восемь светодиодов для индикации интенсивности света. Чем выше интенсивность света, тем больше светодиодов горят. Когда интенсивность света достаточно высока, все светодиоды будут гореть. Когда нет света – все светодиоды гаснут.
Компоненты:
- 1 × Плата Arduino
- 1 × USB-кабель
- 1 × Беспаечная макетная плата
- 8 × Светодиод
- 8 × Резистор (220 Ω)
- 1 × Фоторезистор
- 1 × Резистор (10 kΩ)
- Соединительные провода
Схема:
Скетч:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
const int NbrLEDs = 8; //количество светодиодов const int ledPins[] = { 2, 3, 4, 5, 6, 7, 8, 9}; //массив цифровых пинов const int photocellPin = A0; //пин фоторезистора int sensorValue = 0; //данные от фоторезистора int ledLevel = 0; //данные конвертируются в количесвто вкл. светодиодов void setup() { //открытие порта Serial.begin(9600); //ставим режим работы как выход на всех светодиодах for (int led = 0; led < NbrLEDs; led++) { pinMode(ledPins[led], OUTPUT); } } void loop() { //читаем значение фоторезистора sensorValue = analogRead(photocellPin); //в мониторе порта можем его увидеть Serial.println(sensorValue); //конвертируем мин. и макс. значения в кол-во светодиодов ledLevel = map(sensorValue, 300, 1023, 0, NbrLEDs); //проходим по циклу для вкл/выкл светодиодов for (int led = 0; led < NbrLEDs; led++) { if (led < ledLevel ) { digitalWrite(ledPins[led], HIGH); } else { digitalWrite(ledPins[led],LOW); } } } |
Заметка:
map(value, fromLow, fromHigh, toLow, toHigh)
- value: значение для переноса
- fromLow: нижняя граница текущего диапазона
- fromHigh: верхняя граница текущего диапазона
- toLow: нижняя граница нового диапазона, в который переноситься значение
- toHigh: верхняя граница нового диапазона
Функция пропорционально переносит значение (value) из текущего диапазона значений (fromLow … fromHigh) в новый диапазон (toLow … toHigh), заданный параметрами.
Обратите внимание, что “нижняя граница” может быть как меньше, так и больше “верхней границы”. Это может быть использовано для того чтобы “перевернуть” диапазон:
y = map(x, 1, 50, 50, 1);
Возможно использование отрицательных значений:
y = map(x, 1, 50, 50, -100);
Функция map() оперирует целыми числами. При пропорциональном переносе дробная часть не округляется, а просто отбрасывается.