### 4.3.1 Ventilateur à contrôle de température intelligent
#### 4.3.1.1 Aperçu

Lorsque la température ambiante dépasse la valeur standard préréglée, le ventilateur intelligent s'allume pour refroidir la pièce jusqu'à une température confortable. De plus, l'affichage OLED montre en temps réel la température intérieure actuelle et l'état de fonctionnement du ventilateur, fournissant à l'utilisateur un retour de contrôle de la température intuitif.

#### 4.3.1.2 Connaissances des composants

**Capteur de température micro:bit**

La carte principale micro:bit n'est en réalité pas équipée d'un capteur de température dédié, mais utilise la puce nRF52833 pour la détection de température. Par conséquent, la valeur détectée est beaucoup plus proche de la température du processeur, et peut donc présenter un certain écart par rapport à la valeur ambiante.
Sa plage de détection est de -40 ~ 105℃.
**Affichage OLED**

La technologie OLED présente des avantages importants comme une riche restitution des couleurs, un fort contraste et un large angle de vision, offrant des images nettes et vives, particulièrement remarquables pour le noir.
Chaque pixel de l'écran OLED émet sa propre lumière sans rétroéclairage, ce qui entraîne une consommation d'énergie relativement faible. Avec sa petite taille (0,96 pouces), sa haute résolution (128×64 pixels) et sa faible consommation, il est très adapté aux appareils portables.
⚠️ **Note :** Dans ce projet, le module d'affichage OLED connecte l'interface SDA à la broche P20 et SCL à la broche P19.
**Paramètres :**
- Tension de fonctionnement : DC 3.3V-5V
- Courant de fonctionnement : 30mA
- Interface : broches en header espacement 2.54mm
- Mode de communication : I2C communication
- Puce de pilotage interne : SSD1306
- Résolution : 128×64
- Angle de vue : supérieur à 150°
**Moteur 130**

Sur le module moteur 130 se trouve un moteur DC qui fonctionne sur la base de l'induction électromagnétique et de la force de Lorentz. Il est principalement composé d'un stator, d'un rotor et d'un collecteur. Le stator génère un champ magnétique fixe, tandis que le rotor (armature), composé d'enroulements de bobines, génère un champ magnétique lorsqu'il est alimenté. Lorsque le courant passe par les charbons et le collecteur puis entre dans la bobine du rotor, le champ magnétique du rotor interagit avec le champ magnétique du stator, générant une force de Lorentz qui entraîne la rotation du rotor. Pendant cette rotation, le collecteur inverse la direction du courant, garantissant que le rotor soit continuellement soumis à une force dans la même direction, maintenant ainsi la rotation. Grâce à l'induction électromagnétique et à la force de Lorentz, le moteur DC convertit l'énergie électrique en énergie mécanique.
En raison de ses excellentes performances de régulation de vitesse et de son couple de démarrage élevé, les moteurs DC sont largement utilisés dans les outils électriques, les véhicules et les appareils ménagers.

Le moteur 130 peut être régulé par PWM. Lors de son utilisation, deux broches doivent être connectées pour le contrôle. Il convient aux scénarios d'application où la vitesse du ventilateur doit être ajustée, tels que le refroidissement d'ordinateur et la production industrielle. Il est petit, léger et facile à installer, ce qui le rend très pratique.
**Schéma :**

La puce HR1124S aide à piloter le moteur. Cependant, le moteur nécessite un courant important et ne peut pas être piloté par un transistor seul, encore moins directement par un port IO. Tant que la tension est appliquée aux deux bornes du moteur, il peut tourner. Le sens de rotation du moteur varie selon le sens de la tension. Dans la plage de tension nominale, plus la tension est élevée, plus le moteur tournera rapidement. À l'inverse, plus la tension est faible, plus le moteur tournera lentement, ou dans certains cas, il peut ne pas tourner du tout.
Il existe deux modes de contrôle : par niveau haut/bas (contrôle marche/arrêt) et par PWM (contrôle de la vitesse de rotation).
**Paramètres :**
- Tension de fonctionnement : DC 5V
- Courant de fonctionnement : (Max)400mA@5V
- Puissance maximale : 2W
- Vitesse de rotation : (16000+10%) tours/min@5V

#### 4.3.1.3 Composants requis
| |  | |
| :--: | :--: | :--: |
| micro:bit V2 carte principale ×1 | micro:bit shield ×1 | écran OLED ×1 |
| | ||
| moteur 130 ×1 | câble micro USB ×1 | fils 4 broches ×2 |
| || |
| ventilateur ×1 | porte-piles ×1 | piles AA(**à préparer par l'utilisateur**) ×6 |
#### 4.3.1.4 Schéma de câblage
⚠️ **Lors du câblage, veuillez faire attention à la couleur des fils.**
| 130 motor | wire color | micro:bit shield pin | micro:bit board pin |
| :-------: | :--------: | :------------------: | :-----------------: |
| G | black | G | G |
| V | red | V2 | V |
| IN+ | blue | 2 | P2 |
| IN- | green | 16 | P16 |
| OLED display | wire color | micro:bit shield pin | micro:bit board pin |
| :----------: | :--------: | :------------------: | :-----------------: |
| GND | black | G | G |
| VCC | red | V2 | V |
| SDA | blue | 20 | P20 |
| SCL | green | 19 | P19 |

#### 4.3.1.5 Flux du code

#### 4.3.1.6 Code de test
⚠️ **Astuce 1 : Avant de télécharger le code sur la carte micro:bit, veuillez importer le fichier de bibliothèque “oled_ssd1306\.py” en vous référant à ** “[Import Library on MU](https://docs.keyestudio.com/projects/KS4050/en/latest/docs/MicroPython/MU_development_environment.html#import-library-on-mu)” .

⚠️ **Astuce 2 : Le seuil 28 dans la condition if() peut être modifié selon la situation réelle.**
**Code complet :**
```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
"""
# importer les bibliothèques liées
from microbit import *
from oled_ssd1306 import *
display.show(Image.HAPPY) # La matrice LED affiche un motif heureux
# initialiser et effacer l'OLED
initialize()
clear_oled()
while True:
clear_oled() # effacer l'OLED
Temperature = temperature() # lire le capteur de température de micro:bit
add_text(0, 0, "Temperature:") # afficher la chaîne de caractères à la position correspondante sur l'OLED
add_text(13, 0, str(Temperature) + " C") # afficher la température à la position correspondante sur l'OLED
if Temperature >= 28: # lorsque Temperature >= 28℃, le ventilateur tourne
add_text(0, 2, "Fan on") # afficher la chaîne de caractères à la position correspondante sur l'OLED
pin2.write_analog(500) # régler la broche P2 à analog 500
pin16.write_analog(0) # régler la broche P16 à analog 0
else: # sinon, le ventilateur ne fonctionne pas
add_text(0, 2, "Fan off") # afficher la chaîne de caractères à la position correspondante sur l'OLED
pin2.write_analog(0) # régler la broche P2 à analog 0
pin16.write_analog(0) # régler la broche P16 à analog 0
sleep(1000)
```
⚠️ **Astuce 3 : Le code utilise C au lieu de ℃, car ℃ sera corrompu lors de l'affichage sur l'OLED.**

**Brève explication :**
① Importer les bibliothèques microbit et oled_ssd1306.
```Python
from microbit import *
from oled_ssd1306 import *
```
② La matrice LED 5×5 du Microbit affiche .
```Python
display.show(Image.HAPPY) # La matrice LED affiche un motif heureux
```
③ Initialiser les pixels de l'OLED et effacer l'OLED.
```Python
initialize() # initialiser l'OLED
clear_oled() # effacer l'OLED
```
④ Lire la valeur de température et l'afficher sur l'OLED.
```Python
Temperature = temperature() # lire le capteur de température de micro:bit
add_text(0, 0, "Temperature:") # afficher la chaîne de caractères à la position correspondante sur l'OLED
add_text(13, 0, str(Temperature) + " C") # afficher la température à la position correspondante sur l'OLED
```
⑤ Instruction de décision : if()...else...
Lorsque la température détectée par le capteur est supérieure ou égale à 28℃, l'OLED affiche "Fan on", et le ventilateur tourne. Sinon, l'OLED affiche "Fan off" et le ventilateur ne fonctionne pas.
```Python
if Temperature >= 28: # lorsque Temperature >= 28℃, le ventilateur tourne
add_text(0, 2, "Fan on") # afficher la chaîne de caractères à la position correspondante sur l'OLED
pin2.write_analog(500) # régler la broche P2 à analog 500
pin16.write_analog(0) # régler la broche P16 à analog 0
else: # sinon, le ventilateur ne fonctionne pas
add_text(0, 2, "Fan off") # afficher la chaîne de caractères à la position correspondante sur l'OLED
pin2.write_analog(0) # régler la broche P2 à analog 0
pin16.write_analog(0) # régler la broche P16 à analog 0
```
⑥ Temporisation de 1000ms (1s).
```Python
sleep(1000)
```
#### 4.3.1.7 Résultat du test

Après avoir réalisé le câblage et alimenté via le câble micro USB, connectez une alimentation externe (6 piles AA) pour assurer une alimentation suffisante, puis cliquez sur “Flash” pour télécharger le code sur la carte micro:bit.

Après le téléchargement du code de test, appuyez sur le bouton reset à l'arrière du micro:bit.

La matrice LED 5×5 embarquée affiche , et l'écran OLED affiche en temps réel la température et l'état du ventilateur. Lorsque la température dépasse 28℃, le ventilateur tourne. Sinon, le ventilateur ne fonctionne pas.

⚠️ **Note : Le code utilise C au lieu de ℃, car ℃ sera corrompu lors de l'affichage sur l'OLED.**
⚠️ **Note : Les blocs de construction utilisés dans l'expérience ne sont pas inclus dans ce kit.**
(**Astuce :** Si aucun résultat n'est observé, veuillez appuyer sur le bouton reset de la carte micro:bit.)
