ዝርዝር ሁኔታ:

Accel Writing (Magic Hand): 4 ደረጃዎች (ከስዕሎች ጋር)
Accel Writing (Magic Hand): 4 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: Accel Writing (Magic Hand): 4 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: Accel Writing (Magic Hand): 4 ደረጃዎች (ከስዕሎች ጋር)
ቪዲዮ: The Nature of Witchcraft | Derek Prince The Enemies We Face 2 2024, ህዳር
Anonim
አክሰል ጽሑፍ (አስማት እጅ)
አክሰል ጽሑፍ (አስማት እጅ)
አክሰል ጽሑፍ (አስማት እጅ)
አክሰል ጽሑፍ (አስማት እጅ)
አክሰል ጽሑፍ (አስማት እጅ)
አክሰል ጽሑፍ (አስማት እጅ)

መግቢያ

የአስማት እጅ የአካል ጉዳተኞች እና የሞተር ክህሎት እክል ያለባቸው ሰዎች በተምሳሳ አካባቢ ውስጥ የመሳል እና የመፃፍ ፈጠራን እንዲደሰቱ ያስችላቸዋል። የአስማት እጅ የመረጃ ጠቋሚ ጣትዎን እንቅስቃሴ የሚረዳ እና ያንን በኮምፒተር ማያ ገጽ ላይ ወደ መስመሮች ስዕል የሚተረጎም የሚለብስ ጓንት ነው።

የሚያስፈልጉ ቁሳቁሶች

LSM9DOF Breakout Board --- $ 24.95 ---

አዳፍሩት ላባ ከ Wifi --- $ 18.95 ---

ሴት/ሴት ሽቦዎች --- $ 1.95 ---

ቴፕ/ቬልክሮ ሰቆች --- 3 ዶላር

እኩል ጥንካሬ ያላቸው ሁለት ማግኔቶች --- ዋጋዎች ይለያያሉ

እንዴት እንደሚሰራ

የፍጥነት መለኪያ በመጠቀም ፣ ለ y- ዘንግ የፍጥነት መረጃን መሰብሰብ እንችላለን ፣ ይህም የተጠቃሚው ጣት ወደ ላይ እና ወደ ታች ሲንቀሳቀስ ለመወሰን ይረዳናል። የእኛ የፍጥነት መለኪያ ከምድር መሃል አንፃር ፍጥነትን በሚለካበት ምክንያት የ x- ዘንግ (ግራ ወይም ቀኝ) ፍጥነቱን መወሰን አንችልም። እንደ እድል ሆኖ የ LSM9DOF መለያ ሰሌዳ እንዲሁ በመግነጢሳዊ መስኮች ላይ መረጃ ለመሰብሰብ የሚያስችል ማግኔቶሜትር ይ containsል። በ 30 ሴ.ሜ ርቀት ሁለት ማግኔቶችን እናስቀምጣለን እና ጓንት በመካከላቸው አለን። መግነጢሳዊው መረጃ አወንታዊ ሆኖ ከተነበበ ጓንት ወደ ቀኝ እና በተቃራኒው እንደሚንቀሳቀስ እናውቃለን። ሁሉም መረጃዎች በአክስሌሮሜትር/ማግኔቶሜትር ውስጥ ከተሰበሰቡ በኋላ ውሂቡን ከ wifi ኮምፒተር ጋር ወደተገናኘው ላባ በላባ ይልካል ከዚያም ውሂቡን በኮድ ውስጥ ልንጠቀምበት ወደሚችለው ኮምፒተር ያስተላልፋል።

ደረጃ 1: አካላዊ ፕሮቶታይፕ 1

አካላዊ ፕሮቶታይፕ 1
አካላዊ ፕሮቶታይፕ 1
አካላዊ ፕሮቶታይፕ 1
አካላዊ ፕሮቶታይፕ 1

ይህ ምሳሌ በኤሌክትሮኒክ መሣሪያዎቹ ላይ እንዲንሸራተት በእጁ ላይ ተዘፍቆ ጓንት ሆኖ እንዲሰፋ ማለት ነው። ከዚያ የኤሌክትሮኒክስ መሳሪያው በእጁ ላይ ከመሠረታዊ ጓንት ጋር ተዳምሮ በጦር መሣሪያ እጅጌው መሠረት በቬልክሮ ይያያዛል። ከዚያ አረንጓዴ ጓንት ከመሠረቱ እና ከኤሌክትሮኒክስ መሣሪያዎች በላይ ይንሸራተታል….

የናሙና ጓንት ለመሥራት ደረጃዎች

  • እጅን ለመፈለግ በቂ መጠን ያለው ሁለት የጨርቅ ቁርጥራጮችን ያግኙ
  • በሁለቱም የጨርቅ ቁርጥራጮች ላይ እጅን ይከታተሉ እና ይቁረጡ
  • እነሱ ፍጹም የተስተካከሉ እንዲሆኑ ሁለቱን እጅ የተቆረጡትን አንድ ላይ ያድርጉ
  • በመቀጠልም የልብስ ስፌት ማሽኑን ለማዘጋጀት በማሽኑ ላይ በተጠቆሙት ቦታዎች ላይ ክሩን ያሂዱ
  • የልብስ ስፌት ማሽኑ ሲዘጋጅ መርፌውን አንስተው ሁለቱን የጨርቅ ቁርጥራጮች በመርፌ ስር ያስቀምጡ
  • አንድ እጅ እንዲገጣጠም ሁለቱን ቁርጥራጮች ከእጅ አንጓው ላይ ሳይነጣጠሉ በመተው መርፌው በጨርቁ ጠርዝ ላይ መሰለፉን ያረጋግጡ ፣ ማሽኑን ይጀምሩ እና በጨርቁ ጠርዞች ላይ መስፋትዎን ያረጋግጡ።

ደረጃ 2: አካላዊ ፕሮቶታይፕ 2

አካላዊ ፕሮቶታይፕ 2
አካላዊ ፕሮቶታይፕ 2
አካላዊ ፕሮቶታይፕ 2
አካላዊ ፕሮቶታይፕ 2

የመጨረሻው አምሳያችን ከማንኛውም የእጅ አንጓ ጋር ሊስተካከል ከሚችል ከቬልክሮ ገመድ ጋር ተጣምሮ መደበኛ ጓንት ነው። ጓንት እና ማሰሪያ አንድ ላይ ተጣብቀዋል ፣ እና የኤሌክትሮኒክስ መሣሪያዎች በቬልክሮ በኩል ከጓንቱ ጋር ተያይዘዋል።

የጓንቱን 2 ኛ ናሙና ለመሥራት ደረጃዎች

  1. ጓንት ይግዙ ፣ የእጅ ጓንት ቁሳቁስ ምንም አይደለም።
  2. የ velcro የእጅ አንጓ ማሰሪያ ይግዙ
  3. ተንቀሳቃሽ ባትሪ ይግዙ
  4. ተለጣፊ ቬልክሮ ይግዙ
  5. በስፌት መርፌ የቬልክሮ የእጅ አንጓውን ከጓንቱ መሠረት ጋር ያያይዙት
  6. የእጅ አንጓው ከተለያዩ የእጅ አንጓ መጠኖች ጋር ማስተካከል መቻል አለበት።
  7. ተጣባቂውን ቴፕ በአክስሌሮሜትር መሠረት ላይ ያያይዙ እና ከጓንት ጠቋሚ ጣቱ ጋር ያያይዙት
  8. በላባ ላይ ተጣባቂ ቴፕ ያያይዙ እና ከጓንታው አናት ጋር ያያይዙት።
  9. ሽቦዎችን በመጠቀም በላባው ውስጥ ያለውን 3V3 ፒን በአክስሌሮሜትር ውስጥ ካለው የቪን ፒን ጋር ያገናኙ
  10. ሽቦዎችን በመጠቀም በላባው ውስጥ ያለውን የ GND ፒን ከኤንዲኤን ፒን የፍጥነት መለኪያ ጋር ያገናኙ።
  11. ሽቦዎችን በመጠቀም በላባው ውስጥ ያለውን የ SCL ፒን ከ SCL የፍጥነት መለኪያ ጋር ያገናኙ።
  12. ሽቦዎችን በመጠቀም በላባ ውስጥ ያለውን የ SDA ፒን ከኤስኤዲኤ የፍጥነት መለኪያ ጋር ያገናኙ።
  13. ኃይልን ለማቅረብ ቢያንስ በ 5 ቮልት ባትሪ በዩኤስቢ በኩል ወደ ላባ ያገናኙ።

ደረጃ 3 ማግኔቶች

ማግኔቶች
ማግኔቶች

ደረጃ 1 - ሁለቱን የእኩል ጥንካሬ ማግኔቶች እርስ በእርስ ያያይዙ።

ደረጃ 2 - በሁለቱ ማግኔቶች መካከል የ 30 ሴ.ሜ ክፍተት ይለኩ

ደረጃ 3 - ማግኔትቶሜትሩን በሁለቱ ማግኔቶች መሃል ላይ በትክክል ያስቀምጡ። መሃል ላይ ሆኖ ወደ 0 አካባቢ ውሂብ መቀበል አለብዎት። የዜሮ ንባብ ከተቀበሉ ወደ ደረጃ 5 ይዝለሉ።

ደረጃ 4 ንባቡ ዜሮ ካልሆነ ወይም ወደ ዜሮ የማይጠጋ ከሆነ የማግኔቶቹን ርቀት ማስተካከል አለብዎት። ንባቡ አሉታዊ ከሆነ የግራ ማግኔቱን ሴንቲሜትር ወይም 2 ወደ ግራ ወይም ንባብ ዜሮ እስኪሆን ድረስ ያንቀሳቅሱ። አዎንታዊ ከሆነ በትክክለኛው ማግኔት ካልሆነ በስተቀር ተመሳሳይ ነገር ያድርጉ።

ደረጃ 5 - ውሂቡን ከማግኔትሜትር የሚቀበል እና አዎንታዊ ወይም አሉታዊ ከሆነ የሚያነብ ኮድ ይፃፉ። አዎንታዊ ከሆነ ኮዱ ወደ ቀኙ መስመር ይሳሉ እና አሉታዊ ከሆነ ወደ ግራ መስመር ይሳሉ።

ደረጃ 4 ኮድ

ኮድ
ኮድ

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

መግቢያ ፦

ከአክስሌሮሜትር መረጃን ለማስኬድ በአዳፍ ፍሬው ላባ እና ውሂቡን በሚያከናውን አገልጋይ (በላፕቶፕ/ዴስክቶፕ ላይ በሚሠራ) መካከል የደንበኛ/የአገልጋይ ግንኙነት መመስረት አለበት። ሁለት የኮድ ፋይሎች መፈጠር አለባቸው -አንደኛው ለደንበኛው (የአዳፍ ፍሬው ላባ) ፣ ሌላኛው ለአገልጋዩ (በዚህ ጉዳይ ላይ የጃሮድ ላፕቶፕ)። ደንበኛው የተጻፈው በ C ++ ፣ እና አገልጋዩ በፓይዘን ነው የተፃፈው። አርዱዲኖ በዋናነት የ C ++ ቋንቋ እንደመሆኑ ለደንበኛው ጥቅም ላይ የዋለው ቋንቋ አስፈላጊ ነው ፣ እና የተለየ ቋንቋ ለመጠቀም መለወጥ ከባድ ነው። የአውታረ መረብ ባህሪዎች እስካሉ ድረስ አገልጋዩ በማንኛውም ቋንቋ ሊጻፍ ይችላል።

ደንበኛውን ማቋቋም;

በመጀመሪያ የደንበኛውን ኮድ እናዘጋጃለን። አብዛኛው የ WiFi ግንኙነት ኮድ በአዳፍሪቱ ቤተ -መጻሕፍት በኩል በቀላሉ ይገኛል። ተዛማጅ ክፍሎችን በማካተት እንጀምራለን።

#አካት #አካትት #አካትት #አካት #አካት

በኮዱ ውስጥ ምን ጥቅም ላይ እንደሚውል አንዳንድ ተለዋዋጮችን ያዘጋጁ።

// ከአውታረ መረብ const char* ssid = "MMServer" ጋር ይገናኙ; const char* password = "MMServer-Password"; // አይፒ እና የውሂብ const char* host = "149.160.251.3" የሚቀበለው የአገልጋዩ ወደብ; const int ወደብ = 12347; bool ተገናኝቷል = ሐሰት;

// የእንቅስቃሴ መርማሪን ያስጀምሩ

Adafruit_LSM9DS0 lsm = Adafruit_LSM9DS0 (1000);

የ WiFi ደንበኛ ደንበኛ;

ላባ እንደጀመረ ወዲያውኑ የሚሄድ የማዋቀር () ተግባር ይፍጠሩ።

// የ WiFi ግንኙነትን ያዋቅሩ እና ከአገልጋዩ ጋር ይገናኙ ከማዋቀር () {Serial.begin (9600); መዘግየት (100);

Serial.println ();

Serial.println (); Serial.print ("ወደ ማገናኘት"); Serial.println (ssid); // WiFi WiFi ን ይጀምሩ (ssid ፣ የይለፍ ቃል); // በማገናኘት ላይ… እያለ (WiFi.status ()! = WL_CONNECTED) {መዘግየት (500); Serial.print ("."); } // በተሳካ ሁኔታ ከ WiFi Serial.println ("") ጋር ተገናኝቷል ፤ Serial.println ("WiFi ተገናኝቷል"); Serial.println ("IP አድራሻ:"); Serial.println (WiFi.localIP ());

#ifndef ESP8266

ሳለ (! ተከታታይ); #endif Serial.begin (9600); Serial.println ("ዳሳሽ ሙከራ");

// ዳሳሹን ያስጀምሩ

(! ሳለ (1); } Serial.println (F («LSM9DS0 9DOF»))); // ከአገልጋይ ጋር መገናኘት ይጀምሩ Serial.print ("ወደ ማገናኘት"); Serial.println (አስተናጋጅ);

// የተሳካ ግንኙነትን ይፈትሹ። ካልተሳካ ከዚያ ያቋርጡ

ከሆነ (! client.connect (አስተናጋጅ ፣ ወደብ)) {Serial.println (“ግንኙነት አልተሳካም”) ፤ ተገናኝቷል = ሐሰት; መመለስ; } ሌላ {ተገናኝቷል = እውነት; }

// የአነፍናፊ ግኝት እና ውህደት ጊዜን ያዋቅሩ

configureSensor (); }

ከዚያ በተደጋጋሚ የሚሽከረከር የ loop ተግባር እንፈልጋለን። በዚህ ሁኔታ ፣ መረጃን ከአክስሌሮሜትር ወደ አገልጋዩ በ “[z_accel]: [y_mag]: [z_mag]” መልክ ለመላክ ያገለግላል። ደንበኛው.እትመት (ቁጥሮች); ተግባር ማለት ውሂብን ወደ አገልጋዩ የሚልክ ነው።

ባዶነት loop () {መዘግየት (250); (ከተገናኘ) {// ይህ ለአገልጋዩ sensors_event_t accel ፣ mag ፣ gyro ፣ temp ውሂብን ይልካል። lsm.getEvent (& accel, & mag, & gyro, & temp); የቁጥር ቁጥሮች; ቁጥሮች += accel.acceleration.z; ቁጥሮች += ":"; ቁጥሮች += mag.magnetic.y; ቁጥሮች += ":"; ቁጥሮች += mag.magnetic.z; Serial.print (ቁጥሮች); client.print (ቁጥሮች); Serial.println (); } ሌላ {ተቋራጭ ግንኙነት (); }}

ለአንዳንድ የፍጆታ ተግባራት በላባ እና በአገልጋዩ መካከል ያለውን ግንኙነት ለመመስረት አንድ ያስፈልገናል።

ባዶ ግንኙነት ተቋራጭ () (ከሆነ (! client.connect (አስተናጋጅ ፣ ወደብ)) {Serial.println (“ግንኙነት አልተሳካም”) ፤ ተገናኝቷል = ሐሰት; መመለስ; } ሌላ {ተገናኝቷል = እውነት; }}

እንዲሁም ዳሳሹን ማዋቀር እና የሚያነባቸው የእሴቶች ክልል መስጠት አለብን። ለምሳሌ ፣ ማፋጠን ለክልል 5 አማራጮች አሉት -2 ግ ፣ 4 ግ ፣ 6 ግ ፣ 8 ግ እና 16 ግ።

ባዶነት configureSensor (ባዶ) {// የፍጥነት መለኪያውን ክልል //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); // የማግኔቶሜትሪ ትብነት //lsm.setupMag (lsm. LSM9DS0_MAGGAIN_2GAUSS) ያዘጋጁ ፤ //lsm.setupMag (lsm. LSM9DS0_MAGGAIN_4GAUSS); //lsm.setupMag (lsm. LSM9DS0_MAGGAIN_8GAUSS); lsm.setupMag (lsm. LSM9DS0_MAGGAIN_12GAUSS);

// ጋይሮስኮፕን ያዋቅሩ

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

አገልጋዩን ማዋቀር;

አገልጋዩ በኮምፒተር የትእዛዝ መስመር ላይ የሚሄድ የፓይዘን ፋይል ይሆናል። ለመጀመር የሚያስፈልጉትን ክፍሎች ያስመጡ።

አስመጣ socketimport ዳግም ማስመጣት pyautogui

ሶኬት ለአውታረ መረብ ጥቅም ላይ ይውላል። ዳግም ለ regex ፣ ወይም ሕብረቁምፊ ማጭበርበሮች ጥቅም ላይ ይውላል። pyautogui ስዕሉ እንዲከሰት የሚፈቅድ የፓይዘን ቤተ -መጽሐፍት ነው (በኋላ ላይ ተብራርቷል)።

በመቀጠል ፣ አንዳንድ ተለዋዋጮችን መግለፅ አለብን። እነዚህ ዓለም አቀፍ ተለዋዋጮች ይሆናሉ ፣ ስለሆነም በበርካታ ተግባራት ውስጥ ይዳረሳሉ። በኮዱ ውስጥ በኋላ ላይ ጥቅም ላይ ይውላሉ።

i = 0n = 0 መስመር = 1

የውሂብ_ ዝርዝር =

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 = ሐሰት

first_data = እውነት

አሁን አገልጋይ ለመፍጠር እና ለገቢ ግንኙነቶች ለመክፈት ተግባር ያስፈልገናል።

def startServer (): ግሎባል i ዓለም አቀፍ first_data # የአገልጋይ ሶኬት serverocket = socket.socket (socket. AF_INET ፣ socket. SOCK_STREAM) serversococ.setsockopt (socket. SOL_SOCKET ፣ socket. SO_REUSEADDR ፣ 1) # የአገልጋይ IP አድራሻ እና የወደብ አስተናጋጅ = " 149.160.251.3 "ወደብ = 12347 server_address = (አስተናጋጅ ፣ ወደብ) # አገልጋዩን ይክፈቱ እና ለገቢ ግንኙነቶች ህትመት ያዳምጡ ('አገልጋይ በ %s ወደብ %s' %server_address) serversocket.bind (server_address) serversocket.listen (5) # ግንኙነቶችን ይጠብቁ… እውነት በሚሆንበት ጊዜ ያትሙ ('ግንኙነትን በመጠባበቅ ላይ…')) # ገቢ ግንኙነትን ይቀበሉ (ደንበኛ ፣ አድራሻ) = serversocket.accept () # የተቀበለውን ውሂብ ለመተንተን ይሞክሩ ይሞክሩ ህትመት ('ግንኙነት ከ ተቋቋመ' ፣ አድራሻ)) እውነት ሆኖ ሳለ # ውሂቡን ተቀብሎ ለሂደት ውሂብ = 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] ህትመት (accel_data) i+= 1 ከሆነ (i <51): calibData (accel_data) ሌላ: motsiAcce l (accel_data [0]) ሂደት ውሂብ (accel_data) first_data = ውሸት በመጨረሻ ፦ # አላስፈላጊ የውሂብ ፍንዳታ እንዳይደርስ ለመከላከል ሶኬቱን ይዝጉ።

አሁን ሁሉንም ውሂቡን የሚያካሂዱ ተግባሮችን እንፈልጋለን። የሚወስደው የመጀመሪያው እርምጃ እና የመጀመሪያው ተግባር የተጠራው ለስሌቱ ዓላማዎች የአነፍናፊውን መለካት ነው።

def calibData (ዝርዝር): ዓለም አቀፍ z_calib ዓለም አቀፍ z_offset ግሎባል mag_data አቀፍ mag_calib_y አቀፍ mag_offset_y z_calib += ተንሳፋፊ (ዝርዝር [0]) mag_calib_y += ተንሳፋፊ (ዝርዝር [1]) ከሆነ (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)

በመቀጠል ፣ የሚንቀሳቀስ የፍጥነት ማካካሻ እንፈጥራለን። ይህ ያደርገዋል አንድ ሰው ጣቱን ማንቀሳቀስ ሲያቆም ፕሮግራሙ እንዲታወቅ ያደርገዋል ምክንያቱም ወደ አገልጋዩ የሚላኩት የፍጥነት እሴቶች ሁሉ በዚያን ጊዜ አንድ መሆን አለባቸው።

def motsiAccel (num): ዓለምአቀፍ z_calib ግሎባል z_diff ዓለምአቀፍ z_moving_offset ግሎባል z_offset ዓለም አቀፍ የውሂብ_ዝርዝር ዓለም አቀፍ n ዓለም አቀፍ Keep_offset ከሆነ (n 0.2 ወይም z_diff <-0.2) ፦ # እንቅስቃሴ በውስጥ ውስጥ ተገኝቷል ፣ Keep_offset = True n = 0 z_calib = 0 z_moving_offset = 0 z_diff = 0 data_list = ካልቀጠለ_ጥፋትን ፦ # ቋሚ ውስጥ በውሂብ ፣ አዲስ የ z_offset z_offset = z_moving_offset ህትመት (“አዲስ z_offset:”) ህትመት (z_offset) n = 0 z_calib = 0 z_moving_offset = 0 z_diff = 0 data_list] keep_offset = የሐሰት keep_offset = ውሸት

በመቀጠል የሂሳብን ከባድነት እናደርጋለን። ይህ የፍጥነት መረጃን ወደ አቀማመጥ ውሂብ መተርጎምን ያጠቃልላል ፣ ይህም ተጠቃሚው ጣታቸውን የሚያንቀሳቅሰውን አቅጣጫ ለመንገር ያስችለናል።

def ሂደት ውሂብ (ዝርዝር): #[accel.z, mag.y] ዓለም አቀፍ z_offset ግሎባል z_real global z_velo global z_pos global first_data global mag_data

z_real = ተንሳፋፊ (ዝርዝር [0]) - z_offset

mag_y = ዝርዝር [1] mag_z = ዝርዝር [2] ግራ = የውሸት ቀኝ = ሐሰት # ፍጥነቱን እስኪያረጋግጥ ድረስ ፍጥነቱን አይስሩ # ሜካኒካዊ ጫጫታ ወደ ቦታው አስተዋፅኦ እንዳያደርግ ይከላከላል (z_real -0.20): z_real = 0 # ጀምር (first_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) ሌላ ፦ 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) ከሆነ (የሚንሳፈፍ (mag_data [1]) - ተንሳፈፍ (mag_data [0])> 0.03): ቀኝ = እውነተኛ ኤሊፍ (ተንሳፋፊ (mag_data [1]) - ተንሳፋፊ (mag_data [0]) <-0.03): ግራ = እውነት ከሆነ (ቀኝ): እንቅስቃሴ (50 ፣ int (z_pos*) 1000)) ኤሊፍ (ግራ)-እንቅስቃሴ (-50 ፣ int (z_pos*1000)) z_velo = 0 z_pos = 0

አሁን ፣ በመጨረሻ ጠቋሚውን እናንቀሳቅሳለን! ይህንን ለማድረግ የቀለም መስኮት ከፍተን ሙሉ ማያ ገጽ አደረግነው። የ pyautogui ቤተ -መጽሐፍት pyautogui.dragRel (x, y) የተባለ ተግባር ይ containsል። የመዳፊት ጠቋሚውን ከአንድ ነጥብ ወደ ቀጣዩ ለመጎተት የምንጠቀምበት። አንጻራዊ የአቀማመጥ መረጃን ይጠቀማል ስለዚህ እንቅስቃሴው ከጠቋሚው የመጨረሻ ቦታ አንጻራዊ ነው።

def እንቅስቃሴ (x ፣ y): ማተም (“ወደ መንቀሳቀስ” ፣ x ፣ -y) pyautogui.dragRel (x ፣ -y)

በመጨረሻም ፣ ይህ ሁሉ ኮድ እንዲሠራ ለመፍቀድ ዋናውን ተግባር መደወል አለብን።

# አገልጋዩን መጀመሪያ አገልጋይ () ለመጀመር ተግባሩን ይጠራል

የሚመከር: