ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.02.2024
Просмотров: 18
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
ИНСТИТУТ НЕПРЕРЫВНОГО ОБРАЗОВАНИЯ
ТЕМА КОНТРОЛЬНОЙ РАБОТЫ
По дисциплине "Программирование мобильных робототехнических комплексов"
Вариант 0
Фамилия: Сургуладзе
Имя: Валерия
Отчество: Владимировна
Группа №: ПБ-71з
Проверил:______________
Санкт-Петербург
2021
КОНТРОЛЬНАЯ РАБОТА
Вариант 0
Задание 1. Разработка и программная реализация алгоритма начала движения, остановки, изменения скорости движения и реверса.
Задание
Разработать алгоритм и программу на языке microC для управления движением робота.
После нажатия кнопки «пуск» робот должен выполнить:
-
после трехсекундной паузы движение вперед со скоростью81% от максимальной в течение 1 секунды; -
остановку на 2 секунды; -
движение назад с максимальной скоростью в течение 3 секунд; -
остановку на 3 секунды ; -
движение вперед на скорости 92% от максимальной в течение 4 секунд.
Решение
Исходный код программы:
#include
void main()
{
while(PORTA.F4==1)
{
Delay_ms(100);
}
Delay_ms(3000);
Forward(206);
Delay_ms(1000);
Motor_stop();
Delay_ms(2000);
Backward(255);
Delay_ms(3000);
Motor_stop();
Delay_ms(3000);
Forward(235);
Delay_ms(4000);
Motor_Stop();
}
Задание 2.Разработка и программная реализация алгоритма изменениянаправления движения.
Задание
Разработать и запрограммировать алгоритм управления движением робота.Посленажатиякнопки «пуск» роботдолженвыполнить:
-
Поворот левым двигателем на 270 градусов -
Поворот вокруг своей оси против часовой стенки на 135 градусов -
Остановку на 2 секунды -
Поворот вокруг своей оси по часовой стрелке на 45 градусов
Решение
Будем считать, что робот поворачивает на 90 градусов за 1 секунду, левый двигатель – А, правый двигатель – В.
Исходный код программы:
#include
void main()
{
while(PORTA.F4==1)
{
Delay_ms(100);
}
Motor_Init();
Change_Duty(255);
Motor_A_FWD();
Delay_ms(3000);
S_Left(255);
Delay_ms(2500);
Motor_stop();
Delay_ms(2000);
S_Right(255);
Delay_ms(500);
Motor_stop();
}
Задание 3. Разработка и программная реализация алгоритма управленияускорением движения.
Задание
Разработать и запрограммировать алгоритм управления движением робота. После нажатия кнопки «пуск» робот должен выполнить:
-
ускориться до 94% от максимальной скорости; -
продолжить движение на этой скорости 1 секунду; -
Замедлится до полной остановки.
Решение
Исходный код программы:
#include
void main()
{
int speed = 240;
int maxsp = 255;
while(PORTA.F4==1)
{
Delay_ms(100);
}
while (speed <= maxsp)
{
Forward(speed);
speed += 1;
Delay_ms(100);
}
Delay_ms(1000);
Motor_Stop();
}
Задание 4. Разработка и программная реализация алгоритма управлениядвижения мобильным роботом.
Задание.
Разработать и запрограммировать алгоритм управления движениемробота. После нажатия кнопки «пуск» робот должен выполнить:
-
Ускорится до 90% от максимальной скорости -
Поворот вокруг своей оси по часовой стенке на 180градусов -
Остановку на 1 секунду -
Поворот левым двигателем на 270 градусов -
Движение назад на скорости 80% от максимальной втечение 4 секунд.
Решение
Исходный код программы:
#include
void main()
{
int speed = 230;
int maxsp = 255;
while(PORTA.F4==1)
{
Delay_ms(100);
}
while (speed <= maxsp)
{
Forward(speed);
speed += 1;
Delay_ms(100);
}
S_Right(255);
Delay_ms(2000);
Motor_Stop();
Delay_ms(1000);
Motor_A_FWD();
Delay_ms(3000);
Backward(204);
Delay_ms(4000);
Motor_Stop();
}
Задание 5. Управление светодиодом робота
Разработать алгоритм и программу управления работой светодиода и кнопкой. Посленажатиякнопки «пуск» (RB0) роботдолженвыполнить:
-
Вначале светодиод 10 раз мигает с частотой 3 Гц придлительности горения в каждом цикле 0.5 секунд -
Остановка в мигании на 5 секунд -
Затем светодиод мигает с меняющейся за время 8 секундчастотой от 1 Гц до 4 Гц с длительностью горения 200 ms. -
Остановка в мигании на 3 секунды -
Мигание с частотой 3 Гц и длительностью горения 100 msпродолжается вплоть до нажатия на кнопку RA4.
Решение
Чтобы рассчитать частоту мигания переведем Гц в сек: 3 Гц = 0,333 сек, 1 Гц = 1 сек, 4 Гц = 0,25 сек. Соответственно увеличение частоты мигания от 1 Гц до 4 Гц будет сопровождаться уменьшением времени задержки отключенного светодиода на 93,75 мс с каждый миганием.
Исходный код программы:
#include
void main()
{
if (PORTB.F0==0)
{
int n = 0;
int t = 1000;
while(n< 10)
{
PORTB.F3=1;
Delay_ms(500);
PORTB.F3= 0;
Delay_ms(333);
n += 1;
}
Delay_ms(5000);
while(n < 8)
{
PORTB.F3=1;
Delay_ms(200);
PORTB.F3= 0;
Delay_ms(t);
t += 93.75;
n += 1;
}
Delay_ms(3000);
while(PORTA.F4==1)
{
PORTB.F3=1;
Delay_ms(100);
PORTB.F3= 0;
Delay_ms(333);
n += 1;
}
}
}
Задание 6. Управление пьезоэлементом.
Разработать и запрограммировать алгоритм управления движением робота. Посленажатиякнопки «пуск» (RB0) роботдолженвыполнить:
-
После паузы в 1 секунду исполнить с помощью пьезоэлемента мелодию песни «Сулико»
Решение
Исходный код программы:
#include
void main()
{
int n = 0;
float Do, Re, Mi, Fa, Sol, La, Si;
Do = 261.63;
Re = 293.66;
Mi = 329.63;
Fa = 349.23;
Sol= 392.00;
La = 440.00;
Si = 493.88;
Sound_Init(&PORTC, 0); // Init Sound
while(1)
{
if (!PORTA.F4) // Test RA4 keypress
{
Delay_ms(800);
sound_play(Sol,400);
sound_play(Sol,400);
sound_play(Mi,400);
sound_play(Fa,400);
sound_play(Sol,800);
sound_play(La,400);
sound_play(Fa,400);
sound_play(Sol,1200);
Delay_ms(400);
sound_play(Si,400);
sound_play(Si,400);
sound_play(Si,400);
sound_play(Si,400);
sound_play(Si,800);
sound_play(Re,400);
sound_play(Si,400);
sound_play(Do,1200);
Delay_ms(400);
While (n < 2)
{
sound_play(Do,400);
sound_play(Do,400);
sound_play(Si,400);
sound_play(Do,400);
sound_play(Re,400);
sound_play(Do,400);
sound_play(Si,400);
sound_play(La,400);
sound_play(Si,800);
sound_play(La,800);
sound_play(Sol,1600);
sound_play(La,400);
sound_play(La,400);
sound_play(Sol,400);
sound_play(Sol,400);
sound_play(Fa,800);
sound_play(Sol,400);
sound_play(Fa,400);
sound_play(Mi,1200);
Delay_ms(400);
n += 1;
}
}
Задание 7. Управление ЖКИ-монитором
Разработать и запрограммировать алгоритм управления работой LCD-дисплея. После нажатия кнопки «пуск» (RB0) робот должен отобразить на своем дисплее:
-
Фразу «KTO TAM ?!» в верхней строке слева -
Затем через 2.5 секунды: в первой строке должна отобразиться фамилия студента и начать движение влево, а на второй строке – имя студента и начать движение вправо. -
Скорость движения первой строки должна быть в 3 раза выше скорости движения второй.
Решение
Исходныйкод программы:
// LCDmoduleconnections
sbit LCD_RS at RD2_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;
sbitLCD_RS_Direction at TRISD2_bit;
sbitLCD_EN_Direction at TRISD3_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;
unsigned char ch;
unsigned int adc_rd;
char *text1, *text2, *text3, *text; //Объявлениепеременных
long tlong;
void main()
{
int n = 0;
int i = 0;
TRISD = 0; // настройка портов для LCD
PORTD = 0xFF;
TRISD = 0xff;
Lcd_Init(); // ЖК-дисплей инициализация
Lcd_Cmd(_LCD_CURSOR_OFF); // LCD команды (курсор выключен)
Lcd_Cmd(_LCD_CLEAR); // LCD команды (очистить LCD)
text1 = "KTOTAM ?!"; // Определяем 1 сообщение
Lcd_Out(1,1,text1); // Запись 1 сообщения в первой строке
Delay_ms(250); //Задержка 2,5 сек
text2 = "SURGULADZE"; // Определить 2 сообщение
Lcd_Out(2,1,text2); // Запись 2 сообщения во второй строке
while(1)
{
Lcd_Cmd(_LCD_SHIFT_LEFT);
Delay_ms(600);
n=n+1;
if (n>15)
{
n=0;
Lcd_Cmd(_LCD_RETURN_HOME);
}
}
text3 = "VALERIIA"; // Определить 3 сообщение
Lcd_Out(3,1,text3); // Запись 3 сообщения в третьей строке
while(1)
{
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Delay_ms(200);
n=n+1;
if (n>15)
{
n=0;
Lcd_Cmd(_LCD_RETURN_HOME);
}
}
}