Главная страница

Дипломная работа по теме создание VR-перчатки. К дипломному проект Тема Разработка универсального кистевого устройства управления


Скачать 1.31 Mb.
НазваниеК дипломному проект Тема Разработка универсального кистевого устройства управления
АнкорДипломная работа по теме создание VR-перчатки
Дата08.01.2022
Размер1.31 Mb.
Формат файлаdocx
Имя файлаDiplomnaya_rabota_Pripeka_D_I_9SK-41_18.docx
ТипДиплом
#325971
страница11 из 11
1   2   3   4   5   6   7   8   9   10   11

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ И ЛИТЕРАТУРЫ


    1. Степанов, С. Практическое программирование Arduino / Степанов С., Накоряков В., Смирнов В.//Радио-Ежегодник 2017. – №34. – С.112-410

    2. Соммер Улли, Программирование микроконтроллерных плат / Соммер Улли - СПб: БХВПетербург, 2018. – 256 с.

    3. Петин В.А. Проекты с использованием контроллера Arduino/ В.А. Петин. – СПб.: БХВПетербург, 2018. – 464 с.

    4. Киреева Э.А Полный справочник по электрооборудованию и электротехнике / Э.А Киреева, С.Н Шерстнев. – М.: КНОРУС, 2017. – 864с.

    5. Виглеб Г. ДАТЧИКИ. Устройство и применение/ Г. Виглеб. – М.: Мир, 1989 – 240с.

    6. Электронный справочник программиста ArduinoURL: https://www.arduinoplus.ru/coding-arduino/ (дата обращения: 24.01.2020). –Текст: электронный.

    7. Бесплатная электронная Интернет – библиотека.: сайт -https://www.litres.ru/ (дата обращения: 24.01.2020). –Текст: электронный.

    8. Безуглов Д.А. Цифровые устройства и микропроцессоры: учеб.пособие: Учебное пособие / Микушин А.В., Сажнев А.М., Сединин В.И. - СПб:БХВ-Петербург, 2017. - 832 с.

    9. ГОСТ РВ 20.39.309-98 Государственный стандарт российской федерации комплексная система общих технических требований аппаратура, приборы, устройства и оборудование военного назначения: дата введения 1998-05-26.

    10. ГОСТ 23592-96 Монтаж электрический радиоэлектронной аппаратуры и приборов. Общие требования к объемному монтажу изделий электронной техники и электротехнических: дата введения 1996-04-12

    11. Проект «Arduino Vive Controller Emulation.»URL: http://www.cuddleburrito.com/flrnmrr/2016/11/30/arduino-vive-controller-emulation/ (дата обращения: 01.02.2020). –Текст: электронный.

    12. Саймон Монк. Программируем Arduino. Профессиональная работа со скетчами. / Саймон Монк – СПб.: БХВПетербург, 2019. – 256 с.

    13. Shahram Latifi. 17th International Conference on Information Technology–New Generations (ITNG 2020).

    14. Электронный журнал Hindawi URL: https://www.hindawi.com/journals/js/2020/7296204/ (дата обращения: 13.02.2020). –Текст: электронный.

    15. Электронный журнал IOP Conference Series: Materials Science and Engineering – URL: https://iopscience.iop.org/article/10.1088/1757-899X/740/1/012151/meta (дата обращения: 24.02.2020). –Текст: электронный.

    16. Электронный журнал OSA Publishing URL: https://www.osapublishing.org/abstract.cfm?uri=OFC-2020-M1A.6 (дата обращения: 27.03.2020). –Текст: электронный.

    17. Электронный журнал ATLANTIS PRESS URL: https://www.atlantis-press.com/proceedings/iccese-20/125936794 (дата обращения: 30.03.2020). –Текст: электронный.

    18. Электронный журнал ScholarSpace URL: https://scholarspace.manoa.hawaii.edu/handle/10125/63927 (дата обращения: 07.04.2020). –Текст: электронный.

    19. Katharina Jahn. Information Systems and Neuroscience, 2019.

    20. Электронный журнал ACMDL URL: https://dl.acm.org/doi/abs/10.1145/3334480.3383067 (дата обращения: 16.04.2020). –Текст: электронный.

    21. Бесплатная электронная Интернет – библиотека URL: https://arxiv.org/abs/2001.07546 (дата обращения: 24.04.2020). –Текст: электронный.

    22. Журнал International Journal of Human–Computer Interaction, 2020.

    23. Электронный журнал SpringerLink URL: https://link.springer.com/article/10.1007/s10055-019-00378-w (дата обращения: 28.04.2020). –Текст: электронный.

    24. Электронная Интернет – библиотека – URL: https://journals.sagepub.com/doi/abs/10.1177/002224298905300309 (дата обращения: 29.04.2020). –Текст: электронный.

    25. Электронный журнал ScienceDirectURL: https://www.sciencedirect.com/science/article/abs/pii/S0169023X97000566 (дата обращения: 01.05.2020). –Текст: электронный.

    26. Электронный журнал IOPURL: https://iopscience.iop.org/article/10.1088/0004-637X/770/2/103/meta (дата обращения: 03.05.2020). –Текст: электронный.

    27. Электронный журнал NatureURL: https://www.nature.com/articles/417459a (дата обращения: 07.05.2020). –Текст: электронный.

    28. Электронный журнал Genome ResearchURL: https://genome.cshlp.org/content/22/9/1813.short (дата обращения: 13.05.2020). –Текст: электронный.

    29. Электронный журнал PHYSIOLOGICAL REVIEWSURL: https://genome.cshlp.org/content/22/9/1813.short (дата обращения: 17.05.2020). –Текст: электронный.

    30. Электронный журнал Arthritis & RheumatologyURL: https://onlinelibrary.wiley.com/doi/full/10.1002/art.11137 (дата обращения: 19.05.2020). –Текст: электронный.



ПРИЛОЖЕНИЯ


ПРИЛОЖЕНИЕ 1

Принципиальная схема платы


ПРИЛОЖЕНИЕ 2

Трассировка верхнего слоя печатной платы




ПРИЛОЖЕНИЕ 3

Трассировка нижнего слоя печатной платы


ПРИЛОЖЕНИЕ 4

Код основного устройства на датчике GY-521

#include "I2Cdev.h"

#include "MPU6050_6Axis_MotionApps20.h"

#include "Wire.h"

#include

#include

#include

int PinRed = 5;

int PinBlue = 7;

int buttonPin = 9;

int PR0 = A4;

int PR1 = A3;

int PR2 = A2;

int PR3 = A1;

int INX = A9;

int INY = A8;

MPU6050 mpu;

uint16_t packetSize;

uint16_t fifoCount;

uint8_t fifoBuffer[64];

Quaternion q;

VectorFloat gravity;

float ypr[3];

float old_mx = -200;

float old_my = -200;

float dx, dy, mx, my;
void setup()

{

Serial.begin(38400);

pinMode(PinRed, OUTPUT);

digitalWrite(PinRed, HIGH);

ПРОДОЛЖЕНИЕ ПРИЛОЖЕНИЯ 4

pinMode(buttonPin, INPUT);

Wire.begin();

Wire.setClock(400000);

mpu.initialize();

mpu.dmpInitialize();

mpu.setDMPEnabled(true);

packetSize = mpu.dmpGetFIFOPacketSize();

}
void loop() {

int buttonState = digitalRead(buttonPin);

if (buttonState == HIGH) {

Serial.println('C');

}

int Key0 = analogRead(PR0);

if (Key0 <= 210) {

Keyboard.print("E");

delay(50);

}

int Key1 = analogRead(PR1);

if (Key1 <= 210) {

Keyboard.print("F");

delay(50);

}

int Key2 = analogRead(PR2);

if (Key2 <= 210) {

Keyboard.print("I");

delay(50);

}

int Key3 = analogRead(PR3);

if (Key3 <= 210) {

Keyboard.print("C");

delay(50);

}

ПРОДОЛЖЕНИЕ ПРИЛОЖЕНИЯ 4

int Stick_X = analogRead(INX);

while (Stick_X < 340) {

Stick_X = analogRead(INX);

Keyboard.print("S");

delay(50);

}

while (Stick_X > 660) {

Stick_X = analogRead(INX);

Keyboard.print("W");

delay(50);

}

int Stick_Y = analogRead(INY);

while (Stick_Y < 340) {

Stick_Y = analogRead(INY);

Keyboard.print("A");

delay(50);

}

while (Stick_Y > 990) {

Stick_Y = analogRead(INY);

Keyboard.print("D");

delay(50);

}

while (fifoCount < packetSize){

fifoCount = mpu.getFIFOCount();

}

if ( fifoCount >= 1024) {

mpu.resetFIFO();

fifoCount = mpu.getFIFOCount();

} else {

while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount();

mpu.getFIFOBytes(fifoBuffer, packetSize);

fifoCount -= packetSize;

mpu.dmpGetQuaternion(&q, fifoBuffer);

ПРОДОЛЖЕНИЕ ПРИЛОЖЕНИЯ 4

mpu.dmpGetGravity(&gravity, &q);

mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);

mx=ypr[0] * 180/M_PI;

my=ypr[1] * 180/M_PI;

if(old_mx>-200) {

if((old_mx<-100)&&(mx>100)) {

dx=(-180-old_mx)+(mx-180);

}

else if((old_mx>100)&&(mx<-100)) {

dx=(180-old_mx)+(180+mx);

}

else{

dx=mx-old_mx;

}

dy=my-old_my;

Mouse.move(2000/60*dx, -1000/30*dy);

}

old_mx=mx;

old_my=my;

}

}

ПРИЛОЖЕНИЕ 5

Код интерпретатора BNO055

#include

#include

#include

#include

#include

#include

#define BOUNCE_WAIT 10

#define BOUNCE_COUNT 1

#define ACTIVE_BUTTONS 5

int buttonPins[] = {4, 5, 6, 7, 8, 2, 9, 7, 18, 19, 20, 21, 10, 16, 14, 15};

const int xAxis = 18;

const int yAxis = 19;

boolean buttonPressed[16];

Bounce debouncers[16];

int debounceCount[16];

short quatx;

short quaty;

short quatrx;

short quatry;
Adafruit_BNO055 bno = Adafruit_BNO055(55);

#define N (2)

int RXLED = 17;

String inputString = "";

boolean stringComplete = false;

bool hasBNO = true;

int range = 254;

int responseDelay = 5;

int threshold = range / 4;

int center = range / 2;

void setup() {

inputString.reserve(200);

ПРОДОЛЖЕНИЕ ПРИЛОЖЕНИЯ 5

Gamepad.begin();

for (int i = 0; i < ACTIVE_BUTTONS; i++) {

debouncers[i] = Bounce();

debounceCount[i] = 0;

pinMode(buttonPins[i],INPUT_PULLUP);

(debouncers[i]).attach(buttonPins[i]);

(debouncers[i]).interval(BOUNCE_WAIT);

delay(100);

buttonPressed[i] = false;

}

pinMode(RXLED, OUTPUT);

digitalWrite(RXLED, LOW);

if(hasBNO){

if (!bno.begin())

{

Serial.print("Ooops, no BNO055 detected ... Check your wiring or I2C ADDR!");

while (1);

}

delay(1000);

bno.setExtCrystalUse(true);

}

}
void loop() {

if(hasBNO){

imu::Quaternion quat = bno.getQuat();

quatx = (short) ( (int) ( quat.x()*32767 ) );

quaty = (short) ( (int) ( quat.y()*32767 ) );

quatrx = (short) ( (int) ( quat.z()*32767 ) );

quatry = (short) ( (int) ( quat.w()*32767 ) );

Gamepad.xAxis(quatx);

Gamepad.yAxis(quaty);

Gamepad.rxAxis(quatrx);

ПРОДОЛЖЕНИЕ ПРИЛОЖЕНИЯ 5

Gamepad.ryAxis(quatry);

Gamepad.write();

}

for (int j = 0; j < ACTIVE_BUTTONS; j++) {

(debouncers[j]).update();

int value = (debouncers[j]).read();

if ( value == LOW ) {

if(debounceCount[j] == BOUNCE_COUNT && buttonPressed[j] == false) {

if(j==0){

Gamepad.press(1);

}

if(j==1){

Gamepad.press(2);

}

if(j==2){

Gamepad.press(3);

}

if(j==3){

Gamepad.press(4);

}

if(j==4){

Gamepad.press(5);

}

Gamepad.write();

digitalWrite(RXLED, HIGH);

buttonPressed[j] = true;

} else {

if(debounceCount[j] < BOUNCE_COUNT) {

debounceCount[j] = debounceCount[j] + 1;

}

}

} else {

if(debounceCount[j] > 0) {

ПРОДОЛЖЕНИЕ ПРИЛОЖЕНИЯ 5

debounceCount[j] = debounceCount[j] - 1;

} else {

buttonPressed[j] = false;

if(j==0){

Gamepad.release(1);

}

if(j==1){

Gamepad.release(2);

}

if(j==2){

Gamepad.release(3);

}

if(j==3){

Gamepad.release(4);

}

if(j==4){

Gamepad.release(5);

}

Gamepad.write();

digitalWrite(RXLED, LOW);

}

}

}

int8_t xReading = readAxis(xAxis);

int8_t yReading = readAxis(yAxis);

Gamepad.zAxis(map(xReading,-255,255,-255,255));

Gamepad.rzAxis(map(yReading,-255,255,-255,255));

Gamepad.write();

}

void serialEventRun(void) {

if (Serial.available()) serialEvent();

}

void serialEvent() {

while (Serial.available()) {

ПРОДОЛЖЕНИЕ ПРИЛОЖЕНИЯ 5

char inChar = (char)Serial.read();

inputString += inChar;

if(inputString.endsWith("\r") ) {

stringComplete = true;

}

}

}

int readAxis(int thisAxis) {

int reading = analogRead(thisAxis);

reading = map(reading, 0, 1023, 0, range);

int distance = reading - center;

if (abs(distance) < threshold) {

distance = 0;

}

return distance;

}

1 Система виртуальной реальности – это комплекс технических средств, погружающих человека в виртуальную 3D-сцену
1   2   3   4   5   6   7   8   9   10   11


написать администратору сайта