Upload
anton-moiseev
View
726
Download
2
Embed Size (px)
DESCRIPTION
Методические указания проведения лабораторных работ по программированию микроконтроллеров на Arduino-совместимой платформе PIC32 ChipKIT Uno32. Составители: Автомобильный Институт (АМИ), Нижегородский государственный технический университет им Р.Е. Алексеева.
Citation preview
Методические указания проведения лабораторных
работ по программированию микроконтроллеров на Arduino-совместимойплатформе PIC32 ChipKIT Uno32
Составители: Кафедра АМИ,
НГТУ им Алексеева.
Введение
Язык программирования устройств Ардуино основан на C/C++. Он прост восвоении, и на данный момент Arduino — это, пожалуй, самый удобный способпрограммирования устройств на микроконтроллерах. Микроконтроллерныеплаты ChipKIT Uno32 с процессором PIC32 полностью совместимы сплатформой Arduino, при этом являются более производительными, чеморигинальные платы Arduino.
Язык Arduino можно разделить на три раздела:
Операторыsetup ()loop ()
Управляющие операторыif if...else for switch case while do... while break continue return goto
Синтаксис; (semicolon) {} (curly braces) // (single line comment) /* */ (multi-line
comment)
Арифметические операторы= (assignment) + (addition) - (subtraction) * (multiplication) / (division) % (modulo)
Операторы сравнения== (equal to)!= (not equal to)
Данные
КонстантыHIGH | LOWINPUT | OUTPUTtrue | falseЦелочисленные
константыКонстанты с
плавающей запятой
Типы данныхboolean char byte int unsigned int word long unsigned long float double string - массив
символовString - объект классамассив (array) void
Преобразование типов данных
char() byte() int() long() float()
Функции
Цифровой ввод/выводpinMode ()digitalWrite ()digitalRead ()
Аналоговый ввод/выводanalogRead ()analogReference() analogWrite ()
Дополнительные фунции ввода/вывода
tone ()noTone ()shiftOut ()pulseIn ()
Работа со временемmillis ()micros ()delay ()delayMicroseconds ()
Математические функцииmin ()max ()abs ()constrain ()map ()pow ()sq ()
< (less than)> (greater than)<= (less than or equal to)>= (greater than or equal
to)
Логические операторы&& (И) || (ИЛИ) ! (Отрицание)
Унарные операторы++ (increment)-- (decrement)+= (compound addition)-= (compound
subtraction)*= (compound
multiplication)/= (compound division)
Область видимости переменных и квалификаторы
Область видимости static volatile const
sqrt ()
Тригонометрические функции
sin ()cos ()tan ()
Генераторы случайных значений
randomSeed ()random ()
Внешние прерыванияattachInterrupt() detachInterrupt()
Функции передачи данныхSerial
Библиотеки Arduino
Servo — библиотека управления сервоприводами.EERPOM — чтение и запись энергонезависимой памяти микроконтроллера.SPI — библиотека, реализующая передачу данных через интерфейс SPI.Stepper — библиотека управления шаговыми двигателями.
Интерфейс среды программирования
Лабораторная работа №1
«Работа светодиодного индикатора»
Цель работы: Написать программу, позволяющую прерывисто светиться диоду.
Задача: Собрать электрическую схему диода с платформой.
Ход работы.
1) Устанавливаем светодиод на контакторную платформу
Рисунок 1 – Расположение светодиода на контакторной платформе
2) Подключение проводов к пинам платы PIC32 ChipKIT.
Рисунок 2 – сосединение электрической схемы
Строка состояния
3) Загрузка текста программы
void setup() {
pinMode(1, OUTPUT);
}
void loop() {
digitalWrite(1, HIGH);
delay(2000);
digitalWrite(1, LOW);
delay(2000);
}
Лабораторная работа №2
«Работа светодиодного индикатора светового датчика»
Цель работы: Написать программу, позволяющую прерывисто светиться диоду.
Задача : При срабатывании датчика света от него подается сигнал на платформу и посредством программы должен загораться диод.
Ход работы.
1)Устанавливаем диод на платформу пинов.
Рисунок 3 – расположение диода на платформе пинов
2) Подключение датчика света к платформе PIC32 ChipKIT (рисунок 3).
Рисунок 4 – Датчик света
Рисунок 5 – Подключение диода и датчика света
3) Написание программы
4) Загрузка программы в память платформы PIC32 ChipKIT
Рисунок 6 – Процесс загрузки программы
Рисунок 7 – Успешная загрузка программы
5) Проверка работоспособности системыРезультатом правильной работы системы будет являться загорание светодиода при отсутствии попадания света на датчик.
а) б)Рисунок 8 – Проверка работы системы: (а) – свет попадает на датчик; (б) –
свет не попадает на датчик.
Лабораторная работа №3
«Работа электромотора с двумя светодиодными индикаторами исветодатчиком»
Цель работы: Написать программу, позволяющую идентифицировать работуэлектромотора светодиодами.
Задача: При выключенном электромоторе горит светодиод красного цвета. Присрабатывании электромотора, красный светодиод гаснет и загорается зеленыйсветодиод. Электромотор включается при срабатывании датчика света.
Ход работы.
1) Собираем электрическую цепь.а) Подключаем SIG датчика света к Pin3, VСC датчика света к Pin 5V0, GND датчика света к «-» на платформе пинов.б)Устанавливаем зеленый диод на платформу пинов «-» к «-», «+» к «+».в)Подключаем «-» платформы пинов на GND платформы Arduino. «+» платформы пинов к Pin 2 Arduino.г)Устанавливаем красный диод «-» к «-», а «+» подходит к Pin1 платформы Arduino.г)Подключаем электромотор. «+» подходит к плюсу зеленого светодиода, а «-» подходит к общему минусу на платформе пинов.
Рисунок 9 – готовая электрическая цепь2) Текст программы:
void setup() {
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, INPUT);
}
void loop() {
digitalWrite(1, LOW);
digitalWrite(2, HIGH);
int val=digitalRead(3);
if (val==1) {
digitalWrite(2, LOW);
digitalWrite(1, HIGH);
delay(100);
}
}
3) Загружаем программу и выполняем проверку :
Рисунок 10 – На световой датчик попадает свет и электромотор не работает
При срабатывании датчика загорается зеленый диод и электромоторначинает вращаться.
Рисунок 11 – Загорается зеленый диод и начинает работу электромотор
Лабораторная работа №4
«Цифровое табло»
Цель работы: Написать программу, позволяющую отобразить цифровой рядот 0 до 9.
Задача: Собрать электрическую цепь и написать программу включающуюопределенные сегменты цифрового табло, образующие ту или иную цифру
Ход работы.
1) Устанавливаем цифровое табло на платформу пинов.
Рисунок 12 – цифровое табло на платформе2) Подключаем «-»цифрового табло к выходу GND платы ChipKIT3) Остальные 8 пинов, отвечающие за соответствующие сегменты, подключаем
к свободным пинам платы (1→Pin5, 2→Pin7,3→Pin1, 4→Pin8, 5→Pin6, 6→Pin4, 7→Pin3, 8→Pin2,)
Рисунок 13 – Электрическая цепь в сборе
4) Текст программы
void setup() {
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
}
void loop() {
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
delay(1000);
digitalWrite(1, HIGH);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(1000);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(1000);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
delay(1000);
digitalWrite(1, LOW);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(1000);
digitalWrite(1, LOW);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(1000);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
delay(1000);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(1000);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(1000);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(1000);
}