- MPU6050 Gyroscopische en versnellingsmetersensor
- Flex-sensor
- Voorbereiding van de 3D-geprinte robotarm:
- Vereiste componenten:
- Schakelschema:
- MPU6050 & Flex-sensor op handschoenen monteren
- Programmering Arduino Nano voor robotarm
- Werken met gebarengestuurde robotarm met behulp van Arduino
Robotarmen zijn een van de fascinerende technische creaties en het is altijd fascinerend om te zien hoe deze dingen kantelen en draaien om complexe dingen gedaan te krijgen, net zoals een menselijke arm dat zou doen. Deze robotarmen zijn vaak te vinden in industrieën aan de lopende band die intensief mechanisch werk uitvoeren, zoals lassen, boren, schilderen, enz. Recentelijk worden geavanceerde robotarmen met hoge precisie ontwikkeld om complexe chirurgische ingrepen uit te voeren. Eerder hebben we een robotarm 3D geprint en een DIY Pick and Place Robotarm gebouwd met ARM7 Microcontroller. We zullen opnieuw dezelfde 3D-geprinte robotarm gebruiken om een met de hand gestuurde robotarm te maken met Arduino Nano, MPU6050-gyroscoop en flexsensor.
Deze 3D-geprinte robotarmpositie wordt bestuurd door een handschoen die is bevestigd met een MPU6050-gyroscoop en een flexsensor. De Flex-sensor wordt gebruikt om de grijperservo van de robotarm te besturen en de MPU6050 wordt gebruikt voor de beweging van robotica in de X- en Y-as. Als je geen printer hebt, kun je ook je arm bouwen met eenvoudig karton zoals we hebben gebouwd voor ons Arduino Robotic Arm Project. Ter inspiratie kun je ook verwijzen naar de Record and Play Robotic Arm die we eerder met Arduino hebben gebouwd.
Laten we, voordat we in detail treden, eerst meer te weten komen over de MPU6050-sensor en flex-sensor.
MPU6050 Gyroscopische en versnellingsmetersensor
MPU6050 is gebaseerd op Micro-Mechanical Systems (MEMS) -technologie. Deze sensor heeft een 3-assige accelerometer, een 3-assige gyroscoop en een ingebouwde temperatuursensor. Het kan worden gebruikt om parameters zoals versnelling, snelheid, oriëntatie, verplaatsing, enz. Te meten. We hebben MPU6050 eerder gekoppeld aan Arduino en Raspberry pi en we hebben er ook een paar projecten mee gebouwd, zoals zelfbalancerende robot, Arduino digitale gradenboog en Arduino inclinometer.
Functies in MPU6050-sensor:
- Communicatie: I2C-protocol met configureerbaar I2C-adres
- Ingangsvoeding: 3-5V
- Ingebouwde 16-bits ADC zorgt voor een hoge nauwkeurigheid
- Ingebouwde DMP zorgt voor een hoge rekenkracht
- Kan worden gebruikt om te communiceren met andere I2C-apparaten zoals een magnetometer
- Ingebouwde temperatuursensor
Pin-Out details van MPU6050:
Pin | Gebruik |
Vcc | Levert stroom voor de module, kan + 3V tot + 5V zijn. Meestal wordt + 5V gebruikt |
Grond | Verbonden met aarde van systeem |
Seriële klok (SCL) | Wordt gebruikt voor het leveren van een klokpuls voor I2C-communicatie |
Seriële gegevens (SDA) | Wordt gebruikt voor het overdragen van gegevens via I2C-communicatie |
Extra seriële gegevens (XDA) | Kan worden gebruikt om andere I2C-modules te koppelen aan MPU6050 |
Extra seriële klok (XCL) | Kan worden gebruikt om andere I2C-modules te koppelen aan MPU6050 |
AD0 | Als er meer dan één MPU6050 wordt gebruikt in één MCU, kan deze pin worden gebruikt om het adres te variëren |
Onderbreken (INT) | Onderbreek de pin om aan te geven dat de gegevens beschikbaar zijn voor MCU om te lezen |
Flex-sensor
Flex-sensoren zijn niets anders dan een variabele weerstand. De weerstand van de flex-sensor verandert wanneer de sensor gebogen is. Ze zijn meestal verkrijgbaar in twee maten 2,2 inch en 4,5 inch.
Waarom gebruiken we flex-sensoren in ons project?
In deze gebarengestuurde robotarm wordt een flexsensor gebruikt om de grijper van de robotarm te besturen. Wanneer de flexsensor op de handschoen gebogen is, roteert de servomotor die aan de grijper is bevestigd en gaat de grijper open.
Flex-sensoren kunnen in veel toepassingen nuttig zijn en we hebben maar weinig projecten gebouwd met behulp van Flex-sensoren zoals een gamecontroller, toongenerator, enz.
Voorbereiding van de 3D-geprinte robotarm:
De 3D-geprinte robotarm die in deze tutorial wordt gebruikt, is gemaakt volgens het ontwerp van EEZYbotARM dat beschikbaar is in het Thingiverse. De volledige procedure voor het maken van de 3D-geprinte robotarm en het assemblagedetail met video is aanwezig in de Thingiverse-link, die hierboven wordt gedeeld.
Hierboven ziet u de afbeelding van mijn 3D-geprinte robotarm na montage met 4 servomotoren.
Vereiste componenten:
- Arduino Nano
- Flex-sensor
- 10k weerstand
- MPU6050
- Handschoenen
- Verbindingsdraden
- Breadboard
Schakelschema:
De volgende afbeelding toont de circuitverbindingen voor op Arduino gebaseerde gebarengestuurde robotarm.
Circuitverbinding tussen MPU6050 en Arduino Nano:
MPU6050 |
Arduino Nano |
VCC |
+ 5V |
GND |
GND |
SDA |
A4 |
SCL |
A5 |
Circuitverbinding tussen servomotoren en Arduino Nano:
Arduino Nano |
SERVO-MOTOR |
Oplader |
D2 |
Servo 1 Oranje (PWM-pin) |
- |
D3 |
Servo 2 Oranje (PWM-speld) |
- |
D4 |
Servo 3 Oranje (PWM-speld) |
- |
D5 |
Servo 4 Oranje (PWM-speld) |
- |
GND |
Servo 1,2,3,4 bruin (GND-pin) |
GND |
- |
Servo 1,2,3,4 Rood (+ 5V-speld) |
+ 5V |
Een flex-sensor bevat twee pinnen. Het bevat geen gepolariseerde terminals. Dus pin één P1 is verbonden met de analoge pin A0 van de Arduino Nano met een pull-up weerstand van 10k en de pin twee P2 is geaard naar Arduino.
MPU6050 & Flex-sensor op handschoenen monteren
We hebben de MPU6050 en Flex Sensor op een handschoen gemonteerd. Hier wordt een bekabelde verbinding gebruikt om handschoen en robotarm te verbinden, maar deze kan draadloos worden gemaakt door een RF-verbinding of een Bluetooth-verbinding te gebruiken.
Na elke verbinding ziet de uiteindelijke configuratie voor de robotarm met gebaren eruit als de onderstaande afbeelding:
Programmering Arduino Nano voor robotarm
Zoals gewoonlijk wordt aan het einde van deze tutorial de volledige code samen met een werkende video gegeven. Hier worden een paar belangrijke regels code uitgelegd.
1. Voeg eerst de benodigde bibliotheekbestanden toe. Wire.h- bibliotheek wordt gebruikt voor I2C-communicatie tussen Arduino Nano & MPU6050 en servo.h voor het besturen van servomotor.
# omvatten
2. Vervolgens worden de objecten voor de klassenservo gedeclareerd. Omdat we vier servomotoren gebruiken, worden vier objecten zoals servo_1, servo_2, servo_3, servo_4 gemaakt.
Servo servo_1; Servo servo_2; Servo servo_3; Servo servo_4;
3. Vervolgens wordt het I2C-adres van MPU6050 en de te gebruiken variabelen gedeclareerd.
const int MPU_addr = 0x68; // MPU6050 I2C Adres int16_t axis_X, axis_Y, axis_Z; int minVal = 265; int maxVal = 402; dubbele X; dubbele y; double z;
4. Vervolgens wordt in de lege setup een baudrate van 9600 ingesteld voor seriële communicatie.
Serial.begin (9600);
En I2C-communicatie tussen de Arduino Nano en MPU6050 is tot stand gebracht:
Wire.begin (); // Initilize I2C Communication Wire.beginTransmission (MPU_addr); // Start de communicatie met MPU6050 Wire.write (0x6B); // Schrijft naar Register 6B Wire.write (0); // Schrijft 0 in 6B Register om Wire.endTransmission te resetten (true); // Beëindigt de I2C-verzending
Er zijn ook vier PWM-pinnen gedefinieerd voor servomotoraansluitingen.
servo_1.attach (2); // Vooruit / achteruit_Motor servo_2.attach (3); // Up / Down_Motor servo_3.attach (4); // Gripper_Motor servo_4.attach (5); // Links / Rechts_Motor
5. Breng vervolgens in de void loop- functie opnieuw een I2C-verbinding tot stand tussen de MPU6050 en Arduino Nano en begin dan met het lezen van de X-, Y-, Z-as-gegevens uit het register van MPU6050 en sla ze op in overeenkomstige variabelen.
Wire.beginTransmission (MPU_addr); Wire.write (0x3B); // Begin met regsiter 0x3B Wire.endTransmission (false); Wire.requestFrom (MPU_addr, 14, true); // Lezen 14 registers axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
Breng daarna de min en max waarde van de asgegevens van de MPU6050-sensor in het bereik van -90 tot 90 in kaart.
int xAng = kaart (axis_X, minVal, maxVal, -90,90); int yAng = kaart (axis_Y, minVal, maxVal, -90,90); int zAng = kaart (axis_Z, minVal, maxVal, -90,90);
Gebruik vervolgens de volgende formule om de x, y, z-waarden te berekenen in termen van 0 tot 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);
Lees vervolgens de analoge uitgangsgegevens van de flex-sensor af op de A0-pin van de Arduino Nano en stel volgens de digitale waarde van de flex-sensor de servohoek van de grijper in. Dus als de flex-sensorgegevens groter zijn dan 750, is de servomotorhoek van de grijper 0 graden en als deze kleiner is dan 750 is deze 180 graden.
int grijper; int flex_sensorip = analogRead (A0); if (flex_sensorip> 750) { grijper = 0; } else { grijper = 180; } servo_3.write (grijper);
Vervolgens wordt de beweging van MPU6050 op de X-as van 0 tot 60 in kaart gebracht in termen van 0 tot 90 graden voor de voorwaartse / achterwaartse beweging van de servomotor de robotarm.
if (x> = 0 && x <= 60) { int mov1 = map (x, 0,60,0,90); Serial.print ("Beweging in F / R ="); Serial.print (mov1); Serial.println ((char) 176); servo_1.write (mov1); }
En de beweging van MPU6050 op de X-as van 250 tot 360 wordt in kaart gebracht in termen van 0 tot 90 graden voor de OMHOOG / OMLAAG-beweging van de servomotor Robotarm.
anders if (x> = 300 && x <= 360) { int mov2 = map (x, 360,250,0,90); Serial.print ("Beweging omhoog / omlaag ="); Serial.print (mov2); Serial.println ((char) 176); servo_2.write (mov2); }
De beweging van de MPU6050 op de Y-as van 0 tot 60 wordt in kaart gebracht in termen van 90 tot 180 graden voor de linkerbeweging van de servomotor van de robotarm.
if (y> = 0 && y <= 60) { int mov3 = map (y, 0,60,90,180); Serial.print ("Movement in Left ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Beweging van MPU6050 in de Y-as van 300 tot 360 wordt in kaart gebracht in termen van 0 tot 90 graden voor de rechterbeweging van de robotarm van de servomotor.
anders if (y> = 300 && y <= 360) { int mov3 = map (y, 360,300,90,0); Serial.print ("Movement in Right ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Werken met gebarengestuurde robotarm met behulp van Arduino
Upload ten slotte de code naar Arduino Nano en draag de handschoen die is gemonteerd met de MPU6050 & Flex-sensor.
1. Beweeg nu de hand naar beneden om de robotarm naar voren te bewegen en naar boven om de robotarm omhoog te bewegen.
2. Kantel vervolgens de hand naar links of rechts om de robotarm naar links of rechts te draaien.
3. Buig de flexibele kabel die is bevestigd met de vinger van de handschoen om de grijper te openen en laat deze vervolgens los om deze te sluiten.
De volledige werking wordt gedemonstreerd in de onderstaande video.