Nota

¡Hola! Bienvenidos a la comunidad de entusiastas de SunFounder para Raspberry Pi, Arduino y ESP32 en Facebook. Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 junto con otros apasionados.

¿Por qué unirse?

  • Soporte de Expertos: Soluciona 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: Accede anticipadamente a anuncios de nuevos productos y adelantos.

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

  • Promociones y Sorteos Festivos: Participa en sorteos y promociones especiales en días festivos.

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

3.1.4 Ventilador Inteligente

Nota

../_images/mcp3008_and_adc0834.jpg

Dependiendo de la versión de tu kit, identifica si tienes ADC0834 o MCP3008 y procede con la sección correspondiente.

Introducción

En este curso, utilizaremos motores, botones y termistores para construir un ventilador inteligente con función manual y automática, con velocidad de viento ajustable.

Componentes

../_images/list_Smart_Fan1.png

Diagrama de Circuito

T-Board Name

physical

wiringPi

BCM

GPIO17

Pin 11

0

17

GPIO18

Pin 12

1

18

GPIO27

Pin 13

2

27

GPIO22

Pin 15

3

22

GPIO5

Pin 29

21

5

GPIO6

Pin 31

22

6

GPIO13

Pin 33

23

13

../_images/Schematic_three_one41.png

Procedimientos Experimentales

Paso 1: Construye el circuito.

Smart Fan_bb

Nota

El módulo de alimentación puede utilizar una batería de 9V con el conector de batería de 9V incluido en el kit. Inserta el puente del módulo de alimentación en las tiras de bus de 5V de la protoboard.

\_MG_2084

Para Usuarios de Lenguaje C

Paso 2: Ingresa en la carpeta del código.

cd ~/davinci-kit-for-raspberry-pi/c/3.1.4/

Paso 3: Compila.

gcc 3.1.4_SmartFan.c -lwiringPi -lm

Paso 4: Ejecuta el archivo ejecutable anterior.

sudo ./a.out

Cuando el código se ejecute, presiona el botón para activar el ventilador. Cada vez que presionas, se ajusta una categoría de velocidad hacia arriba o abajo. Hay 5 niveles de velocidad: 0~4. Cuando está en la 4.ª categoría de velocidad y presionas el botón, el ventilador se detiene con una velocidad de viento en 0.

Nota

Si no funciona tras ejecutarlo, o aparece el mensaje de error: "wiringPi.h: No such file or directory», consulta ¿El código en C no funciona?.

Cuando la temperatura sube o baja más de 2℃, la velocidad del ventilador cambia automáticamente una categoría más rápido o más lento.

Explicación del Código

int temperture(){
    unsigned char analogVal;
    double Vr, Rt, temp, cel, Fah;
    analogVal = get_ADC_Result(0);
    Vr = 5 * (double)(analogVal) / 255;
    Rt = 10000 * (double)(Vr) / (5 - (double)(Vr));
    temp = 1 / (((log(Rt/10000)) / 3950)+(1 / (273.15 + 25)));
    cel = temp - 273.15;
    Fah = cel * 1.8 +32;
    int t=cel;
    return t;
}

La función temperture() convierte los valores del termistor leídos por el ADC0834 en valores de temperatura. Consulta 2.2.2 Thermistor para más detalles.

int motor(int level){
    if(level==0){
        digitalWrite(MotorEnable,LOW);
        return 0;
    }
    if (level>=4){
        level =4;
    }
    digitalWrite(MotorEnable,HIGH);
    softPwmWrite(MotorPin1, level*25);
    return level;
}

Esta función controla la velocidad de rotación del motor. El rango del Nivel es 0-4 (el nivel 0 detiene el motor). Cada nivel representa un ajuste del 25% en la velocidad del viento.

int main(void)
{
    setup();
    int currentState,lastState=0;
    int level = 0;
    int currentTemp,markTemp=0;
    while(1){
        currentState=digitalRead(BtnPin);
        currentTemp=temperture();
        if (currentTemp<=0){continue;}
        if (currentState==1&&lastState==0){
            level=(level+1)%5;
            markTemp=currentTemp;
            delay(500);
        }
        lastState=currentState;
        if (level!=0){
            if (currentTemp-markTemp<=-2){
                level=level-1;
                markTemp=currentTemp;
            }
            if (currentTemp-markTemp>=2){
                level=level+1;
                markTemp=currentTemp;
            }
        }
        level=motor(level);
    }
    return 0;
}

La función main() contiene todo el proceso del programa, como se describe:

  1. Lee constantemente el estado del botón y la temperatura actual.

  2. Cada pulsación incrementa el nivel en +1 y, al mismo tiempo, se actualiza la temperatura. El rango del Nivel es 1~4.

  3. Cuando el ventilador está en funcionamiento (el nivel es diferente de 0), la temperatura se sigue detectando. Un cambio de +2℃ aumenta o disminuye el nivel.

  4. El motor ajusta su velocidad de rotación según el Nivel.