Файл: Методические указания к выполнению лабораторных работ по дисциплине Основы электротехники в робототехнике.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 08.11.2023
Просмотров: 165
Скачиваний: 5
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
1 Перечень необходимых средств для выполнения лабораторных работ
2.1 Как подключить светодиод к Arduino
2.3 Меняем цвет по нажатию кнопки
2.5 Классы в программах Ардуино. Кнопка как объект.
3.1 Подключение семисегментного индикатора
3.2 Подключение LED индикатора с TM1637
3.3 Подключение LCD 1602 (HD44780) к Arduino
3.4 Подключение LCD1602 по I2C к Ардуино
4.1 Подключение матричной клавиатуры к Arduino
4.2 Подключение клавиатуры 4*4 и пьезоизлучателя к Arduino
lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки
lcd.print("Hello, world!"); // Выводим текст
lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print("zelectro.cc"); // Выводим текст
}
void loop(){
}
Создание собственных символов
С выводом текста разобрались, буквы английского алфавита зашиты в память контроллера внутри дисплея и с ними проблем нет. А вот что делать если нужного символа в памяти контроллера нет?
Не беда, требуемый символ можно сделать вручную (всего до 7ми символов). Ячейка, в рассматриваемых нами дисплеях, имеет разрешение 5х8 точек. Все, к чему сводится задача создания символа, это написать битовую маску и расставить в ней единички в местах где должны гореть точки и нолики где нет. В ниже приведенном примере нарисуем смайлик.
Пример программного кода
//Тестировалось на Arduino IDE 1.0.5
#include <Wire.h>
#include <LiquidCrystal.h> // Лобавляем необходимую библиотеку
// Битовая маска символа улыбки
byte smile[8] =
{
B00010,
B00001,
B11001,
B00001,
B11001,
B00001,
B00010,
};
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7)
void setup(){
lcd.begin(16, 2); // Задаем размерность экрана
lcd.createChar(1, smile); // Создаем символ под номером 1
lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки
lcd.print("\1"); // Выводим смайлик (символ под номером 1) - "\1"
}
void loop(){
}
3.4 Подключение LCD1602 по I2C к Ардуино
К сожалению, стандартная схема подключения, рассмотренная в предыдущих заданиях, не всегда удобна, так как занимает как минимум 6 цифровых выходов на ардуине.
В этом задании мы рассмотрим способ как это можно обойти и использовать только два аналоговых выхода.
Нам понадобится дополнительный модуль 1602 LCD конвертор в IIC/I2C. Он припаивается к нашему дисплею как видно на фото ниже.
И подключается к ардуине следующим образом
Arduino Mega | Arduino Uno | LCD i2c | Цвет проводов на фото |
GND | GND | GND | Черный |
5V | 5V | VCC | Красный |
20 (SDA) | A4 | SDA | Коричневый |
21(SCL) | A5 | SCL | Белый |
Код программы:
#include
#include
LiquidCrystal_I2C lcd(0x3F,16,2); // Устанавливаем дисплей
void setup()
{
lcd.init();
lcd.backlight();// Включаем подсветку дисплея
lcd.print("iarduino.ru");
lcd.setCursor(8, 1);
lcd.print("LCD 1602");
}
void loop()
{
// Устанавливаем курсор на вторую строку и нулевой символ.
lcd.setCursor(0, 1);
// Выводим на экран количество секунд с момента запуска ардуины
lcd.print(millis()/1000);
}
4 Лабораторная работа 3
Тема: Подключение клавиатуры
Цель: Научиться подключать клавиатуру
Задание
1 Подключить клавиатуру к плате.
2 Запрограммировать работу с клавиатурой (п.4.1-4.2).
3 Оформить отчет.
4.1 Подключение матричной клавиатуры к Arduino
Иногда мы сталкиваемся с проблемой нехватки портов на Arduino. Чаще всего это относится к моделям с небольшим количеством выводов. Для этого была придумана матричная клавиатура. Такая система работает в компьютерных клавиатурах, калькуляторах, телефонах и других устройствах, в которых используется большое количество кнопок.
Для Arduino чаще всего используются такие клавиатуры:
Самыми распространенными являются 16 кнопочные клавиатуры 4x4. Принцип их работы достаточно прост, Arduino поочередно подает логическую единицу на каждый из 4 столбцов, в этот момент 4 входа Arduino считывают значения, и только на один вход подается высокий уровень. Это довольно просто, если знать возможности управления портами вывода в Arduino, а так же портами входа/ввода.
Для программирования можно использовать специализированную библиотеку Keypad, но в этом задании не будем её использовать для большего понимания работы с матричной клавиатуры.
Подключаем клавиатуру в любые порты ввода/вывода.
На красные порты будем подавать сигналы, а с синих будем их принимать. Зачастую на синие провода подводят подтягивающие резисторы, но мы их подключим внутри микроконтроллера Arduino.
В программе будем вычислять нажатую кнопку и записывать её в Serial порт.
В данном методе есть один значительный недостаток: контроллер уже не может выполнять других задач стандартными методами. Эта проблем решается подключением матричной клавиатуры с использованием прерываний
.
int PinOut[4] {5, 4, 3, 2}; // пины выходы
int PinIn[4] {9, 8, 7, 6}; // пины входа
int val = 0;
const char value[4][4]
{ {'1', '4', '7', '*'},
{'2', '5', '8', '0' },
{'3', '6', '9', '#'},
{'A', 'B', 'C', 'D'}
};
// двойной массив, обозначающий кнопку
int b = 0; // переменная, куда кладется число из массива(номер кнопки)
void setup()
{
pinMode (2, OUTPUT); // инициализируем порты на выход (подают нули на столбцы)
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
pinMode (5, OUTPUT);
pinMode (6, INPUT); // инициализируем порты на вход с подтяжкой к плюсу (принимают нули на строках)
digitalWrite(6, HIGH);
pinMode (7, INPUT);
digitalWrite(7, HIGH);
pinMode (8, INPUT);
digitalWrite(8, HIGH);
pinMode (9, INPUT);
digitalWrite(9, HIGH);
Serial.begin(9600); // открываем Serial порт
}
void matrix () // создаем функцию для чтения кнопок
{
for (int i = 1; i <= 4; i++) // цикл, передающий 0 по всем столбцам
{
digitalWrite(PinOut[i - 1], LOW); // если i меньше 4 , то отправляем 0 на ножку
for (int j = 1; j <= 4; j++) // цикл, принимающих 0 по строкам
{
if (digitalRead(PinIn[j - 1]) == LOW) // если один из указанных портов входа равен 0, то..
{
Serial.println( value[i - 1][j - 1]); // то b равно значению из двойного массива
delay(175);
}
}
digitalWrite(PinOut[i - 1], HIGH); // подаём обратно высокий уровень
}
}
void loop()
{
matrix(); // используем функцию опроса матричной клавиатуры
}
С использованием библиотеки считывание данных с цифровой клавиатуры упрощается.
#include
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'#','0','*'}
};
byte rowPins[ROWS] = {5, 4, 3, 2};
byte colPins[COLS] = {8, 7, 6};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
Serial.begin(9600);
}
void loop(){
char key = keypad.getKey();
if (key != NO_KEY){
Serial.println(key);
}
}
4.2 Подключение клавиатуры 4*4 и пьезоизлучателя к Arduino
Теперь научимся подключать устройство ввода к Ардуине. В этом примере разберемся, как подключить мембранную клавиатуру 4*4
Данный пример будет выполнять две задачи:
-
Первая задача: определяет, какая из клавиш была нажата на клавиатуре и передать информацию по сериал порту на компьютер, где в "мониторе последовательного порта ". -
Вторая задача: при каждом нажатии клавиш издавать звуковой сигнал. У каждой клавиши звуковой сигнал будет разный.
В данном уроке нам понадобится:
-
Arduino -
Клавиатура 4x4 кнопки -
Зуммер пьезоэлектрический -
Набор проводов ПАПА-МАМА -
Провода Папа-Папа или Набор проводов для макетирования 65 шт.
Для реализации проекта нам необходимо установить библиотеки:
Библитетка keypad для клавиатуры 4x4
Сборка:
1) Клавиатуру удобнее всего подключить к Ардуине проводками Папа-Папа.
Контакты на клавиатуре отсчитываются слева на право.
Клавиатура 4*4 | Arduino (uno) |
Контакт 1 | pin 11 |
Контакт 2 | pin 10 |
Контакт 3 | pin 9 |
Контакт 4 | pin 8 |
Контакт 5 | pin 7 |
Контакт 6 | pin 6 |
Контакт 7 | pin 5 |
Контакт 8 | pin 4 |
Контакты к которым подключаем клавиатуру, могут быть перенастроены на любые другие цифровые контакты. Настраиваются здесь:
byte rowPins[ROWS] = {11,10, 9, 8};
byte colPins[COLS] = {7, 6, 5, 4};