Paso 11: P.3, código: hablando con Servos más
¿Además de transmitir un ángulo, también enviamos un número para seleccionar que servo (o pinza) para escribir. Tenga en cuenta que el código no está diseñado para recibir un ángulo y escribir ese ángulo en los servos, pero en su lugar se modifica para leer un número en microsegundos a servo. Esto se hace porque algunos servos no utilizan 1000uS estándar - 2000uS ángulo de codificación y es más fácil para que el código del lado del equipo arreglar esto y hacer los cálculos necesarios.
En código, espere unos pocos bytes de más en Serial.available() que antes y luego use una instrucción switch para averiguar qué hacer una vez que se ha recibido la entrada:
interruptor (servoSelect) {}
caso 0:
baseRotate.writeMicroseconds(uS);
rotura;
caso 1:
bottomArm.writeMicroseconds(uS);
rotura;
caso 2:
middleArm.writeMicroseconds(uS);
rotura;
caso 3:
endArm.writeMicroseconds(uS);
rotura;
caso 4:
if(US == 0) {digitalWrite (magnetPin, HIGH);}
Else {digitalWrite (magnetPin, LOW);}
rotura;
caso 5:
grip.writeMicroseconds(uS);
rotura;
por defecto:
rotura;
}
Casos 0 - 3 son bastante simples - individualmente cada uno de los servos al posicionamiento en ángulo en el brazo de dirección. Caso 4 es el electroimán, que se enciende sólo si la entrada de microsegundos es distinto de cero (su valor aparte de la distinción es irrelevante), y el caso 5 es la pinza del extremo.
Aquí está un video de ejemplo del brazo bajo comando manual, demostrando que cada uno de los servos responde a la entrada del usuario en el GUI. Al final, ejecutar una secuencia de coordenadas para mostrar que esta funcionalidad funciona demasiado corto, preprogramada. Tenga en cuenta que el brazo oscila después de llegar a cada destino porque todavía tiene un montón de la izquierda sobre la energía cinética del movimiento. Esta cuestión se aborda en el siguiente paso.
Descripción del vídeo de YouTube:
"Verificación de la funcionalidad básica de nuestro software de objective-c con el brazo robótico menos agarre. La laptop se comunica con un Arduino Mega via USB y envía comandos para 4 servos y 1 interruptor MOSFET la voluntad de control de la pinza. La Junta de expansión en el Arduino es un escudo I diseñado y grabado al agua fuerte con un regulador de voltaje de corriente alta (opamp + pass transistor) y MOSFET con controlador de puerta UCC37322.
Actualmente estamos trabajando en un algoritmo que poco a poco disminuirá los servos mientras se acercan a sus objetivos para evitar oscilaciones no deseadas (es como la diferencia entre empujar un oscilador armónico a cero con un movimiento lineal versus movimiento exponencial en descomposición, no quiere seguir en este último caso). "