
Orodha ya maudhui:
2025 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2025-01-23 15:11



Utangulizi
Mkono wa Uchawi unaruhusu watu wenye ulemavu na udhaifu wa ustadi wa magari kufurahiya ubunifu wa kuchora na kuandika katika mazingira ya kuigwa. Mkono wa Uchawi ni glavu inayoweza kuvaliwa ambayo huhisi mwendo wa kidole chako cha faharisi na hutafsiri hiyo kwenye uchoraji wa mistari kwenye skrini ya kompyuta.
Vifaa vinahitajika
Bodi ya Kuvunja LSM9DOF --- $ 24.95 ---
Manyoya ya Adafruit na Wifi --- $ 18.95 ---
Waya za Kike / Kike --- $ 1.95 ---
Kanda / Velcro vipande - $ 3
Sumaku mbili za nguvu sawa --- Bei zinatofautiana
Inavyofanya kazi
Kwa kutumia kipima kasi, tunaweza kukusanya data ya kuongeza kasi kwa mhimili wa y ambao utatusaidia kuamua ni lini kidole cha mtumiaji kinasonga juu na chini. Kwa sababu ya ukweli kwamba kasi yetu ya kuongeza kasi inahusiana na katikati ya dunia hatuwezi kuamua kuongeza kasi ya mhimili wa x (kushoto au kulia). Kwa bahati nzuri bodi ya kuzuka ya LSM9DOF pia ina magnetometer ambayo inatuwezesha kukusanya data kwenye uwanja wa sumaku. Tunaweka sumaku mbili mbali na cm 30 na tuna kinga katikati. Ikiwa data ya sumaku ilisoma chanya basi tunajua kinga inakwenda sawa na kinyume chake. Baada ya data zote kukusanywa kwenye accelerometer / magnetometer hutuma data kupitia waya kwa manyoya ambayo yameunganishwa na kompyuta ya wifi na kisha kupeleka data kwa kompyuta ambayo tunaweza kutumia katika nambari yetu.
Hatua ya 1: Mfano wa Kimwili 1


Mfano huu umekusudiwa kushonwa glavu pamoja bure kwa mkono ili iweze kuteleza juu ya vifaa vya elektroniki. Kifaa cha elektroniki kisha kitaambatanishwa na velcro kwenye sehemu ya chini ya mikono ya silaha pamoja na glavu ya msingi mkononi. Kisha kinga ya kijani itateleza juu ya msingi na vifaa vya elektroniki….
Hatua za kutengeneza kinga ya mfano:
- Pata vipande viwili vya kitambaa kubwa vya kutosha kufuatilia mkono
- Fuatilia mkono kwenye vipande vyote vya kitambaa na ukate
- Weka mikono miwili iliyokatwa pamoja ili iwekwe sawa
- Ifuatayo, kuandaa mashine ya kushona, tumia uzi kupitia matangazo yaliyoonyeshwa kwenye mashine
- Wakati mashine ya kushona imewekwa, inua sindano na uweke vipande viwili vya kitambaa chini ya sindano
- Hakikisha sindano imewekwa pembeni kabisa ya kitambaa, anza mashine, na kushona kando ya kitambaa, huku ukiacha vipande viwili vikiwa havijashonwa kwenye mkono ili mkono uweze kutoshea.
Hatua ya 2: Mfano wa Kimwili 2


Mfano wetu wa mwisho ni glavu ya kawaida pamoja na kamba ya Velcro ambayo inaweza kubadilishwa kwa mkono wowote. Kinga na kamba zimeunganishwa pamoja, na vifaa vya elektroniki vimeambatanishwa na glavu kupitia Velcro.
Hatua za kutengeneza mfano wa 2 wa kinga:
- Nunua glavu, nyenzo za glavu haijalishi.
- Nunua kamba ya mkono ya velcro
- Nunua betri inayoweza kubebeka
- Nunua Velcro ya kunata
- Pamoja na sindano ya kushona, ambatisha kamba ya wvelcro chini ya glavu
- Kamba ya mkono inapaswa kuweza kuzoea saizi tofauti za mkono.
- Ambatisha mkanda wa kunata kwa msingi wa kiharusi na uiambatishe kwenye kidole cha kidole cha glavu
- Ambatisha mkanda wenye kunata kwa manyoya na uiambatanishe juu ya kinga.
- Kutumia waya unganisha pini ya 3V3 kwenye manyoya na pini ya VIN kwenye accelerometer
- Kutumia waya unganisha pini ya GND kwenye manyoya na pini ya GND kisayansi.
- Kutumia waya unganisha pini ya SCL kwenye manyoya na pini ya SCL kasi ya kasi.
- Kutumia waya unganisha pini ya SDA kwenye manyoya na pini ya SDA kasi ya kasi.
- Unganisha angalau betri ya volt 5 kupitia usb kwa manyoya ili kutoa nguvu.
Hatua ya 3: Sumaku

Hatua ya 1: Weka sumaku mbili za nguvu sawa kutoka kwa kila mmoja.
Hatua ya 2: Pima pengo la cm 30 kati ya sumaku mbili
Hatua ya 3: weka Magnetometer haswa katikati ya sumaku mbili. Unapaswa kupokea data karibu 0 wakati iko katikati. Ukipokea usomaji wa sifuri ruka hadi hatua ya 5.
Hatua ya 4: Ikiwa usomaji sio sifuri au karibu na sifuri basi lazima urekebishe umbali wa sumaku. Ikiwa usomaji ni hasi songa sumaku ya kushoto cm au 2 kwenda kushoto au hadi kusoma iwe sifuri. Ikiwa ni chanya fanya kitu kimoja isipokuwa na sumaku sahihi.
Hatua ya 5: Andika nambari inayokubali data kutoka kwa sumaku ya sumaku na inasoma ikiwa ni chanya au hasi. Ikiwa chanya ina nambari chora mstari kulia na ikiwa hasi chora laini kushoto.
Hatua ya 4: Kanuni

github.iu.edu/ise-e101-F17/MuscleMemory-Sw…
Utangulizi:
Ili kusindika data kutoka kwa accelerometer, uhusiano wa mteja / seva lazima uanzishwe kati ya manyoya ya Adafruit na seva inayotengeneza data (inayoendesha kwenye kompyuta ndogo / desktop). Faili mbili za nambari zitahitajika kuundwa: moja kwa mteja (manyoya ya Adafruit), na nyingine kwa seva (katika kesi hii, Laptop ya Jarod). Mteja ameandikwa katika C ++, na seva imeandikwa kwa chatu. Lugha inayotumiwa kwa mteja ni muhimu kwani Arduino ni lugha ya C ++, na kuibadilisha kutumia lugha tofauti ni ngumu. Seva inaweza kuandikwa kwa lugha yoyote, maadamu ina huduma za mtandao.
Kuanzisha Mteja:
Kwanza, tutaweka msimbo wa mteja. Nambari nyingi za unganisho la WiFi zinapatikana kwa urahisi kupitia maktaba za Adafruit. Tunaanza kwa kujumuisha madarasa husika.
#jumlisha #jumuisha #jumuisha #jumlisha # pamoja
Weka vigeuzi kadhaa ambavyo vitatumika kwenye nambari yote.
// Unganisha kwa mtandao const char * ssid = "MMServer"; const char * password = "MMServer-Password"; // IP na bandari ya seva ambayo itapokea data const char * host = "149.160.251.3"; bandari ya int int = 12347; bool imeunganishwa = uongo;
// Anzisha kigunduzi cha mwendo
Matunda ya matunda_LSM9DS0 lsm = Adafruit_LSM9DS0 (1000);
Mteja wa Wateja wa WiFi;
Unda kazi ya kuanzisha () ambayo itaendeshwa mara tu manyoya yatakapoanza.
// Sanidi unganisho la WiFi, na unganisha kwa usanidi wa servervoid () {Serial.begin (9600); kuchelewesha (100);
Serial.println ();
Serial.println (); Serial.print ("Kuunganisha kwa"); Serial.println (ssid); // Anza WiFi WiFi. Anza (ssid, password); // Kuunganisha… wakati (WiFi.status ()! = WL_CONNECTED) {kuchelewesha (500); Printa ya serial ("."); } // Imefanikiwa kushikamana na WiFi Serial.println (""); Serial.println ("WiFi imeunganishwa"); Serial.println ("Anwani ya IP:"); Serial.println (WiFi.localIP ());
#ifndef ESP8266
wakati (! Serial); # endif Serial.anza (9600); Serial.println ("Mtihani wa Sensorer");
// Anzisha sensa
ikiwa (! lsm.begin ()) {// Kulikuwa na tatizo kugundua LSM9DS0 Serial.print (F ("Oops, no LSM9DS0 detected… Check your wiring or I2C ADDR!")); wakati (1); } Serial.println (F ("Imepatikana LSM9DS0 9DOF")); // Anza kuunganisha kwenye seva Serial.print ("Kuunganisha kwa"); Serial.println (mwenyeji);
// Angalia muunganisho uliofanikiwa. Ikiwa imeshindwa basi toa mimba
ikiwa (! mteja.connect (mwenyeji, bandari)) {Serial.println ("unganisho limeshindwa"); imeunganishwa = uongo; kurudi; } kingine {connected = true; }
// Kuweka faida ya sensorer na wakati wa ujumuishaji
sanidiSensor (); }
Kisha tunahitaji kazi ya kitanzi ambayo itazunguka mara kwa mara. Katika kesi hii, hutumiwa kurudia kutuma data kutoka kwa kipima kasi kwenda kwa seva kwa njia ya "[z_accel]: [y_mag]: [z_mag]". Alama ya mteja (nambari); kazi ndio inayotuma data kwa seva.
kitanzi batili () {kuchelewesha (250); ikiwa (imeunganishwa) {// Hii itatuma data kwa sensorer_event_t accel, mag, gyro, temp; lsm.getEvent (& accel, & mag, & gyro, & temp); Nambari za kamba; namba + = kasi ya kuharakisha.z; namba + = ":"; namba + = mag.magnetic.y; namba + = ":"; namba + = mag.magnetic.z; Printa ya nambari (nambari); alama ya mteja (nambari); Serial.println (); } mwingine {establishConnection (); }}
Kwa kazi zingine za matumizi, tunahitaji moja kuanzisha unganisho kati ya manyoya na seva.
batili kuanzishaConnection () {if (! client.connect (host, port)) {Serial.println ("unganisho limeshindwa"); imeunganishwa = uongo; kurudi; } kingine {connected = true; }}
Tunahitaji pia kusanidi kihisi na kuipatia anuwai ya maadili ambayo itasoma. Kwa mfano, kuongeza kasi kuna chaguzi 5 kwa anuwai: 2g, 4g, 6g, 8g, na 16g.
batili configureSensor (batili) {// Weka upeo wa mwendo wa kasi //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); // Weka unyeti wa magnetometer //lsm.setupMag (lsm. LSM9DS0_MAGGAIN_2GAUSS); //lsm.setupMag(lsm. LSM9DS0_MAGGAIN_4GAUSS); //lsm.setupMag (lsm. LSM9DS0_MAGGAIN_8GAUSS); lsm.setupMag (lsm. LSM9DS0_MAGGAIN_12GAUSS);
// Kuweka gyroscope
lsm.setupGyro (lsm. LSM9DS0_GYROSCALE_245DPS); //lsm.setupGyro (lsm. LSM9DS0_GYROSCALE_500DPS); //lsm.setupGyro (lsm. LSM9DS0_GYROSCALE_2000DPS); }
Kuanzisha Seva:
Seva itakuwa faili ya chatu ambayo itaendesha kwenye laini ya amri ya kompyuta. Kuanza, ingiza madarasa yanayotakiwa.
kuagiza socketimport re kuagiza pyautogui
tundu hutumiwa kwa mitandao. re hutumiwa kwa regex, au udanganyifu wa kamba. pyautogui ni maktaba ya chatu ambayo itaruhusu kuchora kutokea (kujadiliwa baadaye).
Ifuatayo, tunapaswa kufafanua anuwai kadhaa. Hizi zitakuwa anuwai za ulimwengu, kwa hivyo zitapatikana katika kazi nyingi. Zitatumika baadaye kwenye nambari.
i = 0n = 0 mstari = 1
orodha ya data =
mag_data =
mag_calib_y = 0 mag_offset_y = 0
z_calib = 0
z_offset = 0 z_moving_offset = 0 z_diff = 0 z_real = 0 z_velo = 0 z_pos = 0
keep_offset = Uongo
kwanza_data = Kweli
Sasa tunahitaji kazi kuunda seva na kuifungua kwa unganisho zinazoingia.
def startServer (): global i global first_data # anzisha seva ya soketi ya seva = socket.socket (soketi. AF_INET, tundu. SOCK_STREAM) serversocket.setsockopt (tundu. SOL_SOCKET, tundu. SO_REUSEADDR, 1) # Anwani ya IP ya Seva na mwenyeji wa bandari = " 149.160.251.3 "port = 12347 server_address = (mwenyeji, bandari) # Fungua seva na usikilize kwa kuchapisha viunganisho vinavyoingia ('Kuanzisha seva kwenye% s port% s'% server_address) serversocket.bind (server_address) serversocket.listen (5) # Subiri viunganisho… wakati Kweli: chapa ('Inasubiri unganisho …') # Kubali unganisho linaloingia (mteja wa ukaguzi, anwani) = serversocket.accept () # Jaribu kuchanganua data iliyopokelewa jaribu: chapisha ('Uunganisho umeanzishwa kutoka', anwani) wakati ni Kweli: # Pokea data na uitumie kwa data ya usindikaji = 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] chapa (accel_data) i + = 1 ikiwa (i <51): calibData (accel_data) mwingine: kusongaAcce l (accel_data [0]) mchakatoData (accel_data) kwanza_data = Uwongo mwishowe: # Funga tundu ili kuzuia kuvuja kwa data isiyo ya lazima mteja. kufunga ()
Sasa tunahitaji kazi ambazo zitashughulikia data yote. Hatua ya kwanza kuchukua, na kazi ya kwanza inayoitwa, ni hesabu ya sensa kwa madhumuni ya hesabu.
def calibData (orodha): z_calib kimataifa z_offset kimataifa mag_data kimataifa mag_calib_y kimataifa mag_offset_y z_calib + = kuelea (orodha [0]) mag_calib_y + = kuelea (orodha [1]) ikiwa (i == 50): z_offset = z_calib / 50 mag_offset_y = mag_calib_y / 50 z_calib = 0 mag_calib_y = 0 mag_data. tumia (mag_offset_y)
Ifuatayo, tunaunda kukabiliana na kasi ya kusonga. Hii inafanya mpango utambue wakati mtu anaacha kusogeza kidole kwa sababu maadili yote ya kuongeza kasi yanayotumwa kwa seva yanapaswa kuwa sawa wakati huo.
def movingAccel (num): global z_calib global z_diff global z_moving_offset global z_offset global data_list global n global keep_offset if (n 0.2 or z_diff <-0.2): # mwendo umegunduliwa ndani ya data, restart keep_offset = True n = 0 z_calib = 0 z_moving_offset = 0 z_diff = 0 data_list = kuvunja ikiwa sio kuweka -offset: # imesimama katika data, weka z_offset mpya z_offset = z_moving_offset print ("New z_offset:") chapa (z_offset) n = 0 z_calib = 0 z_moving_offset = 0 z_diff = 0 data_list =
Ifuatayo, tunafanya hesabu kubwa ya hesabu. Hii inajumuisha kutafsiri data ya kuongeza kasi katika data ya msimamo ambayo itatuwezesha kusema mwelekeo ambao mtumiaji husogeza kidole chake.
mchakato wa DefData (orodha): # [accel.z, mag.y] kimataifa z_offset kimataifa z_real kimataifa z_velo kimataifa z_pos kimataifa kwanza_data kimataifa mag_data
z_real = kuelea (orodha [0]) - z_offset
mag_y = orodha [1] mag_z = orodha [2] kushoto = Haki ya kweli = Uongo # Usishughulikie kuongeza kasi hadi uhakikishe kabisa kuwa imeharakisha # Inazuia kelele za kiufundi kutoka kuchangia msimamo ikiwa (z_real -0.20): z_real = 0 # Anza ujumuishaji kupata msimamo ikiwa (kwanza_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) mwingine: 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) ikiwa (kuelea (mag_data [1]) - kuelea (mag_data [0])> 0.03): kulia = Kweli elif (kuelea (mag_data [1]) - kuelea (mag_data [0]) <-0.03): kushoto = Kweli ikiwa (kulia): harakati (50, int (z_pos *) 1000)) elif (kushoto): harakati (-50, int (z_pos * 1000)) z_velo = 0 z_pos = 0
Sasa, mwishowe, tunasogeza mshale! Ili kufanya hivyo, tulifungua dirisha la rangi na kuifanya iwe skrini kamili. Maktaba ya pyautogui ina kazi inayoitwa pyautogui.dragRel (x, y); ambayo tunatumia kuvuta mshale wa panya kutoka hatua moja hadi nyingine. Inatumia data ya msimamo wa jamaa kwa hivyo harakati inahusiana na nafasi ya mwisho ya mshale.
harakati za def (x, y): chapa ("kuhamia", x, -y) pyautogui.dragRel (x, -y)
Mwishowe, tunahitaji kuita kazi kuu hata kuruhusu nambari hii yote kuendeshwa.
# Huta kazi ili kuanza sevaStartServer ()
Ilipendekeza:
Manyoya Quill - Saa 34+ za Uandishi wa Bure-Usumbufu: Hatua 8 (na Picha)

Manyoya Quill - Saa 34+ za Uandishi wa bure wa kuvuruga: Ninaandika ili kupata riziki, na hutumia siku yangu ya kazi kukaa mbele ya kompyuta yangu ya eneo-kazi wakati nikitoa nakala. Nilijenga FeatherQuill kwa sababu nilitaka uzoefu wa kuchapa wa kuridhisha hata wakati niko nje na karibu. Hii ni sehemu ya kujitolea,
Tikisa Mkono Wako Kudhibiti Mkono wa Roboti wa OWI Hakuna Kamba Zilizoshirikishwa: Hatua 10 (na Picha)

Tikisa Mkono Wako Kudhibiti Mkono wa Roboti wa OWI … Hakuna Kamba Iliyoambatanishwa: WAZO: Kuna angalau miradi mingine 4 kwenye Instructables.com (kuanzia Mei 13, 2015) karibu na kurekebisha au kudhibiti Arm Robotic Arm. Haishangazi, kwa kuwa ni kitanda kizuri sana na cha bei rahisi cha kucheza nacho. Mradi huu ni sawa katika s
Hawk ya Ishara: Roboti Iliyodhibitiwa na Ishara ya Mkono Kutumia Picha ya Usindikaji wa Picha: Hatua 13 (na Picha)

Hawk ya Ishara: Robot Iliyodhibitiwa na Ishara ya Mkono Kutumia Picha ya Usindikaji wa Picha: Hawk ya Ishara ilionyeshwa katika TechEvince 4.0 kama muundo rahisi wa picha ya msingi wa mashine ya kibinadamu. Huduma yake iko katika ukweli kwamba hakuna sensorer za ziada au za kuvaliwa isipokuwa glavu inahitajika kudhibiti gari ya roboti inayoendesha tofauti
Kubadilisha Nuru ya Bluetooth ya Kijijini - Retrofit. Nuru Kubadilisha Bado Inafanya Kazi, Hakuna Uandishi wa Ziada .: Hatua 9 (na Picha)

Kubadilisha Nuru ya Bluetooth ya Kijijini - Retrofit. Nuru Kubadilisha Bado Inafanya Kazi, Hakuna Uandishi wa Ziada. Baadhi ya BLE / programu nyingi za programu hutoa
Wacha Tufanye Mpira wa Kichawi wa Uchawi na Uchawi wa Uchawi! ~ Arduino ~: Hatua 9

Wacha Tufanye Mpira wa Kichawi wa Uchawi na Uchawi wa Uchawi! ~ Arduino ~: Katika hili, tutafanya Mpira wa Uchawi unaotumia sensa ya mwendo na skana ya RFID kudhibiti michoro ya taa za LED ndani