Stap 4: Software
De volgende code wordt gemaakt voor de arduino IDE om controle van de robotarm. Net als een notitie, het maakt gebruik van onze circuits en mag niet worden gebruikt op een werkende Rhino Robotics arm omdat de lint-kabelverbindingen zou anders!
De code begint met het opzetten van alle input / output pinnen en stelt hen allemaal laag. Dan blijkt op de LED kort te laten weten dat we de 12V-stopcontact kunt aansluiten. Dan we bij de loop waar elke cyclus begint komen met het kalibreren van de arm en hoofd. Na kalibratie, het hoofd blijft in positie om Verwijder de dop van de fles. De motoren Volg onze vooraf gedefinieerde reeks moties te verheffen en het naar voren kantelen van de flesopener. Dan de kalibratie wordt herhaald en het podium voor de volgende fles draait en alles begint weer!
In de onderstaande code motor 1A betekent het relais controle op één zijde van de motoren pinnen en 1B zou de andere kant van de pinnen van de motoren. Bijvoorbeeld, u zou moeten 1A HIGH en 1B laag naar de aandrijfmotor in één richting, of lage 1A en 1B hoog om te rijden op de motor in de andere richting, of beide laag de motor uitschakelen.
/* motor 1A (relay 1) on digital pin 7 motor 1B (relay 2) on digital pin 6 motor 2A (relay 3) on digital pin 5 motor 2B (relay 4) on digital pin 4 */ void setup() { pinMode(8, OUTPUT); // LED pinMode(7, OUTPUT); // arm up pinMode(6, OUTPUT); // arm down pinMode(5, OUTPUT); // head up pinMode(4, OUTPUT); // head down pinMode(3, INPUT); // wheel switch pinMode(2, INPUT); // arm switch pinMode(1, INPUT); // head switch pinMode(0, OUTPUT); // wheel digitalWrite(7,LOW); digitalWrite(6,LOW); digitalWrite(5,LOW); digitalWrite(4,LOW); digitalWrite(0,LOW); digitalWrite(8,HIGH); // turn on LED to indicate ready delay(2000); digitalWrite(8,LOW); delay(2000); // insert 12V source during this pause } void loop() { calibrate(); digitalWrite(4,HIGH); // tilt head down delay(500); digitalWrite(7,HIGH); // lift arm up delay(2000); digitalWrite(7,LOW); delay(3000); digitalWrite(4,LOW); delay(10); digitalWrite(4,HIGH); digitalWrite(7,HIGH); delay(1000); digitalWrite(7,LOW); digitalWrite(4,LOW); delay(10); } void calibrate() { while(!digitalRead(3)) // rotate wheel 22.5 degrees so that bottle isnt in the way { digitalWrite(0,HIGH); delay(10); } delay(100); digitalWrite(0,LOW); while(digitalRead(1)) // move head away from bottle { digitalWrite(5,HIGH); delay(10); } digitalWrite(5,LOW); digitalWrite(4,HIGH); delay(2000); digitalWrite(4,LOW); delay(10); while(!digitalRead(2)) // calibrate arm { digitalWrite(6,HIGH); delay(10); } delay(50); digitalWrite(6,LOW); while(digitalRead(1)) // calibrate head { digitalWrite(5,HIGH); delay(10); } digitalWrite(5,LOW); digitalWrite(4,HIGH); delay(250); digitalWrite(4,LOW); delay(10); while(!digitalRead(3)) // rotate wheel 22.5 degrees into position for next bottle { digitalWrite(0,HIGH); delay(10); } delay(100); digitalWrite(0,LOW); }