- MPU6050 gyroskopisk og akselerometer sensor
- Flex-sensor
- Gjør deg klar den 3D-trykte robotarmen:
- Nødvendige komponenter:
- Kretsdiagram:
- Montering MPU6050 & Flex Sensor på hansker
- Programmering av Arduino Nano for robotarm
- Arbeid med geststyrt robotarm ved hjelp av Arduino
Robotic Arms er en av de fascinerende ingeniørkreasjonene, og det er alltid fascinerende å se disse tingene vippe og panorere for å få komplekse ting gjort akkurat som en menneskelig arm ville gjort. Disse robotarmene kan ofte finnes i bransjer ved samlebåndet som utfører intenst mekanisk arbeid som sveising, boring, maling, etc. Nylig er det også utviklet avanserte robotarmer med høy presisjon for å utføre komplekse kirurgiske operasjoner. Tidligere 3D-trykte vi en robotarm og bygde en DIY Pick and Place-robotarm med ARM7 Microcontroller. Vi vil igjen bruke den samme 3D-trykte robotarmen til å lage en håndbehandlet robot-ARM ved hjelp av Arduino Nano, MPU6050 Gyroskop og flex-sensor.
Denne 3D-trykte robotarmposisjonen styres gjennom en håndhanske som er festet med et MPU6050 gyroskop og en flex-sensor. Flex-sensoren brukes til å kontrollere gripeservoen til robotarmen, og MPU6050 brukes til bevegelse av robot i X- og Y-aksen. Hvis du ikke har en skriver, kan du også bygge armen din med enkel papp slik vi bygde for Arduino Robotic Arm Project. For inspirasjon kan du også henvise til Record and Play Robotic Arm som vi bygde tidligere med Arduino.
Før vi går i detalj, la oss først lære om MPU6050-sensoren og flex-sensoren.
MPU6050 gyroskopisk og akselerometer sensor
MPU6050 er basert på MEMS-teknologi (Micro-Mechanical Systems). Denne sensoren har et 3-akset akselerometer, et 3-akset gyroskop og en innebygd temperatursensor. Den kan brukes til å måle parametere som Acceleration, Velocity, Orientation, Displacement, etc. Vi har tidligere grensesnitt MPU6050 med Arduino og Raspberry pi og bygde også noen få prosjekter ved hjelp av den som - Self Balancing robot, Arduino Digital Protractor og Arduino Inclinometer.
Funksjoner i MPU6050 sensor:
- Kommunikasjon: I2C-protokoll med konfigurerbar I2C-adresse
- Inngangsstrømforsyning: 3-5V
- Innebygd 16-bit ADC gir høy nøyaktighet
- Innebygd DMP gir høy beregningskraft
- Kan brukes til å grensesnitt med andre I2C-enheter som et magnetometer
- Innebygd temperatursensor
Pin-Out detaljer for MPU6050:
Pin | Bruk |
Vcc | Gir strøm til modulen, kan være + 3V til + 5V. Vanligvis brukes + 5V |
Bakke | Koblet til bakken på systemet |
Seriell klokke (SCL) | Brukes til å levere klokkepuls for I2C-kommunikasjon |
Seriell data (SDA) | Brukes til å overføre data gjennom I2C-kommunikasjon |
Hjelpeseriedata (XDA) | Kan brukes til å koble andre I2C-moduler til MPU6050 |
Auxiliary Serial Clock (XCL) | Kan brukes til å koble andre I2C-moduler til MPU6050 |
AD0 | Hvis mer enn én MPU6050 brukes en enkelt MCU, kan denne pinnen brukes til å variere adressen |
Interrupt (INT) | Avbryt pin for å indikere at data er tilgjengelige for MCU å lese |
Flex-sensor
Flex-sensorer er bare en variabel motstand. Fleksisensormotstanden endres når sensoren er bøyd. De er vanligvis tilgjengelige i to størrelser 2,2 tommer og 4,5 tommer.
Hvorfor bruker vi flex-sensorer i prosjektet vårt?
I denne geststyrte robotarmen brukes en flexsensor til å kontrollere griperen på robotarmen. Når flex-sensoren på håndhanske er bøyd, roterer servomotoren som er festet til griperen, og griperen åpnes.
Flex-sensorer kan være nyttige i mange applikasjoner, og vi har bygget få prosjekter som bruker Flex-sensor som en spillkontroller, tonegenerator osv.
Gjør deg klar den 3D-trykte robotarmen:
Den 3D-trykte robotarmen som ble brukt i denne opplæringen, ble laget ved å følge designet gitt av EEZYbotARM som er tilgjengelig i Thingiverse. Den komplette prosedyren for å lage den 3D-trykte robotarmen og monteringsdetaljen med video er tilstede i Thingiverse-lenken, som er delt ovenfor.
Ovenfor er bildet av min 3D-trykte robotarm etter montering med 4 servomotorer.
Nødvendige komponenter:
- Arduino Nano
- Flex-sensor
- 10k motstand
- MPU6050
- Håndhansker
- Koble ledninger
- Brettbrett
Kretsdiagram:
Følgende bilde viser kretsforbindelsene for Arduino- basert geststyrt robotarm.
Kretsforbindelse mellom MPU6050 og Arduino Nano:
MPU6050 |
Arduino Nano |
VCC |
+ 5V |
GND |
GND |
SDA |
A4 |
SCL |
A5 |
Kretsforbindelse mellom Servomotorer og Arduino Nano:
Arduino Nano |
SERVO MOTOR |
Strømadapter |
D2 |
Servo 1 Oransje (PWM Pin) |
- |
D3 |
Servo 2 Oransje (PWM-pinne) |
- |
D4 |
Servo 3 Oransje (PWM-pinne) |
- |
D5 |
Servo 4 Oransje (PWM-pinne) |
- |
GND |
Servo 1,2,3,4 Brun (GND Pin) |
GND |
- |
Servo 1,2,3,4 Rød (+ 5V Pin) |
+ 5V |
En flex-sensor inneholder to pinner. Den inneholder ikke polariserte terminaler. Så pinnen en P1 er koblet til Arduino Nano's Analog Pin A0 med en opptrekksmotstand på 10k, og pinnen to P2 er jordet til Arduino.
Montering MPU6050 & Flex Sensor på hansker
Vi har montert MPU6050 og Flex Sensor på en håndhanske. Her brukes en kablet tilkobling for å koble hanske og robotarm, men den kan gjøres trådløs ved hjelp av en RF-forbindelse eller en Bluetooth-tilkobling.
Etter hver tilkobling ser det endelige oppsettet for geststyrt robotarm ut som bildet nedenfor:
Programmering av Arduino Nano for robotarm
Som vanlig er komplett kode sammen med en fungerende video gitt på slutten av denne opplæringen. Her er noen viktige kodelinjer forklart.
1. Først må du inkludere de nødvendige biblioteksfilene. Wire.h- biblioteket brukes til I2C-kommunikasjon mellom Arduino Nano og MPU6050 og servo.h for styring av servomotor.
#inkludere
2. Deretter blir objektene til klasseservoen erklært. Når vi bruker fire servomotorer, opprettes fire objekter som servo_1, servo_2, servo_3, servo_4.
Servo servo_1; Servo servo_2; Servo servo_3; Servo servo_4;
3. Deretter blir I2C-adressen til MPU6050 og variablene som skal brukes erklært.
const int MPU_addr = 0x68; // MPU6050 I2C Adresse int16_t akse_X, akse_Y, akse_Z; int minVal = 265; int maxVal = 402; dobbel x; dobbelt y; dobbel z;
4. Neste i ugyldig oppsett , settes en overføringshastighet på 9600 for seriell kommunikasjon.
Serial.begin (9600);
Og I2C-kommunikasjon mellom Arduino Nano og MPU6050 er etablert:
Wire.begin (); // Initilize I2C Communication Wire.beginTransmission (MPU_addr); // Start kommunikasjon med MPU6050 Wire.write (0x6B); // Skriver for å registrere 6B Wire.write (0); // Skriver 0 til 6B Registrer deg for å tilbakestille Wire.endTransmission (true); // Avslutter I2C-overføring
Fire PWM-pinner er også definert for servomotortilkoblinger.
servo_1.feste (2); // Forward / Reverse_Motor servo_2.attach (3); // Up / Down_Motor servo_3.attach (4); // Gripper_Motor servo_4.attach (5); // Venstre / høyre_Motor
5. Neste i tomrommet sløyfe funksjon, igjen etablere I2C forbindelse mellom MPU6050 og Arduino Nano og deretter begynne å lese X, Y, z-aksen av data fra registeret over MPU6050 og lagre dem i tilsvarende variabler.
Wire.beginTransmission (MPU_addr); Wire.write (0x3B); // Start med regsiter 0x3B Wire.endTransmission (false); Wire.requestFrom (MPU_addr, 14, sant); // Les 14 Registers axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
Deretter kartlegger du min- og maksverdien for aksedataene fra MPU6050-sensoren i området -90 til 90.
int xAng = kart (akse_X, minVal, maxVal, -90,90); int yAng = map (axis_Y, minVal, maxVal, -90,90); int zAng = kart (axis_Z, minVal, maxVal, -90,90);
Bruk deretter følgende formel for å beregne x-, y-, z-verdiene i form av 0 til 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);
Les deretter flex-sensoren Analoge utdataene på Arduino Nano's A0-pinne, og i henhold til den digitale verdien av flex-sensoren, stiller du inn griperens servovinkel. Så hvis flex-sensordataene er større enn 750, er griperens servomotorvinkel 0 grader, og hvis den er mindre enn 750, er den 180 grader.
int gripper; int flex_sensorip = analogRead (A0); hvis (flex_sensorip> 750) { gripper = 0; } annet { gripper = 180; } servo_3.write (gripper);
Deretter kartlegges bevegelsen til MPU6050 på X-aksen fra 0 til 60 i form av 0 til 90 grader for servomotorens forover / bakover bevegelse robotarmen.
hvis (x> = 0 && x <= 60) { int mov1 = kart (x, 0,60,0,90); Serial.print ("Bevegelse i F / R ="); Serial.print (mov1); Serial.println ((char) 176); servo_1.write (mov1); }
Og bevegelsen til MPU6050 på X-aksen fra 250 til 360 er kartlagt i form av 0 til 90 grader for servomotorens UP / DOWN bevegelses robotarm.
annet hvis (x> = 300 && x <= 360) { int mov2 = kart (x, 360,250,0,90); Serial.print ("Bevegelse opp / ned ="); Serial.print (mov2); Serial.println ((char) 176); servo_2.write (mov2); }
Bevegelse av MPU6050 på Y-aksen fra 0 til 60 er kartlagt i form av 90 til 180 grader for servomotorens venstrebevegelse av robotarmen.
hvis (y> = 0 && y <= 60) { int mov3 = kart (y, 0,60,90,180); Serial.print ("Bevegelse i venstre ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Bevegelse av MPU6050 i Y-aksen fra 300 til 360 er kartlagt i form av 0 til 90 grader for servomotorens høyre bevegelse av robotarmen.
annet hvis (y> = 300 && y <= 360) { int mov3 = kart (y, 360,300,90,0); Serial.print ("Bevegelse i høyre ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Arbeid med geststyrt robotarm ved hjelp av Arduino
Til slutt laster du opp koden til Arduino Nano og bruker håndhansken montert med MPU6050 & Flex Sensor.
1. Beveg nå hånden ned for å bevege robotarmen fremover og bevege deg opp for å flytte robotarmen opp.
2. Vipp deretter hånden mot venstre eller høyre for å vri robotarmen til venstre eller høyre.
3. Bøy flexkabelen festet med håndhanskens finger for å åpne griperen, og slipp den deretter for å lukke den.
Komplett arbeid demonstreres i videoen gitt nedenfor.