Дипломная работа по теме создание VR-перчатки. К дипломному проект Тема Разработка универсального кистевого устройства управления
Скачать 1.31 Mb.
|
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ И ЛИТЕРАТУРЫСтепанов, С. Практическое программирование Arduino / Степанов С., Накоряков В., Смирнов В.//Радио-Ежегодник 2017. – №34. – С.112-410 Соммер Улли, Программирование микроконтроллерных плат / Соммер Улли - СПб: БХВПетербург, 2018. – 256 с. Петин В.А. Проекты с использованием контроллера Arduino/ В.А. Петин. – СПб.: БХВПетербург, 2018. – 464 с. Киреева Э.А Полный справочник по электрооборудованию и электротехнике / Э.А Киреева, С.Н Шерстнев. – М.: КНОРУС, 2017. – 864с. Виглеб Г. ДАТЧИКИ. Устройство и применение/ Г. Виглеб. – М.: Мир, 1989 – 240с. Электронный справочник программиста Arduino – URL: https://www.arduinoplus.ru/coding-arduino/ (дата обращения: 24.01.2020). –Текст: электронный. Бесплатная электронная Интернет – библиотека.: сайт -https://www.litres.ru/ (дата обращения: 24.01.2020). –Текст: электронный. Безуглов Д.А. Цифровые устройства и микропроцессоры: учеб.пособие: Учебное пособие / Микушин А.В., Сажнев А.М., Сединин В.И. - СПб:БХВ-Петербург, 2017. - 832 с. ГОСТ РВ 20.39.309-98 Государственный стандарт российской федерации комплексная система общих технических требований аппаратура, приборы, устройства и оборудование военного назначения: дата введения 1998-05-26. ГОСТ 23592-96 Монтаж электрический радиоэлектронной аппаратуры и приборов. Общие требования к объемному монтажу изделий электронной техники и электротехнических: дата введения 1996-04-12 Проект «Arduino Vive Controller Emulation.» – URL: http://www.cuddleburrito.com/flrnmrr/2016/11/30/arduino-vive-controller-emulation/ (дата обращения: 01.02.2020). –Текст: электронный. Саймон Монк. Программируем Arduino. Профессиональная работа со скетчами. / Саймон Монк – СПб.: БХВПетербург, 2019. – 256 с. Shahram Latifi. 17th International Conference on Information Technology–New Generations (ITNG 2020). Электронный журнал Hindawi – URL: https://www.hindawi.com/journals/js/2020/7296204/ (дата обращения: 13.02.2020). –Текст: электронный. Электронный журнал IOP Conference Series: Materials Science and Engineering – URL: https://iopscience.iop.org/article/10.1088/1757-899X/740/1/012151/meta (дата обращения: 24.02.2020). –Текст: электронный. Электронный журнал OSA Publishing – URL: https://www.osapublishing.org/abstract.cfm?uri=OFC-2020-M1A.6 (дата обращения: 27.03.2020). –Текст: электронный. Электронный журнал ATLANTIS PRESS – URL: https://www.atlantis-press.com/proceedings/iccese-20/125936794 (дата обращения: 30.03.2020). –Текст: электронный. Электронный журнал ScholarSpace – URL: https://scholarspace.manoa.hawaii.edu/handle/10125/63927 (дата обращения: 07.04.2020). –Текст: электронный. Katharina Jahn. Information Systems and Neuroscience, 2019. Электронный журнал ACMDL – URL: https://dl.acm.org/doi/abs/10.1145/3334480.3383067 (дата обращения: 16.04.2020). –Текст: электронный. Бесплатная электронная Интернет – библиотека – URL: https://arxiv.org/abs/2001.07546 (дата обращения: 24.04.2020). –Текст: электронный. Журнал International Journal of Human–Computer Interaction, 2020. Электронный журнал SpringerLink – URL: https://link.springer.com/article/10.1007/s10055-019-00378-w (дата обращения: 28.04.2020). –Текст: электронный. Электронная Интернет – библиотека – URL: https://journals.sagepub.com/doi/abs/10.1177/002224298905300309 (дата обращения: 29.04.2020). –Текст: электронный. Электронный журнал ScienceDirect – URL: https://www.sciencedirect.com/science/article/abs/pii/S0169023X97000566 (дата обращения: 01.05.2020). –Текст: электронный. Электронный журнал IOP – URL: https://iopscience.iop.org/article/10.1088/0004-637X/770/2/103/meta (дата обращения: 03.05.2020). –Текст: электронный. Электронный журнал Nature – URL: https://www.nature.com/articles/417459a (дата обращения: 07.05.2020). –Текст: электронный. Электронный журнал Genome Research – URL: https://genome.cshlp.org/content/22/9/1813.short (дата обращения: 13.05.2020). –Текст: электронный. Электронный журнал PHYSIOLOGICAL REVIEWS – URL: https://genome.cshlp.org/content/22/9/1813.short (дата обращения: 17.05.2020). –Текст: электронный. Электронный журнал Arthritis & Rheumatology – URL: https://onlinelibrary.wiley.com/doi/full/10.1002/art.11137 (дата обращения: 19.05.2020). –Текст: электронный. ПРИЛОЖЕНИЯПРИЛОЖЕНИЕ 1 Принципиальная схема платы ПРИЛОЖЕНИЕ 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-сцену |