Robotarm met bipolaire stappenmotoren (6 / 6 stap)

Stap 6: De volledige master controle code


Volledige code voor robotarm hieronder opgenomen.

We hadden een paar problemen met code die we gebruikten, maar aangezien we had ook enkele problemen met de voeding voltage, zoals uitgelegd in stap 5, we hadden een harde tijd sorteren door middel van het grootste deel van dit alles. Opgemerkt moet worden dat deze sectie van code niet de code voor de sensor bevat.

 <pre><pre>#ifndef _stepLib_h_<br>#define _stepLib_h_ #include "Arduino.h" // define our stepper class class stepMotor { public: stepMotor(byte stepPin, byte dirPin); // our stepper object with variables stepPin and dirPin void step(unsigned int stepFreq); // our stepping function which takes as an input our stepping frequency private: unsigned long _time; // current time unsigned long _lastStepTime; // time at which we last stepped unsigned long _stepPeriod; // time between a half period - this is the same as our delay(X) of part 1 byte _stepPin; byte _dirPin; boolean _stepCycle; // defines if we are on the HIGH or LOW side of our step cycle }; #endif #include "Arduino.h" #include "stepLib.h" // used for declaring our motor and initializing it stepMotor::stepMotor(byte stepPin, byte dirPin) { _stepPin = stepPin; _dirPin = dirPin; // define our digital pins as output pinMode(_stepPin, OUTPUT); pinMode(_dirPin, OUTPUT); // initialize our digital pins to LOW digitalWrite(_stepPin, LOW); digitalWrite(_dirPin, LOW); _stepCycle = false; // this keeps track of which end of the step cycle we are on: high or low } // function responsible for driving our digital pins high/low at the proper frequency // input is the stepping frequency void stepMotor::step(unsigned int stepFreq) { _time = micros(); // get the current time _stepPeriod = 1000000 / stepFreq; // get our step period (in micro-seconds) from the user given step frequency; we lose a bit of accuracy here since we've defined _stepPeriod as an unsigned long instead of a float, but that's ok... // if the proper amount of time has passed, let's go ahead and proceed to the next half of our step cycle if (_time >= _lastStepTime + _stepPeriod) { digitalWrite(_stepPin, _stepCycle == true); // a compact way of writing either HIGH/LOW to our step pin based on where we are on our step cycle _stepCycle = !_stepCycle; // this simply flips our Boolean _lastStepTime = _time; // update the time we last stepped } } #include "stepLib.h" // define a constant value named stepPin and assign the value 8 to it - this value will not change during our code // this assumes digital pin 8 of your Arduino is attached to the step input of your driver #define stepPin 9 // define a constant value named dirPin and assign the value 8 to it - this value will not change during our code // this assumes digital pin 9 of your Arduino is attached to the step input of your driver #define dirPin 8 // instantiate a new object in our stepMotor library named slider // we are essentially declaring that we want to add a stepper motor named slider that has our defined stepPin and dirPin stepMotor slider(stepPin, dirPin); // setup() loop, the Arduino only runs through this once void setup() { } // loop() loop, the Arduino continuously cycles through this as fast as it can void loop() { slider.step(50); // step our motor at a given frequency (Hz) } #include "stepLib.h" // define our step pins # define sliderStep 9 # define panStep 11 # define tiltStep 7 // define our direction pins # define sliderDir 8 # define panDir 10 # define tiltDir 6 // instantiate a new object in our stepMotor library named slider // we are essentially declaring that we want to add a stepper motor named slider that has our defined stepPin and dirPin stepMotor slider(sliderStep, sliderDir); stepMotor pan(panStep, panDir); stepMotor tilt(tiltStep, tiltDir); // setup() loop, the Arduino only runs through this once void setup() { } // loop() loop, the Arduino continuously cycles through this as fast as it can void loop() { slider.step(50); // step our motor at a given frequency (Hz) pan.step(10); // step our motor at a given frequency (Hz) tilt.step(100); // step our motor at a given frequency (Hz) } #ifndef _stepLib_h_ #define _stepLib_h_ #include "Arduino.h" // define our stepper class class stepMotor { public: stepMotor(byte stepPin, byte dirPin); // our stepper object with variables stepPin and dirPin void step(unsigned int stepFreq); // our stepping function which takes as an input our stepping frequency void setDir(boolean dir); // function that allows us to set our direction of rotation private: unsigned long _time; // current time unsigned long _lastStepTime; // time at which we last stepped unsigned long _stepPeriod; // time between a half period - this is the same as our delay(X) of part 1 byte _stepPin; byte _dirPin; boolean _stepCycle; // defines if we are on the HIGH or LOW side of our step cycle }; #endif #include "Arduino.h" #include "stepLib.h" // used for declaring our motor and initializing it stepMotor::stepMotor(byte stepPin, byte dirPin) { _stepPin = stepPin; _dirPin = dirPin; // define our digital pins as output pinMode(_stepPin, OUTPUT); pinMode(_dirPin, OUTPUT); // initialize our digital pins to LOW digitalWrite(_stepPin, LOW); digitalWrite(_dirPin, LOW); _stepCycle = false; // this keeps track of which end of the step cycle we are on: high or low } // function responsible for driving our digital pins high/low at the proper frequency // input is the stepping frequency void stepMotor::step(unsigned int stepFreq) { _time = micros(); // get the current time _stepPeriod = 1000000 / stepFreq; // get our step period (in micro-seconds) from the user given step frequency; we lose a bit of accuracy here since we've defined _stepPeriod as an unsigned long instead of a float, but that's ok... // if the proper amount of time has passed, let's go ahead and proceed to the next half of our step cycle if (_time >= _lastStepTime + _stepPeriod) { digitalWrite(_stepPin, _stepCycle == true); // a compact way of writing either HIGH/LOW to our step pin based on where we are on our step cycle _stepCycle = !_stepCycle; // this simply flips our Boolean _lastStepTime = _time; // update the time we last stepped } } // given a boolean user input, set our direction of travel to that input void stepMotor::setDir(boolean dir) { digitalWrite(_dirPin, dir); } #include "stepLib.h" // define our step pins # define sliderStep 9 # define panStep 11 # define tiltStep 7 // define our direction pins # define sliderDir 8 # define panDir 10 # define tiltDir 6 // define the pins on which we've put our N.O. buttons #define button1 2 #define button2 3 // our motor step frequencies int sliderFreq = 300; int panFreq = 10; int tiltFreq = 100; // instantiate a new object in our stepMotor library named slider // we are essentially declaring that we want to add a stepper motor named slider that has our defined stepPin and dirPin stepMotor slider(sliderStep, sliderDir); stepMotor pan(panStep, panDir); stepMotor tilt(tiltStep, tiltDir); // setup() loop, the Arduino only runs through this once void setup() { // define our button pins as input pullup type - see http://arduino.cc/en/Tutorial/DigitalPins#.Uyphr4WN7q4 pinMode(button1, INPUT_PULLUP); pinMode(button2, INPUT_PULLUP); } // loop() loop, the Arduino continuously cycles through this as fast as it can void loop() { if (digitalRead(button1) == LOW && digitalRead(button2) == HIGH) { // if button1 is pressed and button2 is not pressed slider.setDir(true); pan.setDir(true); tilt.setDir(true); } else if (digitalRead(button1) == HIGH && digitalRead(button2) == LOW) { // if btton1 is not pressed and button2 is pressed slider.setDir(false); pan.setDir(false); tilt.setDir(false); } if (digitalRead(button1) == LOW || digitalRead(button2) == LOW) { // if either button is pressed slider.step(sliderFreq); // step our motor at a given frequency (Hz) pan.step(panFreq); // step our motor at a given frequency (Hz) tilt.step(tiltFreq); // step our motor at a given frequency (Hz) } if (digitalRead(button1) == LOW && digitalRead(button2) == LOW) { // if both buttons are pressed together sliderFreq += 10; panFreq += 10; tiltFreq += 10; delay(10); // delay just a short while otherwise the double button presses causes our frequency to increase too quickly (we need to allow for the user to release the buttons) } } #include "stepLib.h" // define our step pins # define sliderStep 9 # define panStep 11 # define tiltStep 7 // define our direction pins # define sliderDir 8 # define panDir 10 # define tiltDir 6 // define the pins on which we've put our N.O. buttons #define button1 2 #define button2 3 // define our joystick pins; NOTE we are using analog pins, not digital #define LRjoystickPin 27 // left-right joystick #define UDjoystickPin 28 // up-down joystick // our motor step frequencies int sliderFreq = 50; int panFreq = 300; int tiltFreq = 100; // other variables byte deadband = 50; // size of deadband, from joystick neutral position, in which we assume we are reading 0 unsigned int LRjoyValue = 0; unsigned int UDjoyValue = 0; // instantiate a new object in our stepMotor library named slider // we are essentially declaring that we want to add a stepper motor named slider that has our defined stepPin and dirPin stepMotor slider(sliderStep, sliderDir); stepMotor pan(panStep, panDir); stepMotor tilt(tiltStep, tiltDir); // setup() loop, the Arduino only runs through this once void setup() { // define our button pins as input pullup type - see http://arduino.cc/en/Tutorial/DigitalPins#.Uyphr4WN7q4 pinMode(button1, INPUT_PULLUP); pinMode(button2, INPUT_PULLUP); pinMode(LRjoystickPin, INPUT); pinMode(UDjoystickPin, INPUT); } // loop() loop, the Arduino continuously cycles through this as fast as it can void loop() { // read our joystick values and store them LRjoyValue = analogRead(LRjoystickPin); // acts just like digitalRead, but for analog pins UDjoyValue = analogRead(UDjoystickPin); // acts just like digitalRead, but for analog pins // control our pan with the LR joystick if (LRjoyValue > 512+ deadband) { // joystick is outside of deadband, move right pan.setDir(true); pan.step(panFreq); } else if (LRjoyValue < 512- deadband) { // joystick is outside of deadband, move left pan.setDir(false); pan.step(panFreq); } // control our tilt with the UD joystick if (UDjoyValue > 512 + deadband) { // joystick is outside of deadband, move up tilt.setDir(true); tilt.step(panFreq); } else if (UDjoyValue < 512 - deadband) { // joystick is outside of deadband, move down tilt.setDir(false); tilt.step(panFreq); } // control our slider stepper with the two buttons, just like we did previously if (digitalRead(button1) == LOW && digitalRead(button2) == HIGH) { // if button1 is pressed and button2 is not pressed slider.setDir(true); } else if (digitalRead(button1) == HIGH && digitalRead(button2) == LOW) { // if btton1 is not pressed and button2 is pressed slider.setDir(false); } if (digitalRead(button1) == LOW || digitalRead(button2) == LOW) { // if either button is pressed slider.step(sliderFreq); // step our motor at a given frequency (Hz) } } 

Gerelateerde Artikelen

Beheersing van bipolaire stappenmotoren met Arduino [zonder bibliotheek]

Beheersing van bipolaire stappenmotoren met Arduino [zonder bibliotheek]

Tools:-Arduino UNO-Breadboard-L293D-De stappenmotor-12v adapter [of een stroombron die geschikt is voor uw motor volgens het gegevensblad]-Jumper dradenStap 1: Begrijpen hoe bipolar stepper motor werken.Bekijk de eerste 14 minuten van de volgende vid
Robotarm met servomotoren

Robotarm met servomotoren

onderdeel van mijn promotieonderzoek bij NYU-Poly impliceert het voorspellen van energieverbruik in Robotsystemen, dus ik nodig een robot-systeem om te werken met als een onderzoeksplatform voor het valideren van resultaten.  Dus ik ervan overtuigd m
Controle van een OWI robotarm met Arduino

Controle van een OWI robotarm met Arduino

de OWI rand robotarm is een goedkope en geweldig 5-mate-van-vrijheid robotic arm dat alleen kost $37. Het is een grote kit met een kind op te bouwen en meer dan een paar uur tot finish zal niet duren. Uit de doos, kan het alleen worden gecontroleerd
Specialisten robotarm met 3D gedrukte schakelingen

Specialisten robotarm met 3D gedrukte schakelingen

Ik kwam over Circuit specialisten (CS) toen ik wat onderzoek voor mijn Rover reparatie Robot doen. Het bedrijf biedt de beste servomotor voor de prijs, en ik heb een instucables over het wijzigen van deze servomotoren. Je kan hier klikken om te zoeke
Mijn negende Project: Robotarm met Joystick Shield

Mijn negende Project: Robotarm met Joystick Shield

Hoewel het is geweldig voor de controle van de robotarm met computer of mobiele telefoon, ik denk dat met behulp van de joystick is ook cool, dus ik een joystick-schild gekocht heb en maak een nieuw project. Deze joystick schild is compatibel met Ard
Controle robotarm met handschoenen, Android telefoon en Arduino

Controle robotarm met handschoenen, Android telefoon en Arduino

Vandaag hebben we bijna 2 technieken om te spelen met robotarm, hetzij door knoppen voor voorbeeld als op spel schild of het gebruik van handschoenen die sensoren bevatten. Nog, vandaag zal ik laten u een nieuwe techniek met behulp van alleen je Andr
Zelfgemaakte robotarm met behulp van standaard onderdelen met behulp van de Arduino en een Processing GUI

Zelfgemaakte robotarm met behulp van standaard onderdelen met behulp van de Arduino en een Processing GUI

Ik onlangs met pensioen en werd een van de dingen die ik mezelf beloofde dat als ik met pensioen I was going to voltooien van alle projecten had ik rondrennen in mijn hoofd sinds ik een tiener was. Dat is ongeveer 50 jaar of zo van projecten. In die
Mobiele robotarm met behulp van PHIRO + Arduino

Mobiele robotarm met behulp van PHIRO + Arduino

We zijn terug met een ander leerprogramma om u te tonen hoe zet PHIRO Pro in een koele mobiele robotarm die kunt halen en spullen plaatsen! Vergelijkbaar met onze vorige PHIRO Arduino kleur sensor instructable, we gaan gebruiken Pocket Code op een An
Interactieve pad volgende robotarm met behulp van pfodApp

Interactieve pad volgende robotarm met behulp van pfodApp

IntroductieDit instructable is extensie op Afstand gecontroleerde robotarm met behulp van pfodApp , waarmee u interactief programma een complex pad voor uw robotarm en vervolgens hebben de arm de gedefinieerde pad doorlopen.Installeer enkel de recent
ROBOTARM met USB PC-Interface (plus hoe te monteren)

ROBOTARM met USB PC-Interface (plus hoe te monteren)

hier is een video van de robotarm met USB PC Interface en hoe stel ik 'm samen...
Gebouw van de robotarm met Makeblock onderdelen

Gebouw van de robotarm met Makeblock onderdelen

Ik net een robotarm met Makeblock onderdelen bouwen, het bovenstaande zijn de afgewerkte look en werken video.Stap 1: MateriaallijstBill van mechanische onderdelen:Beam0808-136 x 3Beam0808-184 x 11Beam0824-016 V2.1 x 2Beam0824-032 V2.1 x 3Beam0824-09
Joystick gecontroleerd robotarm met behulp van een Arduino

Joystick gecontroleerd robotarm met behulp van een Arduino

Doel en beschrijving van deze handleidingDit instructable is een hand-in voor een schoolproject die we gemaakt. Het doel van dit project was een robot-arm besturingselement met thumbsticks maken. Moesten we gebruik maken van een Arduino Uno voor het
BT mobiele Ctrl Trunk robotarm met behulp van String

BT mobiele Ctrl Trunk robotarm met behulp van String

Kofferbak robotarm is een kunst in moderne robotica. Wel kunnen spin en brei als het artistieke. Alle robotica geïnspireerd zijn geïnspireerd door levende dingen, in deze volgorde Trunk robotica geïnspireerd door olifant en slang. Ik probeer hier te
Controle ArmLinkLibrary-master robotarm met Arm-Link-Software

Controle ArmLinkLibrary-master robotarm met Arm-Link-Software

Wilt worden koel als Simone Giertz , maar ArmLinkSerial moeten weet waar te beginnen?De InterbotiX Arm Link-Software biedt een eenvoudige interface voor GlobalArm.h -compatibel Robot armen. Met behulp van deze software kunt u de robotarm via allerlei