Cov txheej txheem:

Accel Sau Ntawv (Khawv Koob Tes): 4 Kauj Ruam (nrog Duab)
Accel Sau Ntawv (Khawv Koob Tes): 4 Kauj Ruam (nrog Duab)

Video: Accel Sau Ntawv (Khawv Koob Tes): 4 Kauj Ruam (nrog Duab)

Video: Accel Sau Ntawv (Khawv Koob Tes): 4 Kauj Ruam (nrog Duab)
Video: Yuav ua li cas thiaj khiav dim lub ntiajteb no 2024, Hlis ntuj nqeg
Anonim
Accel Sau Ntawv (Khawv Koob Tes)
Accel Sau Ntawv (Khawv Koob Tes)
Accel Sau Ntawv (Khaub Ncaws Tes)
Accel Sau Ntawv (Khaub Ncaws Tes)
Accel Sau Ntawv (Khawv Koob Tes)
Accel Sau Ntawv (Khawv Koob Tes)

Taw qhia

Khawv koob txhais tes tso cai rau cov neeg xiam oob qhab thiab cov txuj ci lub cev muaj zog kom txaus siab rau kev muaj tswv yim ntawm kev kos duab thiab sau ntawv hauv ib puag ncig simulated. Cov Khaub Ncaws Tes yog lub hnab looj tes hnav uas hnov qhov txav ntawm koj tus ntiv tes ntsuas thiab txhais qhov ntawd rau hauv kab duab kab ntawm lub computer screen.

Cov Ntaub Ntawv Xav Tau

LSM9DOF Breakout Board --- $ 24.95 ---

Adafruit Feather nrog Wifi --- $ 18.95 ---

Poj niam/Poj niam Xov --- $ 1.95 ---

Daim kab xev/Velcro strips --- $ 3

Ob lub hlau nplaum sib npaug zog --- Tus nqi sib txawv

Nws ua haujlwm li cas

Los ntawm kev siv tus ntsuas nrawm, peb tuaj yeem sau cov ntaub ntawv nrawm rau y-axis uas yuav pab peb txiav txim siab thaum tus neeg siv tus ntiv tes txav mus thiab nce. Vim qhov tseeb tias peb lub ntsuas ntsuas ntsuas ntsuas nrawm nrog kev hwm rau nruab nrab ntawm lub ntiaj teb peb tsis tuaj yeem txiav txim siab qhov nrawm ntawm x-axis (sab laug lossis sab xis). Hmoov zoo, LSM9DOF pawg thawj coj tawm tseem muaj cov ntsuas hluav taws xob uas tso cai rau peb sau cov ntaub ntawv ntawm cov chaw sib nqus. Peb muab ob lub hlau nplaum sib nrug 30 cm thiab muaj lub hnab looj tes nyob nruab nrab. Yog tias cov ntaub ntawv sib nqus nyeem tau zoo ces peb paub lub hnab looj tes tau txav mus los thiab rov ua dua. Tom qab tag nrho cov ntaub ntawv raug khaws tseg hauv qhov ntsuas/ntsuas cua nws xa cov ntaub ntawv los ntawm xaim mus rau plaub uas txuas nrog lub khoos phis tawj ntawm wifi thiab tom qab ntawd xa cov ntaub ntawv mus rau lub khoos phis tawj uas peb tuaj yeem siv hauv peb tus lej.

Kauj Ruam 1: Lub Cev Muaj Zog 1

Lub Cev Muaj Zog 1
Lub Cev Muaj Zog 1
Lub Cev Muaj Zog 1
Lub Cev Muaj Zog 1

Tsab ntawv no yog lub hnab looj tes xaws ua ke xoob ntawm tes txhawm rau kom nws plam hla cov khoom siv hluav taws xob. Cov cuab yeej hluav taws xob yuav raug txuas los ntawm velcro rau hauv qab lub tsho tiv thaiv lub hauv paus ua ke nrog cov hnab looj tes yooj yim ntawm tes. Tom qab ntawd lub hnab looj tes ntsuab yuav plam hla lub hauv paus thiab cov khoom siv hluav taws xob….

Cov kauj ruam hauv kev ua cov hnab looj tes tsab:

  • Tau ob daim ntaub loj txaus los taug tes
  • Tuav tes rau ob daim ntaub thiab txiav lawv tawm
  • Muab ob txhais tes txiav tawm ua ke kom lawv tau txais txiaj ntsig zoo
  • Tom ntej no, txhawm rau npaj lub tshuab xaws, siv xov los ntawm cov taw qhia ntawm lub tshuab
  • Thaum lub tshuab xaws tau teeb tsa, nqa rab koob thiab tso ob daim ntaub tso rau hauv qab rab koob
  • Nco ntsoov tias rab koob tau hlua rau ntawm ntug ntawm daim ntaub, pib siv lub tshuab, thiab xaws raws cov ntug ntawm daim ntaub, thaum tso ob daim uas tsis pom ntawm lub dab teg kom tes tau haum.

Kauj Ruam 2: Lub Cev Muaj Zog 2

Lub Cev Lub Cev 2
Lub Cev Lub Cev 2
Lub Cev Lub Cev 2
Lub Cev Lub Cev 2

Peb tsab ntawv kawg yog lub hnab looj tes tsis tu ncua ua ke nrog Velcro pluaj uas tuaj yeem kho tau rau txhua lub dab teg. Lub hnab looj tes thiab pluaj tau xaws ua ke, thiab cov khoom siv hluav taws xob tau txuas rau lub hnab looj tes ntawm Velcro.

Cov kauj ruam hauv kev ua daim ntawv thib 2 ntawm lub hnab looj tes:

  1. Yuav lub hnab looj tes, cov khoom siv ntawm hnab looj tes tsis muaj teeb meem.
  2. Yuav ib lub velcro dab teg
  3. Yuav lub roj teeb nqa tau
  4. Yuav cov nplaum Velcro
  5. Nrog ib rab koob xaws, muab cov ntaub qhwv lub dab teg rau hauv qab ntawm lub hnab looj tes
  6. Lub pluaj dab teg yuav tsum tuaj yeem hloov kho qhov sib txawv ntawm lub dab teg.
  7. Muab daim kab xev nplaum tso rau ntawm lub hauv paus ntawm qhov ntsuas qhov ntsuas thiab muab txuas rau tus ntiv tes ntsuas ntawm lub hnab looj tes
  8. Txuas daim kab xev nplaum rau ntawm cov plaub thiab muab nws tso rau saum lub hnab looj tes.
  9. Siv xov hlau txuas 3V3 tus pin hauv plaub hau rau VIN tus pin hauv lub ntsuas cua
  10. Siv xov hlau txuas GND tus pin hauv plaub rau GND tus pin tus ntsuas qhov ntsuas.
  11. Siv xov hlau txuas SCL tus pin hauv plaub hau mus rau SCL tus pin tus ntsuas qhov ntsuas.
  12. Siv xov hlau txuas SDA tus pin hauv plaub hau rau SDA tus pin tus ntsuas qhov ntsuas.
  13. Txuas tsawg kawg yog 5 volt roj teeb dhau los ntawm usb rau plaub kom muab lub zog.

Kauj Ruam 3: Cov hlau nplaum

Hlau nplaum
Hlau nplaum

Kauj Ruam 1: Muab ob lub hlau nplaum sib npaug zog sib zog los ntawm ib leeg.

Kauj Ruam 2: Ntsuas tawm 30 cm qhov sib txawv nruab nrab ntawm ob lub hlau nplaum

Kauj Ruam 3: tso Magnetometer raws nraim hauv nruab nrab ntawm ob lub hlau nplaum. Koj yuav tsum tau txais cov ntaub ntawv nyob ib puag ncig 0 thaum nws nyob hauv nruab nrab. Yog tias koj tau txais kev nyeem xoom hla mus rau qib 5.

Kauj Ruam 4: Yog tias kev nyeem ntawv tsis xoom lossis ze rau xoom ces koj yuav tsum kho qhov nrug ntawm cov hlau nplaum. Yog tias kev nyeem ntawv tsis zoo txav lub laug hlau nplaum ib cm lossis 2 rau sab laug lossis kom txog thaum nyeem ntawv yog xoom. Yog tias nws ua tau zoo ua qhov qub tshwj tsis yog nrog cov hlau nplaum raug.

Kauj Ruam 5: Sau cov cai uas lees txais cov ntaub ntawv los ntawm lub tshuab ntsuas cua thiab nyeem yog tias nws zoo lossis tsis zoo. Yog qhov zoo muaj cov cai kos kab rau sab xis thiab yog tias tsis zoo kos kab sab laug.

Kauj ruam 4: Code

Code
Code

github.iu.edu/ise-e101-F17/MuscleMemory-Sw…

Taw qhia:

Txhawm rau ua cov ntaub ntawv los ntawm lub ntsuas cua, tus neeg siv/server kev sib raug zoo yuav tsum tsim los ntawm Adafruit plaub thiab tus neeg rau zaub mov uas ua cov ntaub ntawv (khiav ntawm lub laptop/desktop). Ob daim ntawv yuav tsum tau tsim: ib qho rau cov neeg siv khoom (Adafruit plaub), thiab lwm qhov rau cov neeg rau zaub mov (qhov no, Jarod lub khoos phis tawj). Tus neeg siv khoom tau sau hauv C ++, thiab tus neeg rau zaub mov tau sau ua sej. Cov lus siv rau cov neeg siv teeb meem raws li Arduino feem ntau yog C ++ lus, thiab hloov nws los siv lwm yam lus yog qhov nyuaj. Tus neeg rau zaub mov tuaj yeem sau ua ib hom lus, tsuav nws muaj cov yam ntxwv network.

Teeb tsa Tus Neeg Siv Khoom:

Ua ntej, peb yuav teeb tus neeg siv khoom tus lej. Feem ntau ntawm WiFi txoj cai txuas tau yooj yim los ntawm Adafruit cov tsev qiv ntawv. Peb pib los ntawm suav nrog cov chav kawm tseem ceeb.

#include #include #include #include #include

Teeb qee qhov hloov pauv dab tsi uas yuav siv thoob plaws hauv txoj cai.

// Txuas mus rau lub network const char* ssid = "MMServer"; const char* password = "MMServer-Password"; // IP thiab chaw nres nkoj ntawm server uas yuav tau txais cov ntaub ntawv const char* host = "149.160.251.3"; const int chaw nres nkoj = 12347; bool txuas = tsis tseeb;

// Initialize tsab ntawv tsa suab ntes

Adafruit_LSM9DS0 lsm = Adafruit_LSM9DS0 (1000);

WiFiClient tus thov kev pab;

Tsim teeb tsa () muaj nuj nqi uas yuav ua haujlwm sai li sai tau thaum pib plaub.

// Teeb WiFi txuas, thiab txuas rau servervoid teeb () {Serial.begin (9600); ncua (100);

Serial.println ();

Serial.println (); Serial.print ("Txuas rau"); Serial.println (ssid); // Pib WiFi WiFi.begin (ssid, password); // Txuas… thaum (WiFi.status ()! = WL_CONNECTED) {ncua sijhawm (500); Serial.print ("."); } // Ua tiav txuas nrog WiFi Serial.println (""); Serial.println ("Txuas nrog WiFi"); Serial.println ("IP chaw nyob:"); Serial.println (WiFi.localIP ());

#ifndef ESP8266

thaum (! Serial); #endif Serial.begin (9600); Serial.println ("Kev Ntsuas Sensor");

// Pib lub sensor

yog (! lsm.begin ()) {// Muaj teeb meem txheeb xyuas LSM9DS0 Serial.print (F ("Ooops, tsis muaj LSM9DS0 kuaj pom … Txheeb xyuas koj cov thaiv lossis I2C ADDR!")); thaum (1); } Serial.println (F ("Pom LSM9DS0 9DOF")); // Pib txuas rau server Serial.print ("Txuas rau"); Serial.println (tus tswv tsev);

// Txheeb xyuas kev sib txuas ua tiav. Yog ua tsis tau ces rho menyuam

yog (! client.connect (tus tswv tsev, chaw nres nkoj)) {Serial.println ("txuas tsis tau"); txuas = tsis tseeb; rov qab; } lwm tus {txuas = muaj tseeb; }

// Teeb tsa lub sensor nce ntxiv thiab sijhawm sib koom ua ke

configureSensor (); }

Tom qab ntawd peb xav tau lub luag haujlwm ua haujlwm uas yuav rov ua dua. Hauv qhov no, nws tau siv los rov xa cov ntaub ntawv los ntawm lub ntsuas cua mus rau tus neeg rau zaub mov hauv daim ntawv "[z_accel]: [y_mag]: [z_mag]". Client.print (tus lej); muaj nuj nqi yog dab tsi xa cov ntaub ntawv rau tus neeg rau zaub mov.

void loop () {ncua (250); yog (txuas nrog) {// Qhov no yuav xa cov ntaub ntawv mus rau lub server sensors_event_t accel, mag, gyro, temp; lsm.getEvent (& accel, & mag, & gyro, & temp); Cov xov tooj; tus lej += accel.acceleration.z; cov lej += ":"; tus lej += mag.magnetic.y; cov lej += ":"; zauv += mag.magnetic.z; Serial.print (lej); client.print (lej); Serial.println (); } lwm {tsim kev sib txuas (); }}

Rau qee qhov kev ua haujlwm zoo, peb xav tau ib qho los tsim kev sib txuas ntawm plaub thiab tus neeg rau zaub mov.

void tsim kev sib txuas () {yog (! txuas = tsis tseeb; rov qab; } lwm tus {txuas = muaj tseeb; }}

Peb kuj yuav tsum teeb tsa lub sensor thiab muab nws qhov ntau ntawm qhov txiaj ntsig nws yuav nyeem. Piv txwv li, kev nrawm nrawm muaj 5 qhov kev xaiv rau qhov ntau: 2g, 4g, 6g, 8g, thiab 16g.

void configureSensor (tsis muaj dab tsi) {// Teeb tsa qhov ntsuas ntau yam //lsm.setupAccel(lsm. LSM9DS0_ACCELRANGE_2G); lsm.setupAccel (lsm. LSM9DS0_ACCELRANGE_4G); //lsm.setupAccel(lsm. LSM9DS0_ACCELRANGE_6G); //lsm.setupAccel(lsm. LSM9DS0_ACCELRANGE_8G); //lsm.setupAccel(lsm. LSM9DS0_ACCELRANGE_16G); // Teeb tsa lub ntsuas hluav taws xob rhiab heev //lsm.setupMag(lsm. LSM9DS0_MAGGAIN_2_2USUSS); //lsm.setupMag(lsm. LSM9DS0_MAGGAIN_4GAUSS); //lsm.setupMag(lsm. LSM9DS0_MAGGAIN_8GAUSS); lsm.setupMag (lsm. LSM9DS0_MAGGAIN_12GAUSS);

// Teeb lub gyroscope

lsm.setupGyro (lsm. LSM9DS0_GYROSCALE_245DPS); //lsm.setupGyro(lsm. LSM9DS0_GYROSCALE_500DPS); //lsm.setupGyro(lsm. LSM9DS0_GYROSCALE_2000DPS); }

Teeb tus neeg rau zaub mov:

Tus neeg rau zaub mov yuav yog cov ntaub ntawv nab nab uas yuav khiav ntawm kab hais kom ua ntawm lub khoos phis tawj. Txhawm rau pib, ntshuam cov chav kawm xav tau.

ntshuam socketimport rov ntshuam pyautogui

socket yog siv rau kev sib tham. re yog siv rau regex, lossis kev siv txoj hlua. pyautogui yog lub tsev qiv ntawv nab nab uas yuav tso cai rau kev kos duab tshwm sim (tham tom qab).

Ntxiv mus, peb yuav tsum txhais qee qhov txawv. Cov no yuav yog cov hloov pauv thoob ntiaj teb, yog li lawv yuav nkag mus rau ntau qhov haujlwm. Lawv yuav raug siv tom qab hauv txoj cai.

kuv = 0n = 0 kab = 1

data_list = cov

mag_data =

mag_calib_y = 0 mag_offset_y = 0

z_cib = 0

z_offset = 0 z_moving_offset = 0 z_diff = 0 z_real = 0 z_velo = 0 z_pos = 0

keep_offset = tsis tseeb

first_data = Tseeb

Tam sim no peb xav tau lub luag haujlwm los tsim cov server thiab qhib nws rau cov khoom sib txuas.

def startServer (): thoob ntiaj teb kuv thoob ntiaj teb first_data # pib lub server qhov (socket.socket) = socket.socket (socket. AF_INET, socket. SOCK_STREAM) serversocket.setsockopt (socket. SOL_SOCKET, socket. SO_REUSEADDR, 1) # Server IP chaw nyob thiab chaw nres nkoj host = " 149.160.251.3 "chaw nres nkoj = 12347 server_address = (tus tswv tsev, chaw nres nkoj) # Qhib tus neeg rau zaub mov thiab mloog rau kev txuas sib txuas luam tawm ('Pib server rau %s chaw nres nkoj %s' %server_address) serversocket.bind (server_address) serversocket.listen (5) # Tos rau kev sib txuas… thaum muaj tseeb: luam tawm ('Tos rau kev sib txuas …') # Txais qhov txuas txuas (tus neeg siv khoom, chaw nyob) = serversocket.accept () # Sim cais cov ntaub ntawv tau txais sim: luam tawm ('Kev sib txuas tsim los ntawm', chaw nyob) thaum muaj tseeb: # Tau txais cov ntaub ntawv thiab xa nws rau kev ua cov ntaub ntawv = clientsocket.recv (25) accel_data = re.split ('[:]', str (data)) accel_data [0] = accel_data [0] [2:] accel_data [1] = accel_data [1] accel_data [2] = accel_data [2] [1: -1] print (accel_data) i+= 1 if (i <51): calibData (accel_data) else: movingAcce l (accel_data [0]) processData (accel_data) first_data = Tsis tseeb thaum kawg: # Kaw lub qhov (socket) los tiv thaiv cov ntaub ntawv tsis tsim nyog xau clientsocket.close ()

Tam sim no peb xav tau cov haujlwm uas yuav ua txhua yam ntawm cov ntaub ntawv. Thawj kauj ruam uas yuav tsum ua, thiab thawj qhov haujlwm hu ua, yog qhov ntsuas ntawm lub ntsuas cua rau lub hom phiaj kev suav.

def calibData (npe): ntiaj teb z_calib ntiaj teb z_offset ntiaj teb mag_data ntiaj teb mag_calib_y ntiaj teb mag_offset_y z_calib += float (list [0]) mag_calib_y += float (list [1]) if (i == 50): z_offset = z_calib / 50 mag_offset_y = mag_calib_y / 50 z_calib = 0 mag_calib_y = 0 mag_data.append (mag_offset_y)

Tom ntej no, peb tsim kev txav nrawm nrawm. Qhov no ua rau nws kom qhov kev zov me nyuam lees paub thaum ib tus neeg nres txav lawv cov ntiv tes vim tias txhua qhov txiaj ntsig rau kev nrawm uas xa mus rau tus neeg rau zaub mov yuav tsum zoo ib yam ntawm lub sijhawm ntawd.

def txavAccel (num): ntiaj teb z_calib ntiaj teb z_diff ntiaj teb z_moving_offset ntiaj teb z_offset ntiaj teb data_list ntiaj teb n ntiaj teb keep_offset yog (n 0.2 lossis z_diff <-0.2): # suab pom hauv cov ntaub ntawv, rov pib keep_offset = Tseeb n = 0 z_calib = 0 z_moving_offset = 0 z_diff = 0 data_list = tawg yog tias tsis khaws_offset: # nyob ruaj khov hauv cov ntaub ntawv, teeb tsa z_offset tshiab z_offset = z_moving_offset print ("Tshiab z_offset:") print (z_offset) n = 0 z_calib = 0 z_moving_offset = 0 z_diff = 0 data_list = keep_offset = Cuav keep_offset = Cuav

Tom ntej no, peb ua qhov nyuaj ntawm kev ua lej. Qhov no cuam tshuam nrog kev txhais cov ntaub ntawv nrawm mus rau hauv cov ntaub ntawv txoj haujlwm uas yuav tso cai rau peb qhia cov lus qhia uas tus neeg siv txav lawv cov ntiv tes.

def processData (cov npe): #[accel.z, mag.y] ntiaj teb z_offset ntiaj teb z_real ntiaj teb z_velo ntiaj teb z_pos ntiaj teb thawj_data ntiaj teb mag_data

z_real = ntab (list [0]) - z_offset

mag_y = daim ntawv [1] mag_z = npe [2] sab laug = Tsis raug cai = Tsis raug # Tsis txhob ua kom nrawm dua kom paub tseeb tias nws tau nrawm dua # Tiv thaiv cov suab nrov los ntawm kev koom nrog txoj haujlwm yog (z_real -0.20): z_real = 0 #Begin kev sib koom ua ke txhawm rau nrhiav txoj haujlwm yog (thawj_data): mag_data.append (mag_y) z_pos = (0.5 * z_real * 0.25 * 0.25) + (z_velo * 0.25) + z_pos z_velo = z_real * 0.25 pyautogui.moveTo (1500, 1000) ntxiv: z_pos = (0.5 * z_real * 0.25 * 0.25) + (z_velo * 0.25) + z_pos z_velo = (z_real * 0.25) + z_velo del mag_data [0] mag_data.append (mag_y) yog (float (mag_data [1]) - float (mag_data [0])> 0.03): txoj cai = muaj tseeb elif (ntab (mag_data [1]) - ntab (mag_data [0]) <-0.03): sab laug = Muaj tseeb yog (txoj cai): txav mus (50, int (z_pos*) 1000)) elif (sab laug): txav (-50, int (z_pos*1000)) z_velo = 0 z_pos = 0

Tam sim no, thaum kawg, peb txav tus cursor! Txhawm rau ua qhov no, peb qhib lub qhov rai xim thiab ua kom nws puv npo. Lub tsev qiv ntawv pyautogui muaj cov haujlwm hu ua pyautogui.dragRel (x, y); uas peb siv los rub tus cursor nas los ntawm ib kis mus rau lwm qhov. Nws siv cov ntaub ntawv txheeb ze txoj haujlwm yog li kev txav mus los piv rau txoj haujlwm kawg ntawm tus cursor.

def txav (x, y): print ("txav mus rau", x, -y) pyautogui.dragRel (x, -y)

Thaum kawg, peb yuav tsum hu lub luag haujlwm tseem ceeb kom txawm tias tag nrho cov cai no ua haujlwm.

# Hu rau txoj haujlwm kom pib serverstartServer ()

Pom zoo: