Разработка программного продукта для системы запуска и остановки двигателя

Проектирование и разработка приложения для взаимодействия с микропроцессором Arduino. Факторы, влияющие на правильную работу, как приложения, так и автомобиля. Разработка и сбор принципиальной схемы запуска двигателя и написание необходимого кода для нее.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 18.11.2017
Размер файла 1,6 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

void check_start()-основная функция проверки запуска двигателя

void do_start()-функция запуска двигателя

void check_for_shutdown()-функция запущенного двигателя

void do_shutdown()-функция отключения питания

7. Тестирование программного продукта

7.1 Функциональное тестирование

При функциональном тестировании исследуется работа всех функций программного продукта и проверяется соответствие полученных результатов ожидаемым, т.е. рассматриваются системные характеристики программ, но игнорируется их внутренняя логическая структура.

Проверка работоспособности кнопок. При нажатии на кнопку поднятия левого стеклоподъемника соответствующий диод загорается, а при отпускании диод перестает гореть. Также происходит с кнопкой опускания и кнопками правого стеклоподъемника. Работоспособность показана в соответствии с рисунком 7.1.

Рисунок 7.1 - Поднятие стеклоподъемника
При включении переключателя центрального замка, соответствующий диод загорается, а при отключении перестает гореть. Работоспособность показана в соответствии с рисунком 7.2.
Рисунок 7.2 Включен центральный замок: 1 - на макетной плате; 2 - в приложении
Нажав на кнопку «Старт» в приложении загорается красный индикатор, информирующий о том, что зажигание включено. Результат можно наблюдать в соответствии с рисунком 7.3. Соответствующие два диода на макетной плате тоже загораются, информируя о том, что пришли оба необходимых сигнала.
Рисунок 7.3 Включено зажигание: 1 - на макетной плате; 2 - в приложении
Пробуем, не нажав ни на одну кнопку на макетной плате, запустить двигатель - изменений не происходит. Нажав два раза быстро на кнопку «Старт» красный индикатор перестает гореть и все соответствующие диоды на плате тоже перестают гореть. Опять запустив зажигание, пробуем, нажав на макетной плате на кнопки, отвечающие за педаль тормоза и индикации зарядка аккумулятора, запустить двигатель. После трех необходимых секунд видим в соответствии с рисунком 7.4, что сигнал на стартер пришел, соответственно машина пытается завестись.
Рисунок 7.4 - Запущен стартер
Не отпуская клавиш, ждем пять секунд. Через пять секунд все питание отключается, значит, защита от перекручивания стартера работает исправно и это не даст нам пытаться запустить двигатель впустую. Опять зажав все клавиши и нажав кнопку «Старт» пытаемся завести двигатель, только в этот раз в момент, когда стартер начнет крутить, мы отпустим клавишу индикации заряда батарее на макетной плате, информируя о том, что машина завелась. Проделав эти действия в приложении, индикатор загорелся зеленым цветом, сообщая, что машина заведена. Результат можно увидеть в соответствии с рисунком 7.5.
Рисунок 7.5 - Машина заведена
Нажав еще раз на кнопку «Старт» происходит запланированное отключение питания.
Таким образом, проведя функциональное тестирование, было проверено, что все заявленные функции работают так, как и должны работать.

7.2 Структурное тестирование

При структурном тестировании (тестировании «белого ящика») известна внутренняя структура программы, исследуются внутренние элементы программы и связи между ними. Здесь проверяется корректность построения элементов программы и правильность их внутреннего взаимодействия друг с другом.

При выполнении структурного тестирования была проверена работоспособность всех функций и веток программного кода. Ошибок не обнаружено.

7.3 Альфа-тестирование

Альфа-тестирование - имитация реальной работы с системой штатными разработчиками, либо реальная работа с системой потенциальными пользователями/заказчиком.

При проведении некоторого количества раз альфа-тестирования была имитирована работа программного продукта. В результате ошибок не было обнаружено.

Заключение

Существует большое количество микропроцессоров и платформ осуществляющие схожие функции с Arduino: такие как Raspberry Pi, Iskra Neo, Strela, STM,Teensy,BeaglyBone и другие. Все эти устройства объединяет разрозненную информацию о программировании и заключает ее в легкую в использовании сборку. Однако Arduino имеет ряд преимуществ перед остальными для использования преподавателями, студентами и простыми пользователями:

Самое главное это низкая стоимость платы, по отношению к остальным.

Второе это кросс-платформенность. Arduino работает почти со всеми операционными системами: Windows, Macintosh и Linux.

В третьих среда программирования проста и понятна. Она подходит как для начинающих пользователей, так и для опытных. Также эта среда очень полезна как для преподавателей, так и для студентов, потому что все программы пишутся на языке C/C++.

В ходе выполнения программного продукта был спроектировано и разработано приложение для взаимодействия с микропроцессором Arduino. Была разработана и собрана принципиальная схема, а так же написан необходимый код, удовлетворяющий потребностям выпускной квалификационной работы.

Список использованных источников

1. Arduino [Электронный ресурс] Режим доступа: https://ru.wikipedia.org/wiki/Arduino.

2. Документация [Электронный ресурс] // Официальный сайт приложения RemoteXY - Режим доступа: http://remotexy.com/ru/help.

3. Резисторы [Электронный ресурс] // Школа для электрика - Режим доступа: http://electricalschool.info/main/sovety/464-rezistory.html.

4. Среда разработки Arduino [Электронный ресурс] // Официальный российский сайт Arduino - Режим доступа: http://arduino.ru/Arduino_environment.

Приложение 1 (обязательное)

Блок-схема алгоритма

Приложение 2 (обязательное)

Код программы

/* определение режима соединения и подключение библиотеки RemoteXY */

#define REMOTEXY_MODE__HC05_HARDSERIAL

#include <RemoteXY.h>

/* настройки соединения */

#define REMOTEXY_SERIAL Serial

#define REMOTEXY_SERIAL_SPEED 9600

/* конфигурация интерфейса приложения */

unsigned char RemoteXY_CONF[] =

{ 6,2,199,0,5,5,2,1,0,12

,6,23,23,19,3,24,24,2,208,161

,209,130,208,176,209,128,209,130,0,2

,0,12,44,27,13,19,39,22,11,2

,79,78,0,79,70,70,0,1,1,57

,18,12,12,13,64,12,12,2,203,132

,0,1,1,57,37,12,12,13,83,12

,12,2,203,133,0,1,1,82,18,12

,12,41,65,12,12,2,203,132,0,1

,1,82,37,12,12,41,83,12,12,2

,203,133,0,65,6,30,3,6,6,40

,1,7,7,2,129,0,2,36,51,5

,1,30,18,6,8,208,166,208,181,208

,189,209,130,209,128,208,176,208,187,209

,140,208,189,209,139,208,185,32,208,183

,208,176,208,188,208,190,208,186,0,129

,0,50,9,49,5,2,52,18,6,8

,208,161,209,130,208,181,208,186,208,187

,208,190,208,191,208,190,208,180,209,138

,208,181,208,188,208,189,208,184,208,186

,208,184,0 };

/* структура определяет все переменные вашего интерфейса управления */

struct {

/* input variable */

unsigned char start_in; /* =1 если кнопка нажата, иначе =0 */

unsigned char switch_central_locking; /* =1 если переключатель включен и =0 если отключен */

unsigned char button_windows_l_u; /* =1 если кнопка нажата, иначе =0 */

unsigned char button_windows_l_d; /* =1 если кнопка нажата, иначе =0 */

unsigned char button_windows_r_u; /* =1 если кнопка нажата, иначе =0 */

unsigned char button_windows_r_d; /* =1 если кнопка нажата, иначе =0 */

/* output variable */

unsigned char led_1_r; /* =0..255 яркость зеленого цвета индикатора */

unsigned char led_1_g; /* =0..255 яркость зеленого цвета индикатора */

/* other variable */

unsigned char connect_flag; /* =1 if wire connected, else =0 */

} RemoteXY;

/*---------------------------------------------------------------------*/

//Настройки

int ENGINE_START_MAX_TIME = 3; //В секундах максимальное время работы стартера

int kol=0;

// Порты входа

const int hand_brake_in = 12; // adruino Контакт ножного тормоза «-»

const int sharging_in = 3; //сигнал лампочки аккамулятора

const int sharging_on = 0; // 0 когда во время работы генератора или от датчика давления масла на этом входе низкое состояние , 1 когда на лампе генератора при работе генератора высокое состояние

const int hand_brake_on = 1; // 1= датчик ручника в поднятом состоянии выдает высокий уровень напряжения

// Порты выхода

const int starter_out = 11; // adruino реле стартера

const int engine_out = 10; // adruino зажигание

const int secpower_out = 9; // иницилизация вставленного ключа

const int windows_l_u = 8; // стеклоподъемник левый вверх

const int windows_l_d = 4; // стеклоподъемник левый вниз

const int windows_r_u = 6; // стеклоподъемник правый вверх

const int windows_r_d = 5; // стеклоподъемник правый вниз

const int central_locking = 7; // центральный замок

// variable for actual mode

int actual_mode = 0; // если 2 то двигатель запущен

unsigned long newTime=0; //начало отсчета времени работы программы

/*-------Начальные установки-------*/

void setup() {

RemoteXY_Init ();

Serial.begin(9600);//Для общения с Arduino и блютузом

RemoteXY.start_in = 0; //начальное значение 0 кнопки старт

//---- настройка входов и выходов контроллера --------------

// Входные пины

pinMode(hand_brake_in, INPUT); // enable input

pinMode(sharging_in, INPUT); // enable input

// Выходные пины ( на реле)

pinMode(starter_out, OUTPUT); // enable output

digitalWrite(starter_out, LOW); //set digital 0

pinMode(engine_out, OUTPUT); // enable output

digitalWrite(engine_out, LOW); //set digital 0

pinMode(secpower_out, OUTPUT); // enable output

digitalWrite(secpower_out, LOW); //set digital 0

pinMode(windows_l_u, OUTPUT); // enable output

digitalWrite(windows_l_u, LOW); //set digital 0

pinMode(windows_l_d, OUTPUT); // enable output

digitalWrite(windows_l_d, LOW); //set digital 0

pinMode(windows_r_u, OUTPUT); // enable output

digitalWrite(windows_r_u, LOW); //set digital 0

pinMode(windows_r_d, OUTPUT); // enable output

digitalWrite(windows_r_d, LOW); //set digital 0

pinMode(central_locking, OUTPUT); // enable output

digitalWrite(central_locking, LOW); //set digital 0

//---- конец настройки входов и выходов контроллера --------------

}

void loop()

{

//---- код программы --------------

/*-----Старт/стоп------*/

RemoteXY_Handler ();

if (actual_mode < 2 ) //если двигатель не запущен

check_start(); //Управляем режимом запуска

if (actual_mode == 2 ) // если двигатель запущен

{

check_for_shutdown(); //Управляем режимом ожидания

Serial.print(«Start_in:»); //Для проверки

Serial.println(RemoteXY.start_in);//тоже

}

/*------конец Старт/стоп ---------*/

/*---------Стеклоподъемники и центральный замок-----*/

if (RemoteXY.button_windows_l_u != 0) digitalWrite(windows_l_u, HIGH); // при нажатие на кнопку подается сигнал, для остальных так же

else digitalWrite(windows_l_u, LOW);

if (RemoteXY.button_windows_l_d != 0) digitalWrite(windows_l_u, HIGH);

else digitalWrite(windows_l_d, LOW);

if (RemoteXY.button_windows_r_u != 0) digitalWrite(windows_l_u, HIGH);

else digitalWrite(windows_r_u, LOW);

if (RemoteXY.button_windows_r_d != 0) digitalWrite(windows_l_u, HIGH);

else digitalWrite(windows_r_d, LOW);

if (RemoteXY.switch_central_locking != 0) digitalWrite(central_locking, HIGH);

else digitalWrite(central_locking, LOW);

}

//------------------конец основного кода -----------------

//---- а дальше идут используемые функции и подфункции --------------

void check_start()

{

if (RemoteXY.start_in != 0) // !=0 значит импульс старта пришел с планшета

{

RemoteXY.led_1_r = 255; //включаем красный индикатор, сообщая что зажигание включено

RemoteXY.start_in=0; //обнуляем значение кнопки

Serial.println(«on ACC!»); //----------------

Serial.println(digitalRead(sharging_in)); //Для проверки

Serial.println(digitalRead(hand_brake_in)); //----------------

digitalWrite(engine_out, HIGH); //включаем зажигание

digitalWrite(secpower_out, HIGH); //включаем печку фары итд

if(kol!=0) //если не первый раз запуск

{

newTime = millis()-newTime; //время между нажатиями клавишы

Serial.print(«newTime:»); //-----------------

Serial.println(newTime); //----------------

if(newTime<1500) //Если время меньше 1,5 сек

{

do_shutdown(); //то глушим все

kol=-1; //и обнуляем кол-во запусков

}

else

{

newTime=millis(); //Если больше то просто запоминаем время нажатия

}

}

else //если первый запуск

{

newTime=millis(); //запоминаем время

Serial.print(«newTime000:»); //-----------------

Serial.println(newTime); //----------------

kol++; //и увеличиваем колличество запусков

}

if (digitalRead(hand_brake_in) == hand_brake_on && digitalRead(sharging_in) != sharging_on ) // проверяем что ручник стоит а генератор не работает (0 - лампа горит, генератор не работает)

{

Serial.println(«3apyckaem dvigatel!»);

delay(3000);//Ждем 3 сек чтобы накачал бензонасос

if (digitalRead(sharging_in) != sharging_on) // проверяем что генератор не работает

{

Serial.println(«Krytim starter»);

do_start(); // пытаемся запустить двигатель

}

//actual_mode = 2; //Запоминаем что движок запущен

} // конец проверки что ручник стоит а генератор не работает

} // конец проверки что импульс старта пришел с дистанционного управления

} // конец процедуры старта

/*---Запуск двигателя---*/

void do_start()

{

Serial.print(«Start_in:»); //-----------------

Serial.println(RemoteXY.start_in);//----------------

digitalWrite(secpower_out, LOW); //выключаем печку фары итд

//----------------------------------------------------------------------------------- цикл стартера

digitalWrite(starter_out, HIGH); //включаем стартер

for (int secs=0; secs <= ENGINE_START_MAX_TIME ; secs++)

{

delay(1000); // и продолжаем его держать включенным 1 секунду

if (digitalRead(sharging_in) == sharging_on) //если зарядка пошла то

break; // прерываем цикл

}

//-----------------------------------------------------------------------------------

digitalWrite(starter_out, LOW); //отключаем стартер

digitalWrite(secpower_out, HIGH); //включаем печку фары итд

if (digitalRead(sharging_in) == sharging_on) //еще раз смотрим что зарядка пошла

{

actual_mode = 2; //Запоминаем что движок запущен

}

else

{

digitalWrite(engine_out, LOW); //выключаем зажигание чтбы разблокировать реле стартера

digitalWrite(secpower_out, LOW); //выключаем печку фары итд

RemoteXY.led_1_r = 0; //отключаем красный индикатор

}

}

void check_for_shutdown()

{

//сюда мы попадаем когда контроллер считает что движок работает

if (digitalRead(sharging_in) != sharging_on ) //проверяем что движок случайно не заглох

do_shutdown(); //если заглох, то все глушим

else

RemoteXY.led_1_g = 255; //Включаем индикатор в приложении

Serial.println(«dvigatel on!»);

Serial.println(RemoteXY.start_in);

if (RemoteXY.start_in != 0) //если нажалась кнопка в приложении, то глушим двигатель

{

RemoteXY.start_in=0;

do_shutdown();

}

}

/*----------функция отключения питания---------*/

void do_shutdown()

{

RemoteXY.led_1_g = 0; //Выключаем индикатор в приложении

RemoteXY.led_1_r = 0;

digitalWrite(secpower_out, LOW); //выключаем печку фары и т.д.

digitalWrite(engine_out, LOW); //вырубаем зажигание

actual_mode = 0; // движок выключили, запомним это

Serial.println(«Bce off!»);

}

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.