- MPU6050 gyroskopisk & accelerometer sensor
- Flex-sensor
- Gør klar til den 3D-trykte robotarm:
- Nødvendige komponenter:
- Kredsløbsdiagram:
- Montering MPU6050 & Flex Sensor på handsker
- Programmering af Arduino Nano til robotarm
- Arbejde med gestusstyret robotarm ved hjælp af Arduino
Robotic Arms er en af de fascinerende tekniske kreationer, og det er altid fascinerende at se disse ting vippe og panorere for at få komplekse ting gjort ligesom en menneskelig arm ville. Disse robotarme kan almindeligvis findes i industrier ved samlebåndet, der udfører intenst mekanisk arbejde som svejsning, boring, maling osv. For nylig udvikles avancerede robotarme med høj præcision også til at udføre komplekse kirurgiske operationer. Tidligere 3D-printede vi en robotarm og byggede en DIY Pick and Place-robotarm ved hjælp af ARM7 Microcontroller. Vi vil igen bruge den samme 3D-trykte robotarm til at lave en håndbevægelsesstyret robotARM ved hjælp af Arduino Nano, MPU6050 Gyroskop og flex-sensor.
Denne 3D-trykte robotarmposition styres gennem en håndhandske, der er fastgjort med et MPU6050-gyroskop og en flex-sensor. Flex-sensoren bruges til at styre griberservoen på robotarmen, og MPU6050 bruges til bevægelse af robotten i X- og Y-aksen. Hvis du ikke har en printer, kan du også bygge din arm med simpel pap, som vi byggede til vores Arduino Robotic Arm Project. For inspiration kan du også henvise til Record and Play Robotic Arm, som vi tidligere byggede ved hjælp af Arduino.
Før vi går i detaljer, lad os først lære om MPU6050-sensoren og flex-sensoren.
MPU6050 gyroskopisk & accelerometer sensor
MPU6050 er baseret på MEMS-teknologi (Micro-Mechanical Systems). Denne sensor har et 3-akset accelerometer, et 3-akset gyroskop og en indbygget temperatursensor. Det kan bruges til at måle parametre som acceleration, hastighed, orientering, forskydning osv. Vi har tidligere grænsefladen MPU6050 med Arduino og Raspberry pi og bygget også et par projekter ved hjælp af det som - Selvbalanceringsrobot, Arduino Digital Protractor og Arduino Inclinometer.
Funktioner i MPU6050-sensor:
- Kommunikation: I2C-protokol med konfigurerbar I2C-adresse
- Indgangsforsyning: 3-5V
- Indbygget 16-bit ADC giver høj nøjagtighed
- Indbygget DMP giver høj beregningskraft
- Kan bruges til at grænseflade med andre I2C-enheder som et magnetometer
- Indbygget temperatursensor
Pin-Out detaljer for MPU6050:
Pin | Anvendelse |
Vcc | Leverer strøm til modulet, kan være + 3V til + 5V. Typisk bruges + 5V |
Jord | Forbundet til systemets jord |
Serielt ur (SCL) | Bruges til at levere urimpuls til I2C-kommunikation |
Serielle data (SDA) | Bruges til overførsel af data gennem I2C-kommunikation |
Ekstra serielle data (XDA) | Kan bruges til at interface andre I2C-moduler med MPU6050 |
Ekstra serielt ur (XCL) | Kan bruges til at interface andre I2C-moduler med MPU6050 |
AD0 | Hvis der bruges mere end en MPU6050 en enkelt MCU, kan denne pin bruges til at variere adressen |
Interrupt (INT) | Afbryd pin for at indikere, at data er tilgængelige for MCU at læse |
Flex-sensor
Flex-sensorer er intet andet end en variabel modstand. Flex-sensorens modstand ændres, når sensoren er bøjet. De fås normalt i to størrelser 2,2 tommer og 4,5 tommer.
Hvorfor bruger vi flex-sensorer i vores projekt?
I denne gestusstyrede robotarm bruges en flexsensor til at kontrollere griben på robotarmen. Når flex-sensoren på håndhandsken er bøjet, roterer servomotoren, der er fastgjort til griberen, og griberen åbner.
Flex-sensorer kan være nyttige i mange applikationer, og vi har bygget få projekter ved hjælp af Flex-sensor som en spilcontroller, tonegenerator osv.
Gør klar til den 3D-trykte robotarm:
Den 3D-trykte robotarm, der blev brugt i denne vejledning, blev lavet ved at følge designet givet af EEZYbotARM, som er tilgængeligt i Thingiverse. Den komplette procedure til fremstilling af den 3D-trykte robotarm og samlingsdetaljen med video findes i Thingiverse-linket, som er delt ovenfor.
Ovenfor er billedet af min 3D-trykte robotarm efter samling med 4 servomotorer.
Nødvendige komponenter:
- Arduino Nano
- Flex-sensor
- 10k modstand
- MPU6050
- Håndhandsker
- Tilslutning af ledninger
- Brødbræt
Kredsløbsdiagram:
Det følgende billede viser kredsløbsforbindelserne til Arduino- baseret gestusstyret robotarm.
Kredsløbsforbindelse mellem MPU6050 og Arduino Nano:
MPU6050 |
Arduino Nano |
VCC |
+ 5V |
GND |
GND |
SDA |
A4 |
SCL |
A5 |
Kredsforbindelse mellem Servomotorer og Arduino Nano:
Arduino Nano |
SERVO MOTOR |
Strømadapter |
D2 |
Servo 1 orange (PWM-pin) |
- |
D3 |
Servo 2 orange (PWM-stift) |
- |
D4 |
Servo 3 orange (PWM-stift) |
- |
D5 |
Servo 4 orange (PWM-stift) |
- |
GND |
Servo 1,2,3,4 Brun (GND Pin) |
GND |
- |
Servo 1,2,3,4 Rød (+ 5V pin) |
+ 5V |
En flex-sensor indeholder to ben. Den indeholder ikke polariserede terminaler. Så pin 1 P1 er forbundet til Arduino Nano's Analog Pin A0 med en pull-up modstand på 10k, og pin to P2 er jordet til Arduino.
Montering MPU6050 & Flex Sensor på handsker
Vi har monteret MPU6050 og Flex Sensor på en håndhandske. Her bruges en kabelforbindelse til at forbinde handske og robotarm, men den kan gøres trådløs ved hjælp af en RF-forbindelse eller en Bluetooth-forbindelse.
Efter hver forbindelse ser den endelige opsætning for gestusstyret robotarm ud som nedenstående billede:
Programmering af Arduino Nano til robotarm
Som sædvanligt gives komplet kode sammen med en fungerende video i slutningen af denne vejledning. Her forklares et par vigtige kodelinjer.
1. Inkluder først de nødvendige biblioteksfiler. Wire.h- biblioteket bruges til I2C-kommunikation mellem Arduino Nano & MPU6050 og servo.h til styring af servomotor.
#omfatte
2. Derefter erklæres objekterne til klasseservoen. Da vi bruger fire servomotorer, oprettes fire objekter som servo_1, servo_2, servo_3, servo_4.
Servo servo_1; Servo servo_2; Servo servo_3; Servo servo_4;
3. Dernæst erklæres I2C-adressen på MPU6050 og de variabler, der skal bruges.
const int MPU_addr = 0x68; // MPU6050 I2C Adresse int16_t akse_X, akse_Y, akse_Z; int minVal = 265; int maxVal = 402; dobbelt x; dobbelt y; dobbelt z;
4. Dernæst i tomrumsopsætningen indstilles en baudrate på 9600 til seriel kommunikation.
Serial.begin (9600);
Og I2C-kommunikation mellem Arduino Nano og MPU6050 er etableret:
Wire.begin (); // Initialiser I2C-kommunikation Wire.beginTransmission (MPU_addr); // Start kommunikation med MPU6050 Wire.write (0x6B); // Skriver for at registrere 6B Wire.write (0); // Skriver 0 til 6B Registrer for at nulstille Wire.endTransmission (true); // Afslutter I2C transmission
Der er også defineret fire PWM-ben til servomotorforbindelser.
servo_1. vedhæft (2); // Frem / Reverse_Motor servo_2.attach (3); // Up / Down_Motor servo_3.attach (4); // Gripper_Motor servo_4.attach (5); // Venstre / højre_Motor
5. Derefter etableres I2C-forbindelsen mellem MPU6050 og Arduino Nano i ugyldig sløjfefunktionen og begynder derefter at læse X-, Y-, Z-aksedataene fra registeret over MPU6050 og gemme dem i tilsvarende variabler.
Wire.beginTransmission (MPU_addr); Wire.write (0x3B); // Start med regsiter 0x3B Wire.endTransmission (falsk); Wire.requestFrom (MPU_addr, 14, sandt); // Læs 14 Registers axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
Derefter kortlægges min- og maksimumsværdien af aksedataene fra MPU6050-sensoren i området fra -90 til 90.
int xAng = kort (akse_X, minVal, maxVal, -90,90); int yAng = kort (akse_Y, minVal, maxVal, -90,90); int zAng = kort (axis_Z, minVal, maxVal, -90,90);
Brug derefter følgende formel til at beregne x-, y-, z-værdierne i form af 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);
Læs derefter flex-sensoren Analoge outputdata ved Arduino Nano's A0-pin og i henhold til den digitale værdi af flex-sensoren, indstil griberens servovinkel. Så hvis flex-sensordataene er større end 750, er griberens servomotorvinkel 0 grader, og hvis den er mindre end 750, er den 180 grader.
int gripper; int flex_sensorip = analogRead (A0); hvis (flex_sensorip> 750) { gripper = 0; } andet { gripper = 180; } servo_3.write (gripper);
Derefter kortlægges bevægelsen af MPU6050 på X-aksen fra 0 til 60 i form af 0 til 90 grader for servomotorens fremad- / bagudgående bevægelse af robotarmen.
hvis (x> = 0 && x <= 60) { int mov1 = kort (x, 0,60,0,90); Serial.print ("Bevægelse i F / R ="); Serial.print (mov1); Serial.println ((char) 176); servo_1.write (mov1); }
Og bevægelsen af MPU6050 på X-aksen fra 250 til 360 kortlægges i form af 0 til 90 grader til servomotorens OP / NED bevægelses robotarm.
ellers hvis (x> = 300 && x <= 360) { int mov2 = kort (x, 360,250,0,90); Serial.print ("Bevægelse op / ned ="); Serial.print (mov2); Serial.println ((char) 176); servo_2.write (mov2); }
Bevægelse af MPU6050 på Y-aksen fra 0 til 60 kortlægges i form af 90 til 180 grader til servomotorens venstre bevægelse af robotarmen.
hvis (y> = 0 && y <= 60) { int mov3 = map (y, 0,60,90,180); Serial.print ("Bevægelse i venstre ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Bevægelse af MPU6050 i Y-aksen fra 300 til 360 kortlægges i form af 0 til 90 grader til servomotorens højre bevægelse af robotarmen.
ellers hvis (y> = 300 && y <= 360) { int mov3 = map (y, 360,300,90,0); Serial.print ("Bevægelse i højre ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Arbejde med gestusstyret robotarm ved hjælp af Arduino
Endelig upload koden til Arduino Nano og bære håndhandsken monteret med MPU6050 & Flex Sensor.
1. Flyt nu hånden ned for at bevæge robotarmen fremad og bevæg dig op for at flytte robotarmen op.
2. Vip derefter hånden til venstre eller højre for at dreje robotarmen til venstre eller højre.
3. Bøj flexkablet fastgjort med håndhandskefingeren for at åbne griben og slip det derefter for at lukke det.
Det komplette arbejde demonstreres i videoen nedenfor.