Lo Último en IP@P
- Goblin Mine: La Estrategia Económica Detrás del Juego de Minería que está Fascinando a Todos
- Estos son los nuevos Cargadores UGREEN: potencia y portabilidad en dos versiones que no te puedes perder
- UGREEN Nexode Pro: El Cargador Ultradelgado que revoluciona la carga de dispositivos móviles
- La computación en la nube está transformando los juegos Online y estas son sus grandes ventajas
- Actualizaciones del Programa de Afiliados de TEMU: ¡Hasta MX$500,000 al mes!
Programar un servomotor con Arduino no es una tarea difícil, si es que lees con detenimiento todos los párrafos de este artículo. Te vamos a mostrar cómo puedes crear proyectos complejos sin errores.
Será necesario que conozcas qué es un servomotor y para qué sirven estos componentes de hardware. También te explicaremos los usos que tienen estos dispositivos y cómo puedes programar un servomotor con Arduino.
Pero esto no es todo lo que verás, también podrás encontrar los mejores proyectos de Arduino con servomotor que puedes hacer tú mismo para practicar de una manera rápida y sencilla. Echa un vistazo.
¿Qué es un servomotor y para qué sirven estos componentes de desarrollo de hardware?
Un servomotor es un tipo especial de motor que se caracteriza por realizar movimientos precisos a un determinado torque. Su función principal es mantener la posición del eje en una acción robótica.
Está compuesto por una caja de plástico la cual contiene una placa de Arduino, a la que se le añade un motor de tipo DC, un potenciómetro y un sistema de engranajes. Se puede encontrar 2 tipos de servomotores. Están los de giro limitado, los cuales pueden rotar hasta 180° y los servomotores de rotación total o continuo. Estos pueden tener una rotación completa de 360°.
Usos de un servomotor ¿En qué tipo de dispositivos podemos utilizarlos?
El uso de un servomotor es muy amplio debido a la función principal que ofrece en la robótica, que es la de rotar una pieza dentro del mismo eje.
Por lo tanto, es común encontrar un servomotor en:
- Coches de radio control, en diferentes tipos de juguetes y en robots para niños.
- Radares incorporados a diferentes objetos.
- En la automatización de procesos fabriles. Estos robots trabajan en especial en los procesos de ensamblaje, construcción de automóviles y en otros tipos de fabricación automática a nivel industrial.
- Los servomotores también se pueden encontrar en los ascensores.
- Mientras que, en la informática es común encontrar un servomotor en la bandeja de los reproductores de discos DVD.
Aprende paso a paso cómo programar un servomotor con Arduino para tus proyectos desde cero
Si quieres programar un servomotor con Arduino tendrás que seguir los pasos que te mostraremos a continuación:
Conecta todos los componentes físicos
El primer paso que deberás hacer es ensamblar todos los componentes a la placa de Arduino. Para ello tendrás que conectar en la placa protoboard tres tipos de cable, uno será el que irá a tierra, el otro a la alimentación de 5 volts y el último al pin PWM. Una vez que tengas conectado este circuito deberás incorporar el servomotor y si quieres puedes agregarle resistencias.
Programa el giro del motor
Lo que deberás hacer ahora es ingresar al IDE de Arduino y escribir los siguientes comandos para que el motor pueda girar en tres tipos de ángulos.
Los códigos son:
#include <Servo.h> Servo servoMotor; void setup() { begin(9600); attach(9); } void loop() {
Ahora deberás configurar el desplazamiento a la posición 0º, para ello tendrás que ingresar:
write(0); delay(1000); Lo mismo tendrás que hacer con la posición de 90° y con la de 180°: write(90); delay(1000); write(180); delay(1000); }
Gira el motor grado por grado
En este paso tendrás que incorporar movimientos para que el servomotor pueda barrer todos los grados desde 0 a 180.
Para ello tendrás que ingresar:
#include <Servo.h> Servo servoMotor; void setup() {
A continuación, tendrás que iniciar el monitor serie:
begin(9600);
Luego vas a tener que programar que el servomotor trabaje desde el principio con el pin 9:
attach(9); write(0); }
Crea bucles
En estos momentos vas a tener que generar 2 bucles, uno negativo y otro en sentido positivo:
void loop() { for (int i = 0; i <= 180; i++) {
Luego desplaza al ángulo que corresponda:
write(i); delay(25); }
Más en Informática
- Pines de una placa Arduino: ¿Qué son, para qué sirven y cuáles son todos los que encontramos en una?
- ¿Cómo encender y apagar tu ordenador Mac de forma correcta? Guía paso a paso
- ¿Cómo grabar una imagen ISO y crear un USB de arranque o booteable en Windows, Linux o Mac? Guía paso a paso
- Medidas de información ¿Qué son, para qué sirve y cuáles existen?
- ¿Cómo borrar archivos y documentos en Linux de forma rápida como un experto? Guía paso a paso
SÍGUENOS EN 👉 YOUTUBE TV
Lo mismo tendrás que hacer para el sentido negativo:
for (int i = 179; i > 0; i--) { write(i); delay(25); } }
Los mejores proyectos Arduino con Servomotor que puedes hacer tú mismo para practicar
Si deseas practicar con un trabajo con servomotor en una placa de Arduino tendrás que tener en cuenta estos proyectos:
Cesto de basura con detector de movimiento
Este proyecto te permitirá abrir un bote de basura por medio de un sensor de movimiento. Necesitarás una placa Micro Arduino, un sensor ultrasónico genérico de tipo HC-SR04, un servomotor y un cesto de basura.
Para la programación tendrás que ingresar estos códigos:
#include <Servo.h> Servo myservo ; const int servo_pin = 2 ; const int trig_pin = 3 ; const int echo_pin = 4 ; const int inter_time = 200 ; int tiempo = 0 ; configuración vacía () { Serial . comenzar ( 9600 ); myservo . adjuntar ( servo_pin , 500 , 2400 ); myservo . escribir ( 90 ); pinMode ( trig_pin , SALIDA ); pinMode ( echo_pin , ENTRADA ); retraso ( 3000 ); } bucle vacío () { duración del flotador, distancia; digitalWrite ( trig_pin , ALTO ); delayMicroseconds ( 1000 ); digitalWrite ( trig_pin , BAJO ); duración = pulseIn ( echo_pin , HIGH ); distancia = ( duración / 2 ) / 29 ; Serial . imprimir ( distancia ); Serial . println ( "cm" ); time = time + inter_time; delay(inter_time); if (distance < 10) { for(int i = 1500; i >= 1100; i-=25){ writeMicroseconds(i); println("2"); delay(100); } delay(1000); para ( int i = 1100 ; i <= 1500 ; i + = 25 ) { myservo . writeMicroseconds ( i ); Serial . println ( "1" ); retraso ( 100 ); } } }
Brazo de robot
Lo que necesitarás para construir este brazo robótico una placa de Arduino UNO, 3 SparkFun Servo, 1 Módulo de un Joystick de dos ejes de una consola PlayStation2 una fuente de alimentación. También tendrás que tener a mano cables, un disipador de calor, un condensador de cerámica y otro de electrolítico.
Los códigos con los que deberás trabajar son:
#include "AnalogReader.h" #include <Arduino.h> AnalogReader::AnalogReader(const int pin) : m_pin(pin) {} /** Read analog value from board ADC */ int AnalogReader::read() { return analogRead(m_pin); } #include "Button.h" #include <Arduino.h> Button::Button(const int pin) : m_pin(pin) { } void Button::init() { pinMode(m_pin, INPUT);
Para establecer el estado de inicio vas a tener que escribir:
m_lastButtonState = read(); } //read button state. bool Button::read() { return digitalRead(m_pin); }
En caso que el botón no se presione retornará a LOW (0), pero si está accionado entregará el valor HIGH (1).
Para esto hay que ingresar:
bool Button::onChange() { //read button state. '1' is pushed, '0' is not pushed. bool reading = read(); // If the switch changed, due to noise or pressing: if (reading != m_lastButtonState) { // reset the debouncing timer m_lastDebounceTime = millis(); m_pressFlag = 1; } if ((millis() - m_lastDebounceTime) > m_debounceDelay) { // whatever the reading is at, it's been there for longer // than the debounce delay, so take it as the actual current state: // if the button state has changed: if (m_pressFlag) { //reading != m_lastButtonState) { //update the buton state m_pressFlag = 0; // save the reading. Next time through the loop, m_lastButtonState = reading; return 1; } } m_lastButtonState = reading; return 0; } bool Button::onPress() { //read button state. '1' is pushed, '0' is not pushed. bool reading = read(); // If the switch changed, due to noise or pressing: if (reading == HIGH && m_lastButtonState == LOW) { // reset the debouncing timer m_lastDebounceTime = millis(); m_pressFlag = 1; } if ((millis() - m_lastDebounceTime) > m_debounceDelay) { if (m_pressFlag) {
Después de esto, habrá que hacerlo por medio del bucle:
m_pressFlag = 0; m_lastButtonState = reading; return 1; } } m_lastButtonState = reading; return 0; } bool Button::onRelease() { //read button state. '1' is pushed, '0' is not pushed. bool reading = read(); // If the switch changed, due to noise or pressing: if (reading == LOW && m_lastButtonState == HIGH) { // reset the debouncing timer m_lastDebounceTime = millis(); m_pressFlag = 1; } if ((millis() - m_lastDebounceTime) > m_debounceDelay) { // whatever the reading is at, it's been there for longer // than the debounce delay, so take it as the actual current state: // if the button state has changed: if ( m_pressFlag) { //reading == LOW && m_lastButtonState == HIGH) { // save the reading. Next time through the loop, m_lastButtonState = reading; m_pressFlag = 0; return 1; } } m_lastButtonState = reading; return 0; } #ifndef _BUTTON_H_ #define _BUTTON_H_ //button class: class Button { public: Button(const int pin); //initialize button instance void init(); //Read button state - without debounce bool read(); //return True on both button events, Press or Release bool onChange(); //return True only on Press bool onPress(); //return True only on Release bool onRelease(); private: const int m_pin; bool m_lastButtonState; //state variables long m_lastDebounceTime = 0; const int m_debounceDelay = 50; bool m_pressFlag = 0; }; #endif //_BUTTON_H_
Insecto
Para este proyecto necesitarás una placa de Arduino de 3,3 V. y 8 MHz, un servomotor, un interruptor, una batería de litio de 1000mAh, cables, alambres y pegamento. El montaje lo deberás hacer sujetando lo más firme posible todos los elementos por medio de los alambres y pegamento.
Luego deberás ingresar estos códigos en el IDE:
#include <Servo.h> int FRENTE = 4 ; int BACK = 5 ; Servo frontLegs, backLegs ; configuración vacía () { pinMode ( 13 , SALIDA ) ; attach ( FRENTE ) ; attach ( VOLVER ) ; write ( 90 ) ; write ( 90 ) ; retraso ( 5000 ) ; }bucle vacío () { digitalWrite ( 13 , ALTA ) ; write ( 70 ) ; write ( 70 ) ; digitalWrite ( 13 , BAJO ) ; retraso ( 200 ) ; write ( 110 ) ; retraso ( 200 ) ; write ( 110 ) ; }