Система управления автомобилем на базе Arduino

Представление о системе Arduino. Структура платформы Android. Выбор средств разработки. Разработка структур данных и алгоритмов. Характеристика Bluetooth модуля, блок реле, резисторов, диодов. Графический интерфейс приложения. Написание кода программы.

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

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

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

Рисунок 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, Beagly Bone и другие. Все эти устройства объединяет разрозненную информацию о программировании и заключает ее в легкую в использовании сборку. Однако Arduino имеет ряд преимуществ перед остальными для использования преподавателями, студентами и простыми пользователями:

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

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

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

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

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

1. Arduino

2. Документация // Официальный сайт приложения RemoteXY

3. Резисторы // Школа для электрика

4. Среда разработки Arduino // Официальный российский сайт Arduino

Приложение 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);//Для общения с ардуино и блютузом

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


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

  • Средства разработки развивающих и обучающих игр и используемой программы. Среда выполнения и Dalvik. Разработка приложения для платформы Android. Графический интерфейс и обработка касаний экрана. Разработка экранов приложения и их взаимодействия.

    дипломная работа [2,1 M], добавлен 18.01.2016

  • Разработка клиент-серверного игрового приложения на примере игры в шашки для мобильных устройств на базе операционной системы Android. Обзор мобильных платформ. Экраны приложения и их взаимодействие. Графический интерфейс, руководство пользователя.

    курсовая работа [2,6 M], добавлен 15.06.2013

  • Знакомство с особенностями и этапами разработки приложения для платформы Android. Рассмотрение функций персонажа: бег, прыжок, взаимодействие с объектами. Анализ блок-схемы алгоритма генерации платформ. Способы настройки функционала рабочей области.

    дипломная работа [3,4 M], добавлен 19.01.2017

  • Структура и архитектура платформы Android. Основные достоинства и недостатки операционной системы Android. Среда разработки Eclipse, платформа Java. Подготовка среды разработки. Вкладка "Погода", "Курс валют", "Новости". Просмотр полной новости.

    дипломная работа [1,0 M], добавлен 11.07.2014

  • Анализ целевой аудитории. Функциональные характеристики пользовательского приложения. Разработка алгоритмов и интерфейса программного продукта, функций рабочей области. Написание скриптов на языке C#. Тестирование программы методом чёрного ящика.

    дипломная работа [1,5 M], добавлен 09.11.2016

  • Анализ свободно распространяемых систем обучения. Главная контекстная диаграмма (модель AS-IS). Декомпозиция процесса "Регистрация, поддержка пользователей". Выбор методологий моделирования и инструментария. Руководство по установке приложения на Android.

    дипломная работа [2,1 M], добавлен 29.07.2016

  • Обзор мобильной ОС Android. Выбор инструментов и технологий. Проектирование прототипа графического интерфейса. Характеристика и описание пользовательского интерфейса. Проектирование и разработка базы данных. Определение списка необходимых разрешений.

    курсовая работа [376,6 K], добавлен 13.09.2017

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