- •Министерство образования и науки Российской Федерации
- •2013 Год
- •Введение.
- •Особенные характеристики
- •Использование gps-трекеров
- •1. Технологический раздел
- •1.1.3 ПротоколNmea0183
- •1.1.4 Устройство трекера
- •1.1.5 Стек протоколов tcp/ip
- •1.1.6 Ат -команды
- •1.2 Модуль связиGsm/gprsSim900d
- •1.3 Приёмник местоположенияGpsQuectelL10
- •1.4 МикроконтроллерStm32f100c4t6.
- •1.5 Среда разработки для микроконтроллераStm32f100CooCoxCoIde.
- •1.6 Отладочное устройство stm32f4 Discovery
- •1.7 Импульсный стабилизатор напряжения на lm2596t-3.3 с напряжением 3.3 вольт и максимальным током 3 а .
- •1.8 Программа по проектированию плат и схем, DipTrace
- •Возможности и функции DipTrace Интуитивно-понятный пользовательский интерфейс
- •Эффективные возможности трассировки
- •Всесторонняя проверка проекта
- •3D предпросмотр платы
- •2.2.2 Senseit gt13
- •2.3 Создание печатной платы и создание программы.
- •2.3.1 Разработка печатной платы в Sprint-Layout 5
- •2.3.2 Создание управляющей программы для контроллера.
- •2.4. Структурная схема устройства
- •4. Организационно-экономический раздел
- •5. Безопасность Жизнедеятельности
- •5.1 Область и порядок применения правил
- •5.2 Требования к техническому процессу, устройству и оборудованию производственных помещений и рабочих мест
- •5.3 Требования к вентиляции
- •5.4 Требования к санитарно-бытовым, вспомогательным помещениям и средствам индивидуальной профилактики
- •5.5 Требования к содержанию и уборке помещений
- •5.6 Медико-профилактическое обслуживание рабочих
- •Заключение
- •Список литературы
- •Список Интернет источников
2.2.2 Senseit gt13
Р
ис
18.
SENSEIT GT13
SENSEIT GT13 позволит вам обеспечить непрерывный on-line мониторинг перемещения ваших близких, а также, при необходимости, контроль их входа и выхода из заданной вами геозоны.
Использование SENSEIT GT13 будет комфортным для ваших близких — трекер имеет компактный размер и весит всего 57,5 гр. А наличие кнопки SOS обеспечит им дополнительную безопасность: при срабатывании кнопки координаты местоположения объекта передаются на зарегистрированный адрес электронной почты.
Всем владельцам SENSEIT GT13 предоставляется право бесплатного использования поддерживающей трекер системы мониторинга MobiTrack в течение года.

Таблица
1. Сравнение 2-х устройств
2.3 Создание печатной платы и создание программы.
2.3.1 Разработка печатной платы в Sprint-Layout 5
Р
ис.
19 Первый слой платы дляSim900D
Р
ис.
20 Второй слой платы дляSim900D
Р
ис.
20 Плата дляGPS
приемника Quectel
L10
Р
ис.
21 Плата дляSTM32f100c4t6
2.3.2 Создание управляющей программы для контроллера.
Создание программы происходит в Coocox CoIDE, почитав многие популярные сайты, я решил по отзывам да и по наитию, установить данную программу, которая сама сделана на эклипсе. CoIDE имеет большое количество библиотек, которые можно подключить для любого контроллера который он может поддержать. Можно к нему привязать программу для заливки прошивки в микроконтроллер, а не все время запускать по отдельности программ.
Р
ис.
22 Создание проекта
Р
ис.
23 Выбор чип или отладочная плата
Р
ис.
24 Выбор производителя, серии и модели
чипа
Р
ис.
25 Подключение библиотек для каждого
интерфейса
Р
ис.
26 Создание программы
Рис.
27 Прошивка STM32F100
через интегрированный программатор
ST-Link
Р
ис.
28 Сбор программы

Рис. 29 Отладка программы
2.4. Структурная схема устройства

Рис. 30 Структурная схема трекера
3. Специальный раздел
3.1. Алгоритм работы трекера

3.2. Схемотехника трекера

3.3. Код программы
#include "gprs.h"
#include "ch.h"
#include "hal.h"
#include <string.h>
#include "util.h"
#include "led.h"
#define GPRS_CMD_BUF 256
#define ATZ_RETRY 5
#define CMD_WAIT_TIME 250
#define GPRS_SERIAL SD2
SerialConfig SD2_Config = {
.sc_speed = 115200,
.sc_cr2 = USART_CR2_STOP1_BITS,
.sc_cr3 = USART_CR3_RTSE | USART_CR3_CTSE
};
uint8_t *gprs_data = NULL;
static WORKING_AREA(waGPRSThread, 256);
static msg_t GPRSThread(void *arg) {
(void)arg;
if (gprs_data != NULL) {
chHeapFree(gprs_data);
}
gprs_data = chHeapAlloc(NULL, GPRS_CMD_BUF);
size_t gprs_bytes_read;
uint16_t signal_level;
uint16_t i;
char num_buf[16];
uint8_t num_len;
chRegSetThreadName("gprs_thread");
if (gprs_data == NULL) {
while (TRUE) {
//palTogglePad(GPIO_LED_1_PORT, GPIO_LED_1_PIN);
chThdSleepMilliseconds(50);
}
}
sdStart(&GPRS_SERIAL, &SD2_Config);
palSetPadMode(GPRS_USART_PORT, GPRS_USART_TX_PIN, PAL_MODE_ALTERNATE(7));
palSetPadMode(GPRS_USART_PORT, GPRS_USART_RX_PIN, PAL_MODE_ALTERNATE(7));
palSetPadMode(GPRS_USART_PORT, GPRS_USART_CTS_PIN, PAL_MODE_ALTERNATE(7));
palSetPadMode(GPRS_USART_PORT, GPRS_USART_RTS_PIN, PAL_MODE_ALTERNATE(7));
palSetPadMode(GPIO_GPRS_PWR_BAT_PORT, GPIO_GPRS_PWR_BAT_PIN, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIO_GPRS_RESET_PORT, GPIO_GPRS_RESET_PIN, PAL_MODE_OUTPUT_OPENDRAIN);
// Turn on GPRS power
palClearPad(GPIO_GPRS_PWR_BAT_PORT, GPIO_GPRS_PWR_BAT_PIN);
chThdSleepSeconds(5);
while (TRUE) {
//palTogglePad(GPIO_LED_1_PORT, GPIO_LED_1_PIN);
if (init_modem() == E_OK)
break;
}
set_led_0_prescaler(5);
uint8_t counter = 0;
while (TRUE) {
counter++;
if (counter == 10) {
counter = 0;
send_tcp_message();
}
//palTogglePad(GPIO_LED_1_PORT, GPIO_LED_1_PIN);
if (is_gprs_network_ok() == TRUE) {
//sdWrite(&SD1, "NETWORK REGISTERED", sizeof("NETWORK REGISTERED") - 1);
} else {
//sdWrite(&SD1, "NO NETWORK", sizeof("NO NETWORK") - 1);
}
chThdSleepMilliseconds(100);
if (gprs_get_signal_level(&signal_level) == E_OK) {
/* sdWrite(&SD1, "SIGNAL LEVEL: ", sizeof("SIGNAL LEVEL: ") - 1);
stoa(signal_level, num_buf, &num_len);
sdWrite(&SD1, num_buf, num_len - 1);
sdWrite(&SD1, "\r\n", sizeof("\r\n") - 1);*/
} else {
//sdWrite(&SD1, "SIGNAL LEVEL: ERR\r\n", sizeof("SIGNAL LEVEL: ERR\r\n") - 1);
}
chThdSleepMilliseconds(1000);
}
chHeapFree(gprs_data);
}
uint8_t init_modem() {
uint16_t i;
uint16_t bytes_read;
for (i = 0; i < ATZ_RETRY; i++) {
sdWrite(&GPRS_SERIAL, "ATE0\r\n", sizeof("ATE0\r\n"));
chThdSleepMilliseconds(200);
if (gprs_cmd("ATZ\r\n", sizeof("ATZ\r\n") - 1, "\r\nOK\r\n", sizeof("\r\nOK\r\n") - 1) == E_OK)
break;
chThdSleepMilliseconds(500);
}
if (i >= ATZ_RETRY)
return E_NOT_RESPONDING;
return E_OK;
}
uint8_t gprs_cmd(char * cmd_str, uint16_t cmd_len, char * answer_str, uint16_t answer_len) {
uint16_t bytes_read;
// Flush buffer
sdAsynchronousRead(&GPRS_SERIAL, gprs_data, GPRS_CMD_BUF);
sdWrite(&GPRS_SERIAL, cmd_str, cmd_len);
chThdSleepMilliseconds(CMD_WAIT_TIME);
if (answer_str == NULL) {
return E_OK;
}
bytes_read = sdAsynchronousRead(&GPRS_SERIAL, gprs_data, answer_len);
if (bytes_read == answer_len) {
if (strncmp(gprs_data, answer_str, bytes_read) == 0) {
return E_OK;
}
}
return E_INVALID_ANSWER;
}
uint8_t gprs_cmd_read(char * cmd_str, uint16_t cmd_len, uint16_t *answer_len) {
uint16_t bytes_read;
sdWrite(&GPRS_SERIAL, "ATE0\r\n", sizeof("ATE0\r\n"));
chThdSleepMilliseconds(200);
// Flush buffer
sdAsynchronousRead(&GPRS_SERIAL, gprs_data, GPRS_CMD_BUF);
sdWrite(&GPRS_SERIAL, cmd_str, cmd_len);
chThdSleepMilliseconds(1000);
bytes_read = sdAsynchronousRead(&GPRS_SERIAL, gprs_data, GPRS_CMD_BUF);
*answer_len = bytes_read;
if (bytes_read == 0)
return E_NOT_RESPONDING;
return E_OK;
}
uint8_t gprs_get_signal_level(uint16_t *signalLevel) {
uint16_t bytes_read;
char signalLevelStr[3] = {0, 0, 0};
if (gprs_cmd_read("AT+CSQ\r\n", sizeof("AT+CSQ\r\n") - 1, &bytes_read) != E_OK) {
return E_NOT_RESPONDING;
}
if (bytes_read < 13)
return E_INVALID_ANSWER;
if (strncmp(gprs_data, "\r\n+CSQ:", sizeof("\r\n+CSQ:") - 1) != 0) {
return E_INVALID_ANSWER;
}
signalLevelStr[0] = gprs_data[8];
if (gprs_data[9] != ',')
signalLevelStr[1] = gprs_data[9];
*signalLevel = atos(signalLevelStr);
return E_OK;
}
void init_gprs() {
// GPRS Thread
chThdCreateStatic(waGPRSThread, sizeof(waGPRSThread), NORMALPRIO, GPRSThread, NULL);
}
uint8_t is_gprs_network_ok() {
sdWrite(&GPRS_SERIAL, "ATE0\r\n", sizeof("ATE0\r\n"));
chThdSleepMilliseconds(200);
if (gprs_cmd("AT+CREG?\r\n", sizeof("AT+CREG?\r\n") - 1, "\r\n+CREG 0,1\r\n", sizeof("\r\n+CREG 0,1\r\n") - 1) == E_OK)
return TRUE;
return FALSE;
}
uint8_t send_tcp_message() {
uint16_t bytes_read;
uint8_t i;
if (is_gprs_network_ok() != TRUE) {
// return E_NO_NETWORK;
}
chThdSleepMilliseconds(100);
// Enable embedded TCP/IP stack
gprs_cmd("AT+WIPCFG=1\r\n", sizeof("AT+WIPCFG=1\r\n") - 1, NULL, 0);
chThdSleepMilliseconds(250);
sdAsynchronousRead(&GPRS_SERIAL, gprs_data, GPRS_CMD_BUF);
// Open GPRS bearer
gprs_cmd("AT+WIPBR=1,6\r\n", sizeof("AT+WIPBR=1,6\r\n") - 1, NULL, 0);
chThdSleepMilliseconds(250);
sdAsynchronousRead(&GPRS_SERIAL, gprs_data, GPRS_CMD_BUF);
// Set GPRS AP
gprs_cmd("AT+WIPBR=2,6,11,\"internet\"\r\n", sizeof("AT+WIPBR=2,6,11,\"internet\"\r\n") - 1, NULL, 0);
chThdSleepMilliseconds(250);
sdAsynchronousRead(&GPRS_SERIAL, gprs_data, GPRS_CMD_BUF);
// Connect to GPRS
gprs_cmd("AT+WIPBR=4,6,0\r\n", sizeof("AT+WIPBR=4,6,0\r\n") - 1, NULL, 0);
chThdSleepSeconds(3);
bytes_read = sdAsynchronousRead(&GPRS_SERIAL, gprs_data, GPRS_CMD_BUF);
if (bytes_read > 0) {
if (strncmp(gprs_data, "\r\nOK", sizeof("\r\nOK") - 1) != 0) {
//return E_GPRS_CONNECT_ERROR;
}
} else {
//return E_GPRS_CONNECT_ERROR;
}
// Establish connection
gprs_cmd("AT+WIPCREATE=2,1,\"195.209.231.43\",5555\r\n", sizeof("AT+WIPCREATE=2,1,\"195.209.231.43\",5555\r\n") - 1, NULL, 0);
chThdSleepSeconds(1);
gprs_cmd("AT+WIPDATA=2,1,1\r\n", sizeof("AT+WIPDATA=2,1,1\r\n") - 1, NULL, 0);
chThdSleepSeconds(3);
gprs_cmd("Hello from wismo!\r\n", sizeof("Hello from wismo!\r\n") - 1, NULL, 0);
chThdSleepMilliseconds(250);
gprs_cmd("+++", sizeof("+++") - 1, NULL, 0);
chThdSleepMilliseconds(250);
}
