- Czujnik żyroskopowy i akcelerometr MPU6050
- Czujnik Flex
- Przygotowanie do druku 3D Robotic ARM:
- Wymagane składniki:
- Schemat obwodu:
- Montaż MPU6050 i czujnika Flex w rękawicach
- Programowanie Arduino Nano dla ramienia robota
- Praca ramienia robota sterowanego gestami przy użyciu Arduino
Robotic Arms to jedna z fascynujących kreacji inżynieryjnych i zawsze fascynujące jest obserwowanie, jak te rzeczy przechylają się i przesuwają, aby wykonywać skomplikowane czynności, tak jak robiłaby to ludzka ręka. Te ramiona robotów można powszechnie spotkać w branżach na liniach montażowych wykonujących intensywne prace mechaniczne, takie jak spawanie, wiercenie, malowanie itp. Ostatnio opracowywane są również zaawansowane ramiona robotów o wysokiej precyzji do wykonywania złożonych operacji chirurgicznych. Wcześniej wydrukowaliśmy w 3D ramię robota i zbudowaliśmy ramię robota typu Pick and Place do samodzielnego montażu przy użyciu mikrokontrolera ARM7. Ponownie użyjemy tego samego ramienia robota wydrukowanego w 3D, aby wykonać ramię robota sterowane gestami dłoni za pomocą Arduino Nano, żyroskopu MPU6050 i czujnika zginania.
To wydrukowane w 3D ramię robota jest kontrolowane przez rękawicę ręczną, która jest przymocowana do żyroskopu MPU6050 i czujnika zginania. Czujnik Flex jest używany do sterowania serwomechanizmem chwytaka ramienia robota, a MPU6050 służy do przemieszczania robota w osi X i Y. Jeśli nie masz drukarki, możesz również zbudować ramię z prostego kartonu, tak jak zbudowaliśmy dla naszego projektu ramienia robota Arduino. Aby uzyskać inspirację, możesz również zapoznać się z ramieniem robota Record and Play, które zbudowaliśmy wcześniej przy użyciu Arduino.
Zanim przejdziemy do szczegółów, najpierw zapoznajmy się z czujnikiem MPU6050 i czujnikiem flex.
Czujnik żyroskopowy i akcelerometr MPU6050
MPU6050 jest oparty na technologii Micro-Mechanical Systems (MEMS). Ten czujnik ma 3-osiowy akcelerometr, 3-osiowy żyroskop i wbudowany czujnik temperatury. Może być używany do pomiaru parametrów, takich jak przyspieszenie, prędkość, orientacja, przemieszczenie, itp. Wcześniej połączyliśmy MPU6050 z Arduino i Raspberry pi, a także zbudowaliśmy kilka projektów wykorzystujących go, takich jak robot samobalansujący, kątomierz cyfrowy Arduino i inklinometr Arduino.
Funkcje czujnika MPU6050:
- Komunikacja: protokół I2C z konfigurowalnym adresem I2C
- Zasilanie wejściowe: 3-5 V.
- Wbudowany 16-bitowy ADC zapewnia wysoką dokładność
- Wbudowany DMP zapewnia dużą moc obliczeniową
- Może być używany do łączenia z innymi urządzeniami I2C, takimi jak magnetometr
- Wbudowany czujnik temperatury
Szczegóły pinów MPU6050:
Kołek | Stosowanie |
Vcc | Zapewnia zasilanie modułu, może wynosić od + 3 V do + 5 V. Zwykle używane jest + 5V |
Ziemia | Podłączony do uziemienia systemu |
Zegar szeregowy (SCL) | Służy do dostarczania impulsu zegarowego dla komunikacji I2C |
Dane szeregowe (SDA) | Służy do przesyłania danych za pośrednictwem komunikacji I2C |
Pomocnicze dane szeregowe (XDA) | Może być używany do łączenia innych modułów I2C z MPU6050 |
Pomocniczy zegar szeregowy (XCL) | Może być używany do łączenia innych modułów I2C z MPU6050 |
AD0 | Jeśli więcej niż jeden MPU6050 jest używany na jednym MCU, ten pin może służyć do zmiany adresu |
Przerwanie (INT) | Styk przerwania wskazujący, że dane są dostępne do odczytania przez MCU |
Czujnik Flex
Flex Sensors to nic innego jak zmienny rezystor. Rezystancja czujnika elastycznego zmienia się, gdy czujnik jest zgięty. Zazwyczaj są dostępne w dwóch rozmiarach 2,2 cala i 4,5 cala.
Dlaczego używamy czujników flex w naszym projekcie?
W tym ramieniu robota sterowanym gestami czujnik zginania służy do sterowania chwytakiem ramienia robota. Kiedy czujnik zginania rękawicy jest zgięty, serwomotor zamocowany do chwytaka obraca się i chwytak otwiera się.
Czujniki Flex mogą być przydatne w wielu aplikacjach i stworzyliśmy kilka projektów wykorzystujących czujnik Flex, takich jak kontroler gier, generator tonów itp.
Przygotowanie do druku 3D Robotic ARM:
Ramię robota wydrukowane w 3D użyte w tym samouczku zostało wykonane zgodnie z projektem podanym przez EEZYbotARM, który jest dostępny w Thingiverse. Pełna procedura tworzenia ramienia robota wydrukowanego w 3D oraz szczegóły montażu wraz z wideo są dostępne w linku Thingiverse, które zostało udostępnione powyżej.
Powyżej znajduje się zdjęcie mojego ramienia robota wydrukowanego w 3D po złożeniu z 4 serwomotorami.
Wymagane składniki:
- Arduino Nano
- Czujnik Flex
- Rezystor 10k
- MPU6050
- Rękawiczki
- Podłączanie przewodów
- Płytka prototypowa
Schemat obwodu:
Poniższy obraz przedstawia połączenia obwodów dla ramienia robota sterowanego gestami opartego na Arduino .
Połączenie obwodu między MPU6050 i Arduino Nano:
MPU6050 |
Arduino Nano |
VCC |
+ 5V |
GND |
GND |
SDA |
A4 |
SCL |
A5 |
Połączenie obwodu między serwomotorami i Arduino Nano:
Arduino Nano |
SIŁOWNIK |
Zasilacz |
D2 |
Serwo 1 pomarańczowy (pin PWM) |
- |
D3 |
Servo 2 Orange (Pin PWM) |
- |
D4 |
Servo 3 Orange (Pin PWM) |
- |
D5 |
Servo 4 Orange (Pin PWM) |
- |
GND |
Serwo 1,2,3,4 Brązowy (Pin GND) |
GND |
- |
Serwo 1,2,3,4 Czerwony (Pin + 5 V) |
+ 5V |
Czujnik elastyczna zawiera dwa kołki. Nie zawiera spolaryzowanych zacisków. Zatem pin pierwszy P1 jest połączony z analogowym pinem A0 Arduino Nano za pomocą rezystora podciągającego 10k, a pin drugi P2 jest uziemiony do Arduino.
Montaż MPU6050 i czujnika Flex w rękawicach
Zamontowaliśmy MPU6050 i czujnik Flex na rękawicy ręcznej. W tym przypadku do połączenia rękawicy i ramienia robota służy połączenie przewodowe, ale można je nawiązać bezprzewodowo za pomocą połączenia RF lub połączenia Bluetooth.
Po każdym połączeniu ostateczna konfiguracja ramienia robota sterowanego gestami wygląda jak na poniższym obrazku:
Programowanie Arduino Nano dla ramienia robota
Jak zwykle, kompletny kod wraz z działającym filmem znajduje się na końcu tego samouczka. Poniżej wyjaśniono kilka ważnych wierszy kodu.
1. Najpierw dołącz niezbędne pliki biblioteki. Biblioteka Wire.h służy do komunikacji I2C pomiędzy Arduino Nano i MPU6050 oraz servo.h do sterowania serwomotorem.
#zawierać
2. Następnie deklarowane są obiekty klasy servo. Kiedy używamy czterech serwomotorów, tworzone są cztery obiekty, takie jak servo_1, servo_2, servo_3, servo_4.
Servo servo_1; Servo servo_2; Servo servo_3; Servo servo_4;
3. Następnie deklarowany jest adres I2C MPU6050 i używane zmienne.
const int MPU_addr = 0x68; // MPU6050 I2C Adres int16_t axis_X, axis_Y, axis_Z; int minVal = 265; int maxVal = 402; podwójne x; podwójne y; dwukrotnie z;
4. Następnie w pustej konfiguracji ustawiana jest prędkość transmisji 9600 dla komunikacji szeregowej.
Serial.begin (9600);
Ustanowiono komunikację I2C między Arduino Nano i MPU6050:
Wire.begin (); // Uruchom komunikację I2C.beginTransmission (MPU_addr); // Rozpocznij komunikację z MPU6050 Wire.write (0x6B); // Zapisuje do rejestru 6B Wire.write (0); // Zapisuje 0 do rejestru 6B, aby zresetować Wire.endTransmission (true); // Kończy transmisję I2C
Ponadto cztery piny PWM są zdefiniowane dla połączeń serwomotoru.
servo_1.attach (2); // Forward / Reverse_Motor servo_2.attach (3); // Góra / Dół_Motor servo_3.attach (4); // Gripper_Motor servo_4.attach (5); // Lewy / Prawy_Silnik
5. Następnie w funkcji void loop ponownie nawiąż połączenie I2C pomiędzy MPU6050 i Arduino Nano, a następnie zacznij odczytywać dane osi X, Y, Z z rejestru MPU6050 i zapisywać je w odpowiednich zmiennych.
Wire.beginTransmission (MPU_addr); Wire.write (0x3B); // Zacznij od regsiter 0x3B Wire.endTransmission (false); Wire.requestFrom (MPU_addr, 14, true); // Czytaj 14 Rejestruje axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
Następnie zmapuj minimalną i maksymalną wartość danych osi z czujnika MPU6050 w zakresie od -90 do 90.
int xAng = map (axis_X, minVal, maxVal, -90,90); int yAng = map (axis_Y, minVal, maxVal, -90,90); int zAng = map (axis_Z, minVal, maxVal, -90,90);
Następnie użyj poniższego wzoru, aby obliczyć wartości x, y, z w zakresie od 0 do 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);
Następnie odczytaj dane wyjścia analogowego czujnika flex na pinie A0 Arduino Nano i zgodnie z wartością cyfrową czujnika flex ustaw kąt serwa chwytaka. Więc jeśli dane czujnika flex są większe niż 750, kąt serwomotoru chwytaka wynosi 0 stopni, a jeśli jest mniejszy niż 750, to 180 stopni.
chwytak int; int flex_sensorip = analogRead (A0); if (flex_sensorip> 750) { gripper = 0; } else { chwytak = 180; } servo_3.write (chwytak);
Następnie ruch MPU6050 na osi X od 0 do 60 jest odwzorowywany w zakresie od 0 do 90 stopni dla ruchu do przodu / do tyłu serwomotoru ramienia robota.
if (x> = 0 && x <= 60) { int mov1 = map (x, 0,60,0,90); Serial.print ("Ruch w przód / tył ="); Serial.print (mov1); Serial.println ((char) 176); servo_1.write (mov1); }
Oraz przemieszczanie MPU6050 na osi X od 250 do 360 jest odwzorowany w zakresie od 0 do 90 stopni, na górę / w dół ruchu ramienia robota serwomotor jest.
else if (x> = 300 && x <= 360) { int mov2 = map (x, 360,250,0,90); Serial.print ("Ruch w górę / w dół ="); Serial.print (mov2); Serial.println ((char) 176); servo_2.write (mov2); }
Ruch MPU6050 na osi Y od 0 do 60 jest odwzorowany w zakresie od 90 do 180 stopni dla ruchu serwomotoru w lewo ramienia robota.
if (y> = 0 && y <= 60) { int mov3 = map (y, 0,60,90,180); Serial.print ("Ruch w lewo ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Ruch MPU6050 w osi Y od 300 do 360 jest odwzorowywany w zakresie od 0 do 90 stopni dla ruchu serwomotoru w prawo ramienia robota.
else if (y> = 300 && y <= 360) { int mov3 = map (y, 360,300,90,0); Serial.print ("Ruch w prawo ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Praca ramienia robota sterowanego gestami przy użyciu Arduino
Na koniec prześlij kod do Arduino Nano i załóż rękawicę ręczną z zamontowanym MPU6050 i czujnikiem Flex.
1. Teraz przesuń rękę w dół, aby przesunąć ramię robota do przodu i podnieś, aby podnieść ramię robota.
2. Następnie przechyl rękę w lewo lub w prawo, aby obrócić ramię robota w lewo lub w prawo.
3. Zegnij przewód elastyczny przymocowany palcem rękawicy, aby otworzyć chwytak, a następnie zwolnij go, aby go zamknąć.
Cała praca jest pokazana na poniższym filmie.