Nota

Hola, ¡bienvenido a la Comunidad de Entusiastas de SunFounder Raspberry Pi & Arduino & ESP32 en Facebook! Sumérgete más en Raspberry Pi, Arduino y ESP32 con otros entusiastas.

¿Por qué unirse?

  • Soporte Experto: Resuelve problemas post-venta y desafíos técnicos con la ayuda de nuestra comunidad y equipo.

  • Aprender y Compartir: Intercambia consejos y tutoriales para mejorar tus habilidades.

  • Preestrenos Exclusivos: Obtén acceso anticipado a nuevos anuncios de productos y adelantos exclusivos.

  • Descuentos Especiales: Disfruta de descuentos exclusivos en nuestros productos más nuevos.

  • Promociones Festivas y Sorteos: Participa en sorteos y promociones de temporada.

👉 ¿Listo para explorar y crear con nosotros? Haz clic en [Aquí] y únete hoy mismo.

1.3.2 Servo

Introducción

En este proyecto, aprenderemos cómo hacer girar el servo.

Componentes Necesarios

En este proyecto, necesitamos los siguientes componentes.

../_images/list_1.3.2.png

Es definitivamente conveniente comprar un kit completo, aquí está el enlace:

Nombre

ELEMENTOS EN ESTE KIT

ENLACE

Kit Raphael

337

Raphael Kit

También puedes comprarlos por separado en los enlaces a continuación.

INTRODUCCIÓN DE COMPONENTES

ENLACE DE COMPRA

Placa de Extensión GPIO

COMPRAR

Protoboard

COMPRAR

Cables de Puente

COMPRAR

Servo

COMPRAR

Diagrama Esquemático

../_images/image337.png

Procedimientos Experimentales

Paso 1: Construye el circuito.

../_images/image125.png

Paso 2: Ve a la carpeta del código.

cd ~/raphael-kit/nodejs/

Paso 3: Ejecuta el código.

sudo node servo.js

Después de ejecutar el programa, el servo girará de 0 grados a 180 grados, y luego de 180 grados a 0 grados, de forma circular.

Código

const Gpio = require('pigpio').Gpio;

SERVO_MIN_ANGLE = 0
SERVO_MAX_ANGLE = 180
SERVO_MIN_PULSE = 500
SERVO_MAX_PULSE = 2500

ServoPin = new Gpio(18,{mode: Gpio.OUTPUT})

function map(value, inMin, inMax, outMin, outMax){
    return (outMax - outMin) * (value - inMin) / (inMax - inMin) + outMin
}

function angle2pulse(angle){
    return Math.floor(map(angle,SERVO_MIN_ANGLE,SERVO_MAX_ANGLE,SERVO_MIN_PULSE ,SERVO_MAX_PULSE))
}

let angle=90;
let step=5;
setInterval(() => {
    if(angle>=180||angle<=0){
        step=-step
    }
    angle+=step;
    ServoPin.servoWrite(angle2pulse(angle));
}, 20);

Explicación del Código

const Gpio = require('pigpio').Gpio;

ServoPin = new Gpio(18,{mode: Gpio.OUTPUT})

Importa el módulo pigpio y crea un objeto de la clase Gpio, ServoPin, para controlar la salida del Gpio18.

SERVO_MIN_ANGLE = 0
SERVO_MAX_ANGLE = 180
SERVO_MIN_PULSE = 500
SERVO_MAX_PULSE = 2500

function map(value, inMin, inMax, outMin, outMax){
    return (outMax - outMin) * (value - inMin) / (inMax - inMin) + outMin
}

function angle2pulse(angle){
    return Math.floor(map(angle,SERVO_MIN_ANGLE,SERVO_MAX_ANGLE,SERVO_MIN_PULSE ,SERVO_MAX_PULSE))
}

Aquí se define la función que mapea el ángulo al ancho del pulso. Esto es porque la función de control del servo servoWrite(pulseWidth) encapsulada en la clase Gpio necesita escribir el ancho del pulso en lugar del ángulo. El rango de ángulo del servo que usamos es de 0 a 180, que necesita ser mapeado al rango de pulseWidth, de 500 a 2500.

let angle=90;
let step=5;
setInterval(() => {
    if(angle>=180||angle<=0){
        step=-step
    }
    angle+=step;
    ServoPin.servoWrite(angle2pulse(angle));
}, 20);

Deja que el ángulo del servo se desvíe de ida y vuelta de 0 a 180.

Imagen del Fenómeno

../_images/image126.jpeg