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

Programmeerbare 3-As Robotarm Kit – Lokaal & Remote Besturing met Arduino en Bluetooth

Onderdelen en benodigdheden

Onderdeel Aantal
Arduino Mega 2560 1
SainSmart DIY 3-As Control Palletizing Robot Arm Model voor Arduino UNO MEGA2560 1
MeArm DIY Robot Arm Kit 1
HC-06 Bluetooth Module 1
Adafruit RGB Backlight LCD - 16x2 1
Android-apparaat 1
Draaipotentiometer (generiek) 10Kohm 4
SparkFun Drukknopschakelaar 12mm 3
LED (generiek) ROOD, BLAUW, GROEN, GEEL 4

Apps en online diensten

  • Arduino IDE
  • MIT App Inventor 2

Over dit project

Programmeerbare 3-As Robotarm Kit – Lokaal & Remote Besturing met Arduino en Bluetooth

Deze tutorial ontwikkelt stap-voor-stap een project voor het besturen en programmeren van een robotarm, wat de basisfuncties van een industriële robot simuleert.

Stap 1: Specificaties

Programmeerbare 3-As Robotarm Kit – Lokaal & Remote Besturing met Arduino en Bluetooth

De robot heeft twee basisfuncties:

  • Programmeren: Armposities in drie dimensies onthouden (elk record is een "stap")
  • Uitvoeren: De opgenomen posities in volgorde uitvoeren. De robot voert het programma uit tot het "ABORT"-commando wordt gegeven.

Hoofdkarakteristieken:

  • Geschikt voor robots met 3 of 4 DOF (Degrees of Freedom)
  • Besturing in "LOKAAL" en "REMOTE" modus (laatste via Android-apparaat)
  • Tijdens programmeren kan tussen LOKAAL en REMOTE gewisseld worden
  • Informatie via gekleurde LED's, 2-regels LCD-display en geluid (buzzer)
  • Geluidalarm kan ook remote geactiveerd worden

Stap 2: Het Project

Programmeerbare 3-As Robotarm Kit – Lokaal & Remote Besturing met Arduino en Bluetooth

Het blokdiagram toont de "Bill of Material". Ik koos voor Arduino MEGA om geen zorgen te hoeven maken over beschikbare I/O-poorten. Een UNO zou ook werken, maar vereist poortuitbreiding (bijv. 74138 decoder).

Eerste prototype in "lokale modus" programmeren.

Voor Bluetooth: HC-06 module.

Android-app voor "remote mode" ontwikkeld met MIT App Inventor 2. Gratis beschikbaar in Google Play Store: MJRoBot Arduino Robot Arm Control.

Video geeft indruk van eindresultaat met remote programmering.

Stap 3: Projectontwikkeling

Programmeerbare 3-As Robotarm Kit – Lokaal & Remote Besturing met Arduino en Bluetooth
Programmeerbare 3-As Robotarm Kit – Lokaal & Remote Besturing met Arduino en Bluetooth

Robotarmen geclassificeerd naar aantal "gewichten" of "Degrees Of Freedom" (DOF):

  • Basis (of Taille): draait arm 180° of 360° (hier 180° servo)
  • Schouder: heft of daalt de arm verticaal
  • Elleboog: beweegt arm vooruit of achteruit
  • Klauw (of Gripper): opent/sluit om dingen te grijpen

Stap 4: Het Schakeling

Programmeerbare 3-As Robotarm Kit – Lokaal & Remote Besturing met Arduino en Bluetooth

Servomotoren drijven de gewichten, direct aangesloten op Arduino. Soms worden stappenmotoren bij de basis gebruikt voor groter koppel en precisie. Keuze van servos is cruciaal (goedkope Chinese servos als MG995 zijn vaak slecht gemaakt, maar voldoenden voor dit project).

DC-voeding voor servos gescheiden van Arduino. Externe 5-6V voeding (check datasheet servos). Gebruik 470uF condensators tussen VCC en GND om ruis van DC-motoren in servos te minimaliseren. Alle grounds verbinden (externe bron met Arduino GND).

Als servos trillen: vertragingen in code aanpassen. Servos moeten tijd hebben om positie te bereiken voordat nieuw commando komt. Check of servos digitaal of analoog zijn: digitaal werkt op 300Hz, analoog op 50Hz. Standaard Servo.h library is voor analoge servos, kan aangepast worden voor digitale.

Stap 5: De Code

Project is niet complex, maar heeft veel variabelen. Definieer ze duidelijk in een uniek bestand: ArmDefine.h.

Dit bestand stelt ook minimum, maximum en initiële servo-hoeken in. De code bevat twee parameter-sets voor de geteste robotarmen (alleen één set gebruiken):

// MeArm 4-DOF
#define minGrip 15
#define minBase 0
#define minShou 60
#define minElbw 60
#define maxGrip 45
#define maxBase 170
#define maxShou 180
#define maxElbw 150
#define midGrip 30
#define midBase 87
#define midShou 138
#define midElbw 100

/* SS 3-DOF
#define minGrip 75
#define minBase 5
#define minShou 5
#define minElbw 0
#define maxGrip 125
#define maxBase 150
#define maxShou 155
#define maxElbw 0
#define midGrip 100
#define midBase 90
#define midShou 90
#define midElbw 0
*/

Elke arm heeft andere parameters. Zoek de juiste voor jouw arm: zet potentiometers initieel op midpoint, PWM mapping op default (Max=255, Min=0, Mid=126). Variëer dan pots één voor één en noteer min/max waarden waar arm goed werkt. Deze worden de finale instellingen in ArmDefine.h.

Voor "opslaan" van coördinaten (stappen) gebruik ik data-arrays:

int gripPosition[100];
int basePosition[100];
int shouPosition[100];
int elbwPosition[100];
int positionIndex = 0; // Index voor recorded tasks

Opgelet: opgeslagen posities niet behouden na reset (index terug naar 0). Alternatief: opslaan in Arduino EEPROM voor persistentie of meerdere programma's.

Stap 6: Programmalogica

Hoofdblok (Loop) is simpel:

  1. Check of commando om "programma" (stapensequentie) uit te voeren gegeven is. Zo ja, voer uit.
  2. Anders: programma niet compleet, nieuwe stappen opnemen.
  3. Als "nieuwe positie" gedefinieerd, voeg toe aan programma.
  4. Eerst checken op berichten in seriële buffer van Android-apparaat.
  5. Controleren of modus "Lokaal" of "Remote" is (default Lokaal).
  6. Terug naar stap 1.
void loop () {
  checkBTcmd ();
  defineLocalRemote () ;
  execTaskCmd = digitalRead (execTaskPin);
  if (execTaskCmd == HIGH || command == "runon") {
    RunProgram () ;
  } else
    recArmPosition () ;
  command = "";
}

checkBTcmd() assembleert string uit individuele karakters van BT-module → variabele command.

defineLocalRemote() evalueert command voor moduswisseling en alarmcommando. Bij alarm via Android: arm moet naar Remote modus.

RunProgram() bereidt voor (LEDs aan/uit) en roept ExecuteTask() aan. Deze bevat uitvoerlogica: verhoogt positionIndex en stuurt positiedata naar arm via armPosition(grip, base, schouder, elleboog).

recArmPosition() is de kernfunctie die servos bestuurt en "stappen" opslaat. Afhankelijk van Android-commando: positionering via pots of via "sliders" in Android-app. Bij elke positieverzetting worden coördinaten naar servos gestuurd via armPosition. Echte positie van pots/sliders wordt gelezen en servos geactiveerd wanneer "SAVE" of "PROGRAM" geactiveerd wordt. Arrays-index wordt verhoogd en stap opgeslagen.

Code is modulair in vier bestanden:

  • MJRoBot_Arm_Robot_Task_Prgm.ino: Setup, Loop, bovengenoemde functies
  • General_Functions.ino: checkBTcmd(), beep(), debounce()
  • Arm_Ctrl_and_Display.ino: readPotentiometers(), readSliders(), armPosition(), LCD/Serial display, alarm
  • ArmDefine.h: constanten en definities

Video toont 4DOF "meArm" remote programmeren via Android-app.

Complete broncode op GitHub: https://github.com/Mjrovai/MJRoBot-Programmed-Arm

Stap 7: Conclusie

Programmeerbare 3-As Robotarm Kit – Lokaal & Remote Besturing met Arduino en Bluetooth

Hoop dat dit project helpt in de spannende wereld van Electronica, Robotica en IoT! Meer projecten op mijn blog: MJRoBot.org

Groetjes uit het zuiden van de wereld! Tot de volgende tutorial!

Dankjewel,
Marcelo

Code

Code snippet #1: Arm definities

// MeArm 4-DOF
#define minGrip 15
#define minBase 0
#define minShou 60
#define minElbw 60
#define maxGrip 45
#define maxBase 170
#define maxShou 180
#define maxElbw 150
#define midGrip 30
#define midBase 87
#define midShou 138
#define midElbw 100

/* SS 3-DOF
#define minGrip 75
#define minBase 5
#define minShou 5
#define minElbw 0
#define maxGrip 125
#define maxBase 150
#define maxShou 155
#define maxElbw 0
#define midGrip 100
#define midBase 90
#define midShou 90
#define midElbw 0
*/

Code snippet #2: Positie arrays

int gripPosition[100];
int basePosition[100];
int shouPosition[100];
int elbwPosition[100];
int positionIndex = 0;

Code snippet #3: Hoofdloop

void loop () {
  checkBTcmd ();
  defineLocalRemote () ;
  execTaskCmd = digitalRead (execTaskPin);
  if (execTaskCmd == HIGH || command == "runon") {
    RunProgram () ;
  } else
    recArmPosition () ;
  command = "";
}

GitHub

https://github.com/Mjrovai/MJRoBot-Programmed-Arm

Schema's

Robot Arm

Schema op GitHub

Productieproces

  1. Universele Android-afstandsbediening bouwen met Arduino, 1Sheeld en IR-besturing
  2. Bouw Boeiende LCD Animaties & Games met Arduino UNO
  3. Een slimme voltmeter bouwen met Arduino en smartphone – Eenvoudig DIY-project
  4. Externe IoT-besturing van een zelfgebouwde robotarm
  5. Bouw een Functionele, Arduino-aangedreven 3D-geprinte Robotarm – Stap-voor-Stap Handleiding
  6. Arduino-gebaseerde 6-DoF Robotarm Gestoeerd met Wii Nunchuk
  7. Bouw een DIY Voltmeter met Arduino en Nokia 5110 Display – Stap-voor-Stap Handleiding
  8. Bouw een Slimme Arduino-gestuurde Robotarm: Eenvoudige DIY Handleiding
  9. Python 3 naar Arduino UNO: Eenvoudige Commando Besturing en LED Demo
  10. Hoe Industriële Robotarmen De Productie Transformeren: Belangrijkste Voordelen
  11. Robotmanipulatoren vs. Robotarmen: Belangrijkste Verschillen