Paso 4: Software
Se hace el siguiente código para el arduino IDE para controlar el brazo robótico. Solo como nota, aprovecha las ventajas de nuestros circuitos y no se debe utilizar en un trabajo Rhino robótica del brazo porque las conexiones de cable de cinta iba a ser diferentes!
El código comienza con la creación de la entrada y salida de los pernos pone todo bajo. Luego se enciende el LED brevemente para dejarnos saber que podemos conectar la fuente de alimentación de 12V. Luego llegamos al loop() donde cada ciclo comienza por calibrar el brazo y la cabeza. Después de la calibración, la cabeza queda en posición para quitar la tapa de la botella. Los motores seguir nuestro conjunto predefinido de movimientos para el Levante y la inclinación hacia adelante del abrelatas de botella. Luego repite la calibración y la etapa de gira para la próxima botella y todo empieza otra vez!
En el código de abajo, motor 1A significa el relé de control de un lado de los pernos motors y 1B sería el otro lado de las clavijas de los motores. Por ejemplo, necesita 1A alta y baja 1B conducir el motor en una dirección, o bajo 1A y 1B para conducir el motor en la otra dirección, o ambas baja para apagar el motor.
/* 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); }