Nota

¡Hola, bienvenido a la Comunidad de Entusiastas de SunFounder Raspberry Pi & Arduino & ESP32 en Facebook! Sumérgete en el mundo de 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.

  • Aprende y Comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.

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

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

  • Promociones y Sorteos Festivos: 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 a hacer que el servo gire.

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

ARTÍCULOS EN ESTE KIT

ENLACE

Kit Raphael

337

Raphael Kit

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

INTRODUCCIÓN DEL COMPONENTE

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/c/1.3.2

Paso 3: Compila el código.

gcc 1.3.2_Servo.c -lwiringPi

Paso 4: Ejecuta el archivo ejecutable.

sudo ./a.out

Después de ejecutar el programa, el servo rotará de 0 grados a 180 grados, y luego de 180 grados a 0 grados, en un ciclo continuo.

Nota

Si no funciona después de ejecutarlo, o aparece un mensaje de error: "wiringPi.h: No such file or directory", por favor consulta Instalar y verificar WiringPi.

Código

#include <wiringPi.h>
#include <softPwm.h>
#include <stdio.h>

#define ServoPin    1       //define the servo to GPIO1
long Map(long value,long fromLow,long fromHigh,long toLow,long toHigh){
    return (toHigh-toLow)*(value-fromLow) / (fromHigh-fromLow) + toLow;
}
void setAngle(int pin, int angle){    //Create a funtion to control the angle of the servo.
    if(angle < 0)
        angle = 0;
    if(angle > 180)
        angle = 180;
    softPwmWrite(pin,Map(angle, 0, 180, 5, 25));
}

int main(void)
{
    int i;
    if(wiringPiSetup() == -1){ //when initialize wiring failed,print message to screen
        printf("setup wiringPi failed !");
        return 1;
    }
    softPwmCreate(ServoPin, 0, 200);       //initialize PMW pin of servo
    while(1){
        for(i=0;i<181;i++){     // Let servo rotate from 0 to 180.                  setAngle(ServoPin,i);
            delay(2);
        }
        delay(1000);
        for(i=181;i>-1;i--){        // Let servo rotate from 180 to 0.              setAngle(ServoPin,i);
            delay(2);
        }
        delay(1000);
    }
    return 0;
}

Explicación del Código

long Map(long value,long fromLow,long fromHigh,long toLow,long toHigh){
    return (toHigh-toLow)*(value-fromLow) / (fromHigh-fromLow) + toLow;
}

Crea una función Map() para mapear valores en el siguiente código.

void setAngle(int pin, int angle){    //Create a funtion to control the angle of the servo.
    if(angle < 0)
        angle = 0;
    if(angle > 180)
        angle = 180;
    softPwmWrite(pin,Map(angle, 0, 180, 5, 25));
}

Crea una función, setAngle() para escribir el ángulo en el servo.

softPwmWrite(pin, Map(angle, 0, 180, 5, 25));

Esta función puede cambiar el ciclo de trabajo del PWM.

Para hacer que el servo gire de 0 a 180 °, el ancho de pulso debe cambiar dentro del rango de 0.5ms a 2.5ms cuando el período es de 20ms; en la función, softPwmCreate(), hemos establecido que el período es 200x100us = 20ms, por lo que necesitamos mapear 0 a 180 a 5x100us a 25x100us.

El prototipo de esta función se muestra a continuación.

int softPwmCreate(int pin, int initialValue, int pwmRange);
  • pin: Cualquier pin GPIO de Raspberry Pi puede configurarse como pin PWM.

  • initialValue: El ancho de pulso inicial es ese initialValue multiplicado por 100us.

  • pwmRange: el período del PWM es ese pwmRange multiplicado por 100us.

Imagen del Fenómeno

../_images/image126.jpeg