В этом эксперименте мы имитируем действие музыкального инструмента терменвокс: изменяем высоту звучания бесконтактным путем, больше или меньше закрывая от света фоторезистор.
Оригинальный инструмент был изобретён ещё в 1920 году, Львом Сергеевичем Терменом, человеком с непростой и насыщенной судьбой. А сейчас мы имеем возможность воспроизвести изобретение с помощью нехитрой электроники.
Список деталей для эксперимента
-
1 плата Arduino Uno
-
1 беспаечная макетная плата
-
1 пьезопищалка
-
6 проводов «папа-папа»
-
1 резистор номиналом 10 кОм
-
1 фоторезистор
Схема на макетке
Обратите внимание
-
В данной схеме мы используем резистор нового номинала, посмотрите таблицу маркировки, чтобы найти резистор на 10 кОм или воспользуйтесь мультиметром
-
Полярность фоторезистора, как и обычного резистора, не играет роли. Его можно устанавливать любой стороной
-
В данном упражнении мы собираем простой вариант схемы включения пьезодинамика
-
Полярность пьезопищалки роли не играет: вы можете подключать любую из ее ножек к земле, любую к порту микроконтроллера
-
На Arduino Uno использование функции
tone
мешает использованию ШИМ на 3-м и 11-м портах. Зато можно подключить ее к одному из них -
Вспомните как устроен делитель напряжения: фоторезистор помещается в позицию R2 — между аналоговым входом и землей. Так мы получаем резистивный фотосенсор.
Скетч
|
Пояснения к коду
-
Функция
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
для уже звучащего порта обновит частоту и длительность звучания