Zelfgemaakte robotarm met behulp van standaard onderdelen met behulp van de Arduino en een Processing GUI (15 / 17 stap)

Stap 15: Arduino Code


Laten we kijken naar enkele van de elementen van de Arduino schets voordat u probeert te gebruiken voor het verplaatsen van de arm.

De eerste is hoe wij vertellen de schets van de parameters voor de servo's, omdat we de mini Maestro-bibliotheek gebruikt. Ik deed dit door het opzetten van een array van structuren, elke instelling van de parameters voor de servo arm (lijnen 31-43 van de schets

 struct maestro_parameters { // servo_channel, name, min, max, home, speed, accel, and neutral come // directly from the min-maestro channel settings tab so it is a good // idea to take a screen shot and print it out. int servo_channel; char servo_name[20]; int servo_min; int servo_max; int servo_home; int servo_speed; int servo_accel; int servo_neutral; // The next two variables are required for Arduino mapping function. We will be mapping degrees to // microseconds. fromLow corresponds to the servo_min and and fromHigh corresponds to // servo_max. // If we use the shoulder as an example if your servo_min value is 672 microseconds, // which would correspond to +180 degrees and your servo_max value is 2248 microseconds // which corresponds to -180 degrees the fromLow and fromHigh values would be +180 // and -180 degrees respectively int servo_fromLow; int servo_fromHigh; // The next two variables are used to set the servo constraints. In, other //words the max allowable travel for each of servos int servo_constLow; int servo_constHigh; } servo[6]; 

Specifieke waarden voor de servo's zijn ingesteld op lijnen 66-71. Voor mijn arm zou dit zijn:

 servo[0] = (maestro_parameters) {0, "Base", 1064, 1663, 1366, 0, 0, 1504, -90, 90, -80, 80}; servo[1] = (maestro_parameters) {1, "Shoulder", 672, 2248, 2040, 40, 0, 2040, -180, 180, -10, 180}; servo[2] = (maestro_parameters) {2, "Elbow", 928, 1872, 1738, 10, 0, 1505, 180, -180, -160, 45}; servo[3] = (maestro_parameters) {3, "Wrist_Pitch", 928, 2128, 928, 10, 0, 1500, 0, 180, 0, 180}; servo[4] = (maestro_parameters) {6, "Wrist_Rotate", 608, 2448, 1500, 40, 0, 1500, 90, -90, -90, 90}; servo[5] = (maestro_parameters) {7, "Gripper", 1312, 1792, 1358, 7, 0, 1500, 0, 10, 0, 10}; 

Let's talk about de functie van de toewijzing voor een paar seconden. In het algemeen is de toewijzing van functies van de volgende vorm:

 servoPosMs = 4*map(servoPosDeg, servo[servoNum].servo_fromLow, servo[servoNum].servo_fromHigh, servo[servoNum].servo_min, servo[servoNum].servo_max); 

Ter referentie, die we de resultaatwaarde van de toewijzing door 4 vermenigvuldigen moeten aangezien de mini Maestro bibliotheek werkt verwacht waarden in stappen van 1/4 microseconde. Wat ik vond was dat de toewijzing functie was onjuist voor de schouder en elleboog servo-versnellingsbakken, het was uitgeschakeld door een paar graden waardoor onnauwkeurigheden in de positionering van de servo arm. Wat ik geliquideerd doen is het creëren van mijn eigen curven van de lineaire regressie voor deze servo's en hen te embedding in de curve. Dit werd gedaan in schetsen moveServo() functie.

Neem een blik bij deze functie:

VOID moveServo() {/ / de grenzen van de functie beperken de servo beweging zodat u doen niet de arm in overdrive positioneert u / / wil niet servoPosDeg = beperken (servoPosDeg, servo [servoNum] .servo_constLow, servo[servoNum].servo_constHigh); //Mini Maestro waarden in de 1/4 ms dus je moet vermenigvuldigen met 4. if(servoNum == 1) {servoPosMs = 4*(4.4406*servoPosDeg+1491.1);} anders if(servoNum == 2) {servoPosMs = 4*(-2.4208*servoPosDeg+1436.2);} else {} void moveServo() { // The Constrain function limits the servo movement so you do not overdrive the arm into positions you // do not want servoPosDeg = constrain(servoPosDeg, servo[servoNum].servo_constLow, servo[servoNum].servo_constHigh); //Mini Maestro values given in 1/4 ms so you have to multiply by 4. if(servoNum == 1) { servoPosMs = 4*(4.4406*servoPosDeg+1491.1); } else if(servoNum == 2) { servoPosMs = 4*(-2.4208*servoPosDeg+1436.2); } else { servoPosMs = 4*map(servoPosDeg, servo[servoNum].servo_fromLow, servo[servoNum].servo_fromHigh, servo[servoNum].servo_min, servo[servoNum].servo_max); } //Serial.println(servoPosDeg); // setSpeed tells the servo how fast you want the servo to move, // set Target tells the servo where to move maestro.setSpeed((uint8_t) servo[servoNum].servo_channel, (uint16_t) servo[servoNum].servo_speed); maestro.setTarget((uint8_t) servo[servoNum].servo_channel, (uint16_t) servoPosMs); // The while loop is here to tell the sketch to wait till the servo has finished moving before // sending a done message while(maestro.getMovingState() == 1) { //Serial.println("Moving Servo"); }; //Serial.print ("Position is: "); //Serial.println (maestro.getPosition(servo[servoNum].servo_channel)); Serial.println ("Done"); }<p> Serial.println ("Done");</p><p>}</p> 

In de geboekte schets heb ik gereageerd op de regels voor lineaire regressie. U moet bepalen of u dit of niet moet. In feite vertellen de servo verplaatsen naar de + 90 of-90 (afhankelijk van de servo) en zien of het echt op 90 graden is. Als je het gevoel alsof dit nog niet bevredigend met het Maestro Control center kunt u de servo naar 0, 90 180 graden (zie figuur), de microseconde waarden kopiëren en gebruiken van MS Excel om te doen een lineaire trendlijn (zorg ervoor u vertellen om te laten zien van de vergelijking.

Om te testen de schets, laden de schets in de Arduino. Wanneer open laden omhoog gebeëindigd het seriële commando venster en verzendt u opdrachten te bewapenen in de volgende vorm:

servoNum, Target graden

In het volgende voorbeeld,

0, 25 dan hit return-toets

Dit verplaatst de base servo naar links door 25 graden.

Bij wijze van samenvatting:

-
Servo Num Servo
0 Base
1 schouder
2elleboog
3 pols Pitch
4 pols draaien
6 gripper

Gerelateerde Artikelen

Rijden van een webpagina in realtime met behulp van de Arduino, SensorMonkey en Processing.js

Rijden van een webpagina in realtime met behulp van de Arduino, SensorMonkey en Processing.js

externe visualisatie van real-time sensorgegevens.Deze tutorial beschrijft in detail hoe u met de gratis SensorMonkey -service push realtime sensor data van een Arduino naar een webpagina voor visualisatie met behulp van Processing.js. Geen server-si
Stroboscoop (zoetrope) met behulp van de Arduino en een gebroken Xbox 360 DVD-station

Stroboscoop (zoetrope) met behulp van de Arduino en een gebroken Xbox 360 DVD-station

Stroboscoop (AKA zoetrope) is een apparaat waarmee een illusie van een bewegende beeld door weergegeven: een snelle erfopvolging frames "" voor een fractie van een seconde als gevolg van de persistence of vision (POV) effect gestopt. Het is een
Seriële Servo Controller w/Arduino - controle tot 12 Servos tegelijk met behulp van de Arduino en een USB-verbinding

Seriële Servo Controller w/Arduino - controle tot 12 Servos tegelijk met behulp van de Arduino en een USB-verbinding

ik ga u laten zien hoe je Arduino gebruik maximaal 12 servo's tegelijk met minimale jitter control.  Met behulp van een eenvoudige seriële interface kunt u de positie van maximaal 12 servo kanalen.  Maximaal 10 momentopname posities kan worden opgesl
ESP8266 ESP-12E NodeMCU met behulp van de Arduino IDE - een Tutorial programmering

ESP8266 ESP-12E NodeMCU met behulp van de Arduino IDE - een Tutorial programmering

NodeMCU Dev Board is gebaseerd op grote schaal onderzocht esp8266 systeem op Spaander van Expressif. Het gecombineerde functies van WIFI accesspoint en station + microcontroller en gebruikt eenvoudige LUA gebaseerde programmeertaal. ESP8266 NodeMCU a
Controle van de Arduino via een webservice met Teleduino

Controle van de Arduino via een webservice met Teleduino

Zet je Arduino in een verfijnde controle webplatform met behulp van Teleduino.Teleduino is zowel een product als een service. Zodra de Teleduino schets is geladen op uw Arduino (het "product"), het vervolgens verbinding met de server van de Tele
Hoe maak en gebruik van de arduino als een Internet-provider voor een ATtiny 45/85

Hoe maak en gebruik van de arduino als een Internet-provider voor een ATtiny 45/85

In dit instructable ik zal u tonen hoe kunt u uw eigen Atting programmering shield voor de arduino en gebruikt u vervolgens de arduino als een programmeur.Meestal hebt u niet een schild kan je een breadboard versie om te programmeren van de ATtiny. (
Uitzetten van een schets van de Arduino met behulp van de schakelaar Pololu

Uitzetten van een schets van de Arduino met behulp van de schakelaar Pololu

moet u een Arduino om af te sluiten uit binnen uw schets, dit is de oplossing.Bedrading van de Pololu drukknop / uit-schakelaar, programmeren van de Arduino om en alleen de macht, en maken de eenheid "macht op" uitgeschakeld, zullen we ontdekken
Mening gecontroleerde licht met behulp van de Arduino || Arme man EEG sensor

Mening gecontroleerde licht met behulp van de Arduino || Arme man EEG sensor

Het zou niet geweldig om te schakelen dingen in- of uitschakelen met je geest... !!!Zoals de Puzlebox baan Mobile Edition (http://www.amazon.com/Puzzlebox-Puzlebox-Orbit-Mob... ) of de coole Star Wars Science - Force Trainer ( http://www.amazon.com/S
Projector IR controle met behulp van de Arduino Uno

Projector IR controle met behulp van de Arduino Uno

Tijdens Halloween en Kerstmis, I-project video op een venster bij mijn huis. Het systeem maakt gebruik van een LED-projector die virtuele personages op een venster wordt weergegeven. Het effect maakt het verschijnen alsof het teken (s) echt in uw hui
Motor rijden met android met behulp van de arduino en bluetooth

Motor rijden met android met behulp van de arduino en bluetooth

Hey vrienden!! Dit is mijn eerste instructable ooit en vandaag ga ik u tonen hoe te rijden 2 motoren met android met behulp van de arduino en een goedkope Bluetooth-module. Dit project kunnen zeer nuttig zijn voor jou om te bouwen van robots die door
Seriële monitor ATtiny met behulp van de arduino walkthrough

Seriële monitor ATtiny met behulp van de arduino walkthrough

Allllllllllright dudes en dudets. Hier is whats up, we gonna attiny en arduino beste vrienden maken.Als u ooit hebt gewerkt met capacitieve switches weet u hoeveel het maakt je wilt je gezicht in een muur breken... Nu veronderstellen u hebben geen ma
LED te activeren met behulp van knop--Arduino voorbeeld Video

LED te activeren met behulp van knop--Arduino voorbeeld Video

de toont me het circuit op pagina 43 van aan de slag met Arduino, door Massimo Banzi monteren.In het volgende voorbeeld is een zeer goed uitgangspunt bij het gebruik van de Arduino systeem.  Het is de basis van mijn project Blinky visHier is hoe het
Verwerking met behulp van het model van de arduino proteus

Verwerking met behulp van het model van de arduino proteus

Deze toepassing nota wordt beschreven hoe u verwerking metde LabCenter Proteus-software voor het simuleren van de Arduino via een virtuele COMPoort.Hierbij wordt ervan uitgegaan dat de gebruiker vertrouwd met Proteus, de ArduinoIDE en de verwerking I
Een gids voor het beheren van dingen met wisselende inbreng (via arduino)

Een gids voor het beheren van dingen met wisselende inbreng (via arduino)

het hart van dit project is een) aansluiten van een sensor op de analoge ingang van de arduino en b) programmeren met de if... else-statement.dit specifieke project toont een computer koelsysteem te handhaven bepaalde temperatuur binnen een computer