Файл: Дипломный проектработа тема работы Разработка gsmконтроллера для систем управления беспроводным.pdf
Добавлен: 12.01.2024
Просмотров: 304
Скачиваний: 6
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Теоретический уровень полученных результатов – n
2
Баллы
Установка закона, разработка новой теории
10
Глубокая разработка проблемы, многоспектральный анализ взаимодействия между факторами с наличием объяснений
8
Разработка способа (алгоритм, программа и т. д.)
6
Элементарный анализ связей между фактами (наличие гипотезы, объяснения версии, практических рекомендаций)
2
Описание отдельных элементарных факторов, изложение наблюдений, опыта, результатов измерений
0,5
Таблица 90.12 – Время реализации результатов проекта
Время
реализации
результатов– n
3
Баллы
В течение первых лет
10
От 5 до 10 лет
4
Свыше 10 лет
2
Так как все частные признаки научно-технического уровня оцениваются по
10-балльной шкале, а сумма весов Ri равна единице, то величина интегрального показателя также принадлежит интервалу [0, 10].
В таблице 9.13 указано соответствие качественных уровней НИР значениям показателя, рассчитываемого по формуле (9.13).
95
Таблица 90.13 – Соответствие качественных уровней ВКР
Уровень НТЭ
Показатель НТЭ
Низкий
1-4
Средний
4-7
Высокий
8-10
Для данной разработки частные оценки уровня n i и их краткое обоснование даны в таблице (9.14).
Таблица 90.14 – Оценки научно-технического уровня НИР
Значимость
Фактор
НТУ
Уровень фактора
Выбран ный балл
Обоснование выбранного балла
0,4
Уровень новизны
Не обладает новизной
0
Цель данного ВКР состоит в усовершенствовани и параметров устройства, аналоги которого широко применяются в практике
0,1
Теоретичес кий уровень
Разработка способа
6
Разработка и внедрение на практике установленных теоретическим способом ряда параметров для улучшения работы устройства
96 0,5
Возможно сть реализации
В течении первых лет
10
Проект готов к реализации опытного образца применение его в лабораторных условиях
Отсюда интегральный показатель научно-технического уровня для нашего проекта составляет:
I
нту
= 0,4*0 + 0,1*6 + 0,5*10 = 0 + 0,6 + 5 = 5,6
Таким образом, исходя из данных таблицы 9.14, данный проект имеет средний уровень научно-технического эффекта.
97
ЗАКЛЮЧЕНИЕ
В ходе выполнения выпускной квалификационной работы были рассмотрены вопросы, связанные с построением GSM-контроллера для систем управления беспроводным доступом к объекту.
Рассмотрены различные системы доступа, существующие на сегодняшний день на рынке, описаны их достоинства и недостатки.
Разработаны структурная, функциональная и принципиальная схемы, произведен расчет и выбор элементной базы. Произведен расчет экономической эффективности проекта. Составлен алгоритм работы, написана управляющая программа для программирования выбранного микроконтроллера.
Особое внимание уделялось тому, чтобы устройство полностью удовлетворяло поставленным в техническом задании требованиям, а также являлось высоконадежным, многофункциональным и отвечало всем основным, современным требованиям, предъявляемым к вычислительной аппаратуре.
Для достижения этой цели, были разработаны технологичные аппаратные решения, построенные на современной микропроцессорной электронике. Это обеспечило высокую надежность и быстродействие, наряду с низким энергопотреблением и небольшими габаритными размерами аппаратного модуля.
В процессе разработки были получены навыки работы с микроконтроллерами семейства ATmega-8 фирмы “ATMEL”, и интерфейсом RS-232 , широко использующегося в промышленной электронике. Так же была произведена оценка технико-экономической эффективности разработки.
В разделе социальная ответственность проекта проведен анализ вредных и опасных факторов, воздействующих на здоровье и жизнь человека в процессе разработки GSM-контроллера, рассмотрены мероприятия, обеспечивающие безопасные условия труда. Произведен расчет освещения рабочего места пользователя ПЭВМ, который обеспечивает благоприятные условия труда.
Устройство рассчитано на круглосуточную работу при наличии питающего напряжения.
98
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1 ГОСТ Р 51241-2008 Средства и системы контроля и управления доступом. Классификация. Общие технические требования. Методы испытаний. свободный. Загл. с экрана, дата обращения 03.04.16.
2 Системы контроля и управления доступом: назначение и задачи СКУД http://secandsafe.ru/stati/spravochnik_bezopasnosti/sistiemy_kontrolia_i_upravlieniia_d ostupom_naznachieniie_i_zadachi_skud свободный. Загл. с экрана, дата обращения
04.04.16.
3 GSM контроллер CCU825 [Электронный ресурс]. Режим доступа: http://www.dozorsb.ru/Products/dirid_44/tek_5988/ свободный. Загл. с экрана, дата обращения 04.05.16.
4 Контроллеры "Lite-1000/2000", [Электронный ресурс]. Режим доступа: http://www.esguard.spb.ru/index.php?id=86&option=com_content&view=article, свободный. Загл. с экрана, дата обращения 04.05.16.
5 Валов А.В. Микропроцессоры и их применение в системах управления:
Учебное пособие/А.В. Валов – Челябинск: Изд-ий центр ЮУрГУ,2012 –Ч.2 – 81 с.
6 Руководство по работе с GSM/GPRS модемом SIM300 [Электронный ресурс]. Режим доступа: jelezka.ucoz.ru›SIM300_AN_V1.2RUS.pdf, свободный.
Загл. с экрана. Проверено 20.05.16 7 Шпак Ю.А. Программирование на языке С для AVR и PIC микроконтроллеров. Изд-во 2-е, переработанное и дополненное/Сост. Шпак Ю.А.
– К. «МК-Пресс», СПб.: «КОРОНА-ВЕК, 2011 – 544 с.
8 Руководство по работе с EEPROM AT24C128 [Электронный ресурс] режим доступа: atmel.com/Images/doc0670.pdf, свободный. Проверено 11.03.16 9 Чип и дип. Приборы и электронные компоненты [Электронный ресурс].
Режим доступа: http://www.chipdip.ru/, свободный. ¬ Загл. с экрана. Проверено
10.02.16.
10 Мологонцева
О.Ф.
Проектирование цифровых устройств на однокристальных микроконтроллерах / В.В. Сташин, А.В. Урусов, О.Ф.
Мологонцева. - М. : Энергоатомиздат, 1990. – 224с.
99 11 Романенко С.В. Методические указания по разработке раздела
«Социальная ответственность» ВКР магистра, специалиста и бакалавра всех направлений (специальностей) и форм обучения ТПУ/Сост. С.В. Романенко, Ю.В.
Анищенко – Томск: Из-во Томского политехнического университета, 2016. – 11 с.
12 Конотопский В.Ю. Методические указания к выполнению раздела
«Финансовый менеджмент, ресурсоэффективность и ресурсосбережение» магистерских диссертаций для всех специальностей ИК/
сост. В.Ю. Конотопский
Томск. Издательство Томского Политехнического Университета 2015г. – 29 с.
13 Пирогова Е.В. Проектирование и технология печатных плат: Учебник. –
М.: ФОРУМ:ИНФРА-М, 2005. – 560 с.
14 Долин П.А. Справочник по технике безопасности / под ред. П.А. Долин
– М. : Энергоатомиздат, 1982. – 734с.
15 ГОСТ 2.701-84 ЕСКД. Схемы. Виды и типы. Общие требования к выполнению. – Взамен ГОСТ 2.701-2008 ; введ. 2009.07.01. – М.: Госстандарт
России: Изд-во стандартов, 2009. – 9с.
16 ГОСТ 2.109-73 ЕСКД. Основные требования к чертежам. - Взамен ГОСТ
2.107-68, ГОСТ 2.109-68, ГОСТ 5292-60 в части разд. VIII; введ.2006.02.28: Изд- во стандартов, 2007. – 3с.
17 ГОСТ 12.0.003-74. Опасные и вредные производственные факторы. – введ.2010.07.20: Изд-во стандартов
ИПК Москва, 1999. – 4с
18 ГОСТ 12.2.032-78 ССБТ. Рабочее место при выполнении работ сидя.
Общие эргономические требования. Введ. 01.01.79. – 9с.
19 ГОСТ 12.1.005-88 ССБТ. Общие санитарно – гигиенические требования к воздуху рабочей зоны. Введ. 01.01.89. – 49с.
20 СанПин 2.2.2/2.4.1340 – 03 «Гигиенические требования к персональным электронно-вычислительным машинам и организации работы»
21 Об уровнях тарифов на электрическую энергию потребляемую населением: постановление Правительства Российской Федерации от 01 мая 2016 г. № 418 // Экономика и финансы электроэнергетики. - 2000. - № 7, с.67-70 22 Бюджетный учёт, [Электронный ресурс]. Режим доступа: www.vkaznu.ru свободный. Загл. с экрана. Проверено 20.02.2016.
100
ПРИЛОЖЕНИЕ А
Схема электрическая функциональная GSM-контроллера доступа
101
ПРИЛОЖЕНИЕ Б
Схема электрическая принципиальная GSM-контроллера доступа
102
ПРИЛОЖЕИНЕ В
Перечень элементов GSM-контроллера доступа
103
ПРИЛОЖЕИНЕ Г
Листинг программы работы микроконтроллера
#include "main.h"
#include "Flash/Flash.h"
#include "Eeprom/Eeprom.h"
#include "Systime/Systime.h"
#include "Sleep/Sleep.h"
#include "USB/uart.h"
#include "GSM/uart.h"
#include "GSM/HighLevel.h"
///Объявления переменных//////////////////////////////////////////////////////// volatile bool Sensor_B; bool WelcomeMode=0;
///Функция инициализации портов контроллера///////////////////////////////////// static inline void Init(void); int main(void)
{ wdt_enable(WDTO_2S);
Init();
//Инициализация портов контроллера
Flash::Init();
//Инициализация флэш
Systime::Init_Timer0();
Systime::Init_Timer1();
Systime::Init_Timer2();
GSM::Init();
USB::Init();
GSM::On();
PORTB SET_B(GAIN_CONTROL_OUT); if(eeprom_read_byte((uint8_t*)&FirstStart)) //Если запуск программы впервые, то загружаем настройки по умолчанию
{
Eeprom_Load_Settings("Locktime=5");
Eeprom_Load_Settings("Mode=1");
Eeprom_Load_Settings("Master=+79xxxxxxxxx"); eeprom_write_byte ((uint8_t*)&FirstStart, 0xFF);
Eeprom_Load_Settings("Owner=+79xxxxxxxxx");
Eeprom_Load_Settings("Volume=8");
Flash::Format();
}
RESET:
GSM_Power_Off(); if(!GSM_Power_On()) goto RESET;
Sleep::SetTimeout2(Systime::MINUTE);
Sleep::SetTimeout3(Systime::MINUTE*2);
Sleep::On(Systime::SECOND*5); if(!GSM_Setup()) goto RESET; for(;;)
{ wdt_reset();
USB::HandleData();
104 if(GSM::Data_Received)
{
GSM_Ring_Check ();
GSM::Data_Received=0;
} if(bit_is_clear(PINC,SENSOR_B_IN))
{
GSM_Dial_Owner();
} if(Sleep::Timeout2())
{ if(GSM_Network_Check())
{
// USB::Send_char("test",4);
GSM_Set_Volume();
GSM_SMS_Check ();
Sleep::SetTimeout3(Systime::SECOND*30);
} if(Sleep::Timeout3()) goto RESET;
Sleep::SetTimeout2(Systime::SECOND*20);
GSM::Data_Received=0;
}
}
}
/////////////////////////Функция инициализации портов контроллера/////////////// void Init(void)
{ cli();
///PORTB////////////////////////////////////////////////////////////////////////
DDRB = _BV(_CS_FLASH_OUT) | _BV(MESSAGE_OUT) | _BV(GAIN_CONTROL_OUT) |
_BV(MOSI_FLASH_OUT) | _BV(SCK_FLASH_OUT);
PORTB = _BV(_CS_FLASH_OUT);
///PORTC////////////////////////////////////////////////////////////////////////
DDRC = _BV(YELLOW_LED_OUT) | _BV(GREEN_LED_OUT) | _BV(CONTROL_1_OUT) |
_BV(CONTROL_2_OUT);
PORTC = _BV(SENSOR_B_IN);
///PORTD////////////////////////////////////////////////////////////////////////
DDRD = _BV(MCU_COMP_TXD_OUT) | _BV(CONTROL_3_OUT) | _BV(_RESET_FLASH_OUT)
| _BV(MCU_GSM_TXD_OUT) | _BV(GSM_PWRKEY_OUT) | _BV(RELAY_OUT);
PORTD = _BV(COMP_MCU_TXD_IN) | _BV(MCU_COMP_TXD_OUT) |
_BV(GSM_MCU_TXD_IN)| _BV(_RESET_FLASH_OUT) | _BV(MCU_GSM_TXD_OUT) |
_BV(GSM_PWRKEY_OUT); sei();
}
#include "uart.h"
///Переменные класса//////////////////////////////////////////////////////////// volatile uint8 GSM::TransmitTime; volatile uint8 GSM::TransmitBitnumber;
105 volatile uint8 GSM::ReceiveBitnumber; volatile uint8 GSM::ReceiveTime; volatile uint8 GSM::Temp; volatile uint8 GSM::Data_Received; volatile uint8 GSM::Received_Size; volatile uint16 GSM::x; volatile uint8 GSM::Time1; char GSM::Buffer[GSM_UART_BUFFER_SIZE]; volatile uint8 GSM::on;
///Функция отправки байта/////////////////////////////////////////////////////// void GSM::Send_byte( uint8 byte )
{
TransmitBitnumber=0;
TransmitTime=UART_BOUDRATE; for (;;)
{ if (TransmitTime==0)
{ if(TransmitBitnumber==0)
{
UART_TRANSMIT_GSM_PORT CLR_B(UART_TRANSMIT_GSM_PIN);
TransmitBitnumber++;
TransmitTime=UART_BOUDRATE; continue;
} if (TransmitBitnumber>9)
{
TransmitBitnumber=0; break;
} if (TransmitBitnumber>8)
{
UART_TRANSMIT_GSM_PORT SET_B(UART_TRANSMIT_GSM_PIN) ;
TransmitBitnumber++;
TransmitTime=UART_BOUDRATE; continue;
} if (bit_is_set(byte , TransmitBitnumber-1))
{
UART_TRANSMIT_GSM_PORT SET_B(UART_TRANSMIT_GSM_PIN);
} else
{
UART_TRANSMIT_GSM_PORT CLR_B(UART_TRANSMIT_GSM_PIN);
}
TransmitBitnumber++;
TransmitTime=UART_BOUDRATE;
};
};
};
///Фуекция отправки строки////////////////////////////////////////////////////// void GSM::Send_char(char *word, uint8 n )
{
GSM::Data_Received=0;
GSM::Received_Size=0;
// Очистить буфер
GSM UART
106 for(uint8 i=0; i {
GSM::Send_byte(word[i]);
}
}; void GSM::Send_prog_char(prog_char * String)
{
GSM::Data_Received=0;
GSM::Received_Size=0; char Buf[20]; strcpy_P(Buf, String); for(uint8 i=0; i {
GSM::Send_byte(Buf[i]);
}
}
///Функция, обеспечивающая прием посылки//////////////////////////////////////// void GSM::Receiving()
{ if(ReceiveTime==0)
{ if(ReceiveBitnumber==0)
{
EIMSK CLR_B(INT1); //External Interrupt Request 0 Disable
OCR1AL= Systime::TIMER1_OCR_VALUE; // Set OCR value on normal
}; if(ReceiveBitnumber==8)
{
TCCR1B=0x00; // Stop Timer
EIFR SET_B(INTF1);
EIMSK SET_B(INT1); //External Interrupt Request 0 Enable
ReceiveTime = UART_BOUDRATE;
ReceiveBitnumber=0;
Buffer[x]=Temp; // Write recieved byte into buffer x++; if(x>=GSM_UART_BUFFER_SIZE){x=0;}
Time1 = 20*UART_BOUDRATE; //Run End_Recieve (void) in systime timer
} else
{ if (bit_is_set(UART_RECIEVE_GSM_PORT , UART_RECIEVE_GSM_PIN ))
{
Temp SET_B(ReceiveBitnumber);
} else
{
Temp CLR_B(ReceiveBitnumber);
};
ReceiveBitnumber++;
ReceiveTime = UART_BOUDRATE;
};
};
};
///Обработчик прерывания по INT1////////////////////////////////////////////////
SIGNAL (INT1_vect)
{
107
EIMSK = 0;
TCNT1H = 0x00;
TCNT1L = 0x00; //Clear timer
OCR1AL= (Systime::TIMER1_OCR_VALUE + 50); // 1.5 OCR value
TCCR1B = _BV(WGM12)| TIMER1_SPEED; // Run timer on CTC mode
};
#include "HighLevel.h" prog_char AT[]="AT\r\n"; prog_char ATE0[]="ATE0\r\n"; prog_char ATCIURC[]="AT+CIURC=0\r\n"; prog_char OK[]="\r\nOK\r\n"; prog_char CNMI[]="AT+CNMI=2,0,0,0,0\r\n"; prog_char CMGF[]="AT+CMGF=1\r\n"; prog_char CLVL[]="AT+CLVL="; prog_char RN[]="\r\n"; prog_char RING[]="\r\nRING\r\n"; prog_char CLCC[]="AT+CLCC\r\n"; prog_char PLUSCLCC[]="\r\n+CLCC:"; prog_char ATH[]="ATH\r\n"; prog_char CSCS[]="AT+CSCS=\"8859-1\"\r\n";
///Включение SIM300D в зависимости от статуса/////////////////////////////////// bool GSM_Power_On(void)
{ if( bit_is_clear(PINC,STATUS_GSM_IN) ) // Если STATUS=0, включение
SIM300D
{
PORTD CLR_B(GSM_PWRKEY_OUT);
// Низкий уровень на
PWRKEY на 2 сек
Sleep::On(Systime::SECOND*2);
PORTD SET_B(GSM_PWRKEY_OUT);
Sleep::SetTimeout(Systime::SECOND*3); while(bit_is_clear(PINC,STATUS_GSM_IN))
{ if(Sleep::Timeout()) return false;
}
} return true;
}
///Выключение SIM300D в зависимости от статуса //////////////////////////////// bool GSM_Power_Off(void)
{ if (bit_is_set(PINC,STATUS_GSM_IN))
// Если STATUS=1, выключение
SIM300D
{
PORTD CLR_B(GSM_PWRKEY_OUT);
Sleep::On(Systime::SECOND*2);
PORTD SET_B(GSM_PWRKEY_OUT);
Sleep::SetTimeout(Systime::SECOND*5); while(bit_is_set(PINC,STATUS_GSM_IN)) // Если вышел таймаут 5 сек, повторить сначала
{ if(Sleep::Timeout()) return false;
}
GSM::Data_Received=0;
108
} return true;
}
///Ввод настроек SIM300D//////////////////////////////////////////////////////// bool GSM_Setup(void)
{
GSM::Send_prog_char(AT); //Подача команд для авто определения скорости
Sleep::On(Systime::MSECOND*100);
GSM::Data_Received=0;
GSM::Send_prog_char(AT);
Sleep::SetTimeout(Systime::MSECOND*200); while(!GSM::Data_Received)
{ if(Sleep::Timeout()) return false;
}
GSM::Data_Received=0;
GSM::Send_prog_char(ATE0); //Команда выключения эхо
Sleep::SetTimeout(Systime::MSECOND*200); while(!GSM::Data_Received)
{ if(Sleep::Timeout()) return false;
}
GSM::Data_Received=0;
GSM::Send_prog_char(ATCIURC); //Выключение вывода Call Ready
Sleep::SetTimeout(Systime::MSECOND*200); while(!GSM::Data_Received)
{ if(Sleep::Timeout()) return false;
} if(strncmp_P(GSM::Buffer,OK,6)!=0) return false;
GSM::Data_Received=0;
GSM::Send_prog_char(CNMI); //Выключение оповещения о входящих СМС
Sleep::SetTimeout(Systime::MSECOND*200); while(!GSM::Data_Received)
{ if(Sleep::Timeout()) return false;
} if(strncmp_P(GSM::Buffer,OK,6)!=0) return false;
GSM::Data_Received=0;
GSM::Send_prog_char(CMGF); //Включение текстового режима СМС
Sleep::SetTimeout(Systime::MSECOND*200); while(!GSM::Data_Received)
{ if(Sleep::Timeout()) return false;
} if(strncmp_P(GSM::Buffer,OK,6)!=0) return false;
GSM::Data_Received=0;
/* GSM::Send_prog_char(CSCS); //Включение текстового режима СМС
Sleep::SetTimeout(Systime::MSECOND*200); while(!GSM::Data_Received)
{ if(Sleep::Timeout()) return false;
}
USB::Send_char(GSM::Buffer,GSM::Received_Size); //ОТЛАДКА if(strncmp_P(GSM::Buffer,OK,6)!=0) return false;
109
GSM::Data_Received=0;*/ return true;
}
/// /////////////////////////////// bool GSM_Set_Volume(void)
{
GSM::Send_prog_char(CLVL); // uint8 Vol=0; char buff[3];
Vol=eeprom_read_byte((uint8_t*)&Volume)*10;
Vol+=10; itoa(Vol,buff,10);
GSM::Send_char(buff,strlen(buff));
GSM::Send_prog_char(RN);
Sleep::SetTimeout(Systime::MSECOND*200); while(!GSM::Data_Received)
{ if(Sleep::Timeout()) return false;
} if(strncmp_P(GSM::Buffer,OK,6)!=0) return false;
GSM::Data_Received=0; return true;
}
///Обработка входящих звонков/////////////////////////////////////////////////// bool GSM_Ring_Check (void)
{ char number_buffer[60]; char masternumber[12]; for(uint8 i=0;i<12;i++)
{ masternumber[i]=eeprom_read_byte((uint8_t*)&MasterNumber[i]);
} char ownernumber[12]; for(uint8 i=0;i<12;i++)
{ ownernumber[i]=eeprom_read_byte((uint8_t*)&OwnerNumber[i]);
} if(strncmp_P(GSM::Buffer,RING,8)==0)
{
GSM::Send_prog_char(CLCC);
Sleep::SetTimeout(Systime::MSECOND*200); while(!GSM::Data_Received)
{ if(Sleep::Timeout())return false;
} if(strncmp_P(GSM::Buffer,PLUSCLCC,8)==0)
{ for(uint8 i=0;i<:received_size> { number_buffer[i]=GSM::Buffer[i];
}
GSM::Send_prog_char(ATH);
Sleep::SetTimeout(Systime::SECOND); while(!GSM::Data_Received)
110
{ if(Sleep::Timeout())return false;
} if(strncmp_P(GSM::Buffer,OK,6)!=0) return false; for(uint8 i=0;i<50;i++)
{ if(number_buffer[i]==0x22)
{ for(uint8 z=0;z<12;z++)
{ number_buffer[z]=number_buffer[z+i+1];
} for(uint8 i=12;i<60;i++) {number_buffer[i]=0;} if(eeprom_read_byte((uint8_t*)&FirstStart))
{ for(uint8 i=0; i<12; i++)
{ eeprom_write_byte ((uint8_t*)&MasterNumber[i], number_buffer[i]);
} eeprom_write_byte ((uint8_t*)&FirstStart, 0x00);
GSM_send_SMS(number_buffer,"You are master",14);
} if(Flash::FindEntry(number_buffer) || (strncmp(number_buffer,masternumber,12)==0) ||
(strncmp(number_buffer,ownernumber,12)==0) )
{
USB::Send_char(number_buffer,12);
GSM_Generate_DTMF(3); switch(eeprom_read_byte((uint8_t*)&Mode))
{ case SWITCH_MODE:
{
PORTC INV_B(GREEN_LED_OUT);
PORTD INV_B(RELAY_OUT); break;
} case DELAY_MODE:
{
PORTC SET_B(GREEN_LED_OUT);
PORTD SET_B(RELAY_OUT);
Sleep::On(Systime::SECOND*eeprom_read_byte((uint8_t*)&LockTime));
PORTC CLR_B(GREEN_LED_OUT);
PORTD CLR_B(RELAY_OUT); break;
} default: break;
} return true;
} else if(WelcomeMode)
{ if(Flash::WriteEntry(number_buffer))
{
PORTC SET_B(GREEN_LED_OUT);
Sleep::On(Systime::MSECOND*300);
PORTC CLR_B(GREEN_LED_OUT);
Sleep::On(Systime::MSECOND*300);
111
PORTC SET_B(GREEN_LED_OUT);
Sleep::On(Systime::MSECOND*300);
PORTC CLR_B(GREEN_LED_OUT);
Sleep::On(Systime::MSECOND*300);
PORTC SET_B(GREEN_LED_OUT);
Sleep::On(Systime::MSECOND*300);
PORTC CLR_B(GREEN_LED_OUT);
Sleep::On(Systime::MSECOND*300); return true;
}
} else return false;
}
}
}
} return true;
}
///Отправка СМС-сообщения мастеру/////////////////////////////////////////////// bool GSM_send_SMS(char *number, char *SMSText, uint8 lenght)
{
GSM::Send_char("AT+CMGS=\"",9);
GSM::Send_char(number,12);
GSM::Send_char("\"\r\n",3);
Sleep::SetTimeout(Systime::SECOND); while(!GSM::Data_Received)
{ if(Sleep::Timeout()) return false;
} if(strncmp("\r\n",GSM::Buffer,2)==0)
{
GSM::Send_char(SMSText,lenght);
GSM::Send_byte(0x1a);
// добавить спецсимвол SUB
Sleep::SetTimeout(Systime::SECOND*10); while(!GSM::Data_Received)
{ if(Sleep::Timeout()) return false;
} if(strncmp("\r\n+CMGS",GSM::Buffer,7)==0) return true;
} return false;
}
///Функция проверки входящих СМС-сообщений////////////////////////////////////// bool GSM_SMS_Check (void)
{ char masternumber[12]; char commandbuffer[64]; char smsnumber[12]; uint8 flag=0; for(uint8 i=0;i<64;i++) //Очистка коммандного буффера
{
112 commandbuffer[i]=0;
} for(uint8 i=0;i<12;i++)
{ masternumber[i]=eeprom_read_byte((uint8_t*)&MasterNumber[i]);
}
GSM::Send_char("AT+CMGR=1\r\n",11);
// Проверить, есть ли SMS
// USB::Send_char("R\r\n",3); //ОТЛАДКА
Sleep::SetTimeout(Systime::SECOND*5); while(!GSM::Data_Received)
{ if(Sleep::Timeout())
{
USB::Send_char("T\r\n",3); return false;
}
}
USB::Send_char(GSM::Buffer,GSM::Received_Size); //ОТЛАДКА if(strncmp("\r\n+CMGR:",GSM::Buffer,8)==0)
// Если есть SMS-команда
{ for(uint8 i=0;i<40;i++)
{ if(GSM::Buffer[i]==0x22)flag++; if(flag==3)
// ... найти четвертую кавычку и установить flag
{
// на первый символ команды flag=i+1; break;
}
} for(uint8 i=0;i<12;i++)
// В sms_number скопировать номер отправителя SMS
{ smsnumber[i]=GSM::Buffer[i+flag];
}
// USB::Send_char("\r\n",2); //ОТЛАДКА
// USB::Send_char(smsnumber,12);
// USB::Send_char("\r\n",2); if(strncmp(masternumber,smsnumber,12)==0)
// Если номер отправителя =
Master_number ...
{ flag=0; for(uint8 i=10; i<:received_size> { if(GSM::Buffer[i]==0x0a)
// ... перейти к началу SMS
{ flag=i; break;
}
} uint8 message_size=GSM::Received_Size-flag-9; if(message_size>64) message_size=64; for(uint8 i=0;i // В Buffer скопировать команду
{ commandbuffer[i]=GSM::Buffer[i+flag+1];
}
2
Баллы
Установка закона, разработка новой теории
10
Глубокая разработка проблемы, многоспектральный анализ взаимодействия между факторами с наличием объяснений
8
Разработка способа (алгоритм, программа и т. д.)
6
Элементарный анализ связей между фактами (наличие гипотезы, объяснения версии, практических рекомендаций)
2
Описание отдельных элементарных факторов, изложение наблюдений, опыта, результатов измерений
0,5
Таблица 90.12 – Время реализации результатов проекта
Время
реализации
результатов– n
3
Баллы
В течение первых лет
10
От 5 до 10 лет
4
Свыше 10 лет
2
Так как все частные признаки научно-технического уровня оцениваются по
10-балльной шкале, а сумма весов Ri равна единице, то величина интегрального показателя также принадлежит интервалу [0, 10].
В таблице 9.13 указано соответствие качественных уровней НИР значениям показателя, рассчитываемого по формуле (9.13).
95
Таблица 90.13 – Соответствие качественных уровней ВКР
Уровень НТЭ
Показатель НТЭ
Низкий
1-4
Средний
4-7
Высокий
8-10
Для данной разработки частные оценки уровня n i и их краткое обоснование даны в таблице (9.14).
Таблица 90.14 – Оценки научно-технического уровня НИР
Значимость
Фактор
НТУ
Уровень фактора
Выбран ный балл
Обоснование выбранного балла
0,4
Уровень новизны
Не обладает новизной
0
Цель данного ВКР состоит в усовершенствовани и параметров устройства, аналоги которого широко применяются в практике
0,1
Теоретичес кий уровень
Разработка способа
6
Разработка и внедрение на практике установленных теоретическим способом ряда параметров для улучшения работы устройства
96 0,5
Возможно сть реализации
В течении первых лет
10
Проект готов к реализации опытного образца применение его в лабораторных условиях
Отсюда интегральный показатель научно-технического уровня для нашего проекта составляет:
I
нту
= 0,4*0 + 0,1*6 + 0,5*10 = 0 + 0,6 + 5 = 5,6
Таким образом, исходя из данных таблицы 9.14, данный проект имеет средний уровень научно-технического эффекта.
97
ЗАКЛЮЧЕНИЕ
В ходе выполнения выпускной квалификационной работы были рассмотрены вопросы, связанные с построением GSM-контроллера для систем управления беспроводным доступом к объекту.
Рассмотрены различные системы доступа, существующие на сегодняшний день на рынке, описаны их достоинства и недостатки.
Разработаны структурная, функциональная и принципиальная схемы, произведен расчет и выбор элементной базы. Произведен расчет экономической эффективности проекта. Составлен алгоритм работы, написана управляющая программа для программирования выбранного микроконтроллера.
Особое внимание уделялось тому, чтобы устройство полностью удовлетворяло поставленным в техническом задании требованиям, а также являлось высоконадежным, многофункциональным и отвечало всем основным, современным требованиям, предъявляемым к вычислительной аппаратуре.
Для достижения этой цели, были разработаны технологичные аппаратные решения, построенные на современной микропроцессорной электронике. Это обеспечило высокую надежность и быстродействие, наряду с низким энергопотреблением и небольшими габаритными размерами аппаратного модуля.
В процессе разработки были получены навыки работы с микроконтроллерами семейства ATmega-8 фирмы “ATMEL”, и интерфейсом RS-232 , широко использующегося в промышленной электронике. Так же была произведена оценка технико-экономической эффективности разработки.
В разделе социальная ответственность проекта проведен анализ вредных и опасных факторов, воздействующих на здоровье и жизнь человека в процессе разработки GSM-контроллера, рассмотрены мероприятия, обеспечивающие безопасные условия труда. Произведен расчет освещения рабочего места пользователя ПЭВМ, который обеспечивает благоприятные условия труда.
Устройство рассчитано на круглосуточную работу при наличии питающего напряжения.
98
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1 ГОСТ Р 51241-2008 Средства и системы контроля и управления доступом. Классификация. Общие технические требования. Методы испытаний. свободный. Загл. с экрана, дата обращения 03.04.16.
2 Системы контроля и управления доступом: назначение и задачи СКУД http://secandsafe.ru/stati/spravochnik_bezopasnosti/sistiemy_kontrolia_i_upravlieniia_d ostupom_naznachieniie_i_zadachi_skud свободный. Загл. с экрана, дата обращения
04.04.16.
3 GSM контроллер CCU825 [Электронный ресурс]. Режим доступа: http://www.dozorsb.ru/Products/dirid_44/tek_5988/ свободный. Загл. с экрана, дата обращения 04.05.16.
4 Контроллеры "Lite-1000/2000", [Электронный ресурс]. Режим доступа: http://www.esguard.spb.ru/index.php?id=86&option=com_content&view=article, свободный. Загл. с экрана, дата обращения 04.05.16.
5 Валов А.В. Микропроцессоры и их применение в системах управления:
Учебное пособие/А.В. Валов – Челябинск: Изд-ий центр ЮУрГУ,2012 –Ч.2 – 81 с.
6 Руководство по работе с GSM/GPRS модемом SIM300 [Электронный ресурс]. Режим доступа: jelezka.ucoz.ru›SIM300_AN_V1.2RUS.pdf, свободный.
Загл. с экрана. Проверено 20.05.16 7 Шпак Ю.А. Программирование на языке С для AVR и PIC микроконтроллеров. Изд-во 2-е, переработанное и дополненное/Сост. Шпак Ю.А.
– К. «МК-Пресс», СПб.: «КОРОНА-ВЕК, 2011 – 544 с.
8 Руководство по работе с EEPROM AT24C128 [Электронный ресурс] режим доступа: atmel.com/Images/doc0670.pdf, свободный. Проверено 11.03.16 9 Чип и дип. Приборы и электронные компоненты [Электронный ресурс].
Режим доступа: http://www.chipdip.ru/, свободный. ¬ Загл. с экрана. Проверено
10.02.16.
10 Мологонцева
О.Ф.
Проектирование цифровых устройств на однокристальных микроконтроллерах / В.В. Сташин, А.В. Урусов, О.Ф.
Мологонцева. - М. : Энергоатомиздат, 1990. – 224с.
99 11 Романенко С.В. Методические указания по разработке раздела
«Социальная ответственность» ВКР магистра, специалиста и бакалавра всех направлений (специальностей) и форм обучения ТПУ/Сост. С.В. Романенко, Ю.В.
Анищенко – Томск: Из-во Томского политехнического университета, 2016. – 11 с.
12 Конотопский В.Ю. Методические указания к выполнению раздела
«Финансовый менеджмент, ресурсоэффективность и ресурсосбережение» магистерских диссертаций для всех специальностей ИК/
сост. В.Ю. Конотопский
Томск. Издательство Томского Политехнического Университета 2015г. – 29 с.
13 Пирогова Е.В. Проектирование и технология печатных плат: Учебник. –
М.: ФОРУМ:ИНФРА-М, 2005. – 560 с.
14 Долин П.А. Справочник по технике безопасности / под ред. П.А. Долин
– М. : Энергоатомиздат, 1982. – 734с.
15 ГОСТ 2.701-84 ЕСКД. Схемы. Виды и типы. Общие требования к выполнению. – Взамен ГОСТ 2.701-2008 ; введ. 2009.07.01. – М.: Госстандарт
России: Изд-во стандартов, 2009. – 9с.
16 ГОСТ 2.109-73 ЕСКД. Основные требования к чертежам. - Взамен ГОСТ
2.107-68, ГОСТ 2.109-68, ГОСТ 5292-60 в части разд. VIII; введ.2006.02.28: Изд- во стандартов, 2007. – 3с.
17 ГОСТ 12.0.003-74. Опасные и вредные производственные факторы. – введ.2010.07.20: Изд-во стандартов
ИПК Москва, 1999. – 4с
18 ГОСТ 12.2.032-78 ССБТ. Рабочее место при выполнении работ сидя.
Общие эргономические требования. Введ. 01.01.79. – 9с.
19 ГОСТ 12.1.005-88 ССБТ. Общие санитарно – гигиенические требования к воздуху рабочей зоны. Введ. 01.01.89. – 49с.
20 СанПин 2.2.2/2.4.1340 – 03 «Гигиенические требования к персональным электронно-вычислительным машинам и организации работы»
21 Об уровнях тарифов на электрическую энергию потребляемую населением: постановление Правительства Российской Федерации от 01 мая 2016 г. № 418 // Экономика и финансы электроэнергетики. - 2000. - № 7, с.67-70 22 Бюджетный учёт, [Электронный ресурс]. Режим доступа: www.vkaznu.ru свободный. Загл. с экрана. Проверено 20.02.2016.
100
ПРИЛОЖЕНИЕ А
Схема электрическая функциональная GSM-контроллера доступа
101
ПРИЛОЖЕНИЕ Б
Схема электрическая принципиальная GSM-контроллера доступа
102
ПРИЛОЖЕИНЕ В
Перечень элементов GSM-контроллера доступа
103
ПРИЛОЖЕИНЕ Г
Листинг программы работы микроконтроллера
#include "main.h"
#include "Flash/Flash.h"
#include "Eeprom/Eeprom.h"
#include "Systime/Systime.h"
#include "Sleep/Sleep.h"
#include "USB/uart.h"
#include "GSM/uart.h"
#include "GSM/HighLevel.h"
///Объявления переменных//////////////////////////////////////////////////////// volatile bool Sensor_B; bool WelcomeMode=0;
///Функция инициализации портов контроллера///////////////////////////////////// static inline void Init(void); int main(void)
{ wdt_enable(WDTO_2S);
Init();
//Инициализация портов контроллера
Flash::Init();
//Инициализация флэш
Systime::Init_Timer0();
Systime::Init_Timer1();
Systime::Init_Timer2();
GSM::Init();
USB::Init();
GSM::On();
PORTB SET_B(GAIN_CONTROL_OUT); if(eeprom_read_byte((uint8_t*)&FirstStart)) //Если запуск программы впервые, то загружаем настройки по умолчанию
{
Eeprom_Load_Settings("Locktime=5");
Eeprom_Load_Settings("Mode=1");
Eeprom_Load_Settings("Master=+79xxxxxxxxx"); eeprom_write_byte ((uint8_t*)&FirstStart, 0xFF);
Eeprom_Load_Settings("Owner=+79xxxxxxxxx");
Eeprom_Load_Settings("Volume=8");
Flash::Format();
}
RESET:
GSM_Power_Off(); if(!GSM_Power_On()) goto RESET;
Sleep::SetTimeout2(Systime::MINUTE);
Sleep::SetTimeout3(Systime::MINUTE*2);
Sleep::On(Systime::SECOND*5); if(!GSM_Setup()) goto RESET; for(;;)
{ wdt_reset();
USB::HandleData();
104 if(GSM::Data_Received)
{
GSM_Ring_Check ();
GSM::Data_Received=0;
} if(bit_is_clear(PINC,SENSOR_B_IN))
{
GSM_Dial_Owner();
} if(Sleep::Timeout2())
{ if(GSM_Network_Check())
{
// USB::Send_char("test",4);
GSM_Set_Volume();
GSM_SMS_Check ();
Sleep::SetTimeout3(Systime::SECOND*30);
} if(Sleep::Timeout3()) goto RESET;
Sleep::SetTimeout2(Systime::SECOND*20);
GSM::Data_Received=0;
}
}
}
/////////////////////////Функция инициализации портов контроллера/////////////// void Init(void)
{ cli();
///PORTB////////////////////////////////////////////////////////////////////////
DDRB = _BV(_CS_FLASH_OUT) | _BV(MESSAGE_OUT) | _BV(GAIN_CONTROL_OUT) |
_BV(MOSI_FLASH_OUT) | _BV(SCK_FLASH_OUT);
PORTB = _BV(_CS_FLASH_OUT);
///PORTC////////////////////////////////////////////////////////////////////////
DDRC = _BV(YELLOW_LED_OUT) | _BV(GREEN_LED_OUT) | _BV(CONTROL_1_OUT) |
_BV(CONTROL_2_OUT);
PORTC = _BV(SENSOR_B_IN);
///PORTD////////////////////////////////////////////////////////////////////////
DDRD = _BV(MCU_COMP_TXD_OUT) | _BV(CONTROL_3_OUT) | _BV(_RESET_FLASH_OUT)
| _BV(MCU_GSM_TXD_OUT) | _BV(GSM_PWRKEY_OUT) | _BV(RELAY_OUT);
PORTD = _BV(COMP_MCU_TXD_IN) | _BV(MCU_COMP_TXD_OUT) |
_BV(GSM_MCU_TXD_IN)| _BV(_RESET_FLASH_OUT) | _BV(MCU_GSM_TXD_OUT) |
_BV(GSM_PWRKEY_OUT); sei();
}
#include "uart.h"
///Переменные класса//////////////////////////////////////////////////////////// volatile uint8 GSM::TransmitTime; volatile uint8 GSM::TransmitBitnumber;
105 volatile uint8 GSM::ReceiveBitnumber; volatile uint8 GSM::ReceiveTime; volatile uint8 GSM::Temp; volatile uint8 GSM::Data_Received; volatile uint8 GSM::Received_Size; volatile uint16 GSM::x; volatile uint8 GSM::Time1; char GSM::Buffer[GSM_UART_BUFFER_SIZE]; volatile uint8 GSM::on;
///Функция отправки байта/////////////////////////////////////////////////////// void GSM::Send_byte( uint8 byte )
{
TransmitBitnumber=0;
TransmitTime=UART_BOUDRATE; for (;;)
{ if (TransmitTime==0)
{ if(TransmitBitnumber==0)
{
UART_TRANSMIT_GSM_PORT CLR_B(UART_TRANSMIT_GSM_PIN);
TransmitBitnumber++;
TransmitTime=UART_BOUDRATE; continue;
} if (TransmitBitnumber>9)
{
TransmitBitnumber=0; break;
} if (TransmitBitnumber>8)
{
UART_TRANSMIT_GSM_PORT SET_B(UART_TRANSMIT_GSM_PIN) ;
TransmitBitnumber++;
TransmitTime=UART_BOUDRATE; continue;
} if (bit_is_set(byte , TransmitBitnumber-1))
{
UART_TRANSMIT_GSM_PORT SET_B(UART_TRANSMIT_GSM_PIN);
} else
{
UART_TRANSMIT_GSM_PORT CLR_B(UART_TRANSMIT_GSM_PIN);
}
TransmitBitnumber++;
TransmitTime=UART_BOUDRATE;
};
};
};
///Фуекция отправки строки////////////////////////////////////////////////////// void GSM::Send_char(char *word, uint8 n )
{
GSM::Data_Received=0;
GSM::Received_Size=0;
// Очистить буфер
GSM UART
106 for(uint8 i=0; i
GSM::Send_byte(word[i]);
}
}; void GSM::Send_prog_char(prog_char * String)
{
GSM::Data_Received=0;
GSM::Received_Size=0; char Buf[20]; strcpy_P(Buf, String); for(uint8 i=0; i
GSM::Send_byte(Buf[i]);
}
}
///Функция, обеспечивающая прием посылки//////////////////////////////////////// void GSM::Receiving()
{ if(ReceiveTime==0)
{ if(ReceiveBitnumber==0)
{
EIMSK CLR_B(INT1); //External Interrupt Request 0 Disable
OCR1AL= Systime::TIMER1_OCR_VALUE; // Set OCR value on normal
}; if(ReceiveBitnumber==8)
{
TCCR1B=0x00; // Stop Timer
EIFR SET_B(INTF1);
EIMSK SET_B(INT1); //External Interrupt Request 0 Enable
ReceiveTime = UART_BOUDRATE;
ReceiveBitnumber=0;
Buffer[x]=Temp; // Write recieved byte into buffer x++; if(x>=GSM_UART_BUFFER_SIZE){x=0;}
Time1 = 20*UART_BOUDRATE; //Run End_Recieve (void) in systime timer
} else
{ if (bit_is_set(UART_RECIEVE_GSM_PORT , UART_RECIEVE_GSM_PIN ))
{
Temp SET_B(ReceiveBitnumber);
} else
{
Temp CLR_B(ReceiveBitnumber);
};
ReceiveBitnumber++;
ReceiveTime = UART_BOUDRATE;
};
};
};
///Обработчик прерывания по INT1////////////////////////////////////////////////
SIGNAL (INT1_vect)
{
107
EIMSK = 0;
TCNT1H = 0x00;
TCNT1L = 0x00; //Clear timer
OCR1AL= (Systime::TIMER1_OCR_VALUE + 50); // 1.5 OCR value
TCCR1B = _BV(WGM12)| TIMER1_SPEED; // Run timer on CTC mode
};
#include "HighLevel.h" prog_char AT[]="AT\r\n"; prog_char ATE0[]="ATE0\r\n"; prog_char ATCIURC[]="AT+CIURC=0\r\n"; prog_char OK[]="\r\nOK\r\n"; prog_char CNMI[]="AT+CNMI=2,0,0,0,0\r\n"; prog_char CMGF[]="AT+CMGF=1\r\n"; prog_char CLVL[]="AT+CLVL="; prog_char RN[]="\r\n"; prog_char RING[]="\r\nRING\r\n"; prog_char CLCC[]="AT+CLCC\r\n"; prog_char PLUSCLCC[]="\r\n+CLCC:"; prog_char ATH[]="ATH\r\n"; prog_char CSCS[]="AT+CSCS=\"8859-1\"\r\n";
///Включение SIM300D в зависимости от статуса/////////////////////////////////// bool GSM_Power_On(void)
{ if( bit_is_clear(PINC,STATUS_GSM_IN) ) // Если STATUS=0, включение
SIM300D
{
PORTD CLR_B(GSM_PWRKEY_OUT);
// Низкий уровень на
PWRKEY на 2 сек
Sleep::On(Systime::SECOND*2);
PORTD SET_B(GSM_PWRKEY_OUT);
Sleep::SetTimeout(Systime::SECOND*3); while(bit_is_clear(PINC,STATUS_GSM_IN))
{ if(Sleep::Timeout()) return false;
}
} return true;
}
///Выключение SIM300D в зависимости от статуса //////////////////////////////// bool GSM_Power_Off(void)
{ if (bit_is_set(PINC,STATUS_GSM_IN))
// Если STATUS=1, выключение
SIM300D
{
PORTD CLR_B(GSM_PWRKEY_OUT);
Sleep::On(Systime::SECOND*2);
PORTD SET_B(GSM_PWRKEY_OUT);
Sleep::SetTimeout(Systime::SECOND*5); while(bit_is_set(PINC,STATUS_GSM_IN)) // Если вышел таймаут 5 сек, повторить сначала
{ if(Sleep::Timeout()) return false;
}
GSM::Data_Received=0;
108
} return true;
}
///Ввод настроек SIM300D//////////////////////////////////////////////////////// bool GSM_Setup(void)
{
GSM::Send_prog_char(AT); //Подача команд для авто определения скорости
Sleep::On(Systime::MSECOND*100);
GSM::Data_Received=0;
GSM::Send_prog_char(AT);
Sleep::SetTimeout(Systime::MSECOND*200); while(!GSM::Data_Received)
{ if(Sleep::Timeout()) return false;
}
GSM::Data_Received=0;
GSM::Send_prog_char(ATE0); //Команда выключения эхо
Sleep::SetTimeout(Systime::MSECOND*200); while(!GSM::Data_Received)
{ if(Sleep::Timeout()) return false;
}
GSM::Data_Received=0;
GSM::Send_prog_char(ATCIURC); //Выключение вывода Call Ready
Sleep::SetTimeout(Systime::MSECOND*200); while(!GSM::Data_Received)
{ if(Sleep::Timeout()) return false;
} if(strncmp_P(GSM::Buffer,OK,6)!=0) return false;
GSM::Data_Received=0;
GSM::Send_prog_char(CNMI); //Выключение оповещения о входящих СМС
Sleep::SetTimeout(Systime::MSECOND*200); while(!GSM::Data_Received)
{ if(Sleep::Timeout()) return false;
} if(strncmp_P(GSM::Buffer,OK,6)!=0) return false;
GSM::Data_Received=0;
GSM::Send_prog_char(CMGF); //Включение текстового режима СМС
Sleep::SetTimeout(Systime::MSECOND*200); while(!GSM::Data_Received)
{ if(Sleep::Timeout()) return false;
} if(strncmp_P(GSM::Buffer,OK,6)!=0) return false;
GSM::Data_Received=0;
/* GSM::Send_prog_char(CSCS); //Включение текстового режима СМС
Sleep::SetTimeout(Systime::MSECOND*200); while(!GSM::Data_Received)
{ if(Sleep::Timeout()) return false;
}
USB::Send_char(GSM::Buffer,GSM::Received_Size); //ОТЛАДКА if(strncmp_P(GSM::Buffer,OK,6)!=0) return false;
109
GSM::Data_Received=0;*/ return true;
}
/// /////////////////////////////// bool GSM_Set_Volume(void)
{
GSM::Send_prog_char(CLVL); // uint8 Vol=0; char buff[3];
Vol=eeprom_read_byte((uint8_t*)&Volume)*10;
Vol+=10; itoa(Vol,buff,10);
GSM::Send_char(buff,strlen(buff));
GSM::Send_prog_char(RN);
Sleep::SetTimeout(Systime::MSECOND*200); while(!GSM::Data_Received)
{ if(Sleep::Timeout()) return false;
} if(strncmp_P(GSM::Buffer,OK,6)!=0) return false;
GSM::Data_Received=0; return true;
}
///Обработка входящих звонков/////////////////////////////////////////////////// bool GSM_Ring_Check (void)
{ char number_buffer[60]; char masternumber[12]; for(uint8 i=0;i<12;i++)
{ masternumber[i]=eeprom_read_byte((uint8_t*)&MasterNumber[i]);
} char ownernumber[12]; for(uint8 i=0;i<12;i++)
{ ownernumber[i]=eeprom_read_byte((uint8_t*)&OwnerNumber[i]);
} if(strncmp_P(GSM::Buffer,RING,8)==0)
{
GSM::Send_prog_char(CLCC);
Sleep::SetTimeout(Systime::MSECOND*200); while(!GSM::Data_Received)
{ if(Sleep::Timeout())return false;
} if(strncmp_P(GSM::Buffer,PLUSCLCC,8)==0)
{ for(uint8 i=0;i<:received_size> { number_buffer[i]=GSM::Buffer[i];
}
GSM::Send_prog_char(ATH);
Sleep::SetTimeout(Systime::SECOND); while(!GSM::Data_Received)
110
{ if(Sleep::Timeout())return false;
} if(strncmp_P(GSM::Buffer,OK,6)!=0) return false; for(uint8 i=0;i<50;i++)
{ if(number_buffer[i]==0x22)
{ for(uint8 z=0;z<12;z++)
{ number_buffer[z]=number_buffer[z+i+1];
} for(uint8 i=12;i<60;i++) {number_buffer[i]=0;} if(eeprom_read_byte((uint8_t*)&FirstStart))
{ for(uint8 i=0; i<12; i++)
{ eeprom_write_byte ((uint8_t*)&MasterNumber[i], number_buffer[i]);
} eeprom_write_byte ((uint8_t*)&FirstStart, 0x00);
GSM_send_SMS(number_buffer,"You are master",14);
} if(Flash::FindEntry(number_buffer) || (strncmp(number_buffer,masternumber,12)==0) ||
(strncmp(number_buffer,ownernumber,12)==0) )
{
USB::Send_char(number_buffer,12);
GSM_Generate_DTMF(3); switch(eeprom_read_byte((uint8_t*)&Mode))
{ case SWITCH_MODE:
{
PORTC INV_B(GREEN_LED_OUT);
PORTD INV_B(RELAY_OUT); break;
} case DELAY_MODE:
{
PORTC SET_B(GREEN_LED_OUT);
PORTD SET_B(RELAY_OUT);
Sleep::On(Systime::SECOND*eeprom_read_byte((uint8_t*)&LockTime));
PORTC CLR_B(GREEN_LED_OUT);
PORTD CLR_B(RELAY_OUT); break;
} default: break;
} return true;
} else if(WelcomeMode)
{ if(Flash::WriteEntry(number_buffer))
{
PORTC SET_B(GREEN_LED_OUT);
Sleep::On(Systime::MSECOND*300);
PORTC CLR_B(GREEN_LED_OUT);
Sleep::On(Systime::MSECOND*300);
111
PORTC SET_B(GREEN_LED_OUT);
Sleep::On(Systime::MSECOND*300);
PORTC CLR_B(GREEN_LED_OUT);
Sleep::On(Systime::MSECOND*300);
PORTC SET_B(GREEN_LED_OUT);
Sleep::On(Systime::MSECOND*300);
PORTC CLR_B(GREEN_LED_OUT);
Sleep::On(Systime::MSECOND*300); return true;
}
} else return false;
}
}
}
} return true;
}
///Отправка СМС-сообщения мастеру/////////////////////////////////////////////// bool GSM_send_SMS(char *number, char *SMSText, uint8 lenght)
{
GSM::Send_char("AT+CMGS=\"",9);
GSM::Send_char(number,12);
GSM::Send_char("\"\r\n",3);
Sleep::SetTimeout(Systime::SECOND); while(!GSM::Data_Received)
{ if(Sleep::Timeout()) return false;
} if(strncmp("\r\n",GSM::Buffer,2)==0)
{
GSM::Send_char(SMSText,lenght);
GSM::Send_byte(0x1a);
// добавить спецсимвол SUB
Sleep::SetTimeout(Systime::SECOND*10); while(!GSM::Data_Received)
{ if(Sleep::Timeout()) return false;
} if(strncmp("\r\n+CMGS",GSM::Buffer,7)==0) return true;
} return false;
}
///Функция проверки входящих СМС-сообщений////////////////////////////////////// bool GSM_SMS_Check (void)
{ char masternumber[12]; char commandbuffer[64]; char smsnumber[12]; uint8 flag=0; for(uint8 i=0;i<64;i++) //Очистка коммандного буффера
{
112 commandbuffer[i]=0;
} for(uint8 i=0;i<12;i++)
{ masternumber[i]=eeprom_read_byte((uint8_t*)&MasterNumber[i]);
}
GSM::Send_char("AT+CMGR=1\r\n",11);
// Проверить, есть ли SMS
// USB::Send_char("R\r\n",3); //ОТЛАДКА
Sleep::SetTimeout(Systime::SECOND*5); while(!GSM::Data_Received)
{ if(Sleep::Timeout())
{
USB::Send_char("T\r\n",3); return false;
}
}
USB::Send_char(GSM::Buffer,GSM::Received_Size); //ОТЛАДКА if(strncmp("\r\n+CMGR:",GSM::Buffer,8)==0)
// Если есть SMS-команда
{ for(uint8 i=0;i<40;i++)
{ if(GSM::Buffer[i]==0x22)flag++; if(flag==3)
// ... найти четвертую кавычку и установить flag
{
// на первый символ команды flag=i+1; break;
}
} for(uint8 i=0;i<12;i++)
// В sms_number скопировать номер отправителя SMS
{ smsnumber[i]=GSM::Buffer[i+flag];
}
// USB::Send_char("\r\n",2); //ОТЛАДКА
// USB::Send_char(smsnumber,12);
// USB::Send_char("\r\n",2); if(strncmp(masternumber,smsnumber,12)==0)
// Если номер отправителя =
Master_number ...
{ flag=0; for(uint8 i=10; i<:received_size> { if(GSM::Buffer[i]==0x0a)
// ... перейти к началу SMS
{ flag=i; break;
}
} uint8 message_size=GSM::Received_Size-flag-9; if(message_size>64) message_size=64; for(uint8 i=0;i
{ commandbuffer[i]=GSM::Buffer[i+flag+1];
}