cómo controlar los servomotores con el Arduino

uno de los primeros usos de los servomotores fue controlar los mecanismos de dirección de aviones RC, Automóviles y barcos. Hoy en día, se pueden encontrar en robots, equipos industriales y muchos proyectos Arduino diferentes.

los servomotores son capaces de controlar con precisión la rotación de un eje del motor. Le permiten establecer un ángulo exacto de rotación con código, o con entradas como joysticks, pulsadores o potenciómetros.,

en este tutorial, echaremos un vistazo a cómo funcionan los servomotores y cómo usar un Arduino para controlarlos. También veremos dos programas de ejemplo que puede ejecutar en Arduino. El primer programa le mostrará cómo controlar la dirección y la posición de un servo utilizando dos botones. El segundo programa le mostrará cómo utilizar un potenciómetro para controlar la posición del servo.

muy bien, vamos a empezar!

BONUS: hice una guía de inicio rápido para este tutorial que puedes descargar y volver más tarde si no puedes configurar esto ahora mismo., Cubre todos los pasos, diagramas y código que necesita para comenzar.

cómo funcionan los servomotores

los Servos son motores de CC que se han adaptado para reducir la velocidad y aumentar el par del motor. También tienen circuitos integrados que controlan el ángulo de rotación de un grado A la vez, y mantienen esa posición hasta que se recibe otra entrada., Los Servos girarán un cierto número de grados dependiendo del ancho de los pulsos eléctricos entregados por el Arduino:

El servo espera un pulso cada 20 ms. para la mayoría de los servos, un pulso de 1 ms resulta en una rotación de cero grados, un pulso de 1.5 ms resulta en una rotación de 90 grados, y un pulso de 2 ms resulta en una rotación de 180 grados.

conectando el servomotor al Arduino

ahora veamos cómo usar un Arduino para controlar un servomotor., Estos son los componentes que necesitará para configurar los proyectos de ejemplo discutidos a continuación:

  • Arduino Uno
  • SG90 Micro Servo
  • potenciómetro 10k
  • resistencias
  • condensadores
  • Soporte de batería 4x AA
  • pulsadores táctiles

dependiendo del servo que use (especialmente los más grandes), debe usar una fuente de alimentación de CC separada para alimentar eso. De lo contrario, la corriente dibujada por el servo podría dañar su Arduino.,

Una vez que tenga todos los componentes, conéctelos al Arduino siguiendo este diagrama de cableado:

programando el Servo

la biblioteca de servos incorporada de arduino para programar el servo. Esta biblioteca está incluida con el IDE de Arduino, por lo que no es necesario instalarla.,

Una vez que haya conectado las piezas de acuerdo con el diagrama de cableado anterior, abra el IDE Arduino y cargue este código en la placa:

El servomotor debe moverse a 0 grados, pausar durante un segundo, luego moverse a 90 grados, pausar durante un segundo, pausa por un segundo, luego comienza de nuevo.

en la primera línea incluimos la biblioteca de servos con #include <Servo.h>., En la siguiente línea, creamos un objeto llamado servo1 para hacer referencia al servomotor específico en todo el código. En la siguiente línea, declaramos una variable pin llamada serverPin y la establecemos igual a Arduino pin 9.

en la sección de configuración, inicializamos el servo con la función attach(). La función attach() toma un parámetro: el pin al que está conectado el servo. Así que tenemos servo1.attach(servoPin).,

para mover el servo, utilice la función write() con el ángulo de rotación como argumento. El ángulo está en grados, de 0 grados a 180 grados. El ángulo cambia el ancho de pulso enviado al servomotor, que luego determina la cantidad de rotación. Estamos llamando a la función a través del objeto servo1, por lo que usamos servo1.write(angle), con 0 grados, 90 grados y 180 grados.

la función writeMicroseconds ()

la función write() funcionará para la mayoría de los servos, pero no todos., Algunos servomotores tienen un rango de 180 grados, algunos tienen un rango de 90 grados y algunos tienen en cualquier lugar intermedio. El uso de la función write() solo permite un máximo de 180 pasos. Sin embargo, hay una función que permite hasta 1000 pasos, llamada writeMicroseconds(). Si desea un control más preciso de su servo, es posible que desee utilizar la función writeMicroseconds()en lugar de write().,

el siguiente boceto muestra cómo usar la función writeMicroseconds():

en este boceto, hemos reemplazado cada función write() con una función writeMicroseconds(). Cambie los valores angulares de (0, 90, 180) grados a (1000, 1500, 2000) microsegundos. Cargue y ejecute el programa utilizando la misma configuración de hardware. Para un servomotor capaz de un rango de hasta 180, los valores serán 1000 microsegundos = 0 grados, 1500 microsegundos = 90 grados y 2000 microsegundos = 180 grados.,

dependiendo del servomotor que esté utilizando, puede notar una diferencia. Curiosamente en mi configuración, mientras monitoreaba los pulsos en un osciloscopio, noté que al usar servo1.write(0);, el ancho de pulso era de solo 700 microsegundos, No 1000, que es la forma en que la función debería funcionar cuando se establece en cero grados. Pero al usar servo1.writeMicroseconds(1000); la salida fue exactamente 1000 microsegundos.,

controle un Servo con botones pulsadores

Construya su circuito como se muestra en el diagrama anterior, luego cargue el código que se muestra a continuación.

después de cargar el código compilado, abra el Serial Monitor en su Arduino. A medida que presiona cualquiera de los botones, el servo debe aumentar o disminuir como se muestra en el monitor serie. Inicialmente, el código establecerá el servo en 90 grados. Utilice el botón conectado al pin 3 para aumentar el ángulo., Cuando llegue a 180 grados, el extremo superior de la rotación, el LED conectado al pin 5 se encenderá. Cuando llegue al extremo inferior del rango que es de 0 grados, el LED conectado al pin 6 se encenderá.

para determinar el resultado del empuje del botón, una instrucción while verifica el botón y el ángulo del eje. while (digitalRead(pin3) == HIGH && pos < 180) determina que el botón fue presionado (alto) y el ángulo es menor que 180, por lo que el programa agrega un grado y loops. El segundo botón while (digitalRead(pin4) == HIGH && pos > 0) determina que el botón fue empujado (ALTO) y el ángulo es mayor que 0., Esto hace que el ángulo disminuya en uno y se active. El nivel LedHi y LedLow para los LED están controlados por una instrucción if que comprueba el ángulo para ver si es 0 o 180. Los LED se apagan tan pronto como el ángulo cambia en cada una de las dos declaraciones while.

Control de un Servo Con un Potenciómetro

Construir el circuito como se muestra en el diagrama mediante un potenciómetro de 10K para controlar el servo motor. Luego cargue el siguiente código.,

después de cargar el código, abra el monitor serie en su Arduino. A medida que ajusta el potenciómetro, la rotación del servo cambiará en consecuencia. Cuando alcance el límite inferior del rango, el LED bajo se encenderá, y cuando alcance el límite superior, el LED Alto se encenderá.

El código es sencillo. La primera línea de código en el loop() función:

val = analogRead(pot); val = map(val, 0, 1023, 0, 180); servo1.write(val); 
analogRead() toma en el voltaje del potenciómetro como una señal analógica., Acepta los valores del rango completo de entrada aceptado en un Arduino (0-5V). Lo captura como un entero en el rango de (0-1023). Así, por ejemplo, un valor DC de 0V sería capturado como el entero 0; un valor de Rango completo de 5V sería capturado como el entero 1023, y la mitad del rango de entrada de 2.5 V sería capturado como el entero 512, la mitad de 1023.

la siguiente línea de código val = map(val, 0, 1023, 0, 180); asigna el valor de val dentro del rango de 0, 1023, a un valor de 0, 180.,

la siguiente línea de código servo1.write(val); es el comando write() que toma el entero almacenado en val como argumento y lo aplica al servo. El servo recibe un pulso del servo1.write(val); y el ancho de pulso está determinado por el valor de val. El servo utiliza el ancho de este pulso para determinar su rotación.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *