- Gyroskopický a akcelerometrický senzor MPU6050
- Flex senzor
- Příprava 3D tištěného robotického ramene:
- Požadované komponenty:
- Kruhový diagram:
- Montáž senzoru MPU6050 a Flex na rukavice
- Programování Arduino Nano pro robotické rameno
- Práce s robotickým ramenem ovládaným gesty pomocí Arduina
Robotická ramena jsou jedním z fascinujících inženýrských výtvorů a je vždy fascinující sledovat, jak se tyto věci naklánějí a posouvají, aby bylo možné provádět složité věci stejně, jako by to udělala lidská ruka. Tato robotická ramena se běžně vyskytují v průmyslových odvětvích na montážní lince provádějících intenzivní mechanické práce, jako je svařování, vrtání, lakování atd., V poslední době se také vyvíjejí pokročilá robotická ramena s vysokou přesností pro provádění složitých chirurgických operací. Dříve jsme 3D tiskli robotické rameno a pomocí mikrokontroléru ARM7 jsme postavili robotické rameno DIY Pick and Place. Znovu použijeme stejné 3D tištěné robotické rameno k vytvoření robotického ARM ovládaného gestem rukou pomocí Arduino Nano, gyroskopu MPU6050 a senzoru flexu.
Tato pozice 3D robotického paže se ovládá pomocí ruční rukavice, která je připevněna k gyroskopu MPU6050 a senzoru flexu. Senzor Flex se používá k ovládání serva chapadla Robotic Arm a MPU6050 se používá k pohybu robota v ose X a Y. Pokud nemáte tiskárnu, můžete si také postavit ruku pomocí jednoduché lepenky, jak jsme postavili pro náš projekt Arduino Robotic Arm. Pro inspiraci se můžete také podívat na Robotické rameno Record and Play, které jsme dříve postavili pomocí Arduina.
Než se pustíme do podrobností, nejprve se podívejme na senzory MPU6050 a Flex.
Gyroskopický a akcelerometrický senzor MPU6050
MPU6050 je založen na technologii Micro-Mechanical Systems (MEMS). Tento snímač má tříosý akcelerometr, tříosý gyroskop a vestavěný teplotní snímač. Může být použit k měření parametrů, jako je zrychlení, rychlost, orientace, posunutí atd. MPU6050 jsme již dříve propojili s Arduino a Raspberry pi a také jsme postavili několik projektů, které jej používají jako - Self Balancing robot, Arduino Digital Protractor a Arduino Inclinometer.
Funkce snímače MPU6050:
- Komunikace: I2C protokol s konfigurovatelnou I2C adresou
- Vstupní napájecí zdroj: 3-5V
- Integrovaný 16bitový ADC poskytuje vysokou přesnost
- Integrovaný DMP poskytuje vysoký výpočetní výkon
- Lze jej použít k propojení s jinými zařízeními I2C, jako je magnetometr
- Vestavěný teplotní senzor
Pin-Out podrobnosti MPU6050:
Kolík | Používání |
Vcc | Poskytuje napájení modulu, může být + 3V až + 5V. Typicky se používá + 5V |
Přízemní | Připojeno k uzemnění systému |
Sériové hodiny (SCL) | Používá se pro poskytování hodinového impulzu pro komunikaci I2C |
Sériová data (SDA) | Slouží k přenosu dat prostřednictvím komunikace I2C |
Pomocná sériová data (XDA) | Lze použít k propojení jiných modulů I2C s MPU6050 |
Pomocné sériové hodiny (XCL) | Lze použít k propojení jiných modulů I2C s MPU6050 |
AD0 | Pokud se používá více než jeden MPU6050 v jednom MCU, lze tento kolík použít ke změně adresy |
Přerušení (INT) | Přerušovací kolík označuje, že jsou k dispozici data pro čtení MCU |
Flex senzor
Flex senzory nejsou nic jiného než variabilní rezistor. Odpor senzoru flexe se změní, když je senzor ohnutý. Obvykle jsou k dispozici ve dvou velikostech 2,2 palce a 4,5 palce.
Proč v našem projektu používáme flex senzory?
V tomto robotickém ramenu ovládaném gesty se k ovládání chapadla robotického ramene používá snímač flexu. Když je snímač flexe na rukavici ohnutý, servomotor připojený k chapadlu se otáčí a chapadlo se otevře.
Senzory Flex mohou být užitečné v mnoha aplikacích a pomocí senzoru Flex jsme vytvořili několik projektů, jako je herní ovladač, generátor tónů atd.
Příprava 3D tištěného robotického ramene:
3D tištěná robotická paže použitá v tomto výukovém programu byla vytvořena podle návrhu EEZYbotARM, který je k dispozici v Thingiverse. Kompletní postup pro vytvoření 3D tištěného robotického ramene a detail montáže s videem je uveden v odkazu Thingiverse, který je sdílen výše.
Nahoře je obrázek mého 3D tištěného Robotického ramene po sestavení se 4 servomotory.
Požadované komponenty:
- Arduino Nano
- Flex senzor
- 10k rezistor
- MPU6050
- Rukavice
- Připojení vodičů
- Nepájivá deska
Kruhový diagram:
Následující obrázek ukazuje zapojení obvodu pro robotické rameno ovládané gesty na základě Arduina .
Okruhové připojení mezi MPU6050 a Arduino Nano:
MPU6050 |
Arduino Nano |
VCC |
+ 5V |
GND |
GND |
SDA |
A4 |
SCL |
A5 |
Okruhové spojení mezi servomotory a Arduino Nano:
Arduino Nano |
SERVOMOTOR |
Napájecí adaptér |
D2 |
Servo 1 Orange (PWM Pin) |
- |
D3 |
Servo 2 Orange (Pin PWM) |
- |
D4 |
Servo 3 Orange (Pin PWM) |
- |
D5 |
Servo 4 Orange (Pin PWM) |
- |
GND |
Servo 1,2,3,4 hnědá (GND Pin) |
GND |
- |
Servo 1,2,3,4 červená (+ 5V Pin) |
+ 5V |
Flex senzor obsahuje dva kolíky. Neobsahuje polarizované terminály. Pin P1 je tedy připojen k analogovému Pin A0 Arduino Nano s pull-up rezistorem 10k a pin dva P2 je uzemněn k Arduino.
Montáž senzoru MPU6050 a Flex na rukavice
MPU6050 a snímač Flex jsme namontovali na rukavice. Zde se pro připojení rukavice a robotického ramene používá kabelové připojení, ale lze jej provést bezdrátově pomocí vysokofrekvenčního připojení nebo připojení Bluetooth.
Po každém připojení vypadá konečné nastavení robotické paže ovládané gesty jako na následujícím obrázku:
Programování Arduino Nano pro robotické rameno
Jako obvykle je na konci tohoto kurzu uveden kompletní kód spolu s pracovním videem. Zde je vysvětleno několik důležitých řádků kódu.
1. Nejprve zahrňte potřebné soubory knihovny. Knihovna Wire.h se používá pro komunikaci I2C mezi Arduino Nano a MPU6050 a servo.h pro ovládání servomotoru.
#zahrnout
2. Dále jsou deklarovány objekty pro třídní servo. Protože používáme čtyři servomotory, jsou vytvořeny čtyři objekty jako servo_1, servo_2, servo_3, servo_4.
Servo servo_1; Servo servo_2; Servo servo_3; Servo servo_4;
3. Dále je deklarována adresa I2C MPU6050 a použité proměnné.
const int MPU_addr = 0x68; // Adresa MPU6050 I2C int16_t osa_X, osa_Y, osa_Z; int minVal = 265; int maxVal = 402; dvojité x; dvojité y; dvojitý z;
4. Dále v nastavení neplatnosti je pro sériovou komunikaci nastavena přenosová rychlost 9600.
Serial.begin (9600);
A je navázána komunikace I2C mezi Arduino Nano a MPU6050:
Wire.begin (); // Inicializace komunikace I2C Wire.beginTransmission (MPU_addr); // Zahájit komunikaci s MPU6050 Wire.write (0x6B); // Zapisuje do registru 6B Wire.write (0); // Zapíše 0 do 6B registru pro resetování Wire.endTransmission (true); // Ukončí přenos I2C
Pro připojení servomotoru jsou také definovány čtyři piny PWM.
servo_1.attach (2); // Servo_2 vpřed / vzad_motor_2.attach (3); // Nahoru / Dolů_Motor servo_3.attach (4); // Gripper_Motor servo_4.attach (5); // Vlevo / Vpravo_Motor
5. Dále ve funkci void loop znovu vytvořte I2C spojení mezi MPU6050 a Arduino Nano a poté začněte číst data X, Y, Z-Axis z registru MPU6050 a ukládat je do odpovídajících proměnných.
Wire.beginTransmission (MPU_addr); Wire.write (0x3B); // Začněte s regsiterem 0x3B Wire.endTransmission (false); Wire.requestFrom (MPU_addr, 14, true); // Číst 14 registrů axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
Poté zmapujte minimální a maximální hodnotu osových dat ze snímače MPU6050 v rozsahu -90 až 90.
int xAng = mapa (axis_X, minVal, maxVal, -90,90); int yAng = mapa (osa_Y, minVal, maxVal, -90,90); int zAng = mapa (osa_Z, minVal, maxVal, -90,90);
Potom použijte následující vzorec pro výpočet hodnot x, y, z ve smyslu 0 až 360.
x = RAD_TO_DEG * (atan2 (-yAng, -zAng) + PI); y = RAD_TO_DEG * (atan2 (-xAng, -zAng) + PI); z = RAD_TO_DEG * (atan2 (-yAng, -xAng) + PI);
Poté přečtěte analogová výstupní data senzoru flexe na pinu A0 Arduino Nano a podle digitální hodnoty senzoru flex nastavte úhel serva chapadla. Pokud jsou tedy data snímače flexe větší než 750, úhel servomotoru chapadla je 0 stupňů a pokud menší než 750 je to 180 stupňů.
int chapadlo; int flex_sensorip = analogRead (A0); if (flex_sensorip> 750) { chapadlo = 0; } else { chapadlo = 180; } servo_3.write (chapadlo);
Poté je pohyb MPU6050 na ose X od 0 do 60 mapován ve smyslu 0 až 90 stupňů pro pohyb servomotoru vpřed / vzad robotickým ramenem.
if (x> = 0 && x <= 60) { int mov1 = mapa (x, 0,60,0,90); Serial.print ("Pohyb v F / R ="); Serial.print (mov1); Serial.println ((char) 176); servo_1.write (mov1); }
A pohyb MPU6050 na ose X od 250 do 360 je mapován v rozmezí 0 až 90 stupňů pro robotické rameno pohybu servomotoru NAHORU / DOLŮ.
else if (x> = 300 && x <= 360) { int mov2 = mapa (x, 360,250,0,90); Serial.print ("Pohyb nahoru / dolů ="); Serial.print (mov2); Serial.println ((char) 176); servo_2.write (mov2); }
Pohyb MPU6050 na ose Y od 0 do 60 je mapován v rozmezí 90 až 180 stupňů pro levý pohyb robotického ramene servomotoru.
if (y> = 0 && y <= 60) { int mov3 = mapa (y, 0,60,90,180); Serial.print ("Pohyb vlevo ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Pohyb MPU6050 v ose Y od 300 do 360 je mapován v rozmezí 0 až 90 stupňů pro pravý pohyb robotického ramene servomotoru.
else if (y> = 300 && y <= 360) { int mov3 = mapa (y, 360,300,90,0); Serial.print ("Pohyb vpravo ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Práce s robotickým ramenem ovládaným gesty pomocí Arduina
Nakonec nahrajte kód do Arduino Nano a noste ruční rukavice namontované pomocí senzoru MPU6050 & Flex.
1. Nyní pohybem ruky dolů posuňte robotickou ruku dopředu a pohybem nahoru posuňte robotickou ruku nahoru.
2. Potom nakloněním ruky doleva nebo doprava otočíte robotické rameno doleva nebo doprava.
3. Ohněte ohebný kabel připevněný prstem rukavice, abyste otevřeli chapadlo, a poté jej uvolněte, abyste jej zavřeli.
Kompletní fungování je ukázáno ve videu níže.