Система управления автомобилем на базе 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Обзор технологической платформы для разработки клиентского веб-интерфейса. Выбор платформы базы данных, языка разработки, фреймворка на стороне сервера и клиента. Создание схемы данных MySQL. Работа пользователя и оператора с программным продуктом.
курсовая работа [4,1 M], добавлен 17.07.2012Google Android как программный стек для мобильных устройств, который включает операционную систему, программное обеспечение промежуточного слоя и пользовательские приложения. Структура платформы и ее основные элементы: ядро, программы, каркас приложений.
реферат [600,4 K], добавлен 08.01.2015Архитектура и история создания операционной системы Android. Язык программирования Java. Выбор средства для реализации Android приложения. Программная реализация Android приложения. Проведение тестирования разработанного программного обеспечения.
курсовая работа [167,8 K], добавлен 18.01.2017