Эксперимент Терменвокс



бет3/6
Дата20.11.2019
өлшемі350 Kb.
#447523
1   2   3   4   5   6
Эксперимент 4-6

Обратите внимание


  • В данной схеме мы используем резистор нового номинала, посмотрите таблицу маркировки, чтобы найти резистор на 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) возвращает целочисленное значение из интервала [toLowtoHigh], которое является пропорциональным отображением содержимого valueиз интервала [fromLowfromHigh]

  • Верхние границы map не обязательно должны быть больше нижних и могут быть отрицательными. К примеру, значение из интервала [1, 10] можно отобразить в интервал [10,-5]

  • Если при вычислении значения map образуется дробное значение, оно будет отброшено, а не округлено

  • Функция mapне будет отбрасывать значения за пределами указанных диапазонов, а также масштабирует их по заданному правилу.

  • Если вам нужно ограничить множество допустимых значений, используйте функцию constrain(value, from, to), которая вернет:

    • value, если это значение попадает в диапазон [fromto]

    • from, если value меньше него

    • to, если value больше него

  • Функция tone(pin, frequency, duration) заставляет пьезопищалку, подключенную к порту pin, издавать звук высотой frequency герц на протяжении duration миллисекунд

  • Параметр duration не является обязательным. Если его не передать, звук включится навсегда. Чтобы его выключить, вам понадобится функция noTone(pin). Ей нужно передать номер порта с пищалкой, которую нужно выключить

  • Одновременно можно управлять только одной пищалкой. Если во время звучания вызвать tone для другого порта, ничего не произойдет.

  • Вызов tone для уже звучащего порта обновит частоту и длительность звучания

Вопросы для проверки себя


  1. Каким сопротивлением должен обладать фоторезистор, чтобы на аналоговый вход было подано напряжение 1 В?

  2. Можем ли мы регулировать яркость светодиода, подключенного к 11-му порту, во время звучания пьезопищалки?

  3. Что изменится в работе терменвокса, если заменить резистор на 10 кОм резистором на 100 кОм? Попробуйте ответить без эксперимента. Затем отключите питание, замените резистор и проверьте.

  4. Каков будет результат вызова map(30,0,90,90,-90)?

  5. Как будет работать вызов tone без указания длительности звучания?

  6. Можно ли устроить полифоническое звучание с помощью функции tone?

Задания для самостоятельного решения


  1. Уберите из программы чтение датчика освещенности и пропищите азбукой Морзе позывной SOS: три точки, три тире, три точки

  2. Измените код программы так, чтобы с падением освещенности звук становился ниже (например, падал от 5 кГц до 2,5 кГц)

  3. Измените код программы так, чтобы звук терменвокса раздавался не непрерывно, а 10 раз в секунду с различимыми паузами

Эксперимент 5. Ночной светильник


В этом эксперименте светодиод должен включаться при падении уровня освещенности ниже порога, заданного потенциометром.

Список деталей для эксперимента


  • 1 плата Arduino Uno

  • 1 беспаечная макетная плата

  • 1 светодиод

  • 1 фоторезистор

  • 1 резистор номиналом 220 Ом

  • 1 резистор номиналом 10 кОм

  • 1 переменный резистор (потенциометр)

  • 10 проводов «папа-папа»

Для дополнительного задания


  • еще 1 светодиод

  • еще 1 резистор номиналом 220 Ом

  • еще 2 провода

Принципиальная схема





Достарыңызбен бөлісу:
1   2   3   4   5   6




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет