### 4.3.1 Ventilador inteligente de control de temperatura #### 4.3.1.1 Visión general ![Img](./media/top1.png) Cuando la temperatura interior excede el valor estándar predefinido, el ventilador inteligente se encenderá para enfriar la habitación hasta una temperatura cómoda. Además, la pantalla OLED mostrará la temperatura interior actual y el estado de funcionamiento del ventilador en tiempo real, proporcionando a los usuarios una retroalimentación de control de temperatura intuitiva. ![Img](./media/bottom1.png) #### 4.3.1.2 Conocimientos de los componentes ![Img](./media/2top.png) **Sensor de temperatura de micro:bit** ![Img](./media/j501.png) La placa principal micro:bit en realidad no está equipada con un sensor de temperatura dedicado, sino que utiliza el chip nRF52833 para la detección de temperatura. Por lo tanto, el valor detectado está mucho más cercano a la temperatura del procesador, por lo que puede haber cierta desviación respecto al valor ambiental. Su rango de detección es -40 ~ 105℃. **Pantalla OLED** ![Img](./media/A636.png) La tecnología OLED tiene ventajas significativas como una rica reproducción de color, alto contraste y amplio ángulo de visión, proporcionando imágenes claras y vívidas, destacando especialmente en negro. Cada píxel de la pantalla OLED emite luz por sí mismo sin necesidad de retroiluminación, por lo que consume relativamente poca energía. Con su tamaño pequeño (0,96 pulgadas), alta resolución (128×64 píxeles) y bajo consumo, es muy adecuada para dispositivos wearables. ⚠️ **Nota:** En este proyecto, el módulo de pantalla OLED conecta la interfaz SDA al pin P20 y SCL al pin P19. **Parámetros:** - Voltaje de funcionamiento: DC 3.3V-5V - Corriente de trabajo: 30mA - Interfaz: conectores de pines con separación 2.54mm - Modo de comunicación: comunicación I2C - Chip de control interno: SSD1306 - Resolución: 128×64 - Ángulo de visión: mayor que 150° **Motor 130** ![Img](./media/cou710.png) En el módulo del Motor 130 hay un motor de corriente continua que funciona basándose en la inducción electromagnética y la fuerza de Lorentz. Se compone principalmente de un estator, un rotor y un conmutador. El estator genera un campo magnético fijo, mientras que el rotor (inducido), compuesto por bobinas, genera un campo magnético al estar energizado. Cuando la corriente pasa a través de las escobillas y el conmutador y luego entra en la bobina del rotor, el campo magnético del rotor interactúa con el campo magnético del estator, generando una fuerza de Lorentz que impulsa la rotación del rotor. Durante esta rotación, el conmutador cambia la dirección de la corriente, asegurando que el rotor esté continuamente sometido a una fuerza en la misma dirección, manteniendo así la rotación. Mediante inducción electromagnética y fuerza de Lorentz, el motor de corriente continua convierte energía eléctrica en energía mecánica. Debido a su excelente capacidad de regulación de velocidad y gran par de arranque, los motores de corriente continua se utilizan ampliamente en herramientas eléctricas, vehículos y electrodomésticos. ![j124](./media/j124.png) El Motor 130 puede regular su velocidad mediante PWM. Al usarlo, se necesitan conectar dos pines para el control. Es adecuado para escenarios de aplicación donde se requiere ajustar la velocidad del ventilador, como la refrigeración de ordenadores y la producción industrial. Es pequeño, ligero y fácil de instalar, lo que lo hace muy práctico. **Diagrama esquemático:** ![Img](./media/cou712.png) El chip HR1124S ayuda a conducir el motor. Sin embargo, el motor requiere una corriente elevada y no puede ser conducido por un transistor simple, y mucho menos directamente por un puerto IO. Siempre que se aplique tensión a ambos extremos del motor, este puede girar. La dirección de rotación del motor varía con la dirección de la tensión. Dentro del rango de voltaje nominal, cuanto mayor sea la tensión, más rápido girará el motor. Por el contrario, cuanto menor sea la tensión, más lento girará el motor, o en algunos casos, puede no girar en absoluto. Hay dos modos de control: por nivel alto y bajo (controlando rotación y parada), y por PWM (controlando la velocidad de rotación). **Parámetros:** - Voltaje de trabajo: DC 5V - Corriente de funcionamiento: (Max)400mA@5V - Potencia máxima: 2W - Velocidad de rotación: (16000+10%) rev/min@5V ![Img](./media/2bottom.png) #### 4.3.1.3 Componentes requeridos | ![Img](./media/microbitV2.png)| ![Img](./media/ExpansionBoard.png) |![Img](./media/OLED.png) | | :--: | :--: | :--: | | micro:bit V2 main board ×1 | micro:bit shield ×1 | OLED display ×1 | |![Img](./media/motor.png) |![Img](./media/usb.png) |![Img](./media/4pin.png)| | 130 motor ×1 | micro USB cable ×1 | 4 pin wire ×2 | |![Img](./media/fan.png) |![Img](./media/batterycase.png)| ![Img](./media/AAbattery.png)| | fan ×1 | battery holder ×1 | AA battery(**self-prepared**) ×6 | #### 4.3.1.4 Diagrama de conexiones ⚠️ **Al cablear, por favor preste atención al color de los cables.** | 130 motor | color del cable | pin del micro:bit shield | pin de la placa micro:bit | | :-------: | :-------------: | :----------------------: | :-----------------------: | | G | negro | G | G | | V | rojo | V2 | V | | IN+ | azul | 2 | P2 | | IN- | verde | 16 | P16 | | OLED display | color del cable | pin del micro:bit shield | pin de la placa micro:bit | | :----------: | :-------------: | :----------------------: | :-----------------------: | | GND | negro | G | G | | VCC | rojo | V2 | V | | SDA | azul | 20 | P20 | | SCL | verde | 19 | P19 | ![Img](./media/couj1.png) #### 4.3.1.5 Flujo del programa ![Img](./media/flow-chart-01.png) #### 4.3.1.6 Código de prueba ⚠️ **Consejo 1: Antes de descargar el código a la placa micro:bit, por favor importe el archivo de biblioteca “oled_ssd1306\.py” consultando ** “[Importar biblioteca en MU](https://docs.keyestudio.com/projects/KS4050/en/latest/docs/MicroPython/MU_development_environment.html#import-library-on-mu)” . ![Img](./media/WPSA1.png) ⚠️ **Consejo 2: El umbral 28 en la condición if() puede modificarse según la situación real.** **Código completo:** ```Python """ Theme: smart temperature control fan Function: OLED displays the temperature value and the microbit temperature sensor controls the on and off of the fan Compiling IDE: MU 1.2.0 Author: https://docs.keyestudio.com """ # importar bibliotecas relacionadas from microbit import * from oled_ssd1306 import * display.show(Image.HAPPY) # la matriz LED muestra un patrón feliz # inicializar y limpiar oled initialize() clear_oled() while True: clear_oled() # limpiar OLED Temperature = temperature() # Leer sensor de temperatura de micro:bit add_text(0, 0, "Temperature:") # Mostrar la cadena de caracteres en la posición correspondiente del OLED add_text(13, 0, str(Temperature) + " C") # Mostrar la temperatura en la posición correspondiente del OLED if Temperature >= 28: # cuando Temperature >= 28℃, el ventilador gira add_text(0, 2, "Fan on") # Mostrar la cadena de caracteres en la posición correspondiente del OLED pin2.write_analog(500) # establecer P2 a analógico 500 pin16.write_analog(0) # establecer P16 a analógico 0 else: # o el ventilador no funciona add_text(0, 2, "Fan off") # Mostrar la cadena de caracteres en la posición correspondiente del OLED pin2.write_analog(0) # establecer P2 a analógico 0 pin16.write_analog(0) # establecer P16 a analógico 0 sleep(1000) ``` ⚠️ **Consejo 3: El código usa C en lugar de ℃, porque ℃ se mostrará con caracteres ilegibles en la OLED.** ![Img](./media/line1.png) **Explicación breve:** ① Importar las bibliotecas microbit y oled_ssd1306. ```Python from microbit import * from oled_ssd1306 import * ``` ② La matriz de LED 5×5 de la Microbit muestra ![Img](./media/ab3.png). ```Python display.show(Image.HAPPY) # la matriz LED muestra un patrón feliz ``` ③ Inicializar los píxeles del OLED y limpiar el OLED. ```Python initialize() # inicializar oled clear_oled() # limpiar oled ``` ④ Leer el valor de temperatura y mostrarlo en el OLED. ```Python Temperature = temperature() # Leer sensor de temperatura de micro:bit add_text(0, 0, "Temperature:") # Mostrar la cadena de caracteres en la posición correspondiente del OLED add_text(13, 0, str(Temperature) + " C") # Mostrar la temperatura en la posición correspondiente del OLED ``` ⑤ Sentencia de decisión: if()...else... Cuando la temperatura detectada por el sensor es mayor o igual a 28℃, el OLED muestra "Fan on", y el ventilador gira. En caso contrario, el OLED muestra "Fan off" y el ventilador no funciona. ```Python if Temperature >= 28: # cuando Temperature >= 28℃, el ventilador gira add_text(0, 2, "Fan on") # Mostrar la cadena de caracteres en la posición correspondiente del OLED pin2.write_analog(500) # establecer P2 a analógico 500 pin16.write_analog(0) # establecer P16 a analógico 0 else: # o el ventilador no funciona add_text(0, 2, "Fan off") # Mostrar la cadena de caracteres en la posición correspondiente del OLED pin2.write_analog(0) # establecer P2 a analógico 0 pin16.write_analog(0) # establecer P16 a analógico 0 ``` ⑥ Retardo de 1000 ms (1 s). ```Python sleep(1000) ``` #### 4.3.1.7 Resultado de la prueba ![Img](./media/4top.png) Después de cablear y alimentar mediante el cable micro USB, conecte la alimentación externa (6 pilas AA) para asegurar un suministro suficiente, y haga clic en “Flash” para descargar el código a la placa micro:bit. ![Img](./media/A123.png) Después de cargar el código de prueba, presione el botón de reinicio en la parte posterior de la micro:bit. ![Img](./media/A455.png) La matriz de LED a bordo 5×5 muestra ![Img](./media/ab3.png), y la pantalla OLED revela la temperatura y el estado del ventilador en tiempo real. Cuando la temperatura está por encima de 28℃, el ventilador gira. En caso contrario, el ventilador no funcionará. ![Img](./media/dongtu-1.gif) ⚠️ **Nota: El código usa C en lugar de ℃, porque ℃ se mostrará con caracteres ilegibles en la OLED.** ⚠️ **Nota: Los bloques de construcción en el experimento no están incluidos en este kit.** (**Consejo:** Si no se observa resultado, por favor presione el botón de reinicio de la placa micro:bit.) ![Img](./media/4bottom.png)