Занятие №1. Цифровые сигналы. Резистор. Светодиод. Тактовая кнопка.
По окончании занятия учащиеся смогут…
- объяснить разницу, между цифровым и аналоговым сигналом;
- объяснить назначение резистора, светодиода и тактовой кнопки;
- собрать с помощью макетной платы схему, содержащую резисторы, светодиоды и кнопки и составить программы для управления этими компонентами;
- объяснить для чего используется подтягивающий резистор.
Запуск программы на Arduino
С помощью Arduino IDE
- После того как схема проекта собрана на макетной плате, запустите среду разработки Arduino IDE
.
- Подключите плату Arduino к компьютеру с помощью USB-кабеля.
- Зайдите в пункт меню Инструменты - Порт и убедитесь что напротив COM-порта с именем платы стоит галочка. Этот порт будет использоваться для передачи скомпилированной программы на микроконтроллер платы Arduino.
- Нажмите кнопку Загрузка
. Через некоторое время программа скомпилируется и загрузится в микроконтроллер. Программа начнёт выполняться сразу же после загрузки.
С помощью RobboScratch
- Подключите плату Arduino к компьютеру и запустите среду разработки RobboScratch.
- Замкните контакт 5V и пин 7.
- Нажмите кнопку Поиск устройств. После успешного подключения зелёным загорится буква А.
- Если плата не распозналась, RobboScratch предложить загрузить нужную прошивку. Нажмите OK и дождитесь окончания процесса.
Задание № 1. Маячок
Соберите схему со светодиодом. Напишите программу с помощью которой светодиод будет мигать раз в 1 секунду.
Симуляция проекта в Tinkercad
Работу над этим и последующими проектами будем начинать с моделирования схемы в сервисе Tinkercad.
На странице своего профиля в Tinkercad перейдите в закладку Проекты, нажмите кнопку Создать и создайте новый проект из раздела Цепи:
Соберите схему проекта. Вы можете ориентироваться на изображение с прототипом или принципиальную схему. Между этими вариантами можно переключаться в любой момент.
Схема для сборки
Вы можете щёлкнуть по изображению, чтобы увеличить его.
После сборки схемы нужно написать программу для микроконтроллера. Для этого в Tinkercad нажмите кнопку Код и в выпадающем списке выберите вариант Текст:
Программа
// Мигание светодиодом
// функция выполняется один раз
void setup()
{
// пин светодиода 9 настраиваем
// на выход - OUTPUT
pinMode(9, OUTPUT);
}
// функция выполняется бесконечно
void loop()
{
digitalWrite(9, HIGH); // устанавливаем на 9 пине логическую 1 - 5 В
delay(1000); // ждём 1000 миллисекунд
digitalWrite(9, LOW); // устанавливаем на 9 пине логический 0 - 0 В
delay(1000); // ждём 1000 миллисекунд
}
Код внутри Функции setup()
предназначен для настройки пинов и начальных настроек компонентов цепи: некоторых датчиков, сервомоторов, LCD-дисплеев. Функция loop()
выполняется, пока на плату подаётся питание.
С помощью функции pinMode(пин, режим)
настраивается режим работы указанного пина - INPUT
(на вход) или OUTPUT
(на выход). Функция digitalWrite(пин, значение)
устанавливает на выбранном пине либо высокий уровень напряжения - HIGH
, либо низкий - LOW
.
С помощью функции delay(миллисекунд)
можно сделать паузу на выбранное количество миллисекунд.
Запустите симуляцию схемы, нажав на кнопку Начать моделирование. Светодиод должен мигать.
Сборка и программирование реального прототипа
Теперь соберите схему на реальной макетной плате и подключите Arduino к компьютеру. Запустите программу RobboScratch и подключитесь к Arduino с помощью инструкции в этом разделе.
Составьте программу в RobboScratch. Саму программу вы можете найти в разделе Программа, переключившись к вкладке RobboScratch. Проверьте работу программы на реальной схеме.
Дополнительное задание
Добавьте к схеме ещё один светодиод. Измените программу так, чтобы светодиоды включались по-переменно: пока включен один, второй выключен.
Задание № 2. Тактовая кнопка
Соберите схему со светодиодом и тактовой кнопкой. Напишите программу, которая включает светодиод, пока кнопка зажата.
Схема для сборки
Резистор на 10 кОм в схеме называется стягивающим. Он тянет значение на 8 пине к земле, пока кнопка не нажата.
Если нужно, чтобы в не нажатом состоянии на пине с кнопкой была логическая единица (5 В), то кнопку подключают к питанию через подтягивающий резистор, который подтягивает значение на пине к напряжению 5 В.
Программа
// Тактовая кнопка
// описываем логическую переменную state
// будем хранить состояние кнопки - HIGH или LOW
bool state;
void setup()
{
// пин кнопки настраиваем на вход - INPUT
pinMode(8, INPUT);
// пин светодиода настраиваем на выход - OUTPUT
pinMode(9, OUTPUT);
}
void loop()
{
// считываем логическое значение с пина 8
// сохраняем значение в переменной state
state = digitalRead(8);
// значение переменной state (состояние кнопки)
// определит состояние светодиода (вкл/выкл)
digitalWrite(9, state);
}
Логическая переменная state
может хранить два значения - true
(1) или false
(0). Константы HIGH
и LOW
также соответствуют этим числовым значениям.
Функция digitalRead(пин)
возвращает значение HIGH
если на пине уровень напряжения больше 3 В. Иначе функция вернёт значение LOW
.
Задание № 3. Выключатель
Составьте программу с помощью которой нажатие одной кнопки будет последовательно включать и выключать светодиод.
Схема для сборки
Для решения задачи используйте схему из задания № 2.
Программа
// Включение и выключение на одну кнопку
// все три переменные инициализируем значением LOW
bool cur = LOW; // текущее состояние кнопки
bool prev = LOW; // предыдущее состояние кнопки
bool state = LOW; // состояние светодиода
void setup()
{
pinMode(9, OUTPUT);
}
void loop()
{
// сохраняем текущее состояние кнопки
cur = digitalRead(8);
// если состояние кнопки изменилось
// с LOW на HIGH, значит кнопка нажата.
// истинность двух условий проверяем с
// помощью логического И - &&
if (cur == HIGH && prev == LOW) {
// меняем значение переменной state
// на противоположное с помощью
// логического НЕ - !
state = !state;
}
// текущее состояние кнопки сохраняем
// в качестве предыдущего
prev = cur;
// устанавливаем состояние светодиода
digitalWrite(9, state);
}
Задание № 4. Бегущий огонёк
Соберите схему с четырьмя светодиодами. Составьте программу, которая будет последовательно включать и выключать светодиоды, создавая эффект бегущего огонька.
Схема для сборки
Программа
// Бегущие огни
#define FIRST_LED_PIN 2 // первый пин ряда светодиодов
#define LAST_LED_PIN 5 // последний пин ряда
void setup()
{
/*
Настраиваем пины со светодиодами на вывод (OUTPUT).
Для этого перебираем номера пинов в цикле for.
*/
for(int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; pin++)
{
pinMode(pin, OUTPUT);
}
}
void loop()
{
/*
Перебираем пины светодиодов
*/
for(int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; pin++)
{
// "включаем" очередной светодиод с пином pin
digitalWrite(pin, HIGH);
delay(500);
digitalWrite(pin, LOW);
}
}
С помощью директивы #define
описываем константы с номерами первого и последнего светодиодов. Описав константы в начале программы, мы может легко исправить их значение при необходимости.
С помощью цикла for
внутри функции loop()
перебираем номера пинов и включаем светодиоды на этих пинах на пол секунды.
Дополнительное задание
Добавьте пятый светодиод и после этого исправьте программу.