Tabla de contenido:

Servocontrolador serial basado en Arduino: 6 pasos
Servocontrolador serial basado en Arduino: 6 pasos

Video: Servocontrolador serial basado en Arduino: 6 pasos

Video: Servocontrolador serial basado en Arduino: 6 pasos
Video: Servos ¿Cómo conectar, codificar, programar y controlar servomotores en Arduino? - PCA9685 shield. 2024, Diciembre
Anonim
Servocontrolador serial basado en Arduino
Servocontrolador serial basado en Arduino
Servocontrolador serial basado en Arduino
Servocontrolador serial basado en Arduino

Este es un controlador en serie simple para múltiples servos basado en Arduino. (mi primer instructable también:))

La mayor parte del trabajo en esto provino de hacer que el software hable con el arduino y hacer un protocolo para que los datos se pasen. En cuanto al aspecto del hardware, todo lo que usé fueron dos servos (aquí el servo estándar Parallax). Un Sparkfun Arduino ProtoShield y un Arduino Duemilanove con ATMEGA328, pero la mayoría de estas partes se pueden sustituir por elementos similares. Pensé en este proyecto como parte de un sistema RC, pero configurar la comunicación tomó mucho tiempo. Si alguien tiene alguna mejora, idea o error, no dude en comentar. EDITAR: escribí esto hace un tiempo, recién lo publiqué.

Paso 1: Cosas que puede necesitar …

Cosas que puede necesitar …
Cosas que puede necesitar …
Cosas que puede necesitar …
Cosas que puede necesitar …

Algunas cosas que necesitará para construir esto. 1. Placa Arduino (tú eliges) 2. dos (o uno) servos 3. cables de puente 4. Visual Studio 2008 Express - enlace (opcional) 5. Arduino IDE - enlace Lo siento, fanáticos de Linux y Apple, mi programa solo se ejecuta en Windows por ahora, pero aún puede enviar comandos seriales manualmente al arduino sin cambiar el código.

Paso 2: conecte el hardware

Conecte el hardware
Conecte el hardware

Nada muy complejo en este paso, simplemente conecte un servo al pin 9 y el otro al pin 10.

Paso 3: programa el Arduino

Programa el Arduino
Programa el Arduino

ahora puede cargar el boceto en el arduino.

Aquí hay un desglose simple del código: #include Servo myservo; // crea un objeto servo para controlar un servo Servo myservo1; int entranteByte = 0, recuento de datos = 0, contador = 0, listo = 0; // para datos en serie entrantes char data [10]; const char verificar [8] = "ma11hew"; comando char [3]; configuración vacía () {myservo.attach (9); myservo1.attach (10); Serial.begin (38400); // abre el puerto serie, establece la velocidad de datos Serial.println ("¡Hola Arduino aquí!"); // agregado para ayudar a identificar el puerto serial Esto solo configura el puerto serial y los servos. int i; para (i = 0; i <180; i ++) {myservo.write (i); retraso (15); } myservo.write (5); para (i = 0; i <180; i ++) {myservo1.write (i); retraso (15); } myservo1.write (5); } Movimiento de barrido simple para verificar que los servos funcionan correctamente. bucle vacío () {listo = 0; contador = 0; while (1 == 1) {if (Serial.read ()! = verificar [contador]) {romper; } si (contador == 6) {retraso (20); comando [0] = Serial.read (); comando [1] = Serial.read (); // if (Serial.read () == ((comando [1] * 12)% 8)) // {listo = 1; //} Serial.println ("comando guardado"); } contador ++; retraso (2); } esto verifica el búfer serial para la cadena de autorización correcta y luego toma dos bytes para el comando. la declaración if comentada permite una suma de comprobación improvisada, pero dificultaría la interfaz manual. ready se puede establecer en 0 para que los comandos no se analicen, como en el caso de datos corruptos. // buscar a través de comandos if (listo == 1) {if (comando [0] == 'T') {comando [0] = 0; Serial.print ("control del acelerador en el pin 9 a:"); Serial.println (mapa (comando [1], 32, 126, 2, 180), DEC); myservo.write (mapa (comando [1], 32, 126, 2, 180)); } si (comando [0] == 'S') {comando [0] = 0; Serial.print ("control del acelerador en el pin 10 a:"); Serial.println (mapa (comando [1], 32, 126, 2, 180), DEC); myservo1.write (mapa (comando [1], 32, 126, 2, 180)); }}} el resto del código es para buscar el comando para comandos válidos (T o S.) si alguno de los dos coincide, toma el siguiente byte y lo envía al servo. más en el mapa (comando [1], 32, 126, 2, 180) más tarde … el código aquí es ampliable para cualquier otra cosa que pueda necesitar (por ejemplo, luces, motores, IR, etc.) este código debería funcionar bien sin modificaciones.

Paso 4: Instale el software

Instalar software
Instalar software

Tengo dos formas de instalar este … instalador nsis: Descargue el instalador autoextraíble a continuación y ejecútelo. Tendrá la opción de instalar fuentes durante la instalación. el paquete binario del instalador instala dlls core c ++ para que pueda ejecutarse en una computadora sin Visual C ++ instalado. Una vez que finaliza el instalador, puede ejecutarlo desde el escritorio o desde el menú de inicio. zip way (no verificado): Descargue y ejecute, debería funcionar. quizás. (El archivo zip tiene la misma estructura de carpetas creada por el instalador, sin fuentes. No tengo una máquina sin Visual Studio para probarlo, por lo que es posible que no funcione).

Paso 5: use el programa de interfaz

Utilice el programa de interfaz
Utilice el programa de interfaz
Utilice el programa de interfaz
Utilice el programa de interfaz

Para usar el programa, primero seleccione la velocidad en baudios definida en el boceto de arduino. El boceto sin modificar tiene un valor predeterminado de 38400 baudios, pero se puede cambiar para adaptarse a sus necesidades para cosas como un enlace de radio más lento. nota: las velocidades en baudios superiores a 38400 no han sido muy estables, creo que esto se debe a que el uart se llena antes de que se puedan procesar los datos. A continuación, seleccione el puerto COM a utilizar. el programa predeterminado es COM4 asegúrese de cambiarlo o el programa se bloqueará. Finalmente, haga clic en abrir. Si todo salió bien, el programa abrirá el puerto serie seleccionado a la velocidad de transmisión seleccionada. De lo contrario, el programa probablemente se bloqueará con una excepción no controlada. asegúrese de que el puerto sea correcto y vuelva a intentarlo. Utilice los cuadros de texto para enviar comandos directos al arduino. El "mapa (comando [1], 32, 126, 2, 180)" escala todos los 94 comandos posibles, * espacio * a ~, legibles por el arduino en ASCII de 2 a 180 para el servo. cualquier byte menor que ASCII 32 (espacio) o superior 126 (~) por defecto es 63 (?) Las barras de seguimiento proporcionan una interfaz más fácil para los comandos directos. cada paso envía un comando en serie al arduino de forma incremental.

Paso 6: ¡Sea creativo

¡Se creativo!
¡Se creativo!
¡Se creativo!
¡Se creativo!

Piense en cosas interesantes para hacer con esto. Algunas ideas: 1. Acelerador remoto para un automóvil. 2. Soporte de cámara 3D 3. Rover submarino ¡Diviértete!

Recomendado: