### 4.3.1 Ventilatore intelligente per controllo della temperatura #### 4.3.1.1 Panoramica ![Img](./media/top1.png) Quando la temperatura interna supera il valore standard preimpostato, il ventilatore intelligente si accende per raffreddare l'ambiente fino a una temperatura confortevole. Inoltre, il display OLED mostrerà in tempo reale la temperatura interna corrente e lo stato di funzionamento del ventilatore, fornendo agli utenti un feedback intuitivo sul controllo della temperatura. ![Img](./media/bottom1.png) #### 4.3.1.2 Conoscenze sui componenti ![Img](./media/2top.png) **Sensore di temperatura del Microbit** ![Img](./media/j501.png) La scheda principale micro:bit in realtà non è dotata di un sensore di temperatura dedicato, ma utilizza il chip nRF52833 per il rilevamento della temperatura. Pertanto, il valore rilevato è molto più vicino alla temperatura del processore, per cui può esserci qualche scostamento rispetto alla temperatura ambiente. Il suo intervallo di rilevamento è -40 ~ 105℃. **Display OLED** ![Img](./media/A636.png) La tecnologia OLED ha significativi vantaggi in termini di resa cromatica, alto contrasto e ampia visuale, offrendo immagini chiare e vivide, particolarmente eccellenti nei neri. Ogni pixel del display OLED emette luce propria senza retroilluminazione, quindi consuma relativamente poca energia. Con le sue dimensioni ridotte (0.96 inches), l'alta risoluzione (128×64 pixel) e il basso consumo energetico, è molto adatto per dispositivi indossabili. ⚠️ **Nota:** In questo progetto, il modulo display OLED collega l'interfaccia SDA al pin P20 e SCL al pin P19. **Parametri:** - Tensione di funzionamento: DC 3.3V-5V - Corrente di lavoro: 30mA - Interfaccia: pin header passo 2.54mm - Modalità di comunicazione: comunicazione I2C - Chip di pilotaggio interno: SSD1306 - Risoluzione: 128×64 - Angolo di visione: maggiore di 150° **Motore 130** ![Img](./media/cou710.png) Sul modulo motore 130 è presente un motore DC che funziona basandosi sull'induzione elettromagnetica e sulla forza di Lorentz. È composto principalmente da uno statore, un rotore e un commutatore. Lo statore genera un campo magnetico fisso, mentre il rotore (indotto), composto da avvolgimenti, genera un campo magnetico quando è alimentato. Quando la corrente passa tramite le spazzole e il commutatore e poi entra nell'avvolgimento del rotore, il campo magnetico del rotore interagisce con quello dello statore, generando una forza di Lorentz che fa ruotare il rotore. Durante questa rotazione, il commutatore cambia la direzione della corrente, assicurando che il rotore sia sottoposto continuamente a una forza nella stessa direzione, mantenendo così la rotazione. Con l'induzione elettromagnetica e la forza di Lorentz, il motore DC converte l'energia elettrica in energia meccanica. Grazie all'ottima capacità di regolazione della velocità e all'elevata coppia di spunto, i motori DC sono ampiamente utilizzati in utensili elettrici, veicoli e elettrodomestici. ![j124](./media/j124.png) Il motore 130 può essere regolato in velocità tramite PWM. Durante l'uso, è necessario collegare due pin per il controllo. È adatto per scenari applicativi in cui è necessario regolare la velocità della ventola, come il raffreddamento di computer e la produzione industriale. È piccolo, leggero e facile da installare, risultando molto pratico. Schematic diagram: ![Img](./media/cou712.png) Il chip HR1124S assiste la guida del motore. Tuttavia, il motore richiede una corrente elevata e non può essere pilotato da un transistor, tanto meno direttamente da una porta IO. Appena viene applicata tensione ai due capi del motore, questo può essere fatto ruotare. La direzione di rotazione del motore varia in base alla direzione della tensione. Nel range di tensione nominale, più alta è la tensione, più velocemente ruoterà il motore. Viceversa, abbassando la tensione, il motore rallenterà o, in alcuni casi, potrebbe non ruotare affatto. Ci sono due modalità di controllo: tramite livello alto/basso (controllo accensione/arresto) e tramite PWM (controllo della velocità di rotazione). **Parametri:** - Tensione di lavoro: DC 5V - Corrente di funzionamento: (Max)400mA@5V - Potenza massima: 2W - Velocità di rotazione: (16000+10%) giri/min@5V ![Img](./media/2bottom.png) #### 4.3.1.3 Componenti richiesti | ![Img](./media/microbitV2.png)| ![Img](./media/ExpansionBoard.png) |![Img](./media/OLED.png) | | :--: | :--: | :--: | | Scheda principale micro:bit V2 ×1 | Shield micro:bit ×1 | Display OLED ×1 | |![Img](./media/motor.png) |![Img](./media/usb.png) |![Img](./media/4pin.png)| | Motore 130 ×1 | Cavo micro USB ×1 | Cavo a 4 pin ×2 | |![Img](./media/fan.png) |![Img](./media/batterycase.png)| ![Img](./media/AAbattery.png)| | Ventola ×1 | Supporto per batterie ×1 | Batterie AA(**fornite dall'utente**) ×6 | #### 4.3.1.4 Schema di cablaggio ⚠️ **Quando esegui i collegamenti, presta attenzione al colore dei fili.** | Motore 130 | colore filo | pin shield micro:bit | pin sulla scheda micro:bit | | :-------: | :--------: | :------------------: | :-----------------: | | G | nero | G | G | | V | rosso | V2 | V | | IN+ | blu | 2 | P2 | | IN- | verde | 16 | P16 | | Display OLED | colore filo | pin shield micro:bit | pin sulla scheda micro:bit | | :----------: | :--------: | :------------------: | :-----------------: | | GND | nero | G | G | | VCC | rosso | V2 | V | | SDA | blu | 20 | P20 | | SCL | verde | 19 | P19 | ![Img](./media/couj1.png) #### 4.3.1.5 Flusso del codice ![Img](./media/flow-chart-01.png) #### 4.3.1.6 Codice di test ⚠️ **Suggerimento 1: Prima di scaricare il codice sulla scheda Microbit, importa il file di libreria “oled_ssd1306\.py” facendo riferimento a ** “[Import Library on MU](https://docs.keyestudio.com/projects/KS4050/en/latest/docs/MicroPython/MU_development_environment.html#import-library-on-mu)” . ![Img](./media/WPSA1.png) ⚠️ **Suggerimento 2: la soglia 28 nella condizione if() può essere modificata in base alla situazione reale.** **Codice 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 """ # importa librerie correlate from microbit import * from oled_ssd1306 import * display.show(Image.HAPPY) # la matrice LED visualizza un pattern felice # inizializza e pulisce OLED initialize() clear_oled() while True: clear_oled() # pulisce l'OLED Temperature = temperature() # Legge il sensore di temperatura del micro:bit add_text(0, 0, "Temperature:") # Visualizza la stringa di caratteri nella posizione corrispondente dell'OLED add_text(13, 0, str(Temperature) + " C") # Visualizza la temperatura nella posizione corrispondente dell'OLED if Temperature >= 28: # quando Temperature >= 28℃, la ventola ruota add_text(0, 2, "Fan on") # Visualizza la stringa nella posizione corrispondente dell'OLED pin2.write_analog(500) # imposta il pin P2 su analogico 500 pin16.write_analog(0) # imposta il pin P16 su analogico 0 else: # altrimenti la ventola non funziona add_text(0, 2, "Fan off") # Visualizza la stringa nella posizione corrispondente dell'OLED pin2.write_analog(0) # imposta il pin P2 su analogico 0 pin16.write_analog(0) # imposta il pin P16 su analogico 0 sleep(1000) ``` ⚠️ **Suggerimento 3: Il codice usa C invece di ℃, perché ℃ verrà visualizzato in modo errato sull'OLED.** ![Img](./media/line1.png) **Spiegazione breve:** ① Importare le librerie microbit e oled_ssd1306. ```Python from microbit import * from oled_ssd1306 import * ``` ② La matrice LED 5×5 del Microbit mostra ![Img](./media/ab3.png). ```Python display.show(Image.HAPPY) # la matrice LED visualizza un pattern felice ``` ③ Inizializzare i pixel dell'OLED e cancellare l'OLED. ```Python initialize() # inizializza l'OLED clear_oled() # pulisce l'OLED ``` ④ Leggere il valore di temperatura e visualizzarlo sull'OLED. ```Python Temperature = temperature() # Legge il sensore di temperatura del micro:bit add_text(0, 0, "Temperature:") # Visualizza la stringa di caratteri nella posizione corrispondente dell'OLED add_text(13, 0, str(Temperature) + " C") # Visualizza la temperatura nella posizione corrispondente dell'OLED ``` ⑤ Istruzione di giudizio: if()...else... Quando la temperatura rilevata dal sensore è maggiore o uguale a 28℃, l'OLED visualizza "Fan on" e la ventola ruota. Altrimenti, l'OLED mostra "Fan off" e la ventola non funziona. ```Python if Temperature >= 28: # quando Temperature >= 28℃, la ventola ruota add_text(0, 2, "Fan on") # Visualizza la stringa nella posizione corrispondente dell'OLED pin2.write_analog(500) # imposta il pin P2 su analogico 500 pin16.write_analog(0) # imposta il pin P16 su analogico 0 else: # altrimenti la ventola non funziona add_text(0, 2, "Fan off") # Visualizza la stringa nella posizione corrispondente dell'OLED pin2.write_analog(0) # imposta il pin P2 su analogico 0 pin16.write_analog(0) # imposta il pin P16 su analogico 0 ``` ⑥ Ritardo 1000ms (1s). ```Python sleep(1000) ``` #### 4.3.1.7 Risultato del test ![Img](./media/4top.png) Dopo aver collegato i cavi e alimentato tramite cavo micro USB, collegare un'alimentazione esterna (6 batterie AA) per garantire un'adeguata fornitura di energia, e cliccare “Flash” per scaricare il codice sulla scheda micro:bit. ![Img](./media/A123.png) Dopo aver caricato il codice di test, premere il pulsante di reset sul retro del micro:bit. ![Img](./media/A455.png) La matrice LED 5×5 a bordo mostra ![Img](./media/ab3.png), e il display OLED visualizza in tempo reale la temperatura e lo stato della ventola. Quando la temperatura è superiore a 28℃, la ventola ruota. Altrimenti, la ventola non funzionerà. ![Img](./media/dongtu-1.gif) ⚠️ **Nota: Il codice usa C invece di ℃, perché ℃ verrà visualizzato in modo errato sull'OLED.** ⚠️ **Nota: I mattoncini usati nell'esperimento non sono inclusi in questo kit.** (**Suggerimento:** Se non si osserva alcun risultato, premi il pulsante di reset della scheda micro:bit.) ![Img](./media/4bottom.png)