Obsah:
Video: Accel Writing (Magic Hand): 4 kroky (s obrázkami)
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 12:01
Úvod
Kúzelná ruka umožňuje ľuďom so zdravotným postihnutím a poruchou motoriky využívať kreativitu pri kreslení a písaní v simulovanom prostredí. Magic Hand je nositeľná rukavica, ktorá sníma pohyb ukazováka a prekladá ju do kreslenia čiar na obrazovke počítača.
Potrebné materiály
LSM9DOF Breakout Board --- 24,95 dolárov ---
Adafruitové perie s Wifi --- 18,95 dolárov ---
Ženské/ženské drôty --- 1,95 dolárov ---
Pásky/pásky na suchý zips --- 3 doláre
Dva magnety rovnakej sily --- Ceny sa líšia
Ako to funguje
Pomocou akcelerometra môžeme zhromažďovať údaje o zrýchlení pre os y, ktoré nám pomôžu určiť, kedy sa prst používateľa pohybuje hore a dole. Pretože náš akcelerometer meria zrýchlenie vzhľadom na stred zeme, nemôžeme určiť zrýchlenie osi x (vľavo alebo vpravo). Našťastie prelomová doska LSM9DOF obsahuje aj magnetometer, ktorý nám umožňuje zhromažďovať údaje o magnetických poliach. Dva magnety od seba umiestnime 30 cm a medzi nimi máme rukavicu. Ak sú magnetické údaje načítané pozitívne, vieme, že sa rukavice pohybujú doprava a naopak. Potom, čo sú všetky údaje zhromaždené v akcelerometri/magnetometri, pošle údaje pomocou drôtu do peria, ktoré je pripojené k počítaču s wifi, a potom pošle údaje do počítača, ktorý potom môžeme použiť v našom kóde.
Krok 1: Fyzický prototyp 1
Tento prototyp je určený na to, aby bol rukavicou šitý voľne na ruku, aby skĺzol cez elektronické zariadenia. Elektronické zariadenie bude potom pripevnené suchým zipsom k spodnej časti panciera v kombinácii so základnou rukavicou na ruke. Potom zelená rukavica prevlečie základňu a elektronické zariadenia …
Kroky pri výrobe prototypu rukavice:
- Získajte dva kusy látky, ktoré sú dostatočne veľké na to, aby vystopovali ruku
- Rukou obkreslite oba kusy látky a vystrihnite ich
- Spojte dva ručne vystrihnuté výrezy tak, aby boli dokonale zarovnané
- Ďalej, aby ste pripravili šijací stroj, prevlečte niť označenými miestami na stroji
- Keď je šijací stroj nastavený, zdvihnite ihlu a umiestnite dva spojené kusy látky pod ihlu
- Uistite sa, že ihla je zarovnaná na samom okraji látky, spustite stroj a zošite pozdĺž okrajov látky, pričom dva kusy ponechajte na zápästí nešité, aby sa do nich zmestila ruka.
Krok 2: Fyzický prototyp 2
Našim posledným prototypom sú bežné rukavice v kombinácii so suchým zipsom, ktoré je možné nastaviť na akékoľvek zápästie. Rukavica a remienok sú zošité a elektronické zariadenia sú k rukavici pripevnené suchým zipsom.
Kroky pri výrobe druhého prototypu rukavice:
- Kúpte si rukavicu, na materiáli rukavice nezáleží.
- Kúpte si remienok na zápästie na suchý zips
- Kúpte si prenosnú batériu
- Kúpte si lepivý suchý zips
- Ihlou na šitie pripevnite remienok na zápästie na suchý zips k spodnej časti rukavice
- Remienok na zápästie by sa mal dať prispôsobiť rôznym veľkostiam zápästia.
- Lepiacu pásku pripevnite k základni akcelerometra a pripevnite k ukazováku rukavice
- Na pierko pripevnite lepiacu pásku a pripevnite ju na vrch rukavice.
- Pomocou drôtov spojte kolík 3V3 v perí s kolíkom VIN na akcelerometri
- Pomocou drôtov spojte kolík GND v perí s kolíkom GND akcelerometra.
- Pomocou drôtov pripojte kolík SCL v perí k kolíku SCL akcelerometra.
- Pomocou drôtov spojte kolík SDA v pierku s kolíkom SDA na akcelerometri.
- Pripojte k periu aspoň 5 voltovú batériu cez USB, aby ste získali energiu.
Krok 3: Magnety
Krok 1: Položte dva magnety rovnakej sily oproti sebe.
Krok 2: Odmerajte 30 cm medzeru medzi dvoma magnetmi
Krok 3: umiestnite magnetometer presne do stredu dvoch magnetov. Mali by ste prijímať údaje okolo 0, kým sú v strede. Ak dostanete nulu, preskočte na krok 5.
Krok 4: Ak hodnota nie je nulová alebo sa blíži nule, musíte nastaviť vzdialenosť magnetov. Ak je nameraná hodnota záporná, posuňte ľavý magnet o cm alebo 2 doľava alebo dovtedy, kým nie je nameraná hodnota nula. Ak je kladný, urobte to isté, okrem pravého magnetu.
Krok 5: Napíšte kód, ktorý prijíma údaje z magnetometra a číta, či sú pozitívne alebo negatívne. Ak je kladný, kód nakreslite čiaru doprava a ak negatívny nakreslite čiaru doľava.
Krok 4: Kód
github.iu.edu/ise-e101-F17/MuscleMemory-Sw…
Úvod:
Aby bolo možné spracovávať údaje z akcelerometra, musí byť medzi perom Adafruit a serverom, ktorý údaje spracováva (na prenosnom počítači/počítači), vytvorený vzťah klient/server. Bude potrebné vytvoriť dva súbory s kódom: jeden pre klienta (perie Adafruit) a druhý pre server (v tomto prípade Jarodov prenosný počítač). Klient je napísaný v jazyku C ++ a server je napísaný v jazyku python. Jazyk používaný pre klienta je dôležitý, pretože Arduino je hlavne jazyk C ++ a jeho zmena na používanie iného jazyka je náročná. Server môže byť napísaný v akomkoľvek jazyku, ak má sieťové funkcie.
Nastavenie klienta:
Najprv nastavíme klientsky kód. Väčšina kódu pripojenia WiFi je ľahko dostupná prostredníctvom knižníc Adafruit. Začíname zaradením príslušných tried.
#include #include #include #include #include
Nastavte niektoré premenné, ktoré budú použité v celom kóde.
// Pripojenie k sieti const char* ssid = "MMServer"; const char* heslo = "Heslo MMS servera"; // IP a port servera, ktorý bude prijímať údaje const char* host = "149.160.251.3"; const int port = 12347; bool spojený = nepravda;
// Inicializácia detektora pohybu
Adafruit_LSM9DS0 lsm = Adafruit_LSM9DS0 (1000);
Klient WiFiClient;
Vytvorte funkciu setup (), ktorá bude spustená ihneď po spustení peria.
// Nastavte WiFi pripojenie a pripojte sa k serveru vyhnite sa setup () {Serial.begin (9600); oneskorenie (100);
Serial.println ();
Serial.println (); Serial.print („Pripojenie k“); Serial.println (ssid); // Spustite WiFi WiFi.begin (ssid, heslo); // Pripojenie … while (WiFi.status ()! = WL_CONNECTED) {delay (500); Serial.print ("."); } // Úspešne pripojené k WiFi Serial.println (""); Serial.println ("WiFi pripojené"); Serial.println ("IP adresa:"); Serial.println (WiFi.localIP ());
#ifndef ESP8266
while (! Serial); #endif Serial.begin (9600); Serial.println ("Test senzora");
// Inicializujte snímač
if (! lsm.begin ()) {// Vyskytol sa problém s detekciou LSM9DS0 Serial.print (F („Oops, nebol zistený žiadny LSM9DS0 … Skontrolujte zapojenie alebo ADR I2C!“)); pričom (1); } Serial.println (F ("Nájdený LSM9DS0 9DOF")); // Začnite sa pripájať k serveru Serial.print ("Pripojenie k"); Serial.println (hostiteľ);
// Skontrolujte úspešné pripojenie. Ak zlyhalo, potom prerušiť
if (! client.connect (hostiteľ, port)) {Serial.println ("pripojenie zlyhalo"); spojený = nepravda; návrat; } else {pripojeny = true; }
// Nastavte zisk a čas integrácie senzora
configureSensor (); }
Potom potrebujeme funkciu slučky, ktorá bude opakovane cyklovať. V tomto prípade sa používa na opakované odosielanie údajov z akcelerometra na server vo forme „[z_accel]: [y_mag]: [z_mag]“. The client.print (čísla); funkcia je to, čo odosiela údaje na server.
void loop () {oneskorenie (250); if (connected) {// Toto odošle údaje na server sensor_event_t accel, mag, gyro, temp; lsm.getEvent (& accel, & mag, & gyro, & temp); Reťazcové čísla; čísla += accel.acceleration.z; čísla += ":"; čísla += mag.magnetic.y; čísla += ":"; čísla += mag.magnetic.z; Serial.print (čísla); client.print (čísla); Serial.println (); } else {estabConnection (); }}
Pri niektorých pomocných funkciách potrebujeme jeden na vytvorenie spojenia medzi perom a serverom.
void institConnection () {if (! client.connect (host, port)) {Serial.println ("spojenie zlyhalo"); spojený = nepravda; návrat; } else {pripojeny = true; }}
Musíme tiež nakonfigurovať snímač a poskytnúť mu rozsah hodnôt, ktoré bude čítať. Zrýchlenie má napríklad 5 možností pre rozsah: 2g, 4g, 6g, 8g a 16g.
void configureSensor (void) {// Nastavenie rozsahu akcelerometra //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); // Nastavenie citlivosti magnetometra //lsm.setupMag(lsm. LSM9DS0_MAGGAIN_2GAUSS); //lsm.setupMag(lsm. LSM9DS0_MAGGAIN_4GAUSS); //lsm.setupMag(lsm. LSM9DS0_MAGGAIN_8GAUSS); lsm.setupMag (lsm. LSM9DS0_MAGGAIN_12GAUSS);
// Nastavte gyroskop
lsm.setupGyro (lsm. LSM9DS0_GYROSCALE_245DPS); //lsm.setupGyro(lsm. LSM9DS0_GYROSCALE_500DPS); //lsm.setupGyro(lsm. LSM9DS0_GYROSCALE_2000DPS); }
Nastavenie servera:
Server bude súbor python, ktorý bude spustený na príkazovom riadku počítača. Ak chcete začať, importujte požadované triedy.
import socketimport re import pyautogui
zásuvka sa používa na vytváranie sietí. re sa používa na regulárny výraz alebo manipuláciu so reťazcom. pyautogui je knižnica pythonu, ktorá umožní kresbu (diskutované neskôr).
Ďalej by sme mali definovať niektoré premenné. Budú to globálne premenné, takže k nim bude prístup vo viacerých funkciách. Budú použité neskôr v kóde.
i = 0n = 0 riadok = 1
data_list =
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 = Nepravda
first_data = Pravda
Teraz potrebujeme funkciu na vytvorenie servera a jeho otvorenie pre prichádzajúce pripojenia.
def startServer (): global i global first_data # initialize server socket socketocket = socket.socket (socket. AF_INET, socket. SOCK_STREAM) serversocket.setsockopt (socket. SOL_SOCKET, socket. SO_REUSEADDR, 1) # IP adresa servera a port hostiteľ = " 149.160.251.3 "port = 12347 server_address = (hostiteľ, port) # Otvorte server a počúvajte prichádzajúce pripojenia vytlačte („ Spustenie servera na %s porte %s ' %server_address) serverocket.bind (server_address) serverocket.listen (5) # Počkajte na pripojenia … kým je pravda: print („Čaká sa na pripojenie…“) # Prijmite prichádzajúce pripojenie (clientsocket, adresa) = serverocket.accept () # Skúste analyzovať prijaté údaje try: print („Pripojenie nadviazané od“, adresa) while True: # Prijmite údaje a odošlite ich na spracovanie údajov = 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] tlač (accel_data) i+= 1 if (i <51): calibData (accel_data) else: movingAcce l (accel_data [0]) processData (accel_data) first_data = Nakoniec nepravda: # Zatvorte soket, aby ste predišli zbytočnému úniku dát clientsocket.close ()
Teraz požadujeme funkcie, ktoré budú spracovávať všetky údaje. Prvým krokom, ktorý je potrebné urobiť, a prvou volanou funkciou je kalibrácia senzora na účely výpočtu.
def calibData (zoznam): global z_calib global z_offset global mag_data global mag_calib_y global mag_offset_y z_calib += float (zoznam [0]) mag_calib_y += float (zoznam [1]) if (i == 50): z_offset = z_calib / 50 mag_offset_ = mag_calib_y / 50 z_calib = 0 mag_calib_y = 0 mag_data.append (mag_offset_y)
Ďalej vytvoríme posunutie zrýchlenia v pohybe. Vďaka tomu program rozpozná, keď niekto zastaví pohyb prstom, pretože všetky hodnoty zrýchlenia odoslané na server by mali byť v tom čase rovnaké.
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): # motion identified within data, restart keep_offset = True n = 0 z_calib = 0 z_moving_offset = 0 z_diff = 0 data_list = prestávka, ak nie keep_offset: # stacionárne v dátach, nastaviť nový z_offset z_offset = z_moving_offset print ("New z_offset:") print (z_offset) n = 0 z_calib = 0 z_moving_offset = 0 z_diff = 0 data_list = keep_offset = False keep_offset = Nepravda
Ďalej sa budeme venovať matematike. To zahŕňa preklad údajov o zrýchlení do údajov o polohe, ktoré nám umožnia určiť smer, v ktorom používateľ pohybuje prstom.
def processData (zoznam): #[accel.z, mag.y] global z_offset global z_real global z_velo global z_pos global first_data global mag_data
z_real = float (zoznam [0]) - z_offset
mag_y = zoznam [1] mag_z = zoznam [2] vľavo = nepravda vpravo = nepravda # Nespracovávajte zrýchlenie, kým si nie ste úplne istí, že sa zrýchlil # Zabraňuje mechanickému hluku prispievať k polohe, ak (z_real -0,20): z_real = 0 # Začať integrácie na nájdenie polohy, ak (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) else: 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) if (float (mag_data [1]) - float (mag_data [0])> 0,03): right = True elif (float (mag_data [1]) - float (mag_data [0]) <-0,03): left = True if (right): pohyb (50, int (z_pos* 1000)) elif (vľavo): pohyb (-50, int (z_pos*1000)) z_velo = 0 z_pos = 0
Teraz konečne pohneme kurzorom! Aby sme to urobili, otvorili sme okno s farbami a zmenili ho na celú obrazovku. Knižnica pyautogui obsahuje funkciu nazývanú pyautogui.dragRel (x, y); pomocou ktorého ťaháme kurzor myši z jedného bodu do druhého. Využíva údaje o relatívnej polohe, takže pohyb je relatívny k poslednej pozícii kurzora.
def pohyb (x, y): print ("presun na", x, -y) pyautogui.dragRel (x, -y)
Nakoniec musíme zavolať hlavnú funkciu, aby dokonca umožnil spustenie celého tohto kódu.
# Volá funkciu na spustenie serverstartServer ()
Odporúča:
Magic Button 4k: Bezdrôtové diaľkové ovládanie 20USD BMPCC 4k (alebo 6k): 4 kroky (s obrázkami)
Magic Button 4k: Bezdrôtové diaľkové ovládanie BMPCC 4k (alebo 6k) 20USD: Mnoho ľudí ma požiadalo, aby som sa podelil o niektoré podrobnosti o mojom bezdrôtovom ovládači pre BMPCC4k. Väčšina otázok sa týkala ovládania bluetooth, preto o tom uvediem niekoľko podrobností. Predpokladám, že ste oboznámení s prostredím ESP32 Arduino
MIA-1 Open Source Advanced Hand Made Humanoid Robot!: 4 kroky
MIA-1 Open Source Advanced Hand Made Humanoid Robot!: Ahoj všetci, dnes ukážem, ako som vyrobil robota MIA-1, ktorý je nielen pokročilý a jedinečný, ale aj otvorený zdroj a dá sa vyrobiť bez 3D tlače !! Áno, máte to, tento robot je úplne ručne vyrobený. A open source znamená - získate
Hue Magic: 4 kroky (s obrázkami)
Hue Magic: Vitajte čarodejníci! Pred niekoľkými mesiacmi som pre svojho 3 -ročného syna vytvoril malú kúzelnú škatuľku s prútikom. Keď sa prútikom dotkne škatule, z krabice začne vyžarovať meniace sa farebné svetlo. Keď vidí farbu, ktorá sa mu obzvlášť páči, môže
The Become of a Bonded Hand: 5 krokov (s obrázkami)
The Become of a Bonded Hand: Nie rýchlo, ale špinavo! Tu získate krok za krokom úvod, ako zvárať statický robot a ako naplánovať jednoduchý stojan z masívneho dreva. Užite si to a prerobte, ak chcete
Ako uhladiť IPod Hand-Me-Down s rozpačitou rytinou na zadnej strane: 3 kroky
Ako vyžmýkať hand-me-down IPod s rozpačitou rytinou na zadnej strane: Nedávno moja mama dostala elegantný nový iPod Nano. Tak som dostal jej starý iPod. Bohužiaľ, bola na ňom kašovitá rytina, pretože to bol darček od môjho otca. Preto som sa rozhodol pridať k tomu nejaké rock and rollové kresby