В данной схеме мы используем резистор нового номинала, посмотрите таблицу маркировки, чтобы найти резистор на 10 кОм или воспользуйтесь мультиметром
Полярность фоторезистора, как и обычного резистора, не играет роли. Его можно устанавливать любой стороной
В данном упражнении мы собираем простой вариант схемы включения пьезодинамика
Полярность пьезопищалки роли не играет: вы можете подключать любую из ее ножек к земле, любую к порту микроконтроллера
На Arduino Uno использование функции tone мешает использованию ШИМ на 3-м и 11-м портах. Зато можно подключить ее к одному из них
Вспомните как устроен делитель напряжения: фоторезистор помещается в позицию R2 — между аналоговым входом и землей. Так мы получаем резистивный фотосенсор.
Скетч
// даём имена для пинов с пьезопищалкой (англ. buzzer) и фото-
// резистором (англ. Light Dependent Resistor или просто LDR)
#define BUZZER_PIN 3
#define LDR_PIN A0
void setup()
{
// пин с пьезопищалкой — выход...
pinMode(BUZZER_PIN, OUTPUT);
// ...а все остальные пины являются входами изначально,
// всякий раз при подаче питания или сбросе микроконтроллера.
// Поэтому, на самом деле, нам совершенно необязательно
// настраивать LDR_PIN в режим входа: он и так им является
}
void loop()
{
int val, frequency;
// считываем уровень освещённости так же, как для
// потенциометра: в виде значения от 0 до 1023.
val = analogRead(LDR_PIN);
// рассчитываем частоту звучания пищалки в герцах (ноту),
// используя функцию проекции (англ. map). Она отображает
// значение из одного диапазона на другой, строя пропорцию.
// В нашем случае [0; 1023] -> [3500; 4500]. Так мы получим
// частоту от 3,5 до 4,5 кГц.
frequency = map(val, 0, 1023, 3500, 4500);
// заставляем пин с пищалкой «вибрировать», т.е. звучать
// (англ. tone) на заданной частоте 20 миллисекунд. При
// cледующих проходах loop, tone будет вызван снова и снова,
// и на деле мы услышим непрерывный звук тональностью, которая
// зависит от количества света, попадающего на фоторезистор
tone(BUZZER_PIN, frequency, 20);
}
Пояснения к коду
Функция map(value, fromLow, fromHigh, toLow, toHigh) возвращает целочисленное значение из интервала [toLow, toHigh], которое является пропорциональным отображением содержимого valueиз интервала [fromLow, fromHigh]
Верхние границы map не обязательно должны быть больше нижних и могут быть отрицательными. К примеру, значение из интервала [1, 10] можно отобразить в интервал [10,-5]
Если при вычислении значения map образуется дробное значение, оно будет отброшено, а не округлено
Функция mapне будет отбрасывать значения за пределами указанных диапазонов, а также масштабирует их по заданному правилу.
Если вам нужно ограничить множество допустимых значений, используйте функцию constrain(value, from, to), которая вернет:
value, если это значение попадает в диапазон [from, to]
from, если value меньше него
to, если value больше него
Функция tone(pin, frequency, duration) заставляет пьезопищалку, подключенную к порту pin, издавать звук высотой frequency герц на протяжении duration миллисекунд
Параметр duration не является обязательным. Если его не передать, звук включится навсегда. Чтобы его выключить, вам понадобится функция noTone(pin). Ей нужно передать номер порта с пищалкой, которую нужно выключить
Одновременно можно управлять только одной пищалкой. Если во время звучания вызвать tone для другого порта, ничего не произойдет.
Вызов tone для уже звучащего порта обновит частоту и длительность звучания
Вопросы для проверки себя
Каким сопротивлением должен обладать фоторезистор, чтобы на аналоговый вход было подано напряжение 1 В?
Можем ли мы регулировать яркость светодиода, подключенного к 11-му порту, во время звучания пьезопищалки?
Что изменится в работе терменвокса, если заменить резистор на 10 кОм резистором на 100 кОм? Попробуйте ответить без эксперимента. Затем отключите питание, замените резистор и проверьте.
Каков будет результат вызова map(30,0,90,90,-90)?
Как будет работать вызов tone без указания длительности звучания?
Можно ли устроить полифоническое звучание с помощью функции tone?
Задания для самостоятельного решения
Уберите из программы чтение датчика освещенности и пропищите азбукой Морзе позывной SOS: три точки, три тире, три точки
Измените код программы так, чтобы с падением освещенности звук становился ниже (например, падал от 5 кГц до 2,5 кГц)
Измените код программы так, чтобы звук терменвокса раздавался не непрерывно, а 10 раз в секунду с различимыми паузами
Эксперимент 5. Ночной светильник
В этом эксперименте светодиод должен включаться при падении уровня освещенности ниже порога, заданного потенциометром.
Список деталей для эксперимента
1 плата Arduino Uno
1 беспаечная макетная плата
1 светодиод
1 фоторезистор
1 резистор номиналом 220 Ом
1 резистор номиналом 10 кОм
1 переменный резистор (потенциометр)
10 проводов «папа-папа»
еще 1 светодиод
еще 1 резистор номиналом 220 Ом
еще 2 провода
Принципиальная схема
Достарыңызбен бөлісу: |