Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

DIY Arduino Gimbal | Zelfstabiliserend platform

In deze tutorial leren we hoe we een Arduino Gimbal of een zelfstabiliserend platform met servomotoren kunnen bouwen. Deze tutorial is eigenlijk een uitbreiding van de vorige tutorial over de MPU6050 tutorial.

Je kunt de volgende video bekijken of de schriftelijke tutorial hieronder lezen.

Overzicht

Ik ontwierp de gimbal met behulp van een 3D-modelleringssoftware. Het bestaat uit 3 MG996R-servomotoren voor de 3-assige besturing en een basis waarop de MPU6050-sensor, de Arduino en de batterij worden geplaatst.

U kunt dit 3D-model vinden en downloaden, en het ook in uw browser op Thangs verkennen.

STL-bestanden:

Met mijn Creality CR-10 3D-printer heb ik alle onderdelen in 3D geprint en ze zijn gewoon perfect geworden.

Montage

Het monteren van de gimbal was vrij eenvoudig. Ik ben begonnen met het installeren van de Yaw servo. Met behulp van M3-bouten en moeren heb ik het aan de basis bevestigd.

Vervolgens heb ik met dezelfde methode de Roll-servo beveiligd. De onderdelen zijn speciaal ontworpen om gemakkelijk op de MG996R-servo's te passen.

Om de onderdelen met elkaar te verbinden heb ik de ronde hoorns gebruikt die als accessoires bij de servo's worden geleverd.

Eerst moeten we de ronde hoorn met twee bouten aan de basis bevestigen en vervolgens met een andere bout aan de vorige servo bevestigen.

Ik herhaalde dit proces voor het monteren van de rest van de componenten, de Pitch-servo en het bovenste platform.

Vervolgens heb ik de servodraden door de openingen van de houders geleid om ze georganiseerd te houden. Daarna plaatste ik de MPU6050-sensor en bevestigde deze op de basis met een bout en een moer.

Voor het aandrijven van het project heb ik 2 Li-ion batterijen gebruikt die ik in deze batterijhouder heb geplaatst. Ik heb de batterijhouder aan de basis bevestigd met twee bouten en moeren.

De 2 Li-ion-batterijen produceren ongeveer 7,4 V, maar we hebben 5 V nodig om de Arduino en de servo's van stroom te voorzien.

Daarom heb ik een buck-converter gebruikt die 7,4V naar 5V zal converteren.

Arduino Gimbal-circuitdiagram

Wat nu overblijft, is om alles met elkaar te verbinden. Hier is het schakelschema van dit project en hoe alles moet worden aangesloten.

U kunt de benodigde componenten voor deze Arduino-zelfstudie verkrijgen via de onderstaande links:

  • MPU6050 IMU ……………………………. AmazonBanggood / AliExpress
  • MG996R-servo ………………………………. AmazonBanggood / AliExpress
  • Buck Converter ………………………………
  • Arduino-bord ………………………..…..
  • Broodplank en springdraden ………… 

Aan het einde heb ik de elektronische componenten en de draden in de basis geperst en ze afgedekt met deze hoes aan de onderkant.

Hiermee is het zelfbalancerende platform of de Arduino-gimbal klaar en werkt het goed zoals verwacht. Wat overblijft is om het programma te bekijken.

Arduino-code

De Arduino-code voor dit voorbeeld is een wijziging van het voorbeeld MPU6050_DMP6 uit de i2cdevlib-bibliotheek van Jeff Rowberg.

Hier kun je de code downloaden:

Codebeschrijving: We gebruiken dus de uitvoer leesbare yaw, pitch en roll.

// Get Yaw, Pitch and Roll values
#ifdef OUTPUT_READABLE_YAWPITCHROLL
    mpu.dmpGetQuaternion(&q, fifoBuffer);
    mpu.dmpGetGravity(&gravity, &q);
    mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);

    // Yaw, Pitch, Roll values - Radians to degrees
    ypr[0] = ypr[0] * 180 / M_PI;
    ypr[1] = ypr[1] * 180 / M_PI;
    ypr[2] = ypr[2] * 180 / M_PI;
    
    // Skip 300 readings (self-calibration process)
    if (j <= 300) {
      correct = ypr[0]; // Yaw starts at random value, so we capture last value after 300 readings
      j++;
    }
    // After 300 readings
    else {
      ypr[0] = ypr[0] - correct; // Set the Yaw to 0 deg - subtract  the last random Yaw value from the currrent value to make the Yaw 0 degrees
      // Map the values of the MPU6050 sensor from -90 to 90 to values suatable for the servo control from 0 to 180
      int servo0Value = map(ypr[0], -90, 90, 0, 180);
      int servo1Value = map(ypr[1], -90, 90, 0, 180);
      int servo2Value = map(ypr[2], -90, 90, 180, 0);
      
      // Control the servos according to the MPU6050 orientation
      servo0.write(servo0Value);
      servo1.write(servo1Value);
      servo2.write(servo2Value);
    }
#endifCode language: Arduino (arduino)

Zodra we de waarden hebben, converteren we ze eerst van radialen naar graden.

// Yaw, Pitch, Roll values - Radians to degrees
    ypr[0] = ypr[0] * 180 / M_PI;
    ypr[1] = ypr[1] * 180 / M_PI;
    ypr[2] = ypr[2] * 180 / M_PI;Code language: Arduino (arduino)

Dan wachten we of doen we 300 metingen, omdat de sensor gedurende deze tijd nog in het zelfkalibratieproces is. We leggen ook de Yaw-waarde vast, die in het begin niet 0 is zoals de Pitch and Roll-waarden, maar altijd een willekeurige waarde.

// Skip 300 readings (self-calibration process)
    if (j <= 300) {
      correct = ypr[0]; // Yaw starts at random value, so we capture last value after 300 readings
      j++;
    }Code language: Arduino (arduino)

Na de 300 metingen stellen we eerst de Yaw in op 0 door de hierboven vastgelegde willekeurige waarde af te trekken. Vervolgens brengen we de waarden van de Yaw, Pitch and Roll, van – 90 tot +90 graden, in kaart in waarden van 0 tot 180 die worden gebruikt voor het aansturen van de servo's.

// After 300 readings
    else {
      ypr[0] = ypr[0] - correct; // Set the Yaw to 0 deg - subtract  the last random Yaw value from the currrent value to make the Yaw 0 degrees
      // Map the values of the MPU6050 sensor from -90 to 90 to values suatable for the servo control from 0 to 180
      int servo0Value = map(ypr[0], -90, 90, 0, 180);
      int servo1Value = map(ypr[1], -90, 90, 0, 180);
      int servo2Value = map(ypr[2], -90, 90, 180, 0);
      
      // Control the servos according to the MPU6050 orientation
      servo0.write(servo0Value);
      servo1.write(servo1Value);
      servo2.write(servo2Value);
    }Code language: Arduino (arduino)

Tenslotte gebruiken we de schrijffunctie om deze waarden als stuursignalen naar de servo's te sturen. Natuurlijk kun je de Yaw-servo uitschakelen als je alleen stabilisatie voor de X- en Y-as wilt, en dit platform als camera-gimbal gebruiken.

Houd er rekening mee dat dit verre van een goede camera-gimbal is. De bewegingen zijn niet vloeiend omdat deze servo's daar niet voor bedoeld zijn. Echte camera-gimbals gebruiken een speciaal type BLDC-motoren voor soepele bewegingen. Overweeg dit project dus alleen voor educatieve doeleinden.

Dat zou alles zijn voor deze tutorial, ik hoop dat je ervan genoten hebt en iets nieuws hebt geleerd. Stel gerust een vraag in de opmerkingen hieronder en vergeet niet mijn verzameling Arduino-projecten te bekijken.


Productieproces

  1. DIY LUMAZOID Arduino Music Visualiser
  2. DIY voltmeter met Arduino en smartphone
  3. Obstakels vermijden robot met servomotor
  4. DIY Virtual Reality Skateboard
  5. Arduino-trainingsplatform
  6. DIY Arduino RADIONICS-behandelingsmachine
  7. DIY 2D Motion Racing Simulator
  8. Arduino Trash-Bot (automatisch openen/sluiten prullenbak)
  9. Solo Servo Sweep
  10. DIY-idee met RFID
  11. DIY 3-assige CNC VMC