Файл: Контрольной работы.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 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);

}

}

}