ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 23.11.2023
Просмотров: 122
Скачиваний: 8
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
25 digitalWrite(led3, LOW); digitalWrite(led4, LOW); break;
} case(2000):
{ digitalWrite(led1, LOW); digitalWrite(led2, HIGH); digitalWrite(led3, LOW); digitalWrite(led4, LOW); break;
} case(3000):
{ digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, HIGH); digitalWrite(led4, LOW); break;
} case(4000):
{ digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, HIGH); break;
} case(0):
{ digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); break;
}
}
}
Сначала идет функция инициализации 16-битного таймера Timer1, кото- рый будет работать с прерыванием каждую 1 мс. В функции setup() объявляют- ся переменные выводов, к которым подключены светодиоды, вызывается ини- циализация таймера и выводы светодиодов устанавливаются на выход. В обра- ботчике прерываний переменная counter каждую 1 мс будет увеличиваться на
26 единицу. В бесконечном цикле, при достижении counter значения 1000 (т. е. таймер вызвал 1000 прерываний, что означает о прошествии одной секунды), будет загораться первый светодиод, при достижении двух секунд будет заго- раться второй светодиод, при достижении трех секунд – третий. При достиже- нии четвертой секунды, загорится четвертый светодиод, счетчик таймера обну- литься и цикл начнется сначала.
4. ВАРИАНТЫ
Интервалы времени и номера ПИНов светодиодов (см. Практическое за- нятие №3, рисунок 2) выбрать самостоятельно.
5. ОТЧЕТ
Отчет по практической работе должен содержать:
1. Наименование и цель работы.
2. Краткие теоретические данные по практической работе.
3. Код программы, написанной в соответствии с вариантом.
4. Вывод по проделанной работе.
ПРАКТИЧЕСКОЕ ЗАНЯТИЕ №6
Создание программы сигнального устройства с звуковым
выходом
1. ЦЕЛЬ ЗАНЯТИЯ
1. Изучить необходимые для написания программы функции;
2. Написать программу для работы с пьезоэлементом (динамиком).
2. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
В качестве звукового вывода будет использоваться пьезоэлемент, под- ключенный к микроконтроллеру. Пьезоэлемент — электромеханический пре- образователь, одним из разновидностей которого является пьезоизлучатель звука, который также называют пьезодинамиком, просто звонком или англий- ским buzzer. Пьезодинамик переводит электрическое напряжение в колебание мембраны. Эти колебания и создают звук (звуковую волну).
Управлять звуковым выводом можно двумя способами:
1) Использовать функцию analogWrite(pin, value);
27
Выдает аналоговую величину (ШИМ волну) на порт вход/выхода. Функ- ция может быть полезна для управления яркостью подключенного светодиода или скоростью электродвигателя. После вызова analogWrite() на выходе будет генерироваться постоянная прямоугольная волна с заданной шириной импульса до следующего вызова analogWrite (или вызова digitalWrite или digitalRead на том же порту вход/выхода). Частота ШИМ сигнала приблизительно 490 Hz.
Параметры:
pin: порт вход/выхода на который подаем ШИМ сигнал;
value: период рабочего цикла значение между 0 (полностью выключе- но) и 255 (сигнал подан постоянно).
Частота звука будет зависеть от заданного значения value.
2) Использовать функции tone(pin, frequency, duration) и noTone(pin).
Функция tone() генерирует на порту вход/выхода сигнал – прямоуголь- ную «волну», заданной частоты и с 50% рабочим циклом. Длительность может быть задана параметром duration, в противном случае сигнал генерируется пока не будет вызвана функция noTone(). К порту вход/выхода может быть подклю- чен пьезо или другой динамик для воспроизведения сигнала.
Воспроизводиться одновременно может только один сигнал. Если сигнал уже воспроизводится на одном порту, то вызов tone() с номером другого порта в качестве параметра ни к чему не приведет, если же tone() будет вызвана с тем же номером порта, то будет установлена новая частота сигнала.
Параметры:
pin: номер порта вход/выхода, на котором будет генерироваться сигнал;
frequency: частота сигнала в Герцах;
duration: длительность сигнала в миллисекундах.
3. ПОРЯДОК ВЫПОЛНЕНИЯ ПРАКТИЧЕСКОЙ РАБОТЫ
Напишем программу, которая будет сигнализировать звуковым сигналом и горящим светодиодом о нажатии кнопки. int button = 6; int led = 11; int buzzer = 12; void setup()
{ pinMode(led, OUTPUT); pinMode(button, INPUT); pinMode(buzzer, OUTPUT);
} void loop()
{ if (digitalRead(button) == HIGH)
28
{ digitalWrite(led, HIGH); tone(buzzer, 100);
} else
{ digitalWrite(led, LOW); noTone();
}
}
Сначала объявляем переменные со значениями ПИНов кнопки, светодио- да и динамика. Далее настраиваем выводы светодиода и динамика на выход, а вывод кнопки – на вход. В бесконечном цикле, при нажатой кнопке будет го- реть светодиод и генерироваться звуковой сигнал с частотой 100 Гц.
4. ВАРИАНТЫ
ПИНы кнопки, светодиода, динамика (см. Практическое занятие №3, ри- сунок 2) и частоту звукового сигнала выбрать самостоятельно.
5. ОТЧЕТ
Отчет по практической работе должен содержать:
1. Наименование и цель работы.
2. Краткие теоретические данные по практической работе.
3. Код программы, написанной в соответствии с вариантом.
4. Вывод по проделанной работе.
ПРАКТИЧЕСКОЕ ЗАНЯТИЕ №7
Разработка (проектирование) устройства «музыкальная
шкатулка»
1. ЦЕЛЬ ЗАНЯТИЯ
1. Изучить схему и принцип работы устройства;
2. Написать программу с различными простейшими музыкальными ком- позициями.
29 2. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
2.1. ФУНКЦИЯ ДЛЯ РАБОТЫ С ВНЕШНИМИ
ПРЕРЫВАНИЯМИ
Для написания программы для «Музыкальной шкатулки» будут исполь- зоваться внешние прерывания. Прерывание (англ. interrupt) — сигнал, сообща- ющий процессору о наступлении какого-либо события. При этом выполнение текущей последовательности команд приостанавливается, и управление пере- даётся обработчику прерывания, который выполняет работу по обработке со- бытия и возвращает управление в прерванный код. Для работы с ними исполь- зуется функция attachInterrupt(interrupt, function, mode).
Параметры функции:
1) interrupt: номер прерывания или pin: номер цифрового порта (только для Arduino Due)
2) function: функция, вызываемая прерыванием, функция должна быть без параметров и не возвращать значений.
3) mode задает режим обработки прерывания. Допустимо использование следующих констант:
LOW вызывает прерывание, когда на порту LOW;
CHANGE прерывание вызывается при смене значения на порту, с
LOW на HIGH и наоборот;
RISING прерывание вызывается только при смене значения на порту с
LOW на HIGH;
FALLING прерывание вызывается только при смене значения на порту с HIGH на LOW;
ATmega328 может обрабатывать до двух внешних прерываний на ПИНе 4
(INT0) и ПИНе 5 (INT1). В скобках указан номер прерывания.
2.2.
СТРУКТУРНАЯ СХЕМА
И ПРИНЦИП РАБОТЫ УСТРОЙСТВА
На рисунке 1 представлена структурная схема электрической части устройства.
Плата с компонентами помещаются в шкатулку. Кнопка закрепляется в месте соприкосновения крышки и основной части шкатулки. При закрытой крышке кнопка нажата и на выводе 4 установлен сигнал HIGH и музыка не проигрывается. При открытии шкатулки кнопка отжимается, значение на выво- де 4 сменяется на LOW, срабатывает прерывание и вызывается функция проиг- рывания музыкальной композиции.
30
Для проигрывания музыки будут использоваться функции tone() и noTone(), изученные на Практическом занятии №6. В таблице 1 представлены значения частот нот 1 и 2 октавы и обозначения для каждой ноты.
Рисунок 1. Структурная схема электрической части устройства
Таблица 1 – Частоты и обозначения нот
1 октава
Обозначение
Частота,
Гц
2 октава
Обозначение
Частота,
Гц до
С
261 до c
523 до-диез
С1*
277 до-диез c1*
554 ре
D
293 ре d
587 ре-диез
D1*
311 ре-диез d1*
622 ми
Е
329 ми e
659 фа
F
349 фа f
698 фа-диез
F1*
370 фа-диез f1*
740 соль
G
392 соль g
784 соль-диез
G1*
415 соль-диез g1*
830 ля
A
440 ля a
880 ля-диез
B
466 ля-диез b
932 си
H
494 си h
988
*см. – С1 означает С# и т.д. для остальных нот.
31
В качестве воспроизводимой мелодии будет использоваться «В траве си- дел кузнечик». Ниже представлены используемые для мелодии ноты.
E-C-E-C-E-F-F – В траве сидел кузнечик;
F-C-F-C-F-E-E – Совсем как огуречик;
E-C-E-F-C-F-C-F-E-E – В траве сидел кузнечик;
C-E-F – Зелененьким он был;
F-G-G-G-G-G-G#-G#-G#-G# – Представьте себе, представьте себе;
G#-G#-G-F-E-F-F – Совсем как огуречик;
F-G-G-G-G-G-G#-G#-G#-G# – Представьте себе, представьте себе;
G#-G#-G-F-E-F-F – Совсем как огуречик;
3. ПОРЯДОК ВЫПОЛНЕНИЯ ПРАКТИЧЕСКОЙ РАБОТЫ
Ниже представлен код программы для данного устройства.
// МЕЛОДИЯ – массив нот и массив длительностей char melody[]={'E', 'C', 'E ', 'C', 'E', 'F', 'F',
'F', 'C', 'F', 'C', 'F', 'E', 'E',
'E', 'C', 'E', 'F', 'C', 'F', 'C', 'F', 'E', 'E',
'C', 'E', 'F',
'F', 'G', 'G', 'G', 'G', 'G, 'G#', 'G#','G#', ''G#',
'G#', 'G#', 'G', 'F', 'E', 'F', 'F',
'F', 'G', 'G', 'G', 'G', 'G, 'G#', 'G#','G#', ''G#',
'G#', 'G#', 'G', 'F', 'E', 'F', 'F', '*'}; int bb[]={4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 8, 8,
4, 4, 4, 2, 2, 4, 4, 4, 2, 2,
4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 2, 2, 4, 4, 4, 2, 2,
4, 4, 4, 4, 4, 4, 4, 64};
// массив для наименований нот в пределах двух октав char names[]={'C','C1','D','D1','E','F','F1','G','G1','A','B',
'H','c','c1','d','d1','e','f','f1','g','g1','a','b', 'h'};
// массив частот нот int tones[]={261,277,293,311,329,349,370,392,415,440,466,
494, 523,554,587,622,659,698,740,784,830,880,932,988}; int buzzer = 14; int button = 4; int notes, beats;
32 void setup()
{ pinMode(buzzer, OUTPUT); pinMode (button, INPUT); atachInterrupt(0, play, LOW)
} void loop()
{
} void play()
{ for (int i=0; i < sizeof(melody); i++)
{ notes = melody[i]; beats = bb[i]; if (notes == '*')
{ tone(buzzer, 0 , beats); // пауза
} else
{ playNote(notes, beats); // воспроизвести ноту
}
// пауза между нотами delay(beats);
}
}
// функция проигрыша ноты void playNote(char note, int duration)
{ for (int i = 0; i < sizeof(tones); i++)
{ if (names[i] == note)
{ tone(buzzer, tones[i], duration);
}
}
}
33
Сначала объявляются массивы нот и их длительностей для воспроизво- димой мелодии. Далее объявляются массивы нот двух октав и их частоты. Да- лее объявляются переменные ПИНов кнопки и динамика, а также переменные нот и длительностей. В функции setup() настраиваются параметры выводов, к которым присоединены кнопка и динамик, а также задается функция прерыва- ния вывода 4 (INT0), которые при значении LOW на выводе 4 (шкатулка от- крыта) будет вызывать функцию play(). Функция loop() в программе не исполь- зуется, так как работа происходит через обработчик прерываний. В функции play() выполняется бесконечный цикл, в котором при каждом шаге цикла вос- производится нота номера этого шага до того момента, пока ноты в мелодии не закончатся и воспроизведение не начнется заново.
4. ВАРИАНТЫ
Варианты выводов кнопки (4 или 5), динамика (см. Практическое занятие
№3, рисунок 2) выбрать самостоятельно. Выбор воспроизводимой мелодии (нот и их длительности) производить при помощи интернета.
5. ОТЧЕТ
Отчет по практической работе должен содержать:
1. Наименование и цель работы.
2. Краткие теоретические данные по практической работе.
3. Код программы, написанной в соответствии с вариантом.
4. Вывод по проделанной работе.
1 2 3
ПРАКТИЧЕСКОЕ ЗАНЯТИЕ №8
Разработка кодового замка
1. ЦЕЛЬ ЗАНЯТИЯ
1. Ознакомиться с принципами работы и использованием последователь- ного интерфейса UART;
2. Изучить необходимые функции по работе с UART;
3. Написать программу по управлению светодиодом при помощи кнопки, с возможностью блокировки управления с ПК.
Разработка кодового замка
1. ЦЕЛЬ ЗАНЯТИЯ
1. Ознакомиться с принципами работы и использованием последователь- ного интерфейса UART;
2. Изучить необходимые функции по работе с UART;
3. Написать программу по управлению светодиодом при помощи кнопки, с возможностью блокировки управления с ПК.
34 2. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
2.1. ПОСЛЕДОВАТЕЛЬНЫЙ ИНТЕРФЕЙС UART
Интерфейс UART наиболее распространённый последовательный интер- фейс современных микроконтроллеров. UART –
это универсальный приемопе- редатчик. Данные передаются последовательным кодом в формате, представ- ленным на рисунке 1.
Рисунок 1. Структура передаваемой информации по UART
Передача каждого байта происходит за равные промежутки времени.
Время передачи одного бита определяется скоростью передачи. Она указывает- ся в бодах (бит в секунду). Кроме битов информации, UART вставляет в поток биты синхронизации (стартовый и стоповый). Таким образом, для передачи байта информации необходимо не 8, а 10 бит. В таблице 1 представлены стан- дартные скорости передачи интерфейса UART.
Таблица 1 – Скорости передачи данных по UART
Скорость передачи, бод
Время передачи одного бита, мкс
Время передачи байта, мкс
4800 208 2083 9600 104 1042 19200 52 521 38400 26 260 57600 17 174 115200 8,7 87
Обмен информацией через UART происходит в дуплексном режиме, т.е. передача данных может происходить одновременно с приемом. Для этого в
UART есть два сигнала:
35
TX – выход для передачи данных;
RX – вход для приема данных.
При соединении двух UART устройств выход TX одного устройства со- единяется с входом RX другого, а вывод TX второго UART подключается к входу RX первого.
Рисунок 2. Схема подключения двух устройств по UART
2.2. UART В МИКРОКОНТРОЛЛЕРЕ ATMEGA328
Микроконтроллер ATmega328 имеет один порт UART, сигналы которого подключены к выводам 2 (PD0) (сигнал RX) и 3 (PD1) (сигнал TX). Через эти выводы можно подключить к микроконтроллеру другое устройство имеющее интерфейс UART.
Кроме связи с другими микроконтроллерами, порт UART используется для загрузки в контроллер программы с компьютера. Для этого к выводам RX и
TX подключаются соответствующие выводы преобразователя USB/UART.
Преобразователь позволяет подключать контроллер к компьютеру по USB. На компьютер устанавливается специальный драйвер, создающий виртуальный
COM – порт, через который происходит обмен. Тем самым можно производить управление микроконтроллером с компьютера.
Для работы с UART микроконтроллера ATmega328 используется встро- енный класс Serial. Он предназначен для управления обменом данных через
UART. В классе Serial данные могут передаваться в двух форматах – бинарном коде и ASCII символами. Среда разработки Arduino имеет встроенный монитор последовательного интерфейса (Serial monitor). Для начала обмена данными необходимо запустить монитор нажатием кнопки Serial monitor и выставить ту же скорость связи (baud rate), с которой вызвана функция begin().Основные функции класса Serial:
1) Serial.begin(speed)
Инициирует последовательное соединение и задает скорость передачи данных в бит/c (бод). Для обмена данными с компьютером используйте следу- ющие значения: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 или 115200. При соединении через порты вход/выхода 0 и 1 могут быть исполь- зованы другие значения скорости, требуемые устройством, с которым будет осуществляться обмен данными.
2) Serial.end()