ПМК 3 курс Практические задания 03 Практическая работа 3 - BysonHunter/Tavrich_college GitHub Wiki

🏠 Главная · Программирование микроконтроллеров · 3 курс · Практические работы по программированию микроконтроллеров — 3 курс


Практическая работа №3

Тема: «Подключение и управление LCD1602 и серводвигателем»

Текст описания, целей и постановки заданий сохранён по исходному PDF. Технические замечания ниже исправляют или уточняют только обнаруженные неоднозначности и ошибки.

Технические корректировки и уточнения

  • Сервопривод SG90 управляется последовательностью сервоимпульсов, а не обычным analogWrite(). Библиотека Servo формирует необходимый сигнал самостоятельно.
  • Для сервопривода рекомендуется отдельный источник 5 В подходящего тока с обязательным общим GND с Arduino.
  • Резисторы 220–510 Ом из списка оборудования не следует рассматривать как типичные подтягивающие резисторы кнопок; удобнее применять INPUT_PULLUP или внешнюю подтяжку порядка 10 кОм.
  • LCD1602 имеет 16 символов в строке. Форматы вывода, которые длиннее 16 символов, необходимо сокращать или разбивать на страницы.
  • В задании 4 функции короткого нажатия (смена режима) и удержания кнопки (sweep) следует различать по длительности нажатия, иначе требования неоднозначны.

Описание работы и задания

Цель работы: закрепить теоретические знания на практике, развить навыки

схемотехнической сборки и программирования микроконтроллеров Arduino для управления периферийными устройствами.

Цель работы:

Закрепить теоретические знания на практике, развить навыки схемотехнической сборки и программирования микроконтроллеров Arduino для управления периферийными устройствами, освоить принципы работы с символьными дисплеями и сервоприводами.

Студент должен знать:

  • Основные характеристики и принципы работы символьного ЖК-дисплея LCD1602.
  • Принцип работы сервопривода, методы управления углом поворота с помощью

Шим.

  • Протокол I²C и его использование для подключения периферийных устройств.
  • Основы программирования в среде Arduino IDE: работа с библиотеками, функции задержки, циклы, условные операторы.

Студент должен уметь:

  • Собирать электрические схемы с использованием Arduino, LCD1602 (через I²Cадаптер) и сервопривода.

  • Подключать и настраивать библиотеки для работы с дисплеем и сервоприводом.

  • Программировать динамический вывод информации на дисплей.

  • Реализовывать плавное и позиционное управление сервоприводом.

  • Использовать потенциометр и кнопки для интерактивного управления системой.

  • Организовывать многозадачные режимы работы (ручное/автоматическое управление).

  • Проводить отладку программы и схемы, анализировать результаты работы.

Необходимое оборудование:

  1. Плата Arduino UNO (или аналог) – 1 шт.
  2. Модуль LCD1602 с I²C-адаптером – 1 шт.
  3. Сервопривод SG90 – 1 шт.
  4. Потенциометр 10 кОм – 1 шт.
  5. Тактовая кнопка – 2–3 шт.
  6. Резисторы 220–510 Ом (для подтяжки кнопок) – 2–3 шт.
  7. Макетная плата (breadboard) – 1 шт.
  8. Набор соединительных проводов (папа-папа, папа-мама) – 1 набор.
  9. USB-кабель для подключения Arduino к ПК – 1 шт.
  10. Персональный компьютер с установленной средой разработки Arduino IDE и библиотеками: LiquidCrystal_I²C и Servo.

Для каждого задания необходимо подготовить:

  1. Принципиальную схему подключения, выполненную в программе Fritzing или Tinkercad.

  2. Листинг программы с комментариями.

  3. Отчет о выполнении работы со скриншотами.

Задания Для Выполнения.

Задание 1: «Базовый вывод информации на LCD 1602 (I²C)»

  1. Подключите модуль LCD1602 с интерфейсом I²C к Arduino.
  2. Напишите программу, которая:
  • При старте выводит на первую строку ваши ФИО, а на вторую — номер группы.
  • Через 5 секунд очищает дисплей и начинает выводить на первой строке текст «Время с запуска:», а на второй строке — секунды, прошедшие с момента начала работы программы (обновлять раз в секунду). Критерий успеха: на дисплее корректно отображаются статический и динамический (меняющийся каждую секунду) текст.

Задание 2: «Управление серводвигателем по заданной траектории»

  1. Подключите серводвигатель (например, SG90) к Arduino.
  2. Напишите программу, которая циклически выполняет следующую последовательность движений с паузой в 1 секунду между позициями:
  • Плавно (с помощью цикла for) перемещает вал от 0° до 180° с шагом в 10°.
  • Устанавливает вал в положение 90°.
  • Плавно перемещает вал от 180° до 0°.
  • Совершает два быстрых движения: из 0° в 120° и обратно в 60°. Критерий успеха: сервопривод точно и плавно отрабатывает все заданные положения.

Задание 3: «Ручное управление сервоприводом с визуализацией на LCD (I²C)»

  1. Соберите схему: Arduino, LCD1602 (I²C), сервопривод, потенциометр.
  2. Напишите программу, в которой:
  • Угол поворота сервопривода задается положением ручки потенциометра (0-1023 -

0-180°).

  • На LCD дисплее в реальном времени отображается:
  • Строка 1: Заголовок «Servo Control:»
  • Строка 2: Текущий угол в градусах («Angle: 045 deg») и сырое значение с АЦП («ADC: 512»). Значения должны обновляться плавно, без мерцания. Критерий успеха: поворот потенциометра приводит к плавному движению сервопривода и мгновенному обновлению цифровых показаний на дисплее.

Задание 4: «Автоматический режим с меню на LCD и управлением от кнопки»

  1. Соберите схему: Arduino, LCD1602 (I²C), сервопривод, одна тактовая кнопка.
  2. Реализуйте программу с двумя режимами, переключаемыми по нажатию кнопки:
  • Режим 1 «Manual»: на дисплее отображается «Mode: MANUAL» и «Press to sweep». Серво неподвижен. При удержании кнопки сервопривод плавно «сканирует» от 20° до 160° и обратно. При отпускании — останавливается.

  • Режим 2 «Auto»: на дисплее отображается «Mode: AUTO» и «Pos: ### deg» (где

- угол поворота). Сервопривод автоматически совершает плавные колебания между 30° и 150° (по синусоидальному или треугольному закону). Значение текущего угла обновляется на дисплее. Критерий успеха: Четкое переключение режимов по кнопке, соответствующий текст на дисплее и корректное поведение сервопривода в каждом режиме.

Задание 5 (повышенная сложность): «Система позиционирования с

калибровкой и логированием»

  1. Соберите схему: Arduino, LCD1602 (I²C), сервопривод, потенциометр, 2 кнопки («Сохранить», «Воспроизвести»).

  2. Реализуйте программу, которая позволяет:

  • Основной режим: управлять сервоприводом потенциометром. На дисплее отображается текущий угол.

  • Функция «Калибровка»: при нажатии и удержании кнопки «Сохранить» на дисплее появляется подсказка «Set MIN pos». Поворотом потенциометра задается

минимальное положение (например, 10°). Отпускание кнопки сохраняет значение. Аналогично, следующее удержание той же кнопки позволяет задать и сохранить «MAX pos» (например, 170°). После калибровки диапазон потенциометра (0-1023) масштабируется на новый рабочий диапазон сервопривода.

  • Функция «Память»: В обычном режиме краткое нажатие кнопки «Сохранить» запоминает текущую позицию сервы в массив (до 5 позиций). На дисплее мигает «Saved!».

  • Функция «Воспроизведение»: при нажатии кнопки «Воспроизвести» сервопривод последовательно и плавно перемещается ко всем сохраненным в памяти позициям. На дисплее отображается «Playback...» и номер текущей позиции. Критерий успеха: система стабильно работает в трех состояниях (ручное управление, калибровка, воспроизведение), используя дисплей как полноценный интерфейс для взаимодействия с пользователем.

Содержание Отчета

Отчёт о выполнении лабораторной работы должен содержать:

– титульный лист с номером и названием работы;

– цель работы;

– краткие теоретические сведения о подключаемых устройствах и особенностях их

работы; – схемы соединения элементов, выполненные в программе Fritzing или Tinkercad; – описание алгоритма работы собранного устройства; – текст программ, содержащий необходимые комментарии и пояснения; – описание особенностей подключения библиотек и функции, которые были использованы из импортированных библиотек; – общие выводы по работе.


← Практическая работа №2 · Практическая работа №4 →

Оригинал материала на GitHub