Главная страница

Работа с пьезоэлементом. 2. Работа с пьезоэлементом. Методические указания к лабораторной работе 2 Работа с пьезодинамиком По дисциплине Информационные технологии


Скачать 1.28 Mb.
НазваниеМетодические указания к лабораторной работе 2 Работа с пьезодинамиком По дисциплине Информационные технологии
АнкорРабота с пьезоэлементом
Дата21.04.2021
Размер1.28 Mb.
Формат файлаpdf
Имя файла2. Работа с пьезоэлементом.pdf
ТипМетодические указания
#197031

1
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
ВЯТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Институт математики и информационных систем
Факультет автоматики и вычислительной техники
Кафедра автоматики и телемеханики
Методические указания к лабораторной работе №2
«Работа с пьезодинамиком»
По дисциплине «Информационные технологии»

2
Цели лабораторной работы:
Изучение основ работы пьезодинамиков и микросхем (сборка схем, подключение, программирование микроконтроллера для корректной работы схем), закрепление знаний о среде Arduino.
МИКРОКОНТРОЛЛЕР
Микроконтроллер — это небольшая микросхема, в которой уже есть процессор, оперативная память и флеш-память. Они бывают разной формы, немного различаются возможностями и производительностью, но суть остаётся неизменной.
Он менее мощный, способен выполнять лишь одну задачу, но зато компактный и дешёвый.
Микроконтроллер часто является мозговым центром платы, отвечающей за определённую задачу: на него приходят все сигналы, поступающие на плату, а он в свою очередь раздаёт команды всем устройствам, подключённым к ней.
Микроконтроллеры используются повсеместно: от бытовых кухонных устройств до элементов управления космическим кораблём, от домофонов до систем безопасности в автомобиле, от радиоуправляемых игрушек до роботов на конвейере завода.
Использование в современном микроконтроллере достаточного мощного вычислительного устройства с широкими возможностями, построенного на одной микросхеме вместо целого набора, значительно снижает размеры, энергопотребление и стоимость построенных на его базе устройств.

3
Arduino uno
Это последняя модель Arduino Rev3 (рисунок 1), оригинальная, произведённая в Италии. Она выполнена на базе процессора ATmega328p с тактовой частотой 16 МГц, обладает памятью 32 кБ и имеет 20 контролируемых контактов ввода и вывода для взаимодействия с внешним миром.
Рисунок 1 - Микроконтроллер Arduino Rev3
Питание
Arduino Uno может питаться как от USB подключения, так и от внешнего источника: батарейки или обычной электрической сети. Источник определяется автоматически.
Платформа может работать при наличии напряжения от 6 до 20 В.
Однако при напряжении менее 7 В работа может быть неустойчивой, а напряжение более 12 В может привести к перегреву и повреждению. Поэтому рекомендуемый диапазон: 7−12 В.
На Arduino доступны следующие контакты для доступа к питанию: o
Vin предоставляет тот же вольтаж, что используется для питания платформы. При подключении через USB будет равен 5 В.
o
5V предоставляет 5 В вне зависимости от входного напряжения.
На этом напряжении работает процессор. Максимальный допустимый ток, получаемый с этого контакта — 800 мА.
o
3.3V предоставляет 3,3 В. Максимальный допустимый ток, получаемый с этого контакта — 50 мА.

4 o
GND — земля.
Память
Платформа оснащена 32 кБ flash-памяти, 2 кБ из которых отведено под так называемый bootloader. Он позволяет прошивать Arduino с обычного компьютера через USB. Эта память постоянна и не предназначена для изменения по ходу работы устройства. Её предназначение — хранение программы и сопутствующих статичных ресурсов.
Также имеется 2 кБ SRAM-памяти, которые используются для хранения временных данных вроде переменных программы. По сути, это оперативная память платформы. SRAM-память очищается при обесточивании.
Ещё имеется 1 кБ EEPROM-памяти для долговременного хранения данных. По своему назначению это аналог жёсткого диска для Arduino.
Ввод / вывод
На платформе расположены 14 контактов (pins), которые могут быть использованы для цифрового ввода и вывода. Какую роль исполняет каждый контакт, зависит от вашей программы. Все они работают с напряжением 5 В, и рассчитаны на ток до 40 мА. Также каждый контакт имеет встроенный, но отключённый по умолчанию резистор на 20 - 50 кОм. Некоторые контакты обладают дополнительными ролями:
Serial: 0-й и 1-й. Используются для приёма и передачи данных по
USB.
Внешнее прерывание: 2-й и 3-й. Эти контакты могут быть настроены так, что они будут провоцировать вызов заданной функции при изменении входного сигнала.
PWM: 3-й, 5-й, 6-й, 9-й, 10-й и 11-й. Могут являться выходами с широтно-импульсной модуляцией (pulse-width modulation) с 256 градациями.
LED: 13-й. К этому контакту подключен встроенный в плату светодиод. Если на контакт выводится 5 В, светодиод зажигается; при нуле — светодиод гаснет.
Помимо контактов цифрового ввода/вывода на Arduino имеется 6 контактов аналогового ввода, каждый из которых предоставляет разрешение в
1024 градации. По умолчанию значение меряется между землёй и 5 В, однако

5 возможно изменить верхнюю границу, подав напряжение требуемой величины на специальный контакт AREF.
Кроме этого на плате имеется входной контакт Reset. Его установка в логический ноль приводит к сбросу процессора. Это аналог кнопки Reset обычного компьютера.
ПЬЕЗОДИНАМИК
Пьезоизлучатель звука (рисунок 2) (англ. buzzer) переводит переменное напряжение в колебание мембраны, которая в свою очередь создаёт звуковую волну.
Рисунок 2 - Пьезодинамик
Иначе говоря, пьезодинамик — это конденсатор, который звучит при зарядке и разрядке.
Основные характеристики
Таблица 1 - Основные характеристики
Амплитудно-частотная характеристика (АЧХ) определяет громкость звука в зависимости от частоты управляющего сигнала, который и определяет высоту звучащей ноты.

6
Рисунок 3 - Зависимость громкости звука от частоты
Идеальная АЧХ — это прямая, т.е. одинаковая громкость вне зависимости от частоты. Но мир не идеален и разные виды излучателей имеют разные отклонения от идеала.
Подключение напрямую
Пьезодинамик потребляет всего пару мА, поэтому можно смело подключать его прямо к микроконтроллеру (рисунок 4).
Рисунок 4 - прямое подключение к микроконтроллеру
Для звучания нужно подавать на динамик квадратную волну (рисунок 5).
Какой частоты будет волна, такой частоты будет и звук.
Рисунок 5 - квадратная волна, подаваемая на динамик

7
КОНДЕНСАТОР
Конденсатор — крошечный аккумулятор, который очень быстро заряжается и очень быстро разряжается. Виды конденсаторов, используемых в
Arduino, показаны на рисунке 6.
Рисунок 6 - Виды конденсаторов, используемых в Arduino
Основные характеристики
Таблица 2 - основные характеристики
Кодирование номинала
Рисунок 7 - Пример кодировки номинала конденсатора

8
Номинал в пФ записан на корпусе (рисунок 7). Первые 2 цифры — основание, 3-я — множитель. Например:
- 220 = 22 × 100 пФ = 22 пФ
- 471 = 47 × 101 пФ = 470 пФ
- 103 = 10 × 103 пФ = 10 000 пФ = 10 нФ
- 104 = 10 × 104 пФ = 100 000 пФ = 100 нФ
Поведение
Если подаваемое напряжение больше внутреннего накопленного, конденсатор будет заряжаться.
Если внешнее напряжение меньше внутреннего, конденсатор будет отдавать заряд. Разрядка и зарядка конденсатора изображены на рисунке 8.
Рисунок 8 – Зарядка и разрядка конденсатора
Время заряда и разряда
Для связывания уровня заряда конденсатора с временем используют понятие «постоянной времени τ»:

9
- За τ секунд конденсатор заряжается или разряжается на 63%
- За 5×τ секунд конденсатор заряжается или разряжается на 99%
- Если резистора в схеме нет, его роль исполняет паразитное сопротивление проводов, разъѐмов, дорожек, составляющее доли Ома
ИНВЕРТИРУЮЩИЙ ТРИГГЕР ШМИДТА
Триггер Шмидта — это устройство, которое преобразовывает, вероятно, нестабильный аналоговый сигнал в стабильный цифровой (рисунок 9). Суть такова: o
Входящий аналоговый сигнал может быть либо восходящим (↗ ), либо нисходящим (↘ )
o
В триггере определены 2 пороговых значения: ≈1,6 В — для восходящего сигнала и ≈0,9 В — для нисходящего o
Выход триггера становится логической единицей (5 В), только когда восходящий сигнал проходит свой порог в 1,6 В; при этом прохождение восходящим сигналом нижнего порога в 0,9 В будет проигнорированно o
Аналогично, выход триггера становится логическим нулём (0 В), только когда нисходящий сигнал проходит свой порог в 0,9 В; при этом прохождение нисходящим сигналом нижнего порога в 1,6 В будет проигнорированно o
В остальное время значение выхода сохраняется на прежнем уровне
Зона неопределённости между порогами называется гистерезисом.
Рисунок 9 - Микросхема 74HC17 (Инвертирующий триггер Шмидта)
В данном чипе собраны инвертирующие триггеры. Это означает, что в дополнение к сказанному, выходной цифровой сигнал инвертируется: ноль становится единицей, единица — нулём.
Триггер Шмитта может быть полезен для аппаратной стабилизации сигналов. Таких, как сигнал от тактовой кнопки, подверженной эффекту дребезга.

10
Ход работы
1 Эксперимент «Азбука Морзе»:
1.1
Собираем схему, изображенную на рисунках 10 и 11;
Рисунок 10 - Визуальная схема сборки
Рисунок 11 - Принципиальная схема сборки
1.2
Для приведения данной схемы в рабочее состояние напишем программный код, представленный ниже; int soundPin
=
13
;
int dotDelay
=
50
;
char theword
[]
=
"help"
;

11 long time
;
int rate
=
100
;
void sound
(
int duration
)
{
time
=
millis
();
while
(
millis
()
-
time
<
duration
)
{
digitalWrite
(
soundPin
,
HIGH
);
delayMicroseconds
(
rate
);
digitalWrite
(
soundPin
,
LOW
);
delayMicroseconds
(
rate
);
}
}
void dot
()
{
sound
(
dotDelay
);
delay
(
dotDelay
);
}
void dash
()
{
sound
(
3
*
dotDelay
);
delay
(
dotDelay
);
}
void letterEnd
()
{
delay
(
2
*
dotDelay
);
}
void wordEnd
()
{
delay
(
6
*
dotDelay
);
}
void morseWord
(
char theword
[])
{
int len
=
strlen
(
theword
);
for
(
int i
=
0
;
i
<
len
;
++
i
)
morseLetter
(
theword
[
i
]);
wordEnd
();
}
void morseLetter
(
char c
)
{
switch
(
c
)
{
case
'a'
:
dot
();
dash
();
break
;
case
'b'
:
dash
();
dot
();
dot
();
dot
();
break
;
case
'c'
:
dash
();
dot
();
dash
();
dot
();
break
;
case
'd'
:
dash
();
dot
();
dot
();
break
;
case
'e'
:
dot
();
break
;
case
'f'
:
dot
();
dot
();
dash
();
dot
();
break
;
case
'g'
:
dash
();
dash
();
dot
();
break
;
case
'h'
:
dot
();
dot
();
dot
();
break
;
case
'i'
:
dot
();
dot
();
break
;
case
'j'
:
dot
();
dash
();
dash
();
dash
();
break
;
case
'k'
:
dash
();
dot
();
dash
();
break
;
case
'l'
:
dot
();
dash
();
dot
();
dot
();
break
;
case
'm'
:
dash
();
dash
();
break
;
case
'n'
:
dash
();
dot
();
break
;

12
case
'o'
:
dash
();
dash
();
dash
();
break
;
case
'p'
:
dot
();
dash
();
dash
();
dot
();
break
;
case
'q'
:
dash
();
dash
();
dot
();
dash
();
break
;
case
'r'
:
dot
();
dash
();
dot
();
break
;
case
's'
:
dot
();
dot
();
dot
();
break
;
case
't'
:
dash
();
break
;
case
'u'
:
dot
();
dot
();
dash
();
break
;
case
'v'
:
dot
();
dot
();
dot
();
dash
();
break
;
case
'w'
:
dot
();
dash
();
dash
();
break
;
case
'x'
:
dash
();
dot
();
dot
();
dash
();
break
;
case
'y'
:
dash
();
dot
();
dash
();
dash
();
break
;
case
'z'
:
dash
();
dash
();
dot
();
dot
();
break
;
case
' '
:
wordEnd
();
break
;
}
letterEnd
();
}
void setup
()
{
pinMode
(
soundPin
,
OUTPUT
);
}
void loop
()
{
morseWord
(
theword
);
}
1.3
Проверяем работоспособность собранной схемы, подключив ее к источнику тока.
2 Эксперимент «Азбука Морзе со светодиодным индикатором»:
2.1
Собираем схему, изображенною на рисунках 12 и 13;
Рисунок 12 - Визуальная схема сборки

13
Рисунок 13 - Принципиальная схема сборки
2.2
Для приведения данной схемы в рабочее состояние напишем программный код, представленный ниже; int
LedPin
=
12
;
int soundPin
=
13
;
int dotDelay
=
50
;
char theword
[]
=
"help"
;
long time
;
int rate
=
100
;
void sound
(
int duration
)
{
time
=
millis
();
while
(
millis
()
-
time
<
duration
)
{
digitalWrite
(
soundPin
,
HIGH
);
delayMicroseconds
(
rate
);
digitalWrite
(
soundPin
,
LOW
);
delayMicroseconds
(
rate
);
}
}
void dot
()
{
sound
(
dotDelay
);
digitalWrite
(
LedPin
,
HIGH
);
delay
(
dotDelay
);
digitalWrite
(
LedPin
,
LOW
);
}
void dash
()
{
sound
(
3
*
dotDelay
);
digitalWrite
(
LedPin
,
HIGH
);
delay
(
3
*
dotDelay
);
digitalWrite
(
LedPin
,
LOW
);
}
void letterEnd
()
{
delay
(
2
*
dotDelay
);

14
}
void wordEnd
()
{
delay
(
6
*
dotDelay
);
}
void morseWord
(
char theword
[])
{
int len
=
strlen
(
theword
);
for
(
int i
=
0
;
i
<
len
;
++
i
)
morseLetter
(
theword
[
i
]);
wordEnd
();
}
void morseLetter
(
char c
)
{
switch
(
c
)
{
case
'a'
:
dot
();
dash
();
break
;
case
'b'
:
dash
();
dot
();
dot
();
dot
();
break
;
case
'c'
:
dash
();
dot
();
dash
();
dot
();
break
;
case
'd'
:
dash
();
dot
();
dot
();
break
;
case
'e'
:
dot
();
break
;
case
'f'
:
dot
();
dot
();
dash
();
dot
();
break
;
case
'g'
:
dash
();
dash
();
dot
();
break
;
case
'h'
:
dot
();
dot
();
dot
();
break
;
case
'i'
:
dot
();
dot
();
break
;
case
'j'
:
dot
();
dash
();
dash
();
dash
();
break
;
case
'k'
:
dash
();
dot
();
dash
();
break
;
case
'l'
:
dot
();
dash
();
dot
();
dot
();
break
;
case
'm'
:
dash
();
dash
();
break
;
case
'n'
:
dash
();
dot
();
break
;
case
'o'
:
dash
();
dash
();
dash
();
break
;
case
'p'
:
dot
();
dash
();
dash
();
dot
();
break
;
case
'q'
:
dash
();
dash
();
dot
();
dash
();
break
;
case
'r'
:
dot
();
dash
();
dot
();
break
;
case
's'
:
dot
();
dot
();
dot
();
break
;
case
't'
:
dash
();
break
;
case
'u'
:
dot
();
dot
();
dash
();
break
;
case
'v'
:
dot
();
dot
();
dot
();
dash
();
break
;
case
'w'
:
dot
();
dash
();
dash
();
break
;
case
'x'
:
dash
();
dot
();
dot
();
dash
();
break
;
case
'y'
:
dash
();
dot
();
dash
();
dash
();
break
;
case
'z'
:
dash
();
dash
();
dot
();
dot
();
break
;
case
' '
:
wordEnd
();
break
;
}
letterEnd
();
}
void setup
()
{
pinMode
(
soundPin
,
OUTPUT
);
}
void loop
()
{
morseWord
(
theword
);
}

15 2.3
Проверяем работоспособность собранной схемы, подключив ее к источнику тока.
3 Эксперимент «Терменвокс»:
3.1 Собираем схему, изображенную на рисунках 14 и 15;
Рисунок 14 - Визуальная схема сборки
Рисунок 15 - Принципиальная схема сборки
3.2
Для приведения данной схемы в рабочее состояние напишем программный код, представленный ниже;
#define BUZZER_PIN 3
#define LDR_PIN A0 void setup
()
{
pinMode
(
BUZZER_PIN
,
OUTPUT
);
}
void loop
()
{
int val
,
frequency
;
val
=
analogRead
(
LDR_PIN
);
frequency
=
map
(
val
,
0
,
1023
,
3500
,
4500
);

16 tone
(
BUZZER_PIN
,
frequency
,
20
);
}
3.3
Проверяем работоспособность собранной схемы, подключив ее к источнику тока.
4 Эксперимент «Мерзкое пианино»:
4.1
Собираем схему, изображенную на рисунках 16 и 17;
Рисунок 16 - Визуальная схема сборки
Рисунок 17 - Принципиальная схема сборки
4.2
Для приведения данной схемы в рабочее состояние напишем программный код, представленный ниже;
#define BUZZER_PIN 13
#define FIRST_KEY_PIN 7
#define KEY_COUNT 3 void setup
()
{
pinMode
(
BUZZER_PIN
,
OUTPUT
);
}
void loop
()
{

17
for
(
int i
=
0
;
i
<
KEY_COUNT
;
++
i
)
{
int keyPin
=
i
+
FIRST_KEY_PIN
;
boolean keyUp
=
digitalRead
(
keyPin
);
if
(!
keyUp
)
{
int frequency
=
3500
+
i
*
500
;
tone
(
BUZZER_PIN
,
frequency
,
20
);
}
}
}
4.3
Проверяем работоспособность собранной схемы, подключив ее к источнику тока.
5 Эксперимент «Мерзкое пианино с 5 кнопками»:
5.1
Собираем схему, изображенную на рисунках 18 и 19;
Рисунок 18 - Визуальная схема сборки

18
Рисунок 19 - Принципиальная схема сборки
5.2
Для приведения данной схемы в рабочее состояние напишем программный код, представленный ниже;
#define BUZZER_PIN 13
#define FIRST_KEY_PIN 5
#define KEY_COUNT 5 int music
[]
=
{
2500
,
3000
,
3500
,
4000
,
4500
};
void setup
()
{
pinMode
(
BUZZER_PIN
,
OUTPUT
);
}
void loop
()
{
for
(
int i
=
0
;
i
<
KEY_COUNT
;
++
i
)
{
int keyPin
=
i
+
FIRST_KEY_PIN
;
boolean keyUp
=
digitalRead
(
keyPin
);
if
(!
keyUp
)
{
tone
(
BUZZER_PIN
,
music
[
keyPin
-
5
],
20
);
}
}
}
5.3
Проверяем работоспособность собранной схемы, подключив ее к источнику тока.
6 Эксперимент «Кнопочные ковбои»:
6.1
Собираем схему, изображённую на рисунках 20 и 21;

19
Рисунок 20 - Визуальная схема сборки
Рисунок 21 - Принципиальная схема сборки
6.2
Для приведения данной схемы в рабочее состояние напишем программный код, представленный ниже;
#define BUZZER_PIN 12
#define PLAYER_COUNT 2 int buttonPins
[
PLAYER_COUNT
]
=
{
3
,
13
};
int ledPins
[
PLAYER_COUNT
]
=
{
9
,
11
};
void setup
()
{
pinMode
(
BUZZER_PIN
,
OUTPUT
);
for
(
int player
=
0
;
player
<
PLAYER_COUNT
;
++
player
)
{
pinMode
(
ledPins
[
player
],
OUTPUT
);
pinMode
(
buttonPins
[
player
],
INPUT_PULLUP
);
}
}
void loop
()
{
delay
(
random
(
2000
,
7000
));
tone
(
BUZZER_PIN
,
3000
,
250
);
for
(
int player
=
0
;
;
player
=
(
player
+
1
)
%
PLAYER_COUNT
)
{

20
if
(!
digitalRead
(
buttonPins
[
player
]))
{
digitalWrite
(
ledPins
[
player
],
HIGH
);
tone
(
BUZZER_PIN
,
4000
,
1000
);
delay
(
1000
);
digitalWrite
(
ledPins
[
player
],
LOW
);
break
;
}
}
}
6.3
Проверяем работоспособность собранной схемы, подключив ее к источнику тока.
7 Эксперимент «Кнопочные ковбои с полосой здоровья»:
7.1
Собираем схему, изображенную на рисунке 22;
Рисунок 22 - Визуальная схема сборки
7.2
Для приведения данной схемы в рабочее состояние напишем программный код, представленный ниже;
#define BUZZER_PIN 12
// пин с пищалкой
#define PLAYER_COUNT 2
// количество игроков-ковбоев
#define LED_COUNT 3
// кол-во светодиовов для одного игрока int buttonPins
[
PLAYER_COUNT
]
=
{
3
,
13
};
int players_led
[
PLAYER_COUNT
][
LED_COUNT
]
=
{{
4
,
5
,
6
},{
7
,
8
,
10
}};
int players_health
[
PLAYER_COUNT
]
=
{
2
,
2
};
// Жизнь в диапазон от -1 до 2 int count_kill
=
0
;
// Кол-во убитых игроков
// Отбираем 1 жизнь у игрока с индексом player void
HealthMinus
(
int player
){
digitalWrite
(
players_led
[
player
][
players_health
[
player
]],
LOW
);
players_health
[
player
]--;
}

21
// Звук победы void
SoundWin
(){
for
(
int i
=
0
;
i
<=
2
;
i
++){
tone
(
BUZZER_PIN
,
4000
,
200
);
delay
(
400
);
}
}
// Возвращаем все в исходное состояние void
Clear
(){
count_kill
=
0
;
for
(
int i
=
0
;
i
<
PLAYER_COUNT
;
++
i
){
for
(
int j
=
0
;
j
<
LED_COUNT
;
++
j
){
digitalWrite
(
players_led
[
i
][
j
],
HIGH
);
}
players_health
[
i
]
=
2
;
}
}
void setup
()
{
pinMode
(
BUZZER_PIN
,
OUTPUT
);
for
(
int player
=
0
;
player
<
PLAYER_COUNT
;
++
player
)
{
for
(
int i
=
0
;
i
<
LED_COUNT
;
++
i
){
pinMode
(
players_led
[
player
][
i
],
OUTPUT
);
digitalWrite
(
players_led
[
player
][
i
],
HIGH
);
}
pinMode
(
buttonPins
[
player
],
INPUT_PULLUP
);
}
}
void loop
()
{
while
(
true
){
// Даём сигнал «пли!», выждав случайное время от 2 до 7 сек delay
(
random
(
2000
,
7000
));
tone
(
BUZZER_PIN
,
3000
,
250
);
for
(
int player
=
0
;
;
player
=
(
player
+
1
)
%
PLAYER_COUNT
)
{
// Запрещаем убитым игрокам участвовать в новом раунде
if
(
players_health
[
player
]
!=
-
1
){
// Если игрок номер «player» нажал кнопку...
if
(!
digitalRead
(
buttonPins
[
player
]))
{
// Отнимаем жизни у всех проигравших игроков
for
(
int i
=
0
;
i
<
PLAYER_COUNT
;
++
i
){
if
(
i
!=
player
){
HealthMinus
(
i
);
// Проверяем, умер ли проигравший игрок
if
(
players_health
[
i
]
==
-
1
){
count_kill
++;
}
}
}
tone
(
BUZZER_PIN
,
4000
,
1000
);
delay
(
1000
);
break
;
}
}
}
//Если в живых остался лишь один игрок
if
(
count_kill
==
PLAYER_COUNT
-
1
){

22
SoundWin
();
break
;
}
}
Clear
();
delay
(
2000
);
}
7.3
Проверяем работоспособность собранной схемы, подключив ее к источнику тока.
8 Эксперимент «Перетягивание каната»:
8.1
Собираем схему, изображенную на рисунках 23 и 24;
Рисунок 23 - Визуальная схема сборки
Рисунок 24 - Принципиальная схема сборки
8.2
Для приведения данной схемы в рабочее состояние напишем программный код, представленный ниже;
#define BUZZER_PIN 0
#define FIRST_BAR_PIN 4
#define BAR_COUNT 10
#define MAX_SCORE 20

23 volatile int score
=
0
;
void setup
()
{
for
(
int i
=
0
;
i
<
BAR_COUNT
;
++
i
)
pinMode
(
i
+
FIRST_BAR_PIN
,
OUTPUT
);
pinMode
(
BUZZER_PIN
,
OUTPUT
);
attachInterrupt
(
INT1
,
pushP1
,
FALLING
);
attachInterrupt
(
INT0
,
pushP2
,
FALLING
);
}
void pushP1
()
{
++
score
;
}
void pushP2
()
{
--
score
;
}
void loop
()
{
tone
(
BUZZER_PIN
,
2000
,
1000
);
while
(
abs
(
score
)
<
MAX_SCORE
)
{
int bound
=
map
(
score
,
-
MAX_SCORE
,
MAX_SCORE
,
0
,
BAR_COUNT
);
int left
=
min
(
bound
,
BAR_COUNT
/
2
-
1
);
int right
=
max
(
bound
,
BAR_COUNT
/
2
);
for
(
int i
=
0
;
i
<
BAR_COUNT
;
++
i
)
digitalWrite
(
i
+
FIRST_BAR_PIN
,
i
>=
left
&&
i
<=
right
);
}
tone
(
BUZZER_PIN
,
4000
,
1000
);
while
(
true
)
{}
}
8.3
Проверяем работоспособность собранной схемы, подключив ее к источнику тока.
Вопросы для самопроверки:
○ Что такое пьезоэлемент?
○ Можно ли устроить полифоническое звучание с помощью функции tone?
○ Почему разные «ноты», издаваемые пищалкой, звучат с разной громкостью?
○ В чем разница между INPUT и INPUT PULLUP?
○ Можно ли поместить в один массив элементы типа boolean и int?
○ Для чего испльзуется инвертирующий триггер Шмидта?

24
ОГЛАВЛЕНИЕ
Цели лабораторной работы.........................................................................2
МИКРОКОНТРОЛЛЕР……………………………………………………...2
Arduino uno…………………………………………………………………3
Питание……………………………………………………………………..3
Память............................................................................................................4
Ввод/вывод....................................................................................................4
ПЬЕЗОДИНАМИК..........................................................................................5
Основные характеристики...........................................................................5
Подключение напрямую..............................................................................6
КНДЕНСАТОР................................................................................................7
Основные характеристики...........................................................................7
Кодирование номинала................................................................................7
Поведение......................................................................................................8
Время разряда и заряда................................................................................8
ИНВЕРТИРУЮЩИЙ ТРИГГЕР ШМИДТА................................................9


написать администратору сайта